C语言课后习题及答案讲解.doc_第1页
C语言课后习题及答案讲解.doc_第2页
C语言课后习题及答案讲解.doc_第3页
C语言课后习题及答案讲解.doc_第4页
C语言课后习题及答案讲解.doc_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

第一章一、选择题1.C/C+规定,在一个源程序中,main()函数的位置( )。CA.必须在最开始 B.必须在最后C.可以任意 D.必须在系统调用的库函数的后面2.以下()是C/C+合法的标识符。AA.char2 B.x C.int D.7Bw3.下面的程序,对于输入:2 9 15,输出的结果是( )。B#includeiostream.hvoid main()int a; float b;coutinput a,b:ab;couta+b=a+bb)&(n=cd)运算后,m、n的值分别是( )。BA.0,0 B.0,1 C.1,0 D.1,1二、把下列数学表达式写成C/C+表达式。1x+ya+b: (x+y)!=(a+b).2(ln10+xy)3:pow(log(10)+x*y),3)3:sin(w*u)/(cos(45*180/3.14)+3*pow(x,y)4:exp(3)+sqrt(2*x+3*y)5:fabs(x-y)+(x+y)/(3*x)6:1/(1/r1+1/r2+1/r3)三、根据下列条件写一个C/C+表达式。1a和b中有一个大于d:ad|bd2将x、y中较大的值送给z:z=xy?x : y3将直角坐标系中点(x,y)表示在第3象限内:x0&yz|y+zz|x+zy5将含有3位小数的实型变量x的值,四舍五入到百分位:(int)(x*100+0.5)/100.6d是不大于100的偶数:d0&d0)个人进行分班,每班k(0)个人,最后不足k人也编一个班,问要编几个班:n%k=0?n/k : n/k+1四、编程题:1 编程序求半径为r、高为h的圆柱体的体积。 #include iostream.hvoid main()float r,h,v;cinrh;v=3.1416*r*r*h;coutabc;ave=(a+b+c)/3;min=(ab)?a:b;min=(cmin)?c:min;coutave=ave min=minendl;3.将字符串“12”转换为整数12并输出。#include iostream.hvoid main()char c1=1,c2=2;int x;x=10*(c1-0)+c2-0;coutxx;c1=x/100;c2=x/10%10;c3=x%10;x=100*c3+10*c2+c1;coutxyear;x=year%400=0|year%4=0&year%100!=0;x!=0?coutyearis a leap year!: coutyearyear;x=(year%400=0|year%4=0&year%100!=0)?y: n;coutxx;y=log(x*x+3)/log(10)+3.14/2*cos(40*3.14/180);couty;第三章一、选择题1.为了避免嵌套的if else 语句的二义性,C/C+语言规定else总是与( )组成配对关系。CA. 缩排位置相同的if B.在其之前未配对的ifC. 在其之前未配对的最近的if D.同一行上的if2.设有函数关系为,下面( )选项不能正确表示上述关系。DA. if(x=0) B. y=1;if(x0)y=-1; if(x=0)else y=0; if(x=0) if(x!=0) if(x=0)y=0; if(x0)y=1; else y=1; else y=0;3.若有变量定义“int a=7;”,则下列语句组对应的输出结果是( )。D(该答案后还应附“其他值”)switch(a%5)case 0:couta+; case 1:cout+a; case 2:couta-; case 3:cout -a; default: cout”其他值”;A.其他值 B.5 C. 7 D.7 5其他值4.以下程序段中循环体语句“k+”执行的次数为( )。Cfor(k=0,m=4;m;m-=2)for(n=1;n4;n+)k+;A. 16 B.12 C.6 D.85.执行下面程序段后,变量k的值为( )。Bfor(k=0,m=1;m4;m+)for(n=1;n=0);8.若输入字符串“ABC”,下面程序段的输出为( )。Cchar c;while(cinc,c!=n)coumn;if(m0&n0)break;功能:输入两个正整数给m和n。(2)若有变量定于“int count=0,m=1;”,试写出下列语句组对应的输出结果。do if(m%5)continue; count+; while(+m=100);结果:20(3)#include”iostream.h”void main()int m,n(4),k;long int t,s=0;for(m=1;m=n;m+) for(t=1,k=1;k=m;k+) t*=m; s+=t;cout”s=”c,c!=.) if(c=a&cz) c+=1; if(c=z)c=a;cout=1;i-) coutsetw(i+5) ; for(j=1;j=4-i;j+) cout* ; coutendl; 输出:* * * * * *三、程序填空题:(1)下面的程序是检查输入的算术表达式中括号是否配对,并显示相应的结果。本程序边输入,边统计,以输入?作为表达式输入结束,然后显示结果。#include”iostream.h”void main()int count(0);char c;cout”请输入表达式,以输入?表示结束”c,c!=?)if(c=() count+; else if( ) count-; if( ) cout”左右括号配对”endl;else if ( )cout”左括号多于右括号”count”个”endl;elsecout” 右括号多于左括号” count”个”0 count(2) 用辗转相减法求两个正整数m和n的最大公约数。#include”iostream.h”void main()int m,n; ;while(m-n!=0) if(mn) ; else ;cout”gcd(m,n)=”mmn m=m-n n=n-m(3)求100的阶乘的末尾包含多少个0?程序通过找出1-100之间的所有整数中包含5这个因子的个数来求解。如100=5*5*4含5的因子个数为2,在求阶乘过程中会在末尾产生2个0。#include iostream.hvoid main()int m,n,k=0;for(m=5;m100;) ;while(n%5=0) k+; ; ;cout”100!include”k;填空结果:n=m n=n/5 m=m+5四、编程题:1.编一程序,实现下列分段函数的求值: #include iostream.h#include math.hvoid main()float x,y; coutinput x:x; if(x5) y=fabs(x); else if(x20) y=3*x*x-2*x+1; else y=x/5; coutx=x,y=yendl;2.按工资的高低纳税,已知不同工资s的税率p如下: s1000 p=0%1000s2000 p=5%2000s3000 p=8%3000s5000 p=10%5000s p=15%编一程序,输入工资数,求纳税款和实得工资数。#include iostream.hvoid main() float s,p,t,w; coutinput s:s; switch(int(s)/1000) case 0:p=0;break; case 1:p=0.05;break; case 2:p=0.08;break; case 3: case 4:p=0.1;break; default:p=0.15;break; t=s*p; w=s-t; cout纳税款=t,实得工资=wendl;3.编一程序,求1001000之间有多少个整数,其各个数位数字之和等于5?#include iostream.hvoid main()int m,count=0; for(m=100;m1000;m+) if(m%10+m/10%10+m/100=5) count+; coutcount=countendl;4.鸡兔共笼有30个头,90只脚,求鸡兔各有多少?#include iostream.hvoid main()int m,n; for(m=0;m=30;m+) for(n=0;n=30;n+) if(m*2+n*4=90&m+n=30) cout鸡:m兔:n1e-6;n+) t=(-1)*t; pi=pi+t/(2.0*n+1.0); pi=4*pi; coutpi=pi1e-6;n=n+2) t=(-1)*t; pi=pi+1.0*t/n; pi=4*pi; coutpi=piendl;6.编一程序,求出方程x2+2x=y3(其中1x100,1y100)的所有整数解。#include iostream.hvoid main()int x,y; for(x=1;x=100;x+) for(y=1;y=100;y+) if(x*x+2*x=y*y*y) coutx=x,y=yendl;7.输入一个英文句子(以句号结束),要求将句中单词分行打印,试编写符合上述要求的程序。#include iostream.h#include stdio.hvoid main()char ch; while(ch=getchar()!=.) if(ch= ) coutendl; else coutch;8.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,求1000以内满足该条件的数。#include iostream.h#include math.hvoid main()int m,k1,k2; for(m=0;m=1000;m+) k1=sqrt(m+100); k2=sqrt(m+100+168); if(k1*k1=m+100&k2*k2=m+100+168) coutm是满足条件的数0) x1=x; else x2=x;while(fabs(x2-x1)eps); coutx;第四章一、选择题1.下列数组定义语句中,正确的是( )。CA.int a3,4; B.int n=3,m=4,int anm;C.int a34; D.int a(3)(4);2.以下不能对二维数组a初始化的语句是( )。AA. int a2=1,2; B.int a23=1,2,3,4,5,6;C. int a23=1; D.int a23= 1,2;3.要使字符数组str中存放串”Lucky”并能正确处理,下列正确的定义语句是( )。CA.char str=L,u,c,k,y ; B. char str5=L,u,c,k,y ; C. char str=”Lucky”; D. char str 5= ”Lucky” ;4.已知有语句“int a34=1,2,5,3,2,4,7,9,3,6,5,8,*p=&a00;”,则表达式(*p+2)+*(p+2)的值应为( )。DA.10 B.5 C. 6 D.85.已知有语句“int a5=1,3,5,7,9,*p=&a3;”,则表达式p-1的值为( )。CA.表达形式不合法 B.值不确定 C.5 D.66.要比较两个字符数组a、b中字符串是否相等,下面正确的是( )。BA.a=b B.strcmp(a,b)=0 C. strcpy(a,b) D. strcmp(a,b)=07.下面正确的描述是()。AA.gets函数可以输入包括空格的字符串B.cin可以输入包含空格的字符串 C.使用gets函数不需要声明头文件:#include “stdio.h” D.使用gets函数必须需要声明头文件:#include “iostream.h”8.已知如下变量的定义“char s10,*p;”下列正确的语句是( )。BA.s=”asdfghj”; B.p=”asdfgh”; C.cins; D.p=s;cinp;二、读程序,写结果。1. #include”iostream.h”void main()char s =”1234567890”,*p;int i;for(p=s+5;*p!=0;p+)cout*p;p=s+4;i=0;while(i+5)coutmh;do ci+=m%h;while(m=m/h)!=0);for(-i;i=0;-i) n=ci;coutbn;结果是:43. #include”iostream.h”void main() int a =-2,3,0,-5,-4,6,9,*p=a,m,n; m=n=*p; for(p=a;pm)m=*p; if(*pn)n=*p;cout ”m-n=”m-n; 结果是:14三、程序填空题。1.利用一维数组显示Fibonacci数列的前20项,每行显示5个数,每个数宽度5位。即:0,1,1,2,3,5,8,13,如图所示。#include”iostream.h”#includeiomanip.hvoid main() int i; int x20= ; for(i=2;i20;i+) ; for(i=0;i20;i+) if(i%5=0)coutendl; cout ;coutendl; 填空为:(1)0,1(2)xi=xi-1+xi-2(3)setw(5)xi2.随机产生6个学生的分数(分数范围1100),存放在数组a中,以每2分一个*显示,如图所示。#includeiostream.h#includestdlib.hvoid main() int a6,i,j; for(i=0;i6;i+) ai= ; for(j=0; ;j+) cout*;cout aiendl; 填空为:(1)rand()%101 (2)jai/2(3)A(i)=3.下列程序将数组a中的每4个相邻元素的平均值存放于数组b中。#includeiostream.hvoid main() int a10,m,n; float b7; for(m=0;mam; for(m=0;m7;m+) ; for(n=m; ;n+) bm=bm+an; ; for(m=0;m7;m+)coutbm; 填空为:(1)bm=0(2)nm+4(3)bm=bm/44.下面程序按字母顺序比较两个字符串s1和s2的大小,若相等,则输出0;否则输出其第一个不相等的字符的ASCII编码差值。#includeiostream.hvoid main() char ch140,ch240,*s1=ch1,*s2=ch2; int r; ; ; while(*s1!=0& ) s1+;s2+; if(*s1=0&*s2=0) ; else r=*s1-*s2; coutThe result iss1(2) cins2 (3)*s1=*s2(4) r=05.已知数组a和b都是按由小到大顺序排列的有序数组,试将其合并后放入数组c中,使c也按由小到大的顺序排列。#define M 3#define N 3#includeiostream.hvoid main() int aM,bN,cM+N,j,k,l; for(k=0;kak; for(k=0;kbk; ; while(lM+N& ) if(ajbk) ; j+;l+; else ; while(lM+N& )cl+=bk+; while(lM+N& )cl+=aj+; for(l=0;lM+N;l+)coutcl;填空为:(1)j=k=l=0(2)jM&kN(3)cl=aj(4)cl+=bk+(5)kN(6)jM四、编程题。1.利用随机数生成两个矩阵(数据不一定相同,前者3070范围、后者101135)。 要求:(1)将两个矩阵相加结果放入C矩阵中。(2)统计C矩阵中最大值和下标。(3)以下三角形式显示A矩阵、上三角形式显示B矩阵。(4)将A矩阵第1行与第3行对应元素交换位置,即第1行元素放到第3行;第3行元素放到第1行。(5)求A矩阵两条对角线元素之和。(1)#include stdlib.h#include iostream.hvoid main()int a44,b44,c44,i,j; for(i=0;i4;i+) for(j=0;j4;j+) aij=rand()%41+30; for(i=0;i4;i+) for(j=0;j4;j+) bij=rand()%35+101; cout矩阵A的内容如下:n; for(i=0;i4;i+)for(j=0;j4;j+) coutaij ; coutendl; cout矩阵B的内容如下:n; for(i=0;i4;i+)for(j=0;j4;j+) coutbij ; coutendl; for(i=0;i4;i+) for(j=0;j4;j+) cij=aij+bij; cout矩阵C的内容如下:n; for(i=0;i4;i+)for(j=0;j4;j+) coutcij ; coutendl; (2)#include stdlib.h#include iostream.hvoid main()int a44,b44,c44,i,j,max,imax,jmax; for(i=0;i4;i+) for(j=0;j4;j+) aij=rand()%41+30; for(i=0;i4;i+) for(j=0;j4;j+) bij=rand()%35+101; cout矩阵A的内容如下:n; for(i=0;i4;i+)for(j=0;j4;j+) coutaij ; coutendl; cout矩阵B的内容如下:n; for(i=0;i4;i+)for(j=0;j4;j+) coutbij ; coutendl; for(i=0;i4;i+) for(j=0;j4;j+) cij=aij+bij; cout矩阵C的内容如下:n; for(i=0;i4;i+)for(j=0;j4;j+) coutcij ; coutendl; max=c00; for(i=0;i4;i+) for(j=0;jmax) max=cij; imax=i; jmax=j; coutmax=cimaxjmax=maxendl;(3)#include stdlib.h#include iostream.hvoid main()int a44,b44,i,j; for(i=0;i4;i+) for(j=0;j4;j+) aij=rand()%41+30; for(i=0;i4;i+) for(j=0;j4;j+) bij=rand()%35+101; cout矩阵A的主对角线以下元素内容如下:n; for(i=0;i4;i+)for(j=0;j=i;j+) coutaij ; coutendl; cout矩阵B的主对角线以上元素内容如下:n; for(i=0;i4;i+)for(j=i;j4;j+) coutbij ; coutendl; (4)#include stdlib.h#include iostream.hvoid main()int a44,i,j; for(i=0;i4;i+) for(j=0;j4;j+) aij=rand()%41+30; cout矩阵A的内容如下:n; for(i=0;i4;i+)for(j=0;j4;j+) coutaij ; coutendl; for(j=0;j4;j+)int t=a0j; a0j=a2j; a2j=t; cout改变后矩阵A的内容如下:n; for(i=0;i4;i+)for(j=0;j4;j+) coutaij ; coutendl;(5)#include stdlib.h#include iostream.hvoid main()int a44,i,j,s=0; for(i=0;i4;i+) for(j=0;j4;j+) aij=rand()%41+30; cout矩阵A的内容如下:n; for(i=0;i4;i+)for(j=0;j4;j+) coutaij ; coutendl; for(i=0;i4;i+) for(j=0;j4;j+) if(i=j|i+j=3) s=s+aij; cout对角线元素之和为:sendl;2.不使用strcpy()函数,用字符指针的形式将一个字符串的内容复制到另一个字符数组中。用字符数组实现#include stdio.hvoid main()int i;char s150,s220; gets(s1); for(i=0;s1i!=0;i+) s2i=s1i;s2i=0;puts(s2);用字符指针实现#include stdio.hvoid main()int i;char s150,*p1=s1,*p2; p2=new char20; gets(p2); while(*p2!=0) *p1+=*p2+; *p1=0;puts(s1);3.编一个程序,将一串字符逆序存放后输出。#include stdio.hvoid main() char s80,ch; int i,len=0; gets(s); while(slen!=0)len+; for(i=0;ich; for(i=j=0;si!=0;i+)if(si!=ch)sj=si;j+; sj=0; puts(s);第五章一、选择题1. 下列叙述错误的是_A_。 A. 主函数中定义的变量在整个程序中都是有效的 B. 复合语句中定义的变量只在该复合语句中有效 C. 其它函数中定义的变量在主函数中不能使用 D. 形式参数是局部变量2. 若函数的形参为一维数组,则下列说法中错误的是_B_。A. 形参数组可以不指定大小B. 函数调用时对应的实参只能是数组名C. 函数调用时,系统会为形参数组分配存储单元D. 函数中对形参的修改将会影响对应的实参值3. 若函数的类型和return语句中的表达式的类型不一致,则_D_。A. 编译时出错B. 运行时出现不确定结果C. 不会出错,且返回值的类型以return语句中表达式的类型为准D. 不会出错,且返回值的类型以函数类型为准4. 下面的函数定义正确的是_D_。A. float f(float x;float y) B. float f(float x,y) return x*y; return x*y;C. float f(x,y) D. float f( int x, int y) int x,y ; return x*y; return x*y;

温馨提示

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

评论

0/150

提交评论