易学C++习题解答_第1页
易学C++习题解答_第2页
易学C++习题解答_第3页
易学C++习题解答_第4页
易学C++习题解答_第5页
已阅读5页,还剩37页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章、完整代码结构:预处理头文件主函数语句1;/注释语句n;、cout ”*” endl ”*” endl ”*” endl ”*” ”改为“”缺少插入操作符,单引号改为双引号缺少分号、#include “iostream.h”int main() char a;cout ”欢迎光临!”endl;cout endl;cout ”请输入您的房间:” a;cout ”您的房间是” a endl;return 0;运行结果:欢迎光临!空行请输入您的房间:F您的房间是F第三章、#include iostream.hint main()float r;/创建一个浮点型变量存放半径float s;/创建

2、一个浮点型变量存放运算得出的面积结果const float pi=3.f;/定义常量pi等于3.cout r;s=pi*r*r;/计算面积cout 这个圆的面积为 s endl;return 0;、实型(包括双精度型或单精度型,下同)整型字符型整型或布尔型单精度型字符串、数字开头,非法大小写敏感,不同于int,合法合法与数据类型同名,非法中文字符,非法含有空格,非法、缺少iostream.h两头的双引号(尖括号也可以)缺少main后面的括号常量a应该在定义时赋值cout语句后操作符方向错c=c/2.0,把实数结果放到了整型变量中,导致数据丢失、#include iostream.hint ma

3、in()int a=5,b=3,c;/a=5,b=3,c=?c=a+b;/a=5,b=3,c=8a=a-1;/a=4,b=3,c=8b=b-1;/a=4,b=2,c=8c=c+1;/a=4,b=2,c=9cout a+b+c endl;/4+2+9=15、整型,可能存放最大值单精度型,可能存放某些数的和字符型,可能存放临时的数据布尔型,可能判断某样东西是否是空的长整型,可能存放运算结果第四章、!(a=b(a+b)*c)!=0或(a+b)*c(a=1?b:c)1或(a!=1?c:b)1,注意条件运算符的优先级低于关系运算符b!=0 & a/b3或b=0? 0: a/b3b=a & ba或0,因为

4、这个条件永远是假的。、#include iostream.hint main()int a=8,b=4,c=2,k=4,m=8,n=6;cout a b c k m n =0 & m/3.02)/(m/3.0)结果为实数,大于,满足条件,运行语句块m=k+3*!c;/(!C)=0,(k+3*0)=k,m=k,所以m=4else/配第二个if,所以不运行k=k*!m!=c;couta m k endl;/输出244return 0;#include iostream.hint main()int a=0,b=1,c=2;switch (a)/判断变量a的值case 0:/a=0,故运行这句cou

5、t b+c endl;/输出,但没有break,继续运行case 1:a=a+b*c;/a=0+1*2=2switch (a)/再次判断a的值case 2:/a=2,故从这句开始运行cout b+c endl;/输出,没有break,继续运行case 5:cout (a=a+b*c) endl;/(a+b*c)=4,输出,并且a=4default: c=c*2;/c=2*2=4break;/退出第二个switch/没有break,继续运行default:cout a+b+c endl;/输出a+b+c=4+1+4=9break;return 0;、iostream应为iostream.h。pr

6、ogram改成main,主函数只能叫main,不能叫其他的。cout输出字符串时,字符串两端要加双引号,而不是单引号(两处)。输入输出的时候只能用插入操作符和抽取操作符,而不能用逗号表达(两处)。if后面的关系表达式要加上括号(三处)。交换算法应该是temp开头。switch后的表达式要有括号。case常量和default以后要加冒号(三处)。case之后只能是常量,不能够是变量。如果要求及时退出switch语句,还要加上break。、#include iostream.hint main()int a;cout a;if (a0) cout a 是个负数。 0) cout a 是个正数。 e

7、ndl;if (a%2) cout a 是个奇数。 endl;else cout a 是个偶数。 endl;cout a 个位上的数是 0?a%10:-a%10) endl;return 0;、参考代码#include iostream.h#include stdlib.h/提供exit(1)功能int main()float a,b,c,temp;char oper1,oper2;cout 请输入一个表达式(eg.1+2*3): a oper1 b oper2 c;if (oper2=* | oper2=/) & (oper1!=* & oper1!=/) /如果发生先乘除后加减switch

