0%

cpp课后代码部分

清华大学郑莉第五版cpp课后代码部分

第二章

2-10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
using namespace std;
int main() {
//for循环
int n = 100;
for (; n <= 200; n += 2);

//while循环
int n = 100;
while (n <= 200)
n += 2;

//do while循环
int n = 100;
do {
n += 2;
} while (n <= 200);
}

2-15

1
2
3
4
5
6
7
8
#include<iostream>
using namespace std;
int main() {
int a;
cout << "请输入一个数字:";
cin >>a;
cout << "输入的数字是:" << a;
}

2-16

1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;
int main() {
cout << "int:" << sizeof(int) << endl;
cout << "int:" << sizeof(long) << endl;
cout << "int:" << sizeof(short) << endl;
cout << "int:" << sizeof(float) << endl;
cout << "int:" << sizeof(double) << endl;
return 0;
}

2-17

1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;
int main() {
for (int i = 32; i <= 127; i++) {
cout << char(i) << endl;
//第二种方法
//cout << (char)i << endl;
}
return 0;
}

2-18

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;
int main() {
unsigned int x;
unsigned int y = 100;
unsigned int z = 50;
x = y - z;
cout << "Difference is: " << x;
x = z - y;
cout << "\nNow difference is: " << x << endl;

return 0;
}

第二部分产生下溢,变成2^32-50

2-24

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() {
while (1) {
char a;
cout << "现在下雨吗(Y or N):";
cin >> a;
if (a == 'Y') {
cout << "正在下雨" << endl;
break;
}
else if (a == 'N') {
cout << "现在没有下雨" << endl;
break;
}
else
continue;
}

return 0;
}

2-25

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int main() {
cout << "你考了多少分:";
int grade;
cin >> grade;
if (grade >= 90 && grade <= 100)
cout << "优";
else if(grade >= 80 && grade <90)
cout << "良";
else if (grade >= 60 && grade <80)
cout << "中";
else if (grade >= 0 && grade <100)
cout << "差";
}

2-26

switch语句

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;
int main() {
cout << "Menu: A(dd) D(elete) S(ort) Q(uit), Select one:";
char a;
cin >> a;
switch (a) {
case 'A':
cout << "数据已经增加. " << endl;
break;
case 'D':
cout << "数据已经删除. " << endl;
break;
case 'S':
cout << "数据已经排序. " << endl;
break;
case 'Q':
return 0;
default:
break;
}
return 0;
}

2-27

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int main() {

for (int n = 2; n <= 100; n++) {
int j = 2;
for (; j < n; j++) {
if (n % j == 0)
break;
}
if(j==n)
cout << n<<endl;
}
return 0;
}

2-29

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
int main() {
int a = 26;
while (1) {
int b;
cin >> b;
if (b > a)
cout << "猜大了" << endl;
else if (b < a)
cout << "猜小了" << endl;
else {
cout << "猜对了";
break;
}
}
}

2-31

1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
cout << j << "*" << i << "=" << i * j << " ";
}
cout << endl;
}
}

第三章

课前

例3-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//八位二进制转化成十进制
#include<iostream>
using namespace std;

double calculate(double x, int n);
int main() {
int count = 0;
cout << "输入对应二进制:";
for (int i = 0; i < 8; i++) {
char temp;
cin >> temp;
if (temp == '1')
count += static_cast<int>(calculate(2, 7 - i));
}
cout << count;
}

double calculate(double x, int n) {
double value=1;
for (int i = 1; i <= n; i++) {
value *= x;
}
return value;
}

例3-3

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
//计算pai值
#include<iostream>
using namespace std;

double arctan(double x);

int main() {
double m = 1.0 / 5.0;
double n = 1.0 / 239.0;
cout << 16 * arctan(m) - 4 * arctan(n);

return 0;
}

double arctan(double x) {
double count = 0;
double temp = x;
int i=1,j = 1;
while (temp/i > 1e-15) {
if (j%2 == 1) {
count += temp/i;
j++;
}
else {
count -= temp/i;
j++;
}
temp = temp * x * x;
i += 2;
}
return count;
}

例3-4

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
//回文数判断
#include<iostream>
using namespace std;
bool symm(int n);
int main() {
for (int i = 11; i <= 999; i++) {
if (symm(i) && symm(i * i) && symm(i * i * i))
cout << i << endl;
}
return 0;
}
bool symm(int n) {
int temp = n;
int head = 0;
int tail = 0;
int fake_n = 0;
while (n) {
fake_n =fake_n*10+ n % 10;
n /= 10;
}
if (fake_n == temp)
return 1;
else
return 0;
}

课后

3-7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//无符号除法
#include<iostream>
using namespace std;
int calculate(unsigned short int x, unsigned short int y);
int main() {
unsigned short int x, y;
cin >> x >> y;
cout<<calculate(x, y);
return 0;
}
int calculate(unsigned short int x, unsigned short int y) {
if (y == 0)
return -1;
else
return x / y;
}

3-8

1
2
3
4
5
6
7
8
9
10
11
//温度转换
#include<iostream>
using namespace std;
int main() {
cout << "输入华氏温度:";
int F;
cin >> F;
cout << 5.0 / 9 * (F - 32);

return 0;
}

