1、清华大学出版社出版 普通高等院校计算机专业(本科)实用教程系列之一 《C++语言基础教程》全部练习题参考解答 第一章 C++语言概述 1.2 填空题 1.# 2. ; { } 3. 空格 制表 回车换行 4. 系统 用户 5. 程序 6. 函数头 函数体 7. main 8. 函数原型 9. 原型 10. 复合语句 11. .h .cpp 12. 严重错误 警告错误 13. void 14. void 15
2、 int 0 16. n 17. 下一行 18. 空白符 1.3 写出下列程序运行结果,此题又作为上机实验题 1. x+y=11,x*y=30 2. cube(3)=27 cube(5)=125 cube(8)=512 3. averageValue:3 averageValue:4 4. 请输入三个整数:10 5 9 (假定输入的三个整数为10,5,9) 最大值: 10 最小值: 5 第二章 数据类型和表达式
3、 2.2 填空题 1. 4,1,1,4,8 2. short, int, long 3. 4, 2, 2 4. 46, 123, 98 5. 107, 10, 92, 42 102 6. 15 7. 符号常量,整数,int 8. 3.4E2, 5.27E6 9. int, int, double, double, float 10. x, 15 11. 6, 60 12. 26, 25 13. 4, 1 14. 256, 22 15. x,
4、 x 16. 0, 1 17. 20 18. 5 19. 9, 216 20. 0, 19 21. (1+x)*sin(48*3.14159/180), a*pow(x,b)*exp(x+1) 2.3 指出下列各表达式值的类型 1. int 2. double 3. float 4. long int 5. int 6. int 7. int 8. int 9. double 10. dou
5、ble 11. double 12. int 13. int 14. double 15. char 16. int 17. bool 18. int 19. short 20. bool 21. unsigned int 22. double 23. int 24. char 25. int 26. double 27. double 28. double 29. double 30
6、 int 31. int 32. double 33. double 34. double 35. bool 36. bool 37. bool 38. bool 39. bool 40. bool 2.4 已知a=20, x=4.7, r=’a’, 试求出下列每个表达式的值(各表达式互不影响)。 1. 20 2. ‘b’ 3. 0 4. 4 5. 7 6.
7、3 7. 2.5 8. ‘e’ 9. 18.4 10. ‘2’ 11. 40 12. 165 13. 1 14. 0 15. 0 16. 1 17. 1 18. 0 19. 30 20. 10 21. 97 22. 50 23. 243 24. 30.5 25. –6 26. 5
8、 27. 5 28. 4 2.5 给出下列每个逻辑表达式的相反式 1. !x 2. x!=0 3. a==true 4. x<10 5. x==key || !flag 6. p==NULL || flag==false 7. x<=0 || x>=10 8. x!=key && false 9. xdata==x 12. i>=n |
9、 a[i]==key 13. ch!=’(’ && ch!= ’[’ && ch!=’{’ 14. !x && (i>=n || i==0) 2.6 把下列数学算式或不等式表示成C++表达式 1. 2*x*(1+x*x/3.0) 2. (1+exp(x))/(1-exp(x)) 3. (-b+sqrt(b*b-4*a*c))/(2*a) 4. 1/(pow(3,x)*log(2*x+k)) 5. pow(sin(x+PI/4),3)/(3+pow(cos(x-PI/4),3)) //其中PI常量为3.14
10、159 6. 1/7.0*pow((1+exp(x+1)),n) 7. x>=0 && x<=20 8. a*x-b*y!=c 9. 4*x+7*y-2==3*a*b 10. fabs((2*x*x+1)/(3*x+2))<=5 && (3*x+2!=0) 11. age>=55 || pay>=820 12. place== “江苏” && sex== “女” 13. (ch>=’a’ && ch<=’z’) || (ch>=’A’ && ch<=’Z’) 14. s[0]==’0’ && (s[1]=
11、’x’ || s[1]==’X’) 2.7 写出下列每个程序运行后的输出结果并自行上机验证 1. 0,1,2,3 2. p=62.8318 s=314.159 3. 1 1 1 2 2 2 3 1 8 4. 1 1 2 4 4 4 8 8 4 4 5. 30 120 7 30 10 30 30 20 10 6. 1 1 0 0 0 1 7. 5 10 15 15 10 15 150 10 150
12、 151 11 10
152 12 151
8. 15.72 16 15
15.72 16 15.7
15.72 16 15.7
2.8 编写下列程序
1.#include 13、a)*(s-b)*(s-c))< 14、0.5)< 15、 16、out<<"x="< 17、括号
14. do, for, while
15. 10
16. 11
17. 10
18. break
19. continue
20. return
3.2 写出下列每个程序运行后的输出结果并上机验证
1. 121
a,b,c=7,12,30
2. 11 14 switch end.
3. 36 -5 73 192 8 44
36 139
-5 1
73 8
19 18、2 13
8 67
44 171
4. 36 25 20 43 12 70 66 34 28 15 32 55
129 255 52
5. 1 1 1
2 2 3
3 6 9
4 24 33
6. 10 6 4
7. *****
****
***
**
*
8. 1 5 7 11 13 1 19、7 19 23 25 29 150
9. +**+
k=11
10. 1 4
2 6
2 3
3 5
5 6
c=37
11. s=63
12. 请输入两个正整数x和y:24 88
x和y的最小公倍数:264
3.3 指出下列每个程序的功能并上机验证
1. 计算并输出1+的值,其中a的值由键盘输入。
ax+5
2. 根据 y = 3x2-2*a+1 20、 ,计算并打印出每一个x值所对应的y值,其中a和每次
a2+x2
的x值均由键盘输入,直到从键盘上输入终止标志-1为止。
3. 根据从键盘上输入的两个实数和一个四则算术运算符求出运算结果。
4. 把从键盘上输入的一个整数分解为所有可能的每两个因子之积。
5. 计算并输出的值,其中N值由键盘输入。
6. 根据从键盘上输入的x和n的值计算并输出y的值,y的计算公式为:
y=
7. 在输出屏幕上打印出一个由字符’*’组成的等腰三角形,该三角形的高为5行,底边宽为9个字符。
8. 求出从键盘上 21、输入的两个整数的最大公约数和最小公倍数。
9. 让计算机随机出10道20以内整数的加法题供用户计算,每道题10分,计算完成后打印出得分。
10. 求解一元二次方程ax2+bx+c=0的根。
3.4 编写下列程序
1. #include 22、人口数:";
cin>>q>>n;
if(q/n<=2) y=0.3*q;
else if(q/n<=4) y=0.3*2*n+0.6*(q-2*n);
else y=0.3*2*n+0.6*2*n+1.2*(q-4*n);
cout< 23、c1,c2,c3; //用c1,c2,c3分别记录成绩为优秀、达标和不达标的人数
int i=0; //用i记录总人数
double x; //用x作为输入变量
c1=c2=c3=0;
cin>>x;
while(x>=0) { //若输入的x为负数则结束循环处理
if(x<=12) c1++;
else if(x<=15) c2++;
else c3++;
i++;
cin>>x 24、
}
cout< 25、 {
int i; //用i作为循环变量
int p=1; //用p作为累乘变量
int s=1; //用s作为累加循环变量
for(i=1;i<=10;i++) {p*=3; s+=p;}
cout< 26、 do {
i+=2;
s+=i*i;
}while(s<1000);
cout<<"n="< 27、 //的输出宽度内按左对齐显示
double x,y;
cin>>x; //用输入-100作为终止标志
while(x!=-100) {
if(x<=0) y=sqrt(a*a+x*x);
else y=3*pow(a,3)*x*x+4*a*x-1;
cout<<"x="< 28、include 29、 cout<<"max:"< 30、根据题意可列出不定方程组为:
a+b+c=100 (1)
3a+2b+c/2=100 (2)
将(2)式乘以2后减(1)式得:
5a+3b=100 (3)
因高中生每人植3棵,所以高中生的人数a最多为int(100/3)=33人,最少应为题目所要求的10人,因初中生每人植2棵,所以初中生的人数b最多为int(100/2)=50人,最少也应为题目所要求的10人。
以a作为外循环变量,取值范围是10至33,以b作为内循环变量,取值范围是10 31、至50,在内循环体中判断上述(3)式是否成立,若是并且100-a-b不小于10则得到的a,b,c的值就是符合题目要求的一个解,循环结束后可以求出其全部解。
根据分析编写出程序如下:
#include 32、 if(c>=10) {cout<<'('<
void main()
{
double x,y,p;
int i;
cout<<"输入一批常数依次赋给x,直到输入-100时止:";
cin>>x;
while 33、x!=-100) {
y=1; //y用作累加每个数据项值的变量,初值为1
p=1; //p用作累乘x的变量,初值为1
for(i=1;i<=9;i++) {
p*=x;
y+=p/(i+1);
}
cout<<"x,y="< 34、)
{
int i,j;
for(i=1;i<=6;i++) {
for(j=1;j<=11;j++)
if(j12-i) cout<<' ';
else cout<<'*';
cout< 35、5. 9 7
6. 3 8 0
7. 1 2
8. 0 1
9. 8
10. 11
11. n+1 n+1
12. 字符串 字符串
13. 10 19
14. ’1’ ’4’
15. ”456” ”” (或空串)
16. 5 1
17. ”abcdef”
18. strcpy(a,”aaa”)
19. 3
20. 2
21. Integer int int
22. AA 10 int
23. BB 10 50 50 36、0 char
24. 4 6 24 int
4.2 写出下列程序运行后的输出结果
1. 6 4
2. 66 55
3. 14 25
4. 4 3 14
5. 4 3 2 2 3
6. 2 1 5 2
7. 1 3 12
8. worker cadre
9. 4 1 8 -1
4.3 指出下列每个函数的功能
1. 使数组a中的n个元素的值按相反的次序排列。
2. 显示输出数组a中大于等于n个元素平均值的所有元素值。
3. 分别统计并输出字符 37、数组a所指字符串中各自出现的’,’,’;’,’(’和’)’,’[’和’]’,’{’和’}’等字符的个数。
4. 对于二维字符数组a中保存的M个字符串,分别统计并输出其长度小于5、大于等于5且小于15、大于等于15的字符串个数。
4.4 编写下列程序并上机运行
1. #include 38、 for(i=19;i>=0;i--) cout<
void main()
{
char s[31];
int c=0;
cout<<"输入一个字符串:";
cin>>s;
for(int i=0;s[i];i++)
if(s[i]>='0' && s[i]<='9') c++;
c 39、out< 40、
void main()
{
int a[3][4]={{3,8,2,9},{4,7,3,6},{5,2,8,4}};
int b[4][3];
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
b[j][i]=a[i][j];
for(i=0;i<4;i++) {
41、 for(j=0;j<3;j++)
cout<
void main()
{
int a[3][4]={{3,0,4,5},{6,2,1,7},{4,1,5,8}};
int b[4][4]={{1,4,0,3},{2,5,1,6},{0,7,4,4},{9,3,6,0}};
int c[3][4] 42、{{0}};
int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
c[i][j]+=a[i][k]*b[k][j];
for(i=0;i<3;i++) {
for(j=0;j<4;j++)
cout< 43、nclude 44、 void main()
{
int a[10];
int i;
for(i=0;i<10;i++)
a[i]=rand()%90+10;
SelectSort(a,10);
for(i=0;i<10;i++) cout<
void main()
{
char a[80];
45、 int b[26]={0};
cout<<"输入一个字符串:";
cin>>a;
int i,x;
for(i=0;a[i];i++) {
if(a[i]>='A' && a[i]<='Z') {
x=a[i]-'A'; b[x]++;
}
if(a[i]>='a' && a[i]<='z') {
x=a[i]-'a'; b[x]++;
}
}
for(i=0 46、i<26;i++) {
cout< 47、 k=i-1;
for(j=i;j 48、023","025",
"031","036","037","102","325","438"};
double b[12]={13.6,14.8,12.0,12.7,15.6,13.4,14.9,
12.6,13.4,12.5,15.3,12.7};
SelectSort(a,b,12);
for(int i=0;i<12;i++)
cout< 49、第五章 指针
5.1 填空题
1. 4
2. 地址 DataType*
3. (char*)p
4. int**
5. *p &p
6. *p p
7. *p *p
8. 25
9. 42
10. 26
11. 42
12. 4*i
13. *(a+i)
14. a+i*sizeof(a[i])
15. 第一个 修改
16. b[7] b[2]
17. int *p=&x;
18. *p
50、
19. int[n] int *
20. c[3][0] c[3][2]
21. int(*)[6]
22. char[20] char* f[i][0]
23. *(a[i]+j) 或*(*(a+i)+j)或*(a+i)[j]
24. int &y=x;
25. x
26. 相等 x
27. *p
28. 0 p[0] *P
29. ’a’
30. char(*)[n]
31. delete p
32. delete []p
5
void main()
{
int
void main()
{
int i=0; //用i作为依次取值偶数的变量
int s=0; //用s作为累加变量