8、 (oper2)/先判断第二个运算符,不可能是加减号case *:temp=b*c;break;case /:if (c!=0) temp=b/c;else cout 出错啦!endl;exit(1);break;default:cout 出错啦!endl;exit(1);switch (oper1)/再判断第一个运算符,不可能是乘除号case +:temp=a+temp;break;case -:temp=a-temp;break;default:cout 出错啦!endl;exit(1);elseswitch (oper1)case +:temp=a+b;break;case -:temp

9、=a-b;break;case *:temp=a*b;break;case /:if (b!=0) temp=a/b;else cout 出错啦!endl;exit(1);break;default:cout 出错啦!endl;exit(1);switch (oper2)case +:temp=temp+c;break;case -:temp=temp-c;break;case *:temp=temp*c;break;case /:if (c!=0) temp=temp/c;else cout 出错啦!endl;exit(1);break;default:cout 出错啦!endl;exit(

10、1);cout a oper1 b oper2 c = temp endl;return 0;#include iostream.hint main()int number;cout number;cout number 的千位数是 number/1000 , number 的百位数是 number%1000/100 , number 的十位数是 number%100/10 , number 的个位数是 number%10 。 endl;return 0;#include iostream.hint main()int year,month,date,numOfDay=0;cout year

11、month date;switch (month)case 12:numOfDay=numOfDay+30;case 11:numOfDay=numOfDay+31;case 10:numOfDay=numOfDay+30;case 9:numOfDay=numOfDay+31;case 8:numOfDay=numOfDay+31;case 7:numOfDay=numOfDay+30;case 6:numOfDay=numOfDay+31;case 5:numOfDay=numOfDay+30;case 4:numOfDay=numOfDay+31;case 3:numOfDay=numO

12、fDay+(year%4=0 & year%100!=0)|(year%400=0)?29:28);case 2:numOfDay=numOfDay+31;case 1:numOfDay=numOfDay+date;cout year 年 month 月 date 日是 year 年的第 numOfDay 天。 endl;break;default:cout 出错啦!endl;return 0;第五章1、611402、阅读下列程序,分析程序的运行过程,并写出运行的结果#include iostream.hint main()int sum=0;for (int i=1;i=5;i+)/求1!+

13、2!+3!+4!+5!int tmp=1;for (int j=1;j=i;j+)/求i的阶乘tmp=tmp*j;sum=sum+tmp;cout sum endl;return 0;运行结果:153#include iostream.hint main()int sum=0;for (int i=0;i=9;i+)for (int j=0;j=9;j+)if (i!=j)/两位数如果个位十位不一样,则进行下一次循环continue;cout i j endl;/输出这个两位数sum+;cout sum endl;/输出一共有多少个个位十位相同的两位数,包括00return 0;运行结果:00

14、112233445566778899103、要求输出(1+3)*(2+4)*(3+5)*(8+10)#include iostream.hvoid mian()/改作mainint sum=0;/sum=1,而不能等于0,因为是累乘for (int i=1;i8;+i)/i=8或i9否则少做一次循环sum=sum*(2i+2);/2i改作2*icout sum endl;return 0;要求找出“水仙花数”。“水仙花数”是一个各位数字立方和等于该数本身的三位数。例如153=13+53+33,所以它是一个水仙花数。#include iostream.hint main()for (int i=

15、0;i=9;i+)/应int i=1,否则不符合三位数的要求for (int j=0;j=9;j+)for (int k=0;k=9;k+)if (i*i*i+j*j*j+k*k*k!=i*100+j*10+k)break;/应该使用continue,否则不能测试到每一个数cout k j i endl;/i是外循环,应该放在百位,k作个位return 0;4、#include iostream.h#include stdlib.h#include time.hint main()int a,b,numOfQues=0,numOfRight=0;char inquiry;srand(time(

