C语言习题答案人民邮电第2版 2_第1页
C语言习题答案人民邮电第2版 2_第2页
C语言习题答案人民邮电第2版 2_第3页
C语言习题答案人民邮电第2版 2_第4页
C语言习题答案人民邮电第2版 2_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、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.6

2、3、编程题(1)编写一个程序求各种类型数据的存储长度。#include <stdio.h>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

3、(double);printf("long double:%d byten",sizeof(long double);printf("char:%d byten",sizeof(char);(2)#include <stdio.h>#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) (1

4、0):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=a'3编程题(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(&

5、quot;%lf%lf%lf",&x,&y,&z); avg=(x+y+z)/3; printf("%.1f",avg);第4章 1选择题(1)(10) CCAAD CCABD 2填空题(1)a>0&&b>0|a>0&&c>0|b>0&&c>0a<b|a<ca>5|-a>5(a<=0)&&(int)a)!=a(a%b)!=0(2)!(x>0) 1 !(x>=0&&x<=5)(3)

6、3、2、2(4) ch>='A'&&ch<='Z' ch=ch-32(5) x<=10&&x>2 x<=2&&x>-1 y=-1 ;(6) a+b>c&&a+c>b&&b+c>a a=b&&a=c a=b|a=c|b=c(7) x<0 c=x/10 y!=-23编程题(1)#include <stdio.h>main() int x; printf("please input a num

7、ber:"); scanf("%d",&x); if(x%2=0) printf("x is a even number"); else printf("x is a odd number");(2)#include <stdio.h>main() int x,y; printf("please input a number:"); scanf("%d",&x); if(x>-5 && x<0) y=x; printf("

8、;%d",y); else if(x=0) y=x-1; printf("%d",y); else if(x>0 && x<10) y=x+1; printf("%d",y); else printf("the number is error");(3)#include <stdio.h>main() int a,m; printf("please input a number:"); scanf("%d",&a); switch(a/1

9、0) 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 <stdio.h>main() float price,tax; printf("please input the price of product:"); scanf("%f",&price); if(price>=10000) tax=

10、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 <stdio.h>main() float score; printf("please input the score of student:"); scanf("%f",&score); if(score>=85) printf("VE

11、RY GOOD"); else if(score>=60) printf("GOOD"); else printf("BAD");(6)# include <stdio.h>main () int x,y,z;printf("input two number:");scanf("%d%d",&x,&y);if(x<10 | x>99 | y<10 | y>99)printf("input data error!n");elsez

12、=(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)sum<k sum=k j-2 (8) s=0 p=1

13、 j<=i 3改错题 (1) 第一处改正: For改为for 第二处改正:for(k=1;k<=4;k+)或for(k=0;k<4;k+) 第三处改正: ave=sum/4改为ave=sum/4.0 (2) 第一处改正: i+改为j+ 第二处改正: m=100*i+10*j+k(3) 第一处改正:temp=1第二处改正:temp >=eps第三处改正:r*2(4) 第一处改正:&n第二处改正:= =(5) 第一处改正:t=m/10改为t=m%10第二处改正:t=0改为t=0第三处改正:m=m%10改为m=/104编程题(1) 分式累加和。#include <

14、;math.h>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 <stdio.h>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);

15、(3)由*组成的等腰三角形#include <stdio.h>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;m<1000;m+) s=0; for(i=1;i<m;i+) if(m%i)=0) s=s

16、+i; if(s=m) printf("%d its factors are ",m); for(i=1;i<m;i+) if(m%i=0) printf("%d,",i); printf("n"); (5)打靶#include <stdio.h>main() int h10,h7,h5; for(h10=0;h10<=8;h10+) for(h7=0;h7<=8;h7+)for(h5=0;h5<=8;h5+)if(h10+h7+h5=8 && h10*10+h7*7+h5*5=53

