C语言程序设计(夏敏捷)-天空教室第一章C++概述习题答案一、选择题1、C++源程序文件的扩展名是:______A).CPPB).CC).DLLD).EXE2、程序中主函数的名字为______。A)mainB)MAINC)MainD)任意标识符3、C++的合法注释是______。A)/*ThisisaCprogram/*B)//ThisisaCprogramC)“ThisisaCprogram”D)/ThisisaCprogram/4、C++程序从上机到得到结果的几个操作步骤依次是______。A)编译、编辑、连接、运行B)编辑、编译、连接、运行C)编译、运行、编辑、连接D)编辑、运行、编辑、连接答案:1A2A3B4B二、简答题1、C与C++语言的关系是什么?答案:C++包含了整个C,C是建立C++的基础。C++包括C的全部特征、属性和优点,同时添加了对面向对象编程(OOP)的完全支持。2、结构化程序设计与面向对象程序设计有什么异同点?答案:结构化的程序设计的主要思想是功能分解并逐步求精。面向对象程序设计的本质是把数据和处理数据的过程当成一个整体——对象。3、C++程序开发步骤:答案:建立一个工程;编辑或者导入源文件;编译源文件,产生目标代码;目标代码和其他库文件连接为可执行文件。运行可执行文件。第二章数据类型和表达式习题答案一、选择题(1)B(2)C(3)B(4)B(5)BD二、简答题1、下列变量名不合法的有哪些?为什么?A12-3、123、m123、_123、While答案:A12-3:变量名中不能有‘-‘符号123:变量名不能一数字开始_123、、While变量名合法。2、下列表达式不正确的有哪些?为什么?inta=’a’;charc=102;charc=abc;charc=’\n’;答案:charc=abc;是不正确的,因为abc是字符串不能赋值给字符变量。3、分析常量和变量的异同点?答案:常量是常数或代表固定不变值的名字,常量的内容初始化以后一直保持不变。变量的内容可以在运行过程中随时改变。变量要占用固定的内存地址,常量一般不占用内存,但是用const定义的常量也要占用内存。4、字符串ab\\\n在机器中占多少字节?答案:5个字节。分别是’a’;’b’;’\\’;’\n’;’\0’这五个字符。5、运算结果2.5。第三章C++流程控制习题答案一、选择题(1)C(2)A(3)D(4)C(5)C二、简答题1、C++语言中while和do-while循环的主要区别是_________。答案:do-while的循环体至少无条件执行一次2、过程化程序的有哪三种基本控制结构?答案:顺序结构、分支结构、循环结构3、C++用于构成分支结构的语句有哪些?构成循环结构的语句有哪些?答案:if…else和switch语句用于分支结构。for、while、do…while语句用于循环结构。4、以下程序执行的结果是什么?voidmain(){intx=3;docout(x-=2);while(!(--x));}答案:1-2三、编程题(部分习题)编程题3题:采购打折1000元以上者0.95折,2000元以上者0.9折,3000元以上者0.85折,5000元以上者0.8折。计算并输出优惠价?#includeiostream.hvoidmain(){floatb;inta;cout请输入原价:;cinb;a=b/1000;switch(a){case0:cout现价为:b*1.00endl;break;case1:cout现价为:b*0.95endl;break;case2:cout现价为:b*0.90endl;break;case3:case4:cout现价为:b*0.85endl;break;default:cout现价为:b*0.80endl;}}编程题4题求n!的程序格式如下:1:12:23:64:245:1206:720#includeiostream.h#includeiomanip.hvoidmain(){intn,k;doubles;for(n=1;n=6;n++){s=1.0;for(k=1;k=n;k++)s=s*k;coutn:setw(5)ssetw(5);if(n%3==0)coutendl;}}编程题61求.1+(1+2)+(1+2+3).....值?#includeiostream.hvoidmain(){intn,i,d,sum;sum=0;d=0;i=1;cinn;for(i=1;i=n;i++){d=d+i;sum=sum+d;}coutsum=sumendl;}编程题10题.迭代法求根号a。求平方根的公式为:xn+1=1/2(xn+a/xn),要求前后求出的x的差的绝对值小于10e-5。#includeiostream.h#includemath.hvoidmain(){doublea,x1,x2;;cina;x1=a;while(1){x2=(x1+a/x1)/2;if(fabs(x1-x2)1E-5)break;x1=x2;}coutx1;}第四章函数//P91四、编程题(1)编写一个函数,将华氏温度转换为摄氏温度。公式为C=(F-32)*5/9。#includeiostream.hfloatswap(floatx){floaty;y=(x-32)*(5.0/9);return(y);}voidmain(){floatf,p;cout请输入一个华氏f的值:endl;cinf;p=swap(f);coutpendl;}(2)求素数编写一个函数判断一个数是否为素数,并在主函数中通过调用该函数求出所有三位数的素数。方法一、采用返回BOOL型,true表示是素数,false表示不是素数#includeiostream.hboolPrime(intm){inti;boolflag;flag=true;for(i=2;i=m-1;i++)if(m%i==0){flag=false;break;}returnflag;}voidmain(){intn;for(n=100;n1000;n++){if(Prime(n)==true)coutnendl;}}方法二采用返回整型,1表示是素数,0表示不是素数#includeiostream.hintsh(intm){intx;intflag=1;for(x=2;xm;x++)if(m%x==0){flag=0;break;}return(flag);}voidmain(){inti;for(i=101;i=999;i++)if(sh(i))couti;}(3)编写一个递归函数求满足以下条件的最大数值n:1“+2”+。。。。+n“1000#includeiostream.hintgui_add(intsum,intn){sum=sum+n*n;if(sum1200)returnn;gui_add(sum,n+1);}voidmain(){cout满足条件的最大制值n:gui_add(0,1)endl;}//满足条件的最大制值n:14(4)编写一递归函数将所输入的5个字符按相反的顺序排列出来。(递归)#includeiostream.hvoidshuru(intn){charc;if(n==0)return;cinc;n--;shuru(n);//shuru(n-1);coutc;}voidmain(){shuru(5);}(5)使用函数重载的方法定义两个重名函数,分别求出整型数的两点间的距离和浮点型数的两点间距离。(6)求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0,等于0和小于0时的根,并输出结果。要求从主函数输入a,b,c的值。(7)编写一个函数,调用该函数能够打印一个由指定字符组成的n行金字塔。其中,指定打印的字符和行数n分别由两个形参表示。#includeiostream.h#includeiomanip.hvoidprint(intn,charp){inti,j;for(i=1;i=n;i++){coutsetw(20-i);for(j=1;j2*i;j++)coutp;coutendl;}}voidmain(){intm;charl;cout请输入行数:endl;cinm;cout请指定一个字符:endl;cinl;print(m,l);//不能coutprint(m,l);}(8)完数编写一个判断完数的函数。“完数”是指一个数恰好等于它的因子之和,例如6=1+2+3,6就是完数。#includeiostream.hbooljin(intn){ints=0,i;for(i=1;in;i++)if(n%i==0)s=i+s;if(s==n)returntrue;elsereturnfalse;}voidmain(){intn;cout请输入一个整数:;cinn;if(jin(n)==true)coutn是完数endl;elsecoutn不是完数endl;}(9)编写一个将十进制数转换为二进制数的函数。(递归)#includeiostream.hvoidconvert_to_B(intn){if(n==0)return;elseconvert_to_B(n/2);coutn%2;}voidmain(){intn;cout请输入一个10进制数:;cinn;cout转换后的2进制数为:;convert_to_B(n);coutendl;}(10)编写一个函数,功能为求两个最大公约数,最小公倍数函数#includestdio.h。intf(intx,inty)//最大公约数函数{intt;if(xy){t=x;x=y;y=t;}while(y!=0){t=x%y;x=y;y=t;}returnx;}intg(intx,inty)//最小公倍数函数{intt;t=f(x,y);return(x*y/t);}main(){inta,b,max,min;scanf(%d%d,&a,&b);max=f(a,b);min=g(a,b);printf(%3d%3d,max,min);}第五章作用域和存储类型习题答案一、选择题(1)A(2)D(3)D二、简答题1、答案:作用域是标识符在程序中有效的范围。C++作用域有:(1)局部(块)作用域(2)函数作用域(3)函数原型作用域(4)文件作用域(5)类作用域2、答案:auto、register、extern、static存储类型。3、答案:他们在存储位置、初始化、生存期、作用域上有所不同。全局变量在全局数据区分配空间,默认值为0,生存期为整个程序运行期间;局部变量:在栈区分配空间,没有赋初值时为随机数,在定义他的函数调用结束时,局部变量随之消失。静态局部变量在全局数据区分配空间,默认初值为0,只被初始化一次,函数结束不消失,程序结束消失,生存期为整个程序运行期间。静态全局变量只能被定义它的文件使用,其他文件不能使用。外部全局变量不仅可以被定义它的文件使用,其他文件也能使用。三、阅读题1.运行结果02102.运行结果MAIN:511FUNC:62111MAIN:5111FUNC:83121第六章数组参考答案:一、选择题1、A2、C3、C4、B5、B二、程序填空1、b(m)=0.0nm+42、cin.getline(ch2,40);ch1[j]==ch2[j]03、k=0;j=0;l=0;kM&&jNc[l]=a[j]c[l]=b[k]kMjN三、阅读程序,写出运行结果1、sum=-572、213、BBNamEbyeB4、Youareateach