收藏 分销(赏)

C--语言基础教程习题参考解答.doc

上传人:仙人****88 文档编号:7904812 上传时间:2025-01-25 格式:DOC 页数:28 大小:127.50KB 下载积分:10 金币
下载 相关 举报
C--语言基础教程习题参考解答.doc_第1页
第1页 / 共28页
C--语言基础教程习题参考解答.doc_第2页
第2页 / 共28页


点击查看更多>>
资源描述
清华大学出版社出版 普通高等院校计算机专业(本科)实用教程系列之一 《C++语言基础教程》全部练习题参考解答 第一章 C++语言概述 1.2 填空题 1.# 2. ; { } 3. 空格 制表 回车换行 4. 系统 用户 5. 程序 6. 函数头 函数体 7. main 8. 函数原型 9. 原型 10. 复合语句 11. .h .cpp 12. 严重错误 警告错误 13. void 14. void 15. 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 第二章 数据类型和表达式 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, 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. double 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. 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. 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 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. x<a && true 10. ch!=’d’ && ch!=’D’ 11. p || p->data==x 12. i>=n || 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.14159 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]==’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 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<iostream.h> #include<math.h> void main() { double a,b,c; cin>>a>>b>>c; double s=(a+b+c)/2; cout<<sqrt(s*(s-a)*(s-b)*(s-c))<<endl; } 2.#include<iostream.h> #include<math.h> void main() { int n=5; //n表示从2001到2006之间的年度数 double x=0.10; //x表示扩大招生的年增长率 double y=3000*pow(1+x,n); //用y表示2006年招生人数 cout<<"y="<<floor(y+0.5)<<endl; //对y的小数部分四舍五入,因y只能取整数 } 3.#include<iostream.h> #include<math.h> void main() { int a,b,c,d; cin>>a>>b>>c>>d; double v1,v2; v1=(a+b+c+d)/4.0; v2=pow(a*b*c*d,0.25); cout<<"v1="<<v1<<endl; cout<<"v2="<<v2<<endl; } 4.#include<iostream.h> #include<math.h> void main() { double a,b,x,y,temp; cin>>a>>b; temp=2/(3*(a+b)); //用temp计算两个公式中公共部分的值 x=temp*a*sin(a); y=temp*b*cos(b); cout<<"x="<<x<<", "<<"y="<<y<<endl; } 第三章 流程控制语句 3.1 填空题 1. 选择,循环,跳转 2. goto, continue, break, return 3. 结构性 4. 常量表达式 5. if 6. switch 7. 不停止 8. switch 9. 1, n+1, n 10. 循环条件,循环体 11. 循环, switch, 循环 12. 循环体,循环体 13. do, 右花括号 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 192 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 17 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 ,计算并打印出每一个x值所对应的y值,其中a和每次 a2+x2 的x值均由键盘输入,直到从键盘上输入终止标志-1为止。 3. 根据从键盘上输入的两个实数和一个四则算术运算符求出运算结果。 4. 把从键盘上输入的一个整数分解为所有可能的每两个因子之积。 5. 计算并输出的值,其中N值由键盘输入。 6. 根据从键盘上输入的x和n的值计算并输出y的值,y的计算公式为: y= 7. 在输出屏幕上打印出一个由字符’*’组成的等腰三角形,该三角形的高为5行,底边宽为9个字符。 8. 求出从键盘上输入的两个整数的最大公约数和最小公倍数。 9. 让计算机随机出10道20以内整数的加法题供用户计算,每道题10分,计算完成后打印出得分。 10. 求解一元二次方程ax2+bx+c=0的根。 3.4 编写下列程序 1. #include<iostream.h> void main() { double q; //用q表示一户居民的月用水量 int n; //用n表示该户人口数 double y; //用y表示应交纳的水费 cout<<"输入月用水量和人口数:"; 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<<q<<"吨 "<<n<<"人 "<<int(y*100+.5)/100.0<<"元"<<endl; } 2. #include<iomanip.h> void main() { int 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; } cout<<setw(6)<<c1<<setw(6)<<c2<<setw(6)<<c3<<endl; cout<<setw(5)<<double(c1)/i*100<<'%'; cout<<setw(5)<<double(c2)/i*100<<'%'; cout<<setw(5)<<double(c3)/i*100<<'%'<<endl; } 3. #include<iostream.h> void main() { int i; //用i作为循环变量 int p=1; //用p作为累乘变量 int s=1; //用s作为累加循环变量 for(i=1;i<=10;i++) {p*=3; s+=p;} cout<<s<<endl; } 4. #include<iostream.h> void main() { int i=0; //用i作为依次取值偶数的变量 int s=0; //用s作为累加变量 do { i+=2; s+=i*i; }while(s<1000); cout<<"n="<<i-2<<endl; } 5. #include<iomanip.h> #include<math.h> const double a=3.0; //假定把a定义为常数3.0 void main() { cout.setf(ios::left); //使一个数据项的值在由setw(n)规定 //的输出宽度内按左对齐显示 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="<<setw(6)<<x; cout<<"y="<<y<<endl; cin>>x; } } 6. #include<iostream.h> void main() { int x,max; //用x作为输入变量,用max保存最大值 cin>>x; max=x; //max的初值为输入的第一个常数 for(int i=0;i<9;i++) { cin>>x; if(x>max) max=x; //顺序比较得到的大者被赋给max, //使max中始终保存着当前比较过数据的最大值 } cout<<"max:"<<max<<endl; } 7. #include<iostream.h> void main() { int a,b; for(a=6;a<=30; a++) for(b=15;b<=36;b++) if(2*a+5*b==126) cout<<'('<<a<<','<<b<<')'<<endl; } 8. 分析:设参加植树的高中生、初中生和小学生的人数各用a, b和c表示,根据题意可列出不定方程组为: 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至50,在内循环体中判断上述(3)式是否成立,若是并且100-a-b不小于10则得到的a,b,c的值就是符合题目要求的一个解,循环结束后可以求出其全部解。 根据分析编写出程序如下: #include<iostream.h> void main() { int a,b,c; for(a=10;a<=33; a++) for(b=10;b<=50;b++) if(5*a+3*b==100) { c=100-a-b; if(c>=10) {cout<<'('<<a<<','<<b<<','; cout<<c<<')'<<endl; } } } 9. #include<iostream.h> void main() { double x,y,p; int i; cout<<"输入一批常数依次赋给x,直到输入-100时止:"; cin>>x; while(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="<<x<<','<<y<<endl; cin>>x; } } 10. #include<iostream.h> void main() { int i,j; for(i=1;i<=6;i++) { for(j=1;j<=11;j++) if(j<i || j>12-i) cout<<' '; else cout<<'*'; cout<<endl; } } 第四章 数组和字符串 4.1 填空题 1. i+1 2. 40 a+20 3. 192 a+136 4. 300 a+94 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 500 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. 分别统计并输出字符数组a所指字符串中各自出现的’,’,’;’,’(’和’)’,’[’和’]’,’{’和’}’等字符的个数。 4. 对于二维字符数组a中保存的M个字符串,分别统计并输出其长度小于5、大于等于5且小于15、大于等于15的字符串个数。 4.4 编写下列程序并上机运行 1. #include<iostream.h> void main() { int i,a[20]; a[0]=0; a[1]=1; for(i=2;i<20;i++) a[i]=a[i-1]+a[i-2]; for(i=19;i>=0;i--) cout<<a[i]<<' '; cout<<endl; } 2. #include<iostream.h> 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++; cout<<c<<endl; } 3. #include<iostream.h> void main() { double a[4][4]; int i,j; cout<<"输入一个4*4的数值矩阵:"; for(i=0;i<4;i++) for(j=0;j<4;j++) cin>>a[i][j]; double p=1; for(i=0;i<4;i++) p*=a[i][i]; cout<<p<<endl; } 4. #include<iostream.h> 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++) { for(j=0;j<3;j++) cout<<b[i][j]<<' '; cout<<endl; } } 5. #include<iostream.h> 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]={{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<<c[i][j]<<' '; cout<<endl; } } 6. #include<iostream.h> #include<stdlib.h> void SelectSort(int b[], int n) { int i,j,k; for(i=1;i<n;i++) { k=i-1; for(j=i;j<n;j++) if(b[j]<b[k]) k=j; int x=b[i-1]; b[i-1]=b[k]; b[k]=x; } } 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<<a[i]<<' '; cout<<endl; } 7. #include<iostream.h> void main() { char a[80]; 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;i<26;i++) { cout<<char('a'+i)<<':'<<b[i]<<" "; if((i+1)%4==0) cout<<endl; } } 8. #include<iostream.h> #include<string.h> void SelectSort(char a[12][4], double b[], int n) { int i,j,k; for(i=1;i<n;i++) { k=i-1; for(j=i;j<n;j++) if(b[j]<b[k]) k=j; char x[4]; double y; strcpy(x,a[i-1]); strcpy(a[i-1],a[k]); strcpy(a[k],x); y=b[i-1]; b[i-1]=b[k]; b[k]=y; } } void main() { char a[12][4]={"001","002","010","011","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<<i+1<<' '<<a[i]<<' '<<b[i]<<endl; } 第五章 指针 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 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
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服