17、)printf("h10=%dth7=%dth5=%dn",h10,h7,h5);(6) 猴子吃桃子问题。采取逆向思维的方法,从后往前推断。 /代码一main() int day,x1,x2; day=9; x2=1; while(day>0) x1=(x2+1)*2; /*第一天的桃子数是第2天桃子数加1后的2倍*/ x2=x1; day-; printf("the total is %dn",x1); /代码二main() int i=9,sum=1; for(; i>0; sum=2*(sum+1

18、),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 <stdio.h>#include<math.h>main() float x,x0,f,f1; x=1.5; /可改为scanf("%f",&x);do x0=x; f=2*x0*x0*x0-4*x0

19、*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(n<m) temp=n; n=m; m=temp; p=n*m;

20、 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 i<4&&j=5 j<5&

21、;&i=4(2) i=1 && j-1(3) n>0 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) && (ch<strj) (3) 第一处改正:s1i!='0'第二处改正:j=0; (4)第一处改正:cnt=0第二处改正:if(

22、!(m%i)第三处改正:i<cnt5. 编程题(1)VC提供的int rand(void)产生的实际上是032767(short型的最大数)的伪随机数,伪随机数总是以一个相同的数为起始值(种子),运用递推的原理来生成的。所以,如果只使用rand函数,每次运行所形成的伪随机数列也相同,失去了随机意义。但这样便于程序调试。VC的rand()函数默认以1为种子。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。VC提供的void srand(unsigned int seed)将seed作为种子,如果以time函数值(即当前时间)作为种子数,那

23、么就可以保证随机性了,因为两次调用rand函数的时间通常是不同的。也可以使用srand函数来人为指定种子数。若要产生之间的一个随机数,则可用a + rand() % (b-a+1)表示。若要01的小数,则可以先取得010的整数,然后均除以10即可得到随机到十分位的10个随机小数;若要得到随机到百分位的随机小数,则需要先得到0100的整数,然后均除以100,其它情况依此类推。 #include <stdio.h>#include <stdlib.h>#include <time.h>main()int a12,count=0,i;srand(unsigned)

24、 time(NULL);for (i=0;i<12;i+)ai=5+rand()%11;for(i=0;i<12;i+)printf("%5d",ai);count+;if(count%4=0)printf("n") ;(2)#include <stdio.h>#define N 5main()int aN,max,min,i,sum=0,count=0;float av;for(i=0;i<N;i+)scanf("%d",&ai);max=min=a0;for(i=0;i<N;i+)sum

25、+=ai;if(ai>max)max=ai;if(ai<min)min=ai;av=(float)sum/5;for(i=0;i<N;i+)if(ai>av)count+;printf("max:%dnmin:%dnav:%fncount:%d",max,min,av,count); (3)#include <stdio.h>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,

26、92,93; /不必赋初值,这是为调试程序方便*/int i,count90=0,count80=0,count70=0,count60=0;for(i=0;i<30;i+)printf("intput NO. %d student's score:",i+1);scanf("%d",score+i);for(i=0;i<30;i+)if(scorei>=90)count90+;count80+;count70+;count60+;else if(scorei>=80)count80+;count70+;count60+;

27、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,c

28、ount80,count90);(4)1、#include <stdio.h>main()char a45;int i,j,k;for(i=0;i<45;i+)ai=' 'for(i=0;i<5;i+)for(j=0;j<i;j+)a9*i+j=' 'for(k=0;k<5;k+)a9*i+j+k='*'j=0;for(i=0;i<45;i+)printf("%c",ai);j+;if(j%9=0)printf("n");2、#include <stdio.h

29、>main()char a59;int i,j,k;for(i=0;i<5;i+)for(j=0;j<9;j+)aij=' 'for(i=0;i<5;i+)for(j=0;j<i;j+)aij=' 'for(k=0;k<5;k+)aij+k='*'for(i=0;i<5;i+)for(j=0;j<9;j+)printf("%c",aij);printf("n"); (5)# include <stdio.h># define N 4main() i

30、nt 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;i<N;i+) for(j=0;j<N;j+) printf("%2d ",aij); printf("n"); for(i=1;i<N;i+) for(j=0;j<i;j+) aij=aij+aji; aji=0; printf("nThe result is:n"); for(i=0;i&l

31、t;N;i+) for(j=0;j<N;j+) printf("%2d ",aij); printf("n"); 第7章1选择题12345 67890 12345DADBD CADAC BDDBD 2. 填空(1) 函数 (2) main函数 (3)函数首部、函数体 (4) 形式参数、实际参数、实参、形参 (5)常量 、 变量、表达式 (6)函数定义时函数值、返回值 (7)max(max(a,b),c)、 (x>y?x:y) (8)*#*#*#*(9) str =abdef (10) low<=high (high+low)/23.改错

32、题(1)第一处:void改为int第二处:i<=n && (n%i=0)改为i<=n && (n%i!=0)或i<n && (n%i!=0)第三处:n!=i改为n=i(2)第一处:删除;第二处: for(j=1; j<=50; i+)改为 for(j=1; j<=50; j+)第三处:return i(3)第一处:double fun(double b,x0)改为double fun(double b, double x0)第二处: if(abs(x1-x0)>=1e-6)改为if(fabs(x1-x0)>

33、;=1e-6)4 、编程题(1) #include <stdio.h>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 <stdio.h>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

