清华大学出版社刘志海版C程序设计与案例分析习题参考答案.doc_第1页
清华大学出版社刘志海版C程序设计与案例分析习题参考答案.doc_第2页
清华大学出版社刘志海版C程序设计与案例分析习题参考答案.doc_第3页
清华大学出版社刘志海版C程序设计与案例分析习题参考答案.doc_第4页
清华大学出版社刘志海版C程序设计与案例分析习题参考答案.doc_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

习 题 11.1 C语言的主要优点有哪些?它与其他程序设计语言的区别是什么?答:(略)1.2 什么是程序?程序设计的目的是什么?程序设计的步骤有哪些?答:(略)1.3 简要叙述C程序的上机调试过程。答:(略)1.4 冯诺依曼结构指的是什么?计算机有哪些组成部分?各部分的功能是什么?答:(略)5. 改写例1.3的程序,求三个数的最大值。#include stdio.hint max(int a, int b,int c); void main()int a,b,c,d;printf(input two numbers:);scanf(%d%d,&a,&b); d=max(a,b,c); printf(max value=%dn,d);int max(int a, int b,int c) int d;if(ab)d=a;elsed=b; if(dc) printf(“max value=%dn”,d); else printf(“max value=%dn”,d);return(d); 习 题 22.1 简答题(1)C语言为什么要规定对所有用到的变量要“先定义,后使用”?这样做有什么好处?答:凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确; 每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元;指定每一变量属于一个类型;这就便于在编译时;据此检查该变量所进行的运算是否合法。(2)下列符号中,你可以选用哪些做标识符?哪些不可以?为什么?Look3 page35 -b if next_ e_2 OK? i*j $答:可用作标识符的是:Look3、page35、next_、e_2;其余的不可以,因为标识符是由字母或下划线开始的,由字母、下划线、数字组成的字符串,另外,关键字是不能够作为标识符的。(3)字符常量与字符串常量有什么区别?答:在C语言当中,通过“0”这个特殊字符作为判断字符串结尾的标志,所以,即使一个空字符串,也要占用一个字符;另外,值得注意的是,在字符串中“0”这个字符是不显示的。而字符常量在内存空间中,只占用一个字节的空间来存放字符说对应的ASCII码值。2.2 填空题(1)下面程序的运行结果是 。#include void main( ) char a=2,b=a; int c; c=a+b; a=c; printf(%d,%d,%dn,a,b,c); printf(%c,%c,%cn,a,b,c);运行结果为:99,97,99 c,a,c(2)求下面算术表达式的值。 设x=2.5,a=7,y=4.7,表达式x+a%3*(int)(x+y)%2/4的值是 2.500000 。 设a=2,b=3,x=3.5,y=2.5,表达式(float)(a+b)/2+(int)x%(int)y的值是 3.500000 。2.3 编程题(1)要将“China”译成密码,密码规律是,用原来的字母后第4个字母代替原来的字母。例如,字母a后面第4个字母为e。因此,“China”应译为“Glmre”。请编写程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为C、h、i、n、a,经过运算,使c1、c2、c3、c4、c5分别变为G、l、m、r、e,并输出。答:#include void main()char c1=C,c2=h,c3=i,c4=n,c5=a;c1=c1+4;c2=c2+4; c3=c3+4;c4=c4+4; c5=c5+4;printf(“%c%c%c%c%cn”,c1,c2,c3,c4,c5);(2)从键盘输入一个小写英文字母,将其转换成大写字母输出结果。如小写字母c,转换成大写字母时用小写字母的ASCII-32即可。答:#include void main()char c;scanf(“%c”,&c);if(ca&cz)c=c-32;printf(“%c”,c);(3) 改写例2.6程序,查看一个基本整型int数字在内存的存储。#include void main() int n=10; int *p=(int *)&n + 3; for(int i=0;i=3;i+) printf(%X ); for(int j=0;j(7-j) & 0x01); printf(n); p-; 习 题 33.1 单项选择题(1)若有说明语句char c=72;,则变量c( A )。A包含1个字符 B包含2个字符 C包含3个字符 D说明不合法,c值不确定(2)下列数据中属于“字符串常量”的是( B )。AABCB“ABC”CABCD.A(3)C语言中,运算对象必须是整型的运算符是( B )。A/B%C+D-(4)若有以下定义:char a; int b; float c; double d;则表达式a*b+d-c值的类型为( D )。AfloatBintCcharDdouble(5)执行语句“x=(a=3,b=a-)”后,x,a,b的值依次是( C )。A3,3,2B3,2,2C3,2,3D2,3,2(6)若有代数式3ae/bc,则不正确的C语言表达式是( C )。Aa/b/c*e*3B3*a*e/b/cC3*a*e/b*cDa*e/b/c*3(7)设整型变量n的值为2,执行语句“n+=n-=n*n;”后,n的值是( C )。A0B4C-4D2(8)已知a=5,b=8,c=10,d=0;表达式的值为真的是( D )。Aa*28+2Ba&dC(a*2-c)|dDa-bc4)后,s,t的值为( D )。A1,2B1,1C0,1D1,0(11)设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是( A )。A(!a=1)&(!b=0);B(a=Y=Z C(X=Y)(Y=Z)D(X=Y)&(Y=Z)(13)表达式 (int)3.6*3的值为( A )。A9B. 10C. 10.8D. 18(14)以下语句的输出结果是( D )。int a=-1,b=4,k;k=(+a0)&!(b-0?p/10:p%3); (7)设y是int型变量,请写出判断y为奇数的关系表达式 (y%2) = =1 。习 题 44.1 单项选择题(1)若以下选项中的变量已正确定义,则正确的赋值语句是_C_。Ax1=26.8%3B1+2=x2Cx3=0x12Dx4=1+2=3;(2)以下程序输出结果是_D_。void main()int a=0,b=0,c=0,d=0;if(a=1) b=1;c=2;else d=3;printf(%d,%d,%d,%dn,a,b,c,d);A0,1,2,0B0,0,0,3C1,1,2,0D编译有错(3)与while(E)中的(E)不等价的表达式是( C )。A(!E=0)B(E0E0) C(E=0)D(E!=0)(4)以下程序段的输出结果是 A 。void main() int x=3; do printf(%3d,x-=2); while(!(- -x);A1B3 0C1 -2D死循环 (5)执行下面程序后,a的值为 B 。#include void main() int a,b; for(a=1,b=1; a=20) break; if(b%3=1) b+=3; continue; b-=5; printf(%d,a);(6)下面程序输出的是 B 。#include void main() int y=9; for( ; y0; y-) if(y%3=0) printf(%d,-y); continue; A741B852C963D875421(7)以下程序的输出结果是 A 。#include void main() int i; for(i=1;i=5;i+) if(i%2) printf(*); else continue; printf(#); printf($n);A*#*#*#$B#*#*#*$C*#*#$D*#*#*$(8)以下程序的输出结果是 D 。#include void main()int k=4,n=4; for( ; nk ; ) n+; if(n%3!=0) continue; k-; printf(%d,%dn,k,n);A1,1B2,2C3,3D4,44.2 编程题(1)已知华氏温度与摄氏温度的转换公式为:C=(F-32)*5/9,编写程序,当输入华氏温度F时,输出对应的摄氏温度。答:#includevoid main()float c,f;scanf(“%f”,&f);printf(“%f”,c=(f-32)*5/9);(2)请为如下分段函数编写程序,当输入一个x值,计算输出y的数值:答:#includevoid main()int x,y;scanf(“%d”,&x);if(x=1)y=x;else if(x10)y=2*x-1; else y=3*x-11;printf(“y=%d”,y);(3)输入一个字符, 试编程判断是字母、数字还是特殊字符。答:#includevoid main()char c;scanf(“%c”, &c);if(c=0&c=a&c=A&c=Z)printf(“字母”);else printf(“数字”);(4)编写程序,从键盘输入一个字符,若为大写则转换为小写输出,若为小写则转换为大写输出,其他输入则输出Error。答:#includevoid main()char c;scanf(“%c”, &c);if(c=a&c=A&c=Z)printf(“%c”,c+32);else printf(“Error”);(5) 输入一个不大于整型数最大值(2147483647)的整数,判断是几位数字,然后输出各位数字之和。#include int main()int num, sum=0, count=0;printf(输入一个整数:);scanf(%d, &num);while (num0)sum+=num%10;count+;num=(num-num%10)/10;printf(位数:%dn, count);printf(各位之和:%dn, sum);return 0;(6)输入整数x,y和z,若x2+y2+z2大于1000,则输出x2+y2+z2的值,否则输出x+y+z的值。#includevoid main()int x,y,z;scanf(%d,%d,%d,&x,&y,&z);if(x*x+y*y+z*z1000)printf(%dn,x*x+y*y+z*z);elseprintf(%dn,x+y+z);(7)百元百鸡问题:现有一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少只?#includevoid main() int x,y,z; for(x=1;x=20;x+) for(y=1;y=33;y+) z=100-x-y; if(z%3=0)&(5*x+3*y+z/3=100) printf(%d,%d,%dn,x,y,z); (8)输出1-100之内的所有勾股数,即两个数的平方和等于第三个数的平方。#include void main ()int x,y,z;for(x=1;x=100;x+)for(y=1;y=100;y+)for(z=1;z=100;z+) if(x*x+y*y-z*z=0) printf(%d,%d,%dn,x,y,z); (9)编程序按下列公式计算e的值(精度为1e-6)。e=1+1/1!+1/2!+1/3!+1/n!答:#include#includelong ni(int x1) long x2=1; int i; for(i=1;i=1e-6); printf(e=%fn,t); (10)编程计算下列表达式:s=1!+2!+3!+4!+10!答:#includevoid main()long fac(int n);int i;long sum=0;for(i=1;i=10;i+)sum=sum+fac(i);printf(“s=1!+2!+3!+4!+10!=%ld”,sum);long fac(int n)static long f=1;f=f*n;return(f);(11) 利用公式求的近似值. 答: #include#includeint main()int sign=1;double pi=0.0,n=1.0,term=1.0;while(fabs(term)=1e-6)pi=pi+term;n=n+2;sign=-sign;term=sign/n;pi=pi*4;printf(pi=%10.8fn,pi);return 0;(12)编程输出满足以下条件的所有三位整数:该数的各位数字的阶乘之和等于该数本身。如:153=1!+5!+3!。#includevoid main()int jiech(int k);int a,b,c,i;for(i=100;i=999;i+)a=i/100;b=i%100/10;c=i/10;if(i=jiech(a)+jiech(b)+jiech(c)printf(%4dn,i);jiech(int k)int n=1,m=1;while(n=k)m=m*n;n+;return (m);(13)编程实现正弦函数,输入一个角度数值,输出对应的正弦数值,已知正弦函数的展开公式为:答:#includefloat fun(float,int);float sin(int,float);float term(int);void main() int n; float x; printf(“请输入n,x值:n”); scanf(“%d”,&n); scanf(“%f”,&x); printf(“sin(%f)=%f”,x,sin(n,x);float sin(int n,float x) int i; float s=0.0; for(i=1;i=n;i+) s+=fun(-1.0,i-1)*fun(x,2*i-1)*term(2*i-1); return (s);float fun(float x,int n) int i; float p=1.0; for(i=0;in;i+) p=p*x; return(p);float term(int n) int i; float q=1.0; for(i=1;i=n;i+) q/=i; return (q);(14) 输入十进制整数,将其转变为十六进制数输出。#include#includevoid main()int a;scanf(%d,&a);printf(%x,a);getch();(15)将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。#includevoid main() int n,i; printf(please input a number:); scanf(%d,&n); printf(%d=,n); for(i=2;i=n;i+) while(n!=i) if(n%i=0) printf(%d*,i); n=n/i; else break; printf(%dn,n); (16) 编程输出Fibonacci数列的前20项的数值,Fibonacci数列格式为:1 1 2 3 5 8 13 21 ,即从第三项开始,其值为前两项的和。#includevoid main() int f1=1,f2=1,f3;int i;printf(%d,%d,f1,f2);for(i=1;i=10000)printf(input error!);return;m=(int)x; /整数部分k=(int)(x*100-m*100); /小数部分if(x0.01)printf(零圆零角零分n);return;/-处理整数部分-n=10000,j=1000;for(i=1,b=0;i0 & f=0) /自首个不为零数字开始f=1;if(f=1)switch(t)case 0:if(a=0 )printf(零); if(b=2) /连续两个零则删除后一个零printf(bb);break;case 1:printf(壹); break;case 2:printf(贰); break;case 3:printf(叁); break;case 4:printf(肆); break;case 5:printf(伍); break;case 6:printf(陆); break;case 7:printf(柒); break;case 8:printf(捌); break;case 9:printf(玖); break;switch(i)case 1:if(t0) printf(仟); break;case 2:if(t0)printf(佰); break;case 3:if(t0)printf(拾); break;case 4:printf(圆); break;/-处理小数部分-if(k=0)printf(整n);return;n=100,j=10;for(i=1,f=0;i0 & f=0) /自首个不为零数字开始f=1;if(f=1)switch(t)case 0:if(i=1)printf(零); break;case 1:printf(壹); break;case 2:printf(贰); break;case 3:printf(叁); break;case 4:printf(肆); break;case 5:printf(伍); break;case 6:printf(陆); break;case 7:printf(柒); break;case 8:printf(捌); break;case 9:printf(玖); break;if(i=1)printf(角);elseif(t0)printf(分);习 题 55.1 单项选择题(1)以下对一维数组a的正确说明是( D )。Achar a(10); Bint a ;Cint k=5,ak; Dchar a =a , b , c;(2)以下正确的数组定义语句是( D )。Achar a5=1, 2, 3, 4, 5, 0;Bint b2 =1, 2;Cfloat c 3=1, 2, 3, 4, 5;Dchar d5=CHINA;(3)不能把字符串Hello!赋给数组b的语句是( B )。Achar b10=H,e,l,l,o,!;Bchar b10; b=Hello!;Cchar b10; strcpy(b,Hello!);Dchar b10=Hello!;(4)若有如下定义和语句,能实现对数值为3数组元素的引用的是( A )。int a=1,2,3,4,5,*p=a;A*(a+2)Bap-3Cp+2Da+3(5)若有定义int a10,*p=a;,则p+5表示( C )。A元素a5的地址B元素a5的值 C元素a6的地址D元素a6的值(6)以下程序运行后的输出结果是( C )。void main()char a7=a00a00; int i,j;i=sizeof(a); j=strlen(a);printf(%d %dn,i,j); A2 2B7 6C7 2D6 2(7)若已定义:int a =0,1,2,3,4,5,6,7,8,9, *p=a,i;其中0i9,则对a数组元素不正确的引用是( D )。Aap-aB*(&ai)CpiDa10(8)定义如下变量和数组:int k;int a33=1,2,3,4,5,6,7,8,9;则下面语句的输出结果是( A )。for(k=0;k3;k+) printf(%d,ak2-k);A3 5 7B3 6 9C1 5 9D1 4 7 (9)有以下程序#include stdio.h#include string.hvoid main() char a =a,b,c,d, e, f, g,h,0; int i,j; i=sizeof(a); j=strlen(a);printf(%d,%dn,i,j); (10)下面程序的运行结果是( B )。#include stdio.hvoid main( ) int x5=1, 2, 3, 4, 5, *p=x, *q;q=&p;printf(%d, , *(p+) );printf(%dn, *q);A1, 1 B1, 2 C2, 2 D2, 3程序运行后的输出结果是( D )。A9,9B8,9C1,8D9,85.2 编程题(1) 从键盘输入一个字符串,去掉所有非十六进制字符后转换成十进制数输出。#include void main() char str10,hex10; int i,n=0,x=0; gets(str); for(i=0;stri!=0;i+) if(stri=0&stri=a&stri=A&stri=0&hexi=a&hexi=A&hexi=F) x=x*16+hexi-A+10; printf(转换为十进制是:%dn,x);(2)有n个人围成一个圆圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号?#include void main()int i = 0; int n = 0; int out = 0; int num = 0; int a1024 = 0; printf(Input n:); scanf(%d, &n); for (i = 0; i n; i+) ai = 1;i = 0; while (out != n-1) if (ai = 1) num+; if (num = 3) ai = 0; num = 0; out+; i+; if (i = n) i = 0; for (i = 0; i n; i+) if (ai = 1) printf(最后留下的人是%d号.n, i+1); break; (3)从键盘输入任意长度由0、1组成的二进制字符串,实现向十进制的转换并输出结果。答:#includevoid main()int c,sum=0;while(c=getchar()!=EOF)if(c=1)sum=1+sum*2;else sum=sum*2;printf(“%d”,sum);(4)编程输入10个学生5门课程的成绩,实现: 计算每个学生的平均分; 计算每门课程的平均分; 计算平均方差:,其中xi为第i个学生的平均分。答:#include#define N 10#define M 5float scoreNM;float a_stuN,a_courM;int r,c;void main()int i,j;float s_var(void);void input_stu(void);void aver_stu(void);void aver_cour(void);input_stu();aver_stu();aver_cour();printf(“n No. cour1 cour2 cour3 cour4 cour5 avern”);for(i=0;iN;i+)printf(“No.%2d”,i+1);for(j=0;jM;j+)printf(“%8.2f”,scoreij);printf(“%8fn”,a_stui);printf(“naverage:”);for(j=0;jM;j+)printf(“%8.2f”,a_courj);printf(“n”);printf(“variance%8.2fn”,s_var();void input_stu(void)int i,j;for(i=0;iN;i+)printf(“ninput score of student%2d:n”,i+1);for(j=0;jM;j+)scanf(“%f”,scoreij);void aver_stu(void)int i,j;float s;for(i=0;iN;i+)for(j=0,s=0;jM;j+)s+=scoreij;a_stui=s/5.0;void aver_cout(void)int i,j;float s;for(j=0;iM;j+)s=0;for(i=0;iN;i+) s+=scoreij;a_coutj=s/(float)Nfloat s_var(void)int i;float sumx,sumxn;sumx=0;sumxn=0;for(i=0;iN;i+)sumx+=a_stui* a_stui;sumxn+= a_stui;return(sumx/N-(sumxn/N)*(sumxn/N);(5)有如下数组:int a10=1,2,3,4,5,6,7,8,9,10;编写程序,将该整型数组中的各元素按相反顺序存放(不使用辅助数组)。答:#includevoid main()int a10=1,2,3,4,5,6,7,8,9,10;int i,t;for(i=0;i5;i+)t=ai;ai=a9-i;a9-i=t;for(i=0;i10;i+)printf(“%dn”,ai);(6)不用strcat函数,利用数组编写两个字符串连接的程序。答:#include#includevoid main() char a40,b20; int i,len1;gets(a);gets(b); for(i=0;ai!=0;i+);len1=i;for(i=0;bi!=0;i+)ai+len1=bi;ai+len1=0;for(i=0;ai;i+)printf(“%c”,ai); (7)从键盘上输入10个评委的分数,去掉一个最高分,去掉一个最低分,求出其余8个人的平均分并输出平均分、最大值和最小值。答:#includevoid main()float a10,max,min,aver,sum=0;int i;printf(“请输入十个评委的分数:”);for(i=0;i10;i+)scanf(“%f”,&ai);max=min=a0;for(i=0;imax)max= ai; if(aimin)min= ai;sum=sum+ai;printf(“n平均分、最大值、最小值分别是%f,%f,%f”,(sum-max-min)/8,max,min);(8)已知一个整型数组X4,它的各元素值分别为3、11、8、22。使用指针表示法编写程序,求各数组元素之积。答:#includevoid main()int x4=3,11,8,22;int * p=x,i,t=1;for(i=0;i4;i+)t=t*pi;printf(“各元素之积为:%d”,t);(9) 编程实现两个矩阵的乘积,并输出结果。#include stdio.h void main() int a23=1,2,3,4,5,6,b32=9,8,7,6,5,4,i,j,k,c22

温馨提示

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

评论

0/150

提交评论