16、NULL);cout *欢迎你来做两位数的加减法* endl;doint temp=rand()%2;a=rand()%100;b=rand()%100;switch (temp)case 0:int ans;cout a + b ans;if (ans=a+b)numOfRight+;cout 恭喜!答对了! endl;else cout 答错了,再接再厉! endl;break;case 1:int ans;cout a - b ans;if (ans=a-b)numOfRight+;cout 恭喜!答对了! endl;else cout 答错了,再接再厉! endl;numOfQues+

17、;cout 你还要再做一题吗?(N表示不要) inquiry;while (inquiry!=N & inquiry!=n);cout 你的答题正确率为 numOfRight*100/numOfQues %。再见! endl;return 0;5、参考代码#include iostream.h#include iomanip.hint main()for (int i=1;i=9;i+)for (int j=1;j=i;j+)cout j * i = setw(2) i*j ;cout endl;return 0;#include iostream.h#include stdlib.h#inc

18、lude time.hint main()int a,b,numOfQues=0,numOfRight=0;char inquiry;srand(time(NULL);cout *欢迎你来做一位数的加减乘除法* endl;doint temp=rand()%4;a=rand()%10;b=rand()%10;switch (temp)case 0:int ans;cout a + b ans;if (ans=a+b)numOfRight+;cout 恭喜!答对了! endl;else cout 答错了,再接再厉! endl;break;case 1:int ans;cout a - b ans

19、;if (ans=a-b)numOfRight+;cout 恭喜!答对了! endl;else cout 答错了,再接再厉! endl;break;case 2:int ans;cout a * b ans;if (ans=a*b)numOfRight+;cout 恭喜!答对了! endl;else cout 答错了,再接再厉! endl;break;case 3:if (b=0 | (a%b!=0) continue;/如果除法不正常进入下一次循环int ans;cout a / b ans;if (ans=a/b)numOfRight+;cout 恭喜!答对了! endl;else cou

20、t 答错了,再接再厉! endl;numOfQues+;cout 你还要再做一题吗?(N表示不要) inquiry;while (inquiry!=N & inquiry!=n);cout 你的答题正确率为 numOfRight*100/numOfQues %。 endl;switch (numOfRight*10/numOfQues)case 10:case 9:cout 你真棒! endl;break;case 8:case 7:cout 还不错!加油! endl;break;case 6:cout 刚及格再努力! endl;break;default:cout 做得不行啊!以后常来啊!b

21、) return a;else return b;void char(char c);/输出功能void char(char c)/多了一个分号cout c;return;double add(double a,double b);/做加法double add(double a,double b) /不需要result参数return a+b;/将此处改成return a+b;即可void swap(int &a,int &b);/两数交换void swap(int &a,int &b);/应该使用引用,否则不能起到交换作用int temp;temp=a;a=b;b=temp;void max

22、2(int &a,int &b,int &c);/把参数a、b和c作为引用,函数结束后a和b所对的实参就是较大的两个数void max2(int &a,int &b,int &c)/求较大的两个数if (a=b) swap(a,b);if (a=c) swap(a,c);if (b=c) swap(b,c);return;/函数无法返回两个变量int func(int c);/求an=a(n-1)+2,且a1=3int func(int c)/返回类型应改作intif (c=1) return 3;return func(c-1)+2;3、判断下列几组重载函数是否能够正常工作。char ch(

23、double a,int b);char ch(double c,int d);不能,参数类型、顺序、个数完全一样void f(char c=c,int m=2);int f();不能,重载和默认参数发生混淆int func(int a,int b,int c);void func(int a,int b);float func(float a,int b);float func(int &a,int b);不能,第二个和第四个参数类型、顺序、个数完全一样4、根据要求编写函数,要求写出函数原型和函数定义。用一个整数表示年份作为参数,判断这年是否是闰年。(提示:布尔型数据)bool isLeap

24、Year(int year);bool isLeapYear(int year)return (year%4=0 & year%100!=0) | (year%400=0);使用系统给出的正弦函数和平方根函数,自己编写一个余弦函数。(不需要预处理头文件,余弦函数的参数为整型,要求以为单位)double cos(int a);double cos(int a)int sign;/用于存放符号sign=(a/180)%2)=0?1:-1);/判断余弦值的正负return sign*sqrt(1-(sin(a*3./180.0)*sin(a*3./180.0);以一个长整数为参数,求它是否是某个整数

25、的阶乘,如果是则返回这个数,否则返回-1。int isFactorial(long a);int isFactorial(long a)int i=1;long result=1;while (resulta)i+;result=result*i;if (result=a)return i;elsereturn -1;5、阅读下列程序,写出运行结果。#include iostream.hint func1(int a,int b);int func1(int a);float func1(float a,int b=3);void func2(int &x,int y);int main()i

26、nt a=1,b=2,c=3;float d=6.0;b=func1(func1(a,b);/func1(a,b)=0,func1(0)=0,即b=0d=func1(d);/func1(d)=func1(d,3)=2,即d=2func2(a,c);/func2(a,c)的运行效果为a=c=3cout a endl b endl c endl d endl;/输出3、0、3和2return 0;int func1(int a,int b)return a=b;int func1(int a)return a;float func1(float a,int b)return a/b;void fu

27、nc2(int &x,int y)x=y;return;#include iostream.hint func(int a,int b);int main()cout func(8,3) endl;/所以最终结果为输出1return 0;int func(int a,int b)if (b=0) return 1;/函数终止递归时函数值为1else return func(a-b,a/b);/无论如何,只要这个函数有终止,结果就应该是16、根据要求编写程序从键盘输入三个实数a、b、c分别作为一个一元二次方程ax2+bx+c=0的三个系数。使用系统给出的平方根函数,编写一段程序,使之求出这个方程

28、的两个根。其中,求=b2-4*a*c的功能要以函数形式出现。(提示:求根公式,0时方程无解)#include iostream.h#include math.hdouble delta(double a,double b,double c);int main()double a,b,c;cout 请输入三个数a,b,c表示方程ax2+bX+c=0 a b c;if (delta(a,b,c)0 | a=0)cout 该方程无解或不是一元二次方程! endl;elsecout x1= (-b+sqrt(delta(a,b,c)/2/a endl;cout x2= (-b-sqrt(delta(a

29、,b,c)/2/a endl;return 0;double delta(double a,double b,double c)return b*b-4*a*c;已知a1=1,a2=1,当n大于等于2时,a(n+1)=3*an-a(n-1),要求用递归函数输出a1到a8。#include iostream.hint array(int a);int main()for (int i=1;i=8;i+)cout a i = array(i) endl;return 0;int array(int a)if (a=2)return 1;elsereturn 3*array(a-1)-array(a

30、-2);第七章1、判断下列数组的声明及初始化是否正确,如有错误,请指出int array5=1,2,4,5;/错误,2后面的被跳过double array=1.0,4,5/3.3,;/错误,最后的元素被跳过char str=H,e,l,l,o;/正确char str15=“Hello”;/错误,没有考虑结尾符,空间不够int a3=1,2,3,4,5;/错误,不能省略第二维的大小int a2=1,3,4,5;/错误,混乱的初始化方式2、根据下列实际情况,判断最好应该用什么方法存储数据 一句英语句子答:字符型一维数组 一个66的矩阵答:二维数组 三种水果每个月的销量的年表答:二维数组乒乓球双循环

31、赛的结果答:二维数组(可以用1表示主场胜利,0表示主场失败)3、指出下列程序的错误之处/矩阵的加法#include iostream.hvoid plus(int a,int b,int r,int c);/二维数组,所以a和b参数格式错误int main()int matrix13=3,2,4,-1,5,6,-5,-2,-1;int matrix23=2,1,3,8,-3,1,-1,-2,0;plus(matrix1,matrix2,3,3);return 0;void plus(int a,int b,int r,int c)int temp3;/没有初始化数组元素,不能省略行数for (

32、int i=0;ir;i+)for (int j=0;jc;j+)tempij=aij+bij;for (int k=0;kr;k+)/以矩阵形式输出for (int l=0;lc;l+)cout setw(3) tempkl;/忘记预处理iomanip.h/应该在此处输出换行,否则不是矩阵形式/将数组内的元素倒置#include iostream.hint main()int array=1,2,3,4,5,6,7,8,9;for (int i=0;isizeof(array)/2;i+)/数组的大小是sizeof(array)/sizeof(int)temp=arrayi;/没有声明tem