3-9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//质数判断
#include<iostream>
using namespace std;
int main() {
cout << "输入一个数:";
int a;
cin >> a;
int i = 2;
for (; i < a; i++) {
if (a % i == 0)
break;
}
if (i == a)
cout << a << "是质数" << endl;
else {
cout << a << "不是质数" << endl;
}

return 0;
}

3-10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//最大公因数,最小公倍数
#include<iostream>
using namespace std;
int main() {
int a;
int b;
cout << "请输入第一个值:";
cin >> a;
cout << "请输入第二个值:";
cin >> b;
int temp = a > b ? a : b;
for (; temp >= 1; temp--) {
if ((a % temp == 0) && (b % temp == 0)) {
cout << a << "与" << b << "最大公因数是:" << temp << endl;
cout << a << "与" << b << "最小公倍数是:" << a * b / temp;
break;
}
}
return 0;
}

3-12

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//基础递归
#include<iostream>
using namespace std;

int Recusion(int n);
int main() {
cout << "请输入一个值:";
int a;
cin >> a;
cout << a + Recusion(a - 1);
return 0;
}

int Recusion(int n) {
if (n < 1)
return 0;
else
return n + Recusion(n - 1);
}

3-13

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//斐波那契数列
#include<iostream>
using namespace std;

int Recusion(int n);
int main() {
cout << "请输入一个值:";
int a;
cin >> a;
cout <<Recusion(a - 1)+ Recusion(a-2);
return 0;
}

int Recusion(int n) {
if (n ==1||n==2)
return 1;
else
return Recusion(n - 1)+ Recusion(n-2);
}

3-14

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
//勒让德多项式
#include<iostream>
using namespace std;
float Recusion(float x, float n);
int main() {
cout << "输入正整数n:";
float n;
cin >> n;
cout << "输入正整数x:";
float x;
cin >> x;
if (n == 0)
cout << 1;
else if (n == 1)
cout << x;
else
cout << ((2 * n - 1) * x * Recusion(x, n - 1) - (n - 1) * Recusion(x, n - 2)) / n;
return 0;
}
float Recusion(float x, float n) {
if(n==0)
return 1;
else if (n == 1)
return x;
else
return ((2 * n - 1) * x * Recusion(x, n - 1) - (n - 1) * Recusion(x, n - 2)) / n;
}

3-15

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
//函数重载,递归实现指数计算
#include<iostream>
using namespace std;

int getPower(int x, int y);
double getPower(double x, int y);
int main() {
int a, m;
double b;
cout << "请输入整数a:";
cin >> a;
cout << "请输入实数b:";
cin >> b;
cout << "请输入整数m:";
cin >> m;
cout << "整数结果:" << getPower(a, m) << endl;
cout << "实数结果:" << getPower(b, m) << endl;
return 0;
}

int getPower(int x, int y) {
int temp = 1;
if (y < 0)
return 0;
else if (y == 1)
return x;
else {
return x * getPower(x, y - 1);
}
}
double getPower(double x, int y) {
double temp = 1;
if (y < 0)
return 0;
else if (y == 1)
return x;
else {
return x * getPower(x, y - 1);
}
}

第四章

课后

4-9

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
#include<iostream>

class Rectangle {
private:
//横轴与纵轴坐标
int x;
int y;
public:
Rectangle(int x, int y);
//计算面积
void calculate(Rectangle a, Rectangle b);
};

Rectangle::Rectangle(int x, int y) :x(x), y(y) {}

void Rectangle::calculate(Rectangle a, Rectangle b) {
std::cout << "面积是:" << abs((a.x - b.x) * (a.y - b.y)) << std::endl;
}

int main() {
Rectangle A(5, 10);
Rectangle B(6, 18);
A.calculate(A, B);
return 0;
}

4-10

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//粗糙版
#include<iostream>
#include<string>
class Date {
private:
int year;
int month;
int day;
public:
Date() {}
Date(int year,int month,int day);
~Date(){}
std::string showd()const;
};

Date::Date(int year,int month,int day):year(year),month(month),day(day){}
std::string Date::showd()const{
return std::to_string(year) + "-" +
std::to_string(month) + "-" +
std::to_string(day);
}
class People {
private:
int number;
Date d;
int id;
public:
enum sex { 男, 女 }s;
People(){}
//构造函数,隐式内联函数
People(int number, sex s, Date d, int id) :number(number), s(s), d(d), id(id) {}
~People();
//拷贝构造函数
People(const People& p);
//人员信息录入
void record();
//人员信息显式
void show();
};
People::People(const People& p) {
this->number = p.number;
this->s = p.s;
this->d = p.d;
this->id = p.id;
}
People::~People() {
std::cout << number << "已经录入" << std::endl;
}
void People::record() {
int y, m, day;
int sexInput;
std::cout << "输入编号:";
std::cin >> number;
std::cout << std::endl;

std::cout << "输入性别:";
std::cin >> sexInput;
s = (sexInput == 0) ? 女 : 男;
std::cout << std::endl;

std::cout << "输入出生日期:";
std::cin >> y >> m >> day;
d = Date(y, m, day);
std::cout << std::endl;

std::cout << "输入id:";
std::cin >> id;
std::cout << std::endl;
}
void People::show() {
std::cout << "编号:" << number <<std::endl<< "性别:" <<(s == 男 ? "男" : "女") <<std::endl<< "出生日期:"<< d.showd() <<std::endl<< "id:" << id << std::endl;
}
int main() {
People p;
p.record();
p.show();
return 0;
}