c语言参考答案(全)
习题11-1填空题1. 函数2. 主函数main(),主函数main()3. 主函数main()4. 函数首部,函数体5. {,}6. /*,*/7. 顺序结构,选择结构,循环结构8. .c,.obj,.exe1-2思考题1. 结构化程序设计是指:为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。顺序结构,选择结构,循环结构2. 算法是对具体问题求解步骤的一种描述。计算机算法的表达工具通常采用以下几种方法:(1)用自然语言表示算(2)用流程图表示算法(3)用伪代码表示算法(4)用程序设计语言表示算法3. 语言简洁、紧凑,使用方便、灵活;支持结构化程序设计;运算符丰富;数据类型丰富;较强的编译预处理功能;C语言的可移植性好;C语言本身既有一般高级语言的优点,又有低级(汇编)语言的特点;语法限制不太严格,程序设计自由度大。4.略5.略1-3编程题1.main(){floata=3,b=4,c=5,s,area;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%f”,area);}2.main(){printf(“******************************”);printf(“*helloworld*”);printf(“******************************”);n}习题22-1单选题1~5DBDCA6~10DCABA11~14BCAA2-2思考题1.2.000002.1,0.53.9,24.65.100,d6.(1)20(2)0(3)607.(1)10,6,4(2)6,9,15(3)3,60,838.559.70习题33-1单选题1-5 BBDAB6-10 DDBDC11-15 AADCA16-20 CBACC21-25 ABDBB3-2填空题1. 32. 02613. 0x104. 05.2,1 互换a,b的值6. 6.67. –038. 79. 5.0,4,c=3
10. i=10,j=2011. (1)65(2)65,An(3)56.123400,123.456001(4)3.141600(5)8765.432(6)5.86400e+02(7)3.14160e+00(8)3.1416(9)8765(10)3.1416,8765.4312. a=2b=5x=8.8y=76.34c1=65c2=973-3编程题1.main(){intx,y;scanf(“%d%d”,&x,&y);printf(“xyn”);printf(“%4d%4dn”,x,y);printf(“%4o%4on”,x,y);printf(“%4x%4xn”,x,y);}2.main(){floata,b,h,s;scanf(“%f%f%f”,&a,&b,&h);s=(a+b)*h/2;printf(“%8.1fn”,s);}3.main(){charc;scanf(“%c”,&c);printf(“%c,%c,%cn”,c-1,c,c+1);}4.main(){inta,a1,a2,a3;scanf(“%d”,&a);a1=a%10;a=a/10;a2=a%10;a=a/10;na3=a%10;printf(“%d%d%dn”,a1,a2,a3);}5.main(){doublea,b,c,ave;scanf(“%lf%lf%lf”,&a,&b,&c);ave=(a+b+c)/3;printf(“%8.2fn”,ave);}6.main(){inta,b,c,t;scanf(“%d%d%d”,&a,&b,&c);t=a;a=c;c=b;b=t;printf(“a=%d,b=%d,c=%dn”,a,b,c);}习题44-1单选题1~5BADAC6~10DDACD11~15BBBAB4-2填空题1.12.if(x>0)y=1elseif(x==0)y=0elsey=-13.(1)a>0||b>0(2)x>0&&x<=10(3)a==1.5&&b==1.5&&c==1.5(4)pb?a:b)>c?max:c6.-47.18.5,0,39.85belongstoB10.(1)(a==0)(2)(b==0)(3)(disc<0)n4-3编程题1.#include“math.h”main(){floata,b,c,s,area;scanf(“%f,%f,%f”,&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“%f”,area);}}2.main(){intx,y;scanf(“%d,%d”,&x,&y);if(x*x+y*y>1000)printf(“%dn”,(x*x+y*y)/100);elseprintf(“%dn”,x+y);}3.main(){intx,scanf(“%d”,&x);if(x%3==0&&x%5==0&&x%7==0)printf(“yesn”);elseprintf(“non”);}4.#include“math.h”main(){floatx,y;scanf(“%f”,&x);if(x<-2)y=x*x-sin(x);elseif(x<=2)y=pow(2,x)+1;elsey=sqrt(x*x+x+1);printf(“%fn”,y);}5.main()n{longa,b,c,d,e,x;scanf("%ld",&x);a=x/10000;/*分解出万位*/b=x%10000/1000;/*分解出千位*/c=x%1000/100;/*分解出百位*/d=x%100/10;/*分解出十位*/e=x%10;/*分解出个位*/if(a!=0)printf("thereare5,%ld%ld%ld%ld%ldn",e,d,c,b,a);elseif(b!=0)printf("thereare4,%ld%ld%ld%ldn",e,d,c,b); elseif(c!=0)printf("thereare3,%ld%ld%ldn",e,d,c); elseif(d!=0)printf("thereare2,%ld%ldn",e,d); elseif(e!=0)printf("thereare1,%ldn",e);}6.1.程序分析:main(){longge,shi,qian,wan,x;scanf("%ld",&x);wan=x/10000;qian=x%10000/1000;shi=x%100/10;ge=x%10;if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/ printf("thisnumberisahuiwenn");else printf("thisnumberisnotahuiwenn");}7.main(){floatp,w,s,d,f;scanf(“%f,%,%f”,p,s,w);if(s>3000)d=0.15elseif(s>=2000)d=0.1;elseif(s>=1000)d=0.08;elseif(s>=500)d=0.05;elseif(s>=250)d=0.02;elsed=0f=p*w*s*(1-d);printf(“%f”,f);}n习题55-1单选题1~5CDACB6~10DCAAB11~16DBDBCB5-2填空题1.202.k=5,s=43.3334.HowAreYou5.2#18#6.(1)i<10(2)j%3!=07.(1)flag*(float)k/(k+1)(2)flag=-flag8.(1)s=0,t=1;(2)t=t*x/i*pow(-1,i+1);(3)printf(“%f”,s);9.(1)max=x(2)x!=-1(3)scanf("%d",&x)10.(1)n=1(2)s5-3编程题1.(1)main(){inti;lonts=0;for(i=1;i<=100;i++)s+=i*i;printf(“%ld”,s);}(2)main(){inti;lontp=1,s=0;for(i=1;i<=10;i++){p=p*i;s+=p;}printf(“%ld”,s);}(3)main(){inti=1;lontp=1;floats=0;do{s+=1.0/p;p*=++i;}while(1.0/p>1e-6)nprintf(“%f”,s);}(4)main(){inti=1,flag=1,pi=0;do{s+=flag*1.0/(2*i-1);i++;}while(1.0/(2*i-1)>1e-6);printf(”%f”,s);}2.main(){intm,n,t,a,b;scanf(“%d,%d” ,&m,&n) ;if(m0 ;y--)s*=x ;printf(”%d,%d,%dn ”,s%10,s/10%10,s/100%10);}4.main(){inti=1,k=2,sum=0;do{sum+=k;k=k*2;i++;}while(sum<=100);printf(”total=%fn”,0.4*sum/(i-1));}5.main(){intx,y,z;for(x=1 ;x<20 ;x++)for(y=1 ;y<33 ;y++){z=100-x-y ;nif(z>=0&&(5*x+3*y+z/3)-100<1e-5)printf(”x=%d,y=%d,z=%dn”,x,y,z) ;}}6.main(){intj,k ;for(j=1 ;j<=4 ;j++){for(k=1;k<=4-j;k++;)printf(””);for(k=1 ;k<=2*j-1 ;k++)printf(”*”) ;printf(”n”) ;}for(j=3;j>=1;j--){for(k=1;k<=4-j;k++;)printf(””);for(k=1;k<=2*j-1;k++)printf(”*”);printf(”n”);}}7.分析:其实此问题的解法非常简单。从数学上来说,可以用穷举法。比如让x从2开始,判断表达式“(x%3==2&&x%5==3&&x%7==2)”是否成立,若不成立,让x自增1,直到某个x满足条件了,则这个x即为所求。程序如下:#includemain(){intx=2;while(!(x%3==2&&x%5==3&&x%7==2)){x++;}printf("x=%dn",x);}程序运行结果: x=238分析:定义一个字符变量c和一个整型变量n,c用于接受从键盘输入的非回车行字符,n用于统计从键盘输入的非回车符字符的个数,也就是说,以(c=getchar())!='n'为循环条件,反复进行“n++;”的运算。程序代码如下:#includevoidmain(){nintn=0;charc;printf("inputastring:n");while((c=getchar())!='n')n++;printf("%d",n);}9.例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。main(){inti,j,k,n;printf("'waterflower'numberis:"); for(n=100;n<1000;n++) { i=n/100;/*分解出百位*/ j=n/10%10;/*分解出十位*/ k=n%10;/*分解出个位*/ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf("%-5d",n); } }printf("n");}10.main(){intx,y,z;for(x=1 ;x<17 ;x++)for(y=1 ;y<25 ;y++){z=30-x-y ;if(z>0&&3*x+2*y+z==50)printf("man=%d,woman=%d,child=%dn”,x,y,z);}}习题66-1单选题1-5 CBBAD6-10 DBAAC11-15 CCDDC16-20 BBABCn6-2填空题1. 1202. x3. 3,2,2,34./I5. 8,176. 97. 1.0/(i*i)8. fun-in:30,20,10fun-end:1015,35,105010,20,309. 01234510.936366-3编程题1.voidzhuan(){charch;while((ch=getchar())!=’n’){if(ch>=’a’&&ch<=’z’)ch=ch-32;putchar(ch);}}2.floatexpp(intn){intk,fac=1;floatsum=0;for(k=1;k<=n;k++){fac*=k;sum+=1.0/fac;}return(sum);}3.intxy3(intx,inty){intk,num=1;for(k=1;k<=y;k++)num*=x;num=num%1000;returnnum;}n4.voidfactors(intn){intk;printf(“%ditsfactorsare:”,n);for(k=1;ka[j]3.(1)r+b[k](2)*x8-3编程题1.#defineN10main(){inta[N]={1,2,3,4,5,6,7,8,9,0},osum=0,qsum=0,j;for(j=0;j<10;j++)if(j%2)qsum+=a[j];elseosum+=a[j];printf(“osum=%d,qsum=%dn”,osum,qsum);}2.#defineN10main(){inta[N]={10,20,30,40,50,60,70,80,90},j,k,x;scanf(“%d”,&x);for(j=0;jj;k--)a[k]=a[k-1];a[j]=x;for(j=0;j=’a’&&c[j]<=’z’)?c[j]-32:c[j];puts(c);}7.#include“string.h”main(){charc1[10],c2[10],j;gets(c1);gets(c2);for(j=0;(c1[j]==c2[j])&&c1[j]&&c2[j];j++);printf(“%dn”,c1[j]-c2[j]);}8.#include”string.h”#defineM3n#defineN80main(){chara[M][N],j,k,n[5]={0};for(j=0;j=’A’&&a[j][k]<=’Z’)n[1]++;elseif(a[j][k]>=’a’&&a[j][k]<=’z’)n[2]++;elseif(a[j][k]>=’0’&&a[j][k]<=’9’)n[3]++;elseif(a[j][k]=’’)n[4]++;elsen[5]++;for(j=0;j<5;j++)printf(“%4d”,n[j]);}习题99-1单选题1~5DDBAC6~10BADCB11~15ADCDA16~20CCABD9-2填空题1.(1)2,1(2)10#30#5#(3)FOUR,O(4)602.(1)49(2)AC(3)2(4)2(5)3,12,39(6)75319(7)15012345678910111213140522713(8)12,10,9,6,5,4,3,2,1(9)1,1,11,13,3,33,3(10)1000101010001000101010001(11)3.(1)*x(2)t4.(1)' '或0(2)n++或n+=1或n=n+15.ABCDCDn6.0247.voidfun(doubleb[][22])或voidfun(doubleb[0][22])或voidfun(double(*b)[22])8.(1)f(x+y)/g(y-x)或(*f)(x+y)/g(y-x)或f(x+y)/(*g)(y-x)或(*f)(x+y)/(*g)(y-x)(2)cos,sin,a,b9-3编程题1.按以下要求编写一个程序。定义三个变量用于存放输入的三个整数;另定义三个指向整型变量的指针变量,并利用它们实现将输入的三个整数按由小到大的顺序输出。main(){intn1,n2,n3;int*pointer1,*pointer2,*pointer3;printf("pleaseinput3number:n1,n2,n3:");scanf("%d,%d,%d",&n1,&n2,&n3);pointer1=&n1;pointer2=&n2;pointer3=&n3;if(n1>n2)swap(pointer1,pointer2);if(n1>n3)swap(pointer1,pointer3);if(n2>n3)swap(pointer2,pointer3);printf("thesortednumbersare:%d,%d,%dn",n1,n2,n3);}swap(p1,p2)int*p1,*p2;{intp;p=*p1;*p1=*p2;*p2=p;}2.编写函数,得到两个整数相除的商和余数。要求通过指针在函数间传递商和余数这两个数据。main(){inta,b,d ;floatc;voidfun(inta,intb,float*c,int*d)scanf(“%d,%d “,&a,&b);fun(a,b,&c,&d);printf(“%f%d”,c,d);}voidfun(inta,intb,float*c,int*d){if(b){*c=(float)a/b;*d=a%b;}}3.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。编写三个函数:①输入10个数;②进行处理;③输出10个数。nmain(){voidinput(int*);voidoutput(int*);voidchuli(int*);inta[10];input(a);chuli(a);output(a);}voidinput(int*a){intj;for(j=0;j<10;j++)scanf(”%d”,a+j);}voidchuli(int*a){intj,minl=0,maxl=0;for(j=0;j<10;j++){if(a[maxl]<*(a+j))maxl=j;if(a[minl]>*(a+j))minl=j;}j=a[0];a[0]=a[minl];a[minl]=j;j=a[9];a[9]=a[maxl];a[maxl]=j;}voidoutput(int*a){intj;for(j=0;j<10;j++)printf(”%d”,*(a+i));}4.有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。main(){intnumber[20],n,m,i;printf("thetotalnumbersis:");scanf("%d",&n);printf("backm:");scanf("%d",&m);for(i=0;iarray;p--) *p=*(p-1); *array=array_end; m--; if(m>0)move(array,n,m);}5.有n个小孩按顺序号排成一圈。从第1个小孩开始作1至3报数,凡是报数为3的小孩退出圈子,求出最后出圈子的那个小孩是原来第几号的那位。#defineN10#defineM3main(){inta[N],j;voidchuli(int*);for(j=0;j=j;k--)a[k+1]=a[k];a[j]=t;}}5.#definenmax50main(){inti,k,m,n,num[nmax],*p;printf("pleaseinputthetotalofnumbers:");scanf("%d",&n);p=num;for(i=0;i