33、parrayi=arraysizeof(array)-i;/ 数组的大小是sizeof(array)/sizeof(int),且数组的最后元素的下标是数组大小减一arraysizeof(array) -i=temp;/与上一句问题相同for (int j=0;jsizeof(array);j+)/数组的大小是sizeof(array)/sizeof(int)cout arrayj;cout endl;return 0;4、根据运行结果完成代码#include iostream.hint squeeze(int a,int size,int num);int main()int temp;int

34、 number=3,16,18,2,4,19,5,15;const int size=sizeof(number)/sizeof(int);for (int i=0;i3;i+)cout 请输入一个数 temp;cout 被挤出来的是 squeeze(number,size,temp) endl;return 0;int squeeze(int a,int size,int num)int min=num,temp,mini;cout 原来的数组为 endl;for (int i=0;isize;i+)cout ai;if (aimin)min=ai;mini=i;cout endl;if (

35、min!=num)temp=amini;amini=num;return temp;elsereturn num;5、 根据要求编写程序(参考代码)#include iostream.hint main()char str=I am Tomato;const int size=sizeof(str);char codesize;for (int i=0;isize-1;i+)if (stri= )codei=stri;cout ;elsecout (codei=stri+1);cout endl;for (int j=0;jsize-1;j+)if (codej= )strj=codej;co

