C++第八周作业

      1. 体会引用的用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
int main() {
int intOne;
int &rSomeRef = intOne;
intOne = 5;
cout << "intOne:\t" << intOne << endl;
// 输出"intOne: 5"
cout << "rSomeRef:\t" << rSomeRef << endl;
// 输出"rSomeRef:5"
int intTwo = 8;
rSomeRef = intTwo; // 通过改变引用来改变原来的变量
cout << "\nintOne:\t" << intOne << endl;
// 输出换行,然后输出"intOne:8"
cout << "intTwo:\t" << intTwo << endl;
// 输出"intTwo: 8"
cout << "rSomeRef:\t" << rSomeRef << endl;
// 输出"rSomeRef:8"
system("pause");
return 0;
}

      2. 函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
从该例子可以看到函数原型的参数名字。
函数定义中的参数名字,函数调用的参数名字
可以完全不一样。
*/
#include<iostream>
using namespace std;
void test(int a);
int main() {
int c = 6;
test(c);
system("pause");
return 0;
}
void test(int b) {
cout << b << endl;
}

      3.调用被重载的函数时,通过什么来区分被调用的是哪个函数?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
从实验结果看出,是根据实参来进行匹配重载的,
优先会考虑最好的匹配。
*/
#include<iostream>
#include<string>
using namespace std;
void test(int a) {
cout << a << endl;
}
void test(double b) {
cout << b << endl;
}
void test(string b) {
cout << b << endl;
}
int main() {
test(6);
test(6.01); // 这里输入6.0000后面不论多少个0都会被更优的6输出。
test("六点零");
system("pause");
return 0;
}

      4. 完成函数,参数为两个unsigned short int型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;如果第二个参数为0,则返回值为-1,在主程序中实现输入输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
short int transfun(unsigned short int n1 , unsigned short int n2);
int main() {
unsigned short int n1, n2;
cout << "请输入第一个数:";
cin >> n1;
cout << "请输入第二个数:";
cin >> n2;
cout<<"返回值是"<<transfun(n1, n2)<<endl;
system("pause");
return 0;
}
short int transfun(unsigned short int n1, unsigned short int n2) {
if (n2 == 0) {
return -1;
}
else {
return n1 / n2;
}
}

      5. 编写函数把华氏温度转化为相应的摄氏温度,公式为如下,在主程序中提示用户输入一个华氏温度,转化后输出相应的摄氏温度。
$$C=5/9*(F-32)$$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
using namespace std;
// 摄氏度转华氏度的函数的声明
void CelTransFah(double Fah);
// 主函数
int main() {
double Fah;
while (!cin.fail()) {
cin.clear();
cin.sync();
cout << "请输入一个华氏温度:";
cin >> Fah;
CelTransFah(Fah);
}
system("pause");
return 0;
}
// 函数方法
void CelTransFah(double Fah) {
double Cel;
Cel = (Fah - 32.0)*5.0 / 9.0;
cout << "相应的摄氏温度为:" << Cel << "°C" << endl;
}

      6. 编写函数判别一个数是否是质数,在主程序中实现输入输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream>
using namespace std;
// 函数的声明
bool isprime(int prime);
int main() {
int test;
cout << "请输入一个整数:";
cin >> test;
if (isprime(test)) {
cout << test << "是质数" << endl;
}
else {
cout << test << "不是质数" << endl;
}
system("pause");
return 0;
}
bool isprime(int prime) {
if (prime == 2) {
return true;
}
if (prime % 2 == 0) {
return false;
}
else {
for (int temp = 3; temp <= prime / 2; temp = temp + 2) {
if (prime%temp == 0) {
cout << prime << "=" << temp << "*" << prime / temp << endl;
return false;
}
}
}
return true;
}

      7. 编写函数求两个整数的最大公约数和最小公倍数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<iostream>
using namespace std;
int gcd(int n1, int n2);
int lcm(int n1, int n2);
int main() {
int n1, n2;
cout << "请输入第一个整数:";
cin >> n1;
cout << "请输入第二个整数:";
cin >> n2;
int N1 = gcd(n1, n2);
int N2 = lcm(n1, n2);
cout << n1 << "和" << n2 << "的最大公约数是" << N1 << endl;
cout << n1 << "和" << n2 << "的最小公倍数是" << N2 << endl;
system("pause");
return 0;
}
// 要巧妙利用值传递,既达到交换的目的,又能不影响原来的输入输出。
void transnumber(int n1, int n2) {
int temp;
if (n1 < n2) {
temp = n1;
n1 = n2;
n2 = temp;
}
}
int gcd(int n1, int n2) {
// 交换两数确认前者比后者大,利用形参继续完成事情。
transnumber(n1, n2);
int r1 = n1%n2;
if (r1 == 0) {
return n2;
}
else {
gcd(n2, r1);
}
}
int lcm(int n1, int n2) {
int temp = gcd(n1, n2);
return n1*n2 / temp;
}

      8. 在主程序中提示输入整数n,编写函数用递归的方法求1到n的和。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int integersum(int n) {
if (n>1) {
return n + integersum(n - 1);
}
else {
return 1;
}
}
int main() {
cout << integersum(100) << endl;
system("pause");
return 0;
}

      9. 用递归的方法编写函数求斐波那契数列,公式为
