C语言习题答案(人民邮电-第2版)(全)打印版.doc_第1页
C语言习题答案(人民邮电-第2版)(全)打印版.doc_第2页
C语言习题答案(人民邮电-第2版)(全)打印版.doc_第3页
C语言习题答案(人民邮电-第2版)(全)打印版.doc_第4页
C语言习题答案(人民邮电-第2版)(全)打印版.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

C语言习题答案第1章1选择题12 345CBABD2填空题(1)main (2) main (3) 有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性(4) 顺序、分支和循环(5) 自顶向下,逐步细化、模块化设计、限制使用goto语句第2章1选择题12 345 67 890 12 34 5ACCDA DDBBA BBACB 2、填空题 (1) 数字、字母、下划线 (2)0 (3) 4、8 (4) (a+b)*c/(a-b) (5) 60 (6)16(7)9 (8)6、4、2 (9)0 (10)10、6 (11)12、4 (12)5.500000(13) 0 (14)16 (15)6.63、编程题(1)编写一个程序求各种类型数据的存储长度。#include main()printf(int:%d byten,sizeof(int);printf(short int:%d byten,sizeof(short int);printf(long int:%d byten,sizeof(long int);printf(float:%d byten,sizeof(float);printf(double:%d byten,sizeof(double);printf(long double:%d byten,sizeof(long double);printf(char:%d byten,sizeof(char);(2)#include #define RAT 1.60934main()float k;printf(input the km:);scanf(%f,&k);printf(mile:%fn,k/RAT);第3章1选择题 12 345 67 890(1) (10):DDCDD DCDCC 2解析题(1) x=170,x=170,x=252,x=aa,x=170 x=170,x=170,x=170,x=%6d a=513.789185,a=513.79,a=513.78918457,a=513.78918457(2) a=3b=7x=8.5y=71.82c1=Ac2=a3编程题(1)main() int x,y; scanf(%d%d,&x,&y); printf(商数=%d,余数=%d,x/y,x%y); (2)main() double x,y,z,avg; scanf(%lf%lf%lf,&x,&y,&z); avg=(x+y+z)/3; printf(%.1f,avg);第4章 1选择题(1)(10) CCAAD CCABD 2填空题(1)a0&b0|a0&c0|b0&c0ab|a5|-a5(a0) 1 !(x=0&x=A&ch=Z ch=ch-32(5) x2 x-1 y=-1 ;(6) a+bc&a+cb&b+ca a=b&a=c a=b|a=c|b=c(7) x0 c=x/10 y!=-23编程题(1)#include main() int x; printf(please input a number:); scanf(%d,&x); if(x%2=0) printf(x is a even number); else printf(x is a odd number);(2)#include main() int x,y; printf(please input a number:); scanf(%d,&x); if(x-5 & x0 & x10) y=x+1; printf(%d,y); else printf(the number is error);(3)#include main() int a,m; printf(please input a number:); scanf(%d,&a); switch(a/10) case 0: case 1: case 2:m=1;break; case 3:m=2;break; case 4:m=3;break; case 5:m=4;break; default:m=5;break; printf(%d,m);(4)#include main() float price,tax; printf(please input the price of product:); scanf(%f,&price); if(price=10000) tax=price*0.05; else if(price=5000) tax=price*0.03; else if(price=1000) tax=price*0.02; else tax=0; printf(%f,tax);(5)#include main() float score; printf(please input the score of student:); scanf(%f,&score); if(score=85) printf(VERY GOOD); else if(score=60) printf(GOOD); else printf(BAD);(6)# include main () int x,y,z;printf(input two number:);scanf(%d%d,&x,&y);if(x99 | y99)printf(input data error!n);elsez=(x/10)*1000+(y/10)*100+(x%10)*10+y%10; printf(%dn,z);第5章1选择题(1)d (2) c (3)a (4)d (5)a (6)d (7)d (8)b (9)d (10)b(11)c (12)a (13)d (14)d (15)c2填空题(1) fahr celsius=5.0/9*(fahr-32) fahr+=step (2) 5、4、6 (3) 3*i-2(4) y- z*=x (5) 852 (6) j+ i%j=0 j=i(或j=i) (7)sumk sum=k j-2 (8) s=0 p=1 j=i 3改错题 (1) 第一处改正: For改为for 第二处改正:for(k=1;k=4;k+)或for(k=0;k=eps第三处改正:r*2(4) 第一处改正:&n第二处改正:= =(5) 第一处改正:t=m/10改为t=m%10第二处改正:t=0改为t=0第三处改正:m=m%10改为m=/104编程题(1) 分式累加和。#include main()int s;float n,t,sum;t=1; sum=0; n=1; s=1.0;while(n=100) sum=sum+t; n=n+1; s=-s; t=s/n;printf(sum=%10.6fn,sum);(2)110的阶乘#include main() int i; long int n=1; for(i=1;i=10;i+) n=n*i; printf(i%5=0?%2d!=%-10ldn:%2d!=%-10ld,i,n); (3)由*组成的等腰三角形#include main() int n,i,j; scanf(%d,&n); for(i=1;i=n;i+) for(j=1;j=n+i-1;j+) if(j=n-i) printf( ); else printf(*); printf(n); (4)完数main() int m,s,i; for(m=2;m1000;m+) s=0; for(i=1;im;i+) if(m%i)=0) s=s+i; if(s=m) printf(%d its factors are ,m); for(i=1;im;i+) if(m%i=0) printf(%d,i); printf(n); (5)打靶#include main() int h10,h7,h5; for(h10=0;h10=8;h10+) for(h7=0;h7=8;h7+)for(h5=0;h50) x1=(x2+1)*2; /*第一天的桃子数是第2天桃子数加1后的2倍*/ x2=x1; day-; printf(thetotalis%dn,x1); /代码二main() int i=9,sum=1; for(; i0; sum=2*(sum+1),i-); printf( sum=%dn ,sum); (7)牛顿迭代法一般地:f(x)=a0xn+a1xn-1+.+an-1x+an=0 求f(x)在X0附近的根 计算公式:Xn+1=Xn-f(Xn)/f(Xn) 精度:= |Xn+1-Xn|1.0e-m,m=5。 所求的根:满足精度的Xn#include #includemain() float x,x0,f,f1; x=1.5; /可改为scanf(%f,&x);do x0=x; f=2*x0*x0*x0-4*x0*x0+3*x0-6; f1=6*x0*x0-8*x0+3; / f的导数,即它的切线 x=x0-f/f1; / 切线与x轴的交点 while(fabs(x-x0)=1e-5); printf(The root is %8.7fn,x); (8) 利用辗除法,直到b为0为止main() int p,r,n,m,temp; printf(input two integer n,m:); scanf(%d,%d,&n,&m); if(nm) temp=n; n=m; m=temp; p=n*m; while(m!=0) r=n%m; n=m; m=r; printf(greatest common divisor is:%dn,n); /最大公约数 printf(lease common multiple is:%dn,p/n); /最小公倍数第6章1选择题12 3 4 5 67 8 90CCDCC AADBD2. 写出程序的运行结果(1) sum=6 (2) Max=9,row=1,col=0 (3) 01 02 1 03 2 1 0(4) -53、填空(1)i=j=k=0 i4&j=5 j0 n%10+0x30或n%10+0 sj=0(4)si 、 s0,s1 、str,s1、s2,str4.改错题(1) 第一处改正:n=strlen(str)第二处改正:strj= 第三处改正:strj!= (2)第一处改正:ch=stri第二处改正:(j=0) & (chstrj) (3) 第一处改正:s1i!=0第二处改正:j=0; (4)第一处改正:cnt=0第二处改正:if(!(m%i)第三处改正:icnt5. 编程题(1)VC提供的int rand(void)产生的实际上是032767(short型的最大数)的伪随机数,伪随机数总是以一个相同的数为起始值(种子),运用递推的原理来生成的。所以,如果只使用rand函数,每次运行所形成的伪随机数列也相同,失去了随机意义。但这样便于程序调试。VC的rand()函数默认以1为种子。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。VC提供的void srand(unsigned int seed)将seed作为种子,如果以time函数值(即当前时间)作为种子数,那么就可以保证随机性了,因为两次调用rand函数的时间通常是不同的。也可以使用srand函数来人为指定种子数。若要产生之间的一个随机数,则可用a + rand() % (b-a+1)表示。若要01的小数,则可以先取得010的整数,然后均除以10即可得到随机到十分位的10个随机小数;若要得到随机到百分位的随机小数,则需要先得到0100的整数,然后均除以100,其它情况依此类推。 #include #include #include main()int a12,count=0,i;srand(unsigned) time(NULL);for (i=0;i12;i+)ai=5+rand()%11;for(i=0;i12;i+)printf(%5d,ai);count+;if(count%4=0)printf(n) ;(2)#include #define N 5main()int aN,max,min,i,sum=0,count=0;float av;for(i=0;iN;i+)scanf(%d,&ai);max=min=a0;for(i=0;imax)max=ai;if(aimin)min=ai;av=(float)sum/5;for(i=0;iav)count+;printf(max:%dnmin:%dnav:%fncount:%d,max,min,av,count); (3)#include main()int score30; /*=61,62,63,64,65,66,67,68,69,70, 71,72,73,74,75,76,77,78,79,80, 81,85,89,90,33,44,55,91,92,93; /不必赋初值,这是为调试程序方便*/int i,count90=0,count80=0,count70=0,count60=0;for(i=0;i30;i+)printf(intput NO. %d students score:,i+1);scanf(%d,score+i);for(i=0;i=90)count90+;count80+;count70+;count60+;else if(scorei=80)count80+;count70+;count60+;else if(scorei=70)count70+;count60+;else if(scorei=60)count60+;printf(059:%dn6069:%dn7079:%dn8089:%dn90100:%d,30-count60,count60-count70,count70-count80,count80-count90,count90);printf(n60 or higher:%dn70 or higher:%dn80 or higher:%dn90 or higher:%dn,count60,count70,count80,count90);(4)1、#include main()char a45;int i,j,k;for(i=0;i45;i+)ai= ;for(i=0;i5;i+)for(j=0;ji;j+)a9*i+j= ;for(k=0;k5;k+)a9*i+j+k=*;j=0;for(i=0;i45;i+)printf(%c,ai);j+;if(j%9=0)printf(n);2、#include main()char a59;int i,j,k;for(i=0;i5;i+)for(j=0;j9;j+)aij= ;for(i=0;i5;i+)for(j=0;ji;j+)aij= ;for(k=0;k5;k+)aij+k=*;for(i=0;i5;i+)for(j=0;j9;j+)printf(%c,aij);printf(n); (5)# include # define N 4main() int i,j,aN=21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10; printf(nThe original array:n); for(i=0;iN;i+) for(j=0;jN;j+) printf(%2d ,aij); printf(n); for(i=1;iN;i+) for(j=0;ji;j+) aij=aij+aji; aji=0; printf(nThe result is:n); for(i=0;iN;i+) for(j=0;jy?x:y) (8)*#*#*#*(9) str =abdef (10) low=high (high+low)/23.改错题(1)第一处:void改为int第二处:i=n & (n%i=0)改为i=n & (n%i!=0)或in & (n%i!=0)第三处:n!=i改为n=i(2)第一处:删除;第二处: for(j=1; j=50; i+)改为 for(j=1; j=1e-6)改为if(fabs(x1-x0)=1e-6)4 、编程题(1) #include long act(long n)if (n=1|n=0) return 1;elsereturn n*act(n-1);main()int n=3;printf(n!=%ld,act(n);(2)#include void mmax(float a,int n);main()float a6;int i;for(i=1;i=5;i+)scanf(%f,&ai);a0=1;mmax(a,5);printf(%f %dn,a(int)a0,(int)a0);void mmax(float a,int n)if(na(int)a0)a0=n;mmax(a,n-1);(3)#include #include int start;int fun(char str);main()char a40;int i,num;gets(a);num=fun(a);if(num=-1)printf(input string error or no have An);elseprintf(%dn,num);for(i=start;istart+num;i+)printf(%c,ai);printf(n);int fun(char str)int count=0,i=0,len,flag=0;len=strlen(str);while(!flag) & ilen)if(stri=A) flag=1;i+;if(flag=0) return -1;start=i;while(flag & ilen)if(stri+=A) flag=0;else count+;if(flag=1) return -1;return count; (4)my_strcpy( char dst, char src) int i=0; while(srci!=0) dsti=srci ; i+; dsti= 0;int main() char a12; char b12; gets(b); my_strcpy(a,b); puts(a);(5)#include #include void fun(char str,int a)/不使用数组时,可使用全局变量保存统计结果int i=0;a0=a1=a2=a3=0;while(stri!=0)if(stri=A & stri=a & stri=0 & stri=A&(a)=a&(a)=z)main() char c; scanf(%c,&c); printf(%dn,ISALPHA(c); (2)/*习题8-2-2 */#define SWAP(t,x,y) t w; w=x; x=y; y=w; main() double a=99.99,b=11.11; SWAP(double,a,b); printf(%f,%fn,a,b);(3)/*习题8-2-3 */#include stdio.h#define MAX 80#define CHANGE 1main() char strMAX; int i; printf(Input text:n); gets(str); #if(CHANGE) for (i=0;i=a&stri=A&striZ) stri+=1; else if(stri=z|stri=Z) stri-=25; #endif printf(output:n%s,str);(4)/*习题8-2-4 */#define LEAP_YEAR(y) (y%4=0)&(y%100!=0)|(y%400=0)main() int year; printf(Input year:); scanf(%d,&year); if(LEAP_YEAR(year) printf(%d is a leap year.n,year); else printf(%d is not a leap year.n,year);(5)/*习题8-2-5.h */#ifndef _X8_2_5_H#define _X8_2_5_H#define AVER(a,b,c) (a+b+c)/3.0#endif/*习题8-2-5 */#include X8-2-5.hmain() int a,b,c; printf(Input three integers a,b,c:); scanf(%d,%d,%d,&a,&b,&c); printf(Average is %f.n,AVER(a,b,c);第9章1选择题:12345 67890 12ADCDB BCDDC BB2填空题:(1)指针或者地址 (2)110(3)char *p; p=&ch; scanf(%c,p); *p=a; printf(%c,*p);(4)10 (5)0、7 (6)ab (7)abcdcd (8) 71(9)void (*p)(int * ,int*); (10)r+bk (11) 0 、n+; (12)aegi3改错题:(1) 第一处改正: * sub=x-y 第二处改正: scanf(%f%f,&x,&y);第三处改正: calc(x,y,&add,&sub); (2)第一处:char swap (char *p1,char*p2)改为void swap (char *p1,char*p2)第二处:strcpy(p,p1)改为strcpy(p,p2)(3)第一处:p1=p1+m改为p1=p1+m-1第二处:*p1=*p2改为*p2=*p1第三处: *p2=0改为 *p2=0(4)第一处:char *fun(char *str,char t)改为char *fun(char *str,char *t)第二处:s=NuLL改为 s=NULL;第三处: if(r=p)改为if(*r=*p)(5)第一处:void fun(int *bN,int n)改为void fun(int (*b)N,int n)第二处:bjk=k*j 改为bjk=(k+1)*(j+1)4编程题(1)/*习题9-4-1 */void move(int array20,int n,int m) ;main() int number20,n,m,i; printf(How many numbers?); /*共有多少个数*/ scanf(%d,&n); printf(Input %d numbers:n,n); /*输入n个数*/ for(i=0;in;i+) scanf(%d,&numberi); printf(How many place you want to move?); /*后移多少个位置*/ scanf(%d,&m); move(number,n,m); /*调用move函数*/ printf(Now,they are:n); for(i=0;iarray;p-) *p=*(p-1); *array=array_end; m-; if(m0) move(array,n,m); /*递归调用,当循环次数m减至0时,停止调用*/(2)/*习题9-4-2 */#include #include#define TOTAL 6int mseek(char*str,char xstr,int n) int i; for(i=0; in; i+) if(strcmp(stri,xstr)=0) return 1; return 0; main() char*nameTOTAL=Lining,Linshan,Tianyuan,Zhangqiang,Haipo,Fangbing; char xname20; printf(enter a name:); gets(xname); if(mseek(name,xname,TOTAL) printf(Found!n); else printf(Not found!n);(3)/*习题9-4-3 */#include #include void fun(char *str,int num4) int i; for(i=0; i=a & *str=A & *str=0 & *str=9) num2+; else num3+; str+; #define N 80main() int stringN;int n4,i; gets(string); fun(string,n); for(i=0; i4; i+) printf(%dt,ni);(4)/*习题9-4-4 */* 调试时,可这样输入数据:*/*11 12 13 14 1521 22 23 24 2531 32 33 34 3541 42 43 44 4551 52 53 54 55 */#include main() int a55,*p,i,j; void change(int *p); printf(Input matrix:n); for(i=0;i5;i+) /*输入矩阵*/ for(j=0;j5;j+) scanf(%d,&aij); p=&a00; /*使p指向0行0列元素*/ change(p); /*调用函数, 实现交换*/ printf(Now, matrix: n); for(i=0;i5;i+) /*输出已交换的矩阵*/ for(j=0;j5;j+) printf(%4d,aij); printf(n); void change(int *p) /*交换函数*/ int i,j,temp; int *pmax,*pmin; pmax=p; pmin=p; for(i=0;i5;i+) /*找最大值和最小值的地址,并赋给pmax,pmin*/ for(j=0;j5;j+) if(*pmax*(p+5*i+j) pmin=p+5*i+j; temp=*(p+12); /*将最大值换给中心元素*/ *(p+12)=*pmax; *pmax=temp; temp=*p; /*将最小值换给左上角元素*/ *p=*pmin; *pmin=temp; pmin=p+1; for(i=0;i5;i+) /*找第二最小值的地址赋给pmin*/ for(j=0;j*(p+5*i+j) pmin=p+5*i+j; temp=*pmin; /*将第二最小值换给右上角元素*/ *pmin=*(p+4); *(p+4)=temp; pmin=p+1; for(i=0;i5;i+) /*找第三最小值的地址赋给pmin*/ for(j=0;j*(p+5*i+j) pmin=p

温馨提示

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

评论

0/150

提交评论