36、ut ;elsecout (strj=codej-1);cout endl;return 0;A、B、C、D四个学校举行足球赛,比赛采用单循环制,即一共6场比赛,比分如下:A对B为2:1,A对C为1:4,A对D为2:2,B对C为3:1,B对D为4:2,C对D为1:1。首先根据比分制定存储规则,规定行中行下标和列下标所指定的元素,存贮着行下标队和列下标队比赛中,行下标队所进的球数。则存储为:1列:A队2列:B队3列:C队4列:D队0行:A队02121行:B队10342行:C队41013行:D队2210#include iostream.hchar fwinner(int score4,int r

37、,int c);/判断胜利最多char mgoal(int score4,int r,int c);/判断进球数最多char ngoal(int score4,int r,int c);/判断净胜球最多char max(int result,int size);/判断最多int main()int score44=0,2,1,2,1,0,3,4,4,1,0,1,2,2,1,0;/按比分安排数组元素cout 胜利最多的是 fwinner(score,4,4) 队。 endl;cout 进球最多的是 mgoal(score,4,4) 队。 endl;cout 净胜球最多的是 ngoal(score

38、,4,4) 队。 endl;return 0;char fwinner(int score4,int r,int c)int wins4=0,0,0,0;for (int i=0;ir;i+)for (int j=0;jscoreji)/比分较大的胜利winsi+;return max(wins,4);/求出四个中胜利次数最多的球队char mgoal(int score4,int r,int c)int goal4=0,0,0,0;for (int i=0;ir;i+)for (int j=0;jc;j+)goali=goali+scoreij;return max(goal,4);char

39、 ngoal(int score4,int r,int c)int ngoal4=0,0,0,0;for (int i=0;ir;i+)for (int j=0;jc;j+)ngoali=scoreij-scoreji+ngoali;/净胜球为入球数减去失球数return max(ngoal,4);char max(int result,int size)int max=0,maxi=0;for (int i=0;imax)max=resulti;maxi=i;switch (maxi)/根据下标判断队伍名称case 0:return A;case 1:return B;case 2:retu

40、rn C;case 3:return D;default:/防止发生错误return e;第八章1、说出下列语句中包含的指针类型char *cptr;/字符型指针const int *iptr;/整型常量指针float array4;/浮点型指针int *ipptr;/指向整型指针的指针2、分析下列函数原型中的参数和返回值情况int max(int *array,int size);/返回整型数,参数为整型指针和一个整型数char * str(const char *string1,const char *string2);/返回字符指针,参数为两个字符常量指针int main(char * argv);/返回空类型,参数为字符指针数组3、指出下列程序的错误之处#include iostream.hint main()int *iptr;/未经初始化,直接使用,较为合理的做法应该申请堆内存for (int i=0;iiptri;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论