$$ Fn=F{n-1}+F_{n+1} (n>2),F_1=F_2=1 $$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
为了观察递归调用的过程,特意写的比较麻烦,使用了一些输出
方便观察递归进行到哪一步。
*/
#include<iostream>
using namespace std;
int fibonacci(int n) {
if (n == 1) {
cout << "使用了n=1" << endl;
return 1;
}
else if (n == 2) {
cout << "使用了n=2" << endl;
return 1;
}
else {
cout <<"此时n的值是"<< n << ",这回调用的是fibonacci的第" << n - 1 << "项" << endl;
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main() {
int n;
while (1) {
cin.sync();
cin.clear();
cout << "请输入想求的Fibonacci的项数:";
cin >> n;
cout << "Fibonacci第" << n << "项是:" << fibonacci(n) << endl;
}
system("pause");
return 0;
}
/*
以n=6为例,输出结果如下:
请输入想求的Fibonacci的项数:6
此时n的值是6,这回调用的是fibonacci的第5项
此时n的值是5,这回调用的是fibonacci的第4项
此时n的值是4,这回调用的是fibonacci的第3项
此时n的值是3,这回调用的是fibonacci的第2项
使用了n=2
使用了n=1
使用了n=2
此时n的值是3,这回调用的是fibonacci的第2项
使用了n=2
使用了n=1
此时n的值是4,这回调用的是fibonacci的第3项
此时n的值是3,这回调用的是fibonacci的第2项
使用了n=2
使用了n=1
使用了n=2
Fibonacci第6项是:8
这是个单线程的过程,为了求解两个fibonacci的递归return,
(1) 先求解第一个,一直求到n=2
(2) 此时发现两个return都可以求了,就进入n=1求出来,然后又返回到n=2
(3) 求解第二个,重复(1)(2),最后返回到n=2
*/

      10. 用递归的方法编写函数求n阶勒让德多项式的值,在主程序中实现输入输出,递归公式为。
$$Latex学艺不精不会打分段函数…$$
$$P_n(x)=1 (n=0)$$
$$P_n(x)=x (n=1)$$
$$Pn(x)=[(2n-1)x*P{n-1|(x)-(n-1)*P_{n-2|(x)]/n (n>1)$$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
using namespace std;
double legendre(int n,double x) {
if (n == 0) {
return 1;
}
else if (n == 1) {
return x;
}
else {
return ((2*n-1)*x*legendre(n-1,x)-(n-1)*legendre(n-2,x))/n;
}
}
int main() {
int n;
double x;
while (1) {
cin.sync();
cin.clear();
cout << "请输入想求的Legendre的阶数:";
cin >> n;
cout << "请输入想求的x值:";
cin >> x;
cout << "Legendre" << n << "阶,取x="<< x <<"的时候的值是:" << legendre(n,x) << endl;
}
system("pause");
return 0;
}

      11. 编写递归函数getPower计算x^y,在同一个程序中针对整型和实型实现两个重载的函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<iostream>
using namespace std;
int getPower(int x, int y) {
if (y == 0) {
return 1;
}
else if (y > 0) {
return x*getPower(x, y - 1);
}
else {
return x*getPower(x, y + 1);
}
}
double getPower(double x, int y) {
if (y == 0) {
return 1;
}
else if (y > 0) {
return x*getPower(x, y - 1);
}
else {
return x*getPower(x, y + 1);
}
}
int main() {
int a,m;
double b;
while (1) {
cin.sync();
cin.clear();
cout << "请输入一个整数作为底数:";
cin >> a;
cout << "请输入一个实数作为另一个底数:";
cin >> b;
cout << "请输入一个整数作为指数:";
cin >> m;
cout << a << "的" << m << "次方是" << getPower(a, m) << endl;
cout << b << "的" << m << "次方是" << getPower(b, m) << endl;
}
system("pause");
return 0;
}

文章目录
|