34、 %dn",a(int)a0,(int)a0);void mmax(float a,int n)if(n<=0)return;elseif(an>a(int)a0)a0=n;mmax(a,n-1);(3)#include <stdio.h>#include <string.h>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 'A'n&

35、quot;);elseprintf("%dn",num);for(i=start;i<start+num;i+)printf("%c",ai);printf("n");int fun(char str)int count=0,i=0,len,flag=0;len=strlen(str);while(!flag) && i<len)if(stri='A') flag=1;i+;if(flag=0) return -1;start=i;while(flag && i<len

36、)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 <stdio.h>#include <string.h>void f

37、un(char str,int a)/不使用数组时,可使用全局变量保存统计结果int i=0;a0=a1=a2=a3=0;while(stri!='0')if(stri>='A' && stri<='Z' | stri>='a' && stri<='z')a0+;else if(stri>='0' && stri<='9')a1+;else if(stri=' ')a2+;elsea3

38、+;i+;int main()char s80;int a4;gets(s);fun(s,a);printf("letters:%dtdigits:%dtspaces:%dtother the character:%dn",a0,a1,a2,a3);第8章1选择题:DABAD2编程题(1)/*习题8-2-1 */#define ISALPHA(a) (a)>='A'&&(a)<='Z')|(a)>='a'&&(a)<='z')main() char c;

39、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;

40、printf("Input text:n"); gets(str); #if(CHANGE) for (i=0;i<MAX;i+) if(stri!='0') if(stri>='a'&&stri<'z'|stri>='A'&&stri<'Z') stri+=1; else if(stri='z'|stri='Z') stri-=25; #endif printf("output:n%s&qu

41、ot;,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 *

42、/#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.h"main() 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 12A

43、DCDB 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);第三处改正

44、: 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;第三处:

45、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&qu

46、ot;,n); /*输入n个数*/ for(i=0;i<n;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;i<n;i+) printf("%d ",numberi); void move(in

47、t array20,int n,int m) /*循环后移函数*/ int *p,array_end; array_end=*(array+n-1); for(p=array+n-1;p>array;p-) *p=*(p-1); *array=array_end; m-; if(m>0) move(array,n,m); /*递归调用,当循环次数m减至0时,停止调用*/(2)/*习题9-4-2 */#include<stdio.h> #include<string.h>#define TOTAL 6int mseek(char*str,char xstr,i

48、nt n) int i; for(i=0; i<n; 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,xn

49、ame,TOTAL) printf("Found!n"); else printf("Not found!n");(3)/*习题9-4-3 */#include <stdio.h>#include <string.h>void fun(char *str,int num4) int i; for(i=0; i<4; i+) numi=0; while(*str!='0') if(*str>='a' && *str<='z' | *str>=&#

50、39;A' && *str<='Z') num0+; else if(*str=' ') num1+; else if(*str>='0' && *str<='9') num2+; else num3+; str+; #define N 80main() int stringN;int n4,i; gets(string); fun(string,n); for(i=0; i<4; i+) printf("%dt",ni);(4)/*习题9-4-4

51、 */* 调试时,可这样输入数据:*/*11 12 13 14 1521 22 23 24 2531 32 33 34 3541 42 43 44 4551 52 53 54 55 */#include <stdio.h>main() int a55,*p,i,j; void change(int *p); printf("Input matrix:n"); for(i=0;i<5;i+) /*输入矩阵*/ for(j=0;j<5;j+) scanf("%d",&aij); p=&a00; /*使p指向0行0列元素

52、*/ change(p); /*调用函数, 实现交换*/ printf("Now, matrix: n"); for(i=0;i<5;i+) /*输出已交换的矩阵*/ for(j=0;j<5;j+) printf("%4d",aij); printf("n"); void change(int *p) /*交换函数*/ int i,j,temp; int *pmax,*pmin; pmax=p; pmin=p; for(i=0;i<5;i+) /*找最大值和最小值的地址,并赋给pmax,pmin*/ for(j=0;

53、j<5;j+) if(*pmax<*(p+5*i+j) pmax=p+5*i+j; if(*pmin>*(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;i<5;i+) /*找第二最小值的地址赋给pmin*/ for(j=0;j<5;j+) if(p+5*i+j)!=p)&&(*pmin>*(p+5*i+j) pmin=p+5*i+j; temp=*pmin; /*将第二最小值换给右上角元素*/ *pmin=*(p+4);

温馨提示

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

评论

0/150

提交评论