部分C语言习题答案

申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

文档介绍

部分C语言习题答案

部分习题答案第1章C程序知识初步答案略第2章基本数据类型及其操作1.判断题√××√××××√√2.填空题(1)inta;floatb;charc;(2)3(3)double(4)a=1,b=2,c=3(5)0整型(6)2(7)若有定义:intx=3,y=2;floata=2.5,b=3.5;则表达式(x+y)%2+(int)a/(int)b的值为1。(8)f3.选择题ACDDBDBACD4.改错题(1)#include改成#includeintcelsius;fahr;改成floatcelsius,fahr;printf(“fahr=d,celsius=%dn”,fahr,celsius);改成printf(“fahr=%f,celsius=%fn”,fahr,celsius);(2)printf("%dn",m/n+a);改成printf("%fn",m/n+a);printf("%fn",m%a+b);改成printf("%fn",m%(int)a+b);(3)下面程序中有两处错误,请查找并改正。#includevoidmain(){intm,n;floata,b;scanf("%d,%f",&m,&a);scanf("%d,%f",&b,&n);改成scanf("%f,%d",&b,&n);printf("%fn",m/n+a);printf("%fn",m%n+b)改成printf("%fn",m%n+b);}5.阅读程序(1)2********(2)n(3)程序的功能:从键盘任意输入两个整数,输出它们的和。(4)26.7654326.编程题(1)编程求华氏温度50°F对应的摄氏温度C。#includevoidmain(){floatcelsius,fahr;fahr=50;celsius=5*(fahr-32)/9;printf("fahr=%f,celsius=%fn",fahr,celsius);}(2)编程从键盘输入一个数a,求它的平方并输出。#includevoidmain(){inta,b;scanf("%d",&a);b=a*a;printf("a=%d,b=%dn",a,b);}(3)定义三个int型变量x、y、z,从键盘读入x、y,把x对y的余数赋给z,并输出结果。#includevoidmain(){intx,y,z;scanf("%d%d",&x,&y);z=x%y;printf("%d对%d的余数为%dn",x,y,z);}(4)定义两个整型变量并赋值,编程实现两个整型数的互换。#includevoidmain(){intx,y,t;x=3;y=4;t=x;x=y;y=t;printf("x=%d,y=%dn",x,y);}(5)当n为152时,编程分别求出n的个位数(digit1)、十位数(digit2)和百位数(digit3)。#includevoidmain(){intn,x,y,z;n=152;x=n/100;y=n/10%10;z=n%10;printf("%d的百位、十位、个位分别为%d,%d,%dn",n,x,y,z);}n第3章选择结构程序设计1.选择题BCCCCDCADA2.填空题(1)10.500000(2)优先级结合性(3)ASCII(4)0.000000(5)01(6)((ch>='a')&&(ch<='z'))||((ch>='A')&&(ch<='Z'))||((ch>='0')&&(ch<='9'))(7)①c=getchar()②%c③&c④putchar(c)(8)①t/3②default③1-d/100.0}3.分析下列程序,写出程序运行结果。(1)123.456001**123.46**123.456???(2)#includevoidmain(){inta,b,max;scanf(“%d%d”,&a,&b);if(a>b)max=a;elsemax=b;printf(“max=%dn”,max);}如果输入3和4,则输出结果为max=4(3)-1(4)5(5)a=2,b=14.改错题(1)scanf(“%c,%d,%d,%f”,c,b,a,c);改成scanf(“%c,%f,%d”,&c,&b,&a);printf(“%c,%d,%d,%f”,c,b,a,c);改成printf(“%c,%f,%d,%d”,c,b,a,c);(2)if(x>y)x=y;y=x;改成if(x>y){x=y;y=x;}elsex=x+1;y=y+1;改成else{x=x+1;y=y+1;}5.编程题(1)计算以下分段函数#includevoidmain(){floatx,y;scanf("%f",&x);if(x<=15)y=4*x/3;elsey=2.5*x-10.5;printf("y=f(%f)=%f",x,y);}n(2)输入一个整数,若为奇数则输出其平方根,否则输出其立方根。(提示:可以利用数学函数pow(x,1.0/3)计算x的立方根)#include#includevoidmain(){intt;scanf("%d",&t);if(t%2==1)printf("%d的平方根为%f",t,sqrt(t));elseprintf("%d的立方根为%f",t,pow(t,1.0/3));}(3)从键盘输入一个整数,判断该整数是否能同时被3和7整除。#includevoidmain(){intt;scanf("%d",&t);if(t%3==0&&t%7==0)printf("%d能同时被3和7整除n",t);elseprintf("%d不能同时被3和7整除n",t);}(4)输入一个英文字母,判断该字母是大写字母还是小写字母。#includevoidmain(){charch;ch=getchar();if(ch>='a'&&ch<='z')printf("%c是小写字母n",ch);elseprintf("%c是大写字母n",ch);}(5)从键盘任意输入一个字符,如果它是英文字母,则以小写的形式输出,否则输出“它不是英文字母”。#includevoidmain(){charch;ch=getchar();if(ch>='a'&&ch<='z')printf("%cn",ch);elseif(ch>='A'&&ch<='Z')printf("%cn",ch+32);elseprintf("%c不是英文字母n",ch);}(6)从键盘输入3个整数a、b、c,输出其中的最大数。#includevoidmain(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);if(a>b)max=a;elsemax=b;nif(maxvoidmain(){floatx,y;scanf("%f",&x);if(x<-10)y=10;elseif(x>=-10&&x<=10)y=0;elsey=-10;printf("y=f(%f)=%f",x,y);}(8)从键盘输入4个整数a、b、c、d,按照由大到小的顺序输出。#includevoidmain(){inta,b,c,d,t;scanf("%d%d%d%d",&a,&b,&c,&d);//先找出4个数中最大数,并存放在变量a中if(avoidmain(){intyear,day,t;scanf("%d%d",&year,&day);switch(day){case1:case3:case5:case7:ncase8:case10:case12:t=31;break;case2:if((year%400==0)||(year%4==0&&year%100!=0))t=29;elset=28;break;default:t=30;}printf("%d年%d月有%d天n",year,day,t);}(10)输入月薪salary,输出应交的个人所得税tax。计算公式为:tax=rate*(salary-2000)当salary≤2500时,rate=0;当2500<salary≤4000时,rate=5%;当4000<salary≤7000时,rate=10%;当7000<salary≤22000时,rate=15%;当22000<salary≤42000时,rate=20%;当42000<salary≤62000时,rate=25%;当62000<salary≤82000时,rate=30%;当82000<salary≤102000时,rate=35%;当102000<salary时,rate=40%;要求给出问题求解的算法,用流程图表示,并用程序实现。#includevoidmain(){floatsalary,tax;intrate;scanf("%f",&salary);if(salary<=2500)rate=0;elseif(salary>2500&&salary<=4000)rate=5;elseif(salary>4000&&salary<=7000)rate=10;elseif(salary>7000&&salary<=22000)rate=15;elseif(salary>22000&&salary<=42000)rate=20;elseif(salary>42000&&salary<=62000)rate=25;elseif(salary>62000&&salary<=82000)rate=30;elseif(salary>82000&&salary<=102000)rate=35;elserate=40;tax=rate*0.01*(salary-2000);printf("%fn",tax);}n第4章循环结构1.选择题D(CAA)AB(AD)BBCCB2.填空题(1)0(2)-264(3)354%10354/100354/10%10(4)结束整个循环结束本次循环(5)n<=999ns=n/10%10ng+ns+nb==5(6)程序填空。以下程序是计算1+2/3+3/5+4/7+5/9+……前20项之和。①sum=0②sum③b+23.写出下列程序的运行结果(1)#includevoidmain(){intx=012,n=0;while(x){x-=2;n++;}printf(“x=%d,n=%dn”,x,n);}x=0,n=5(2)i=6,y=10(3)sum=288(4)K=4(5)1.6000004.编程题(1)输入一个整数n,并求1-1/3+1/5-…的前n项和。#includevoidmain(){doublea,sum=0;inti,m=1,n,j;printf("输入一个数:");scanf("%d",&n);for(i=1;i<=n;i++){if(i%2==0){m=-1;}elsem=1;a=2*i-1;sum=sum+m*1.0/a;}printf("%lfn",sum);}(2)输出1-100之间的所有偶数。#includevoidmain()n{inta,b=0;for(a=1;a<100;a++){if(a%2==0){printf("%6d",a),b++;if(b%6==0)printf("n");}}}(2)求n!。#includevoidmain(){intj,n,t;scanf("%d",&n);t=1;for(j=1;j<=n;j++)t=t*j;printf("%dn",t);}(3)输入一个正实数x,求平方根不超过x的最大整数n,并输出。#include#includevoidmain(){doublex;intn;scanf("%lf",&x);n=(int)(x*x);printf("%d",n);}(4)输入一个整数,从高位开始逐个数字输出。#include#includevoidmain(){intt,i;scanf("%d",&t);i=4;do{printf("%d",t/(int)pow(10,i));t=t%(int)pow(10,i);i--;}while(i>=0);}n(2)输入一个正整数n,再输入n个整数,输出最小值。#includevoidmain(){intn,min,i,x;printf("请输入一个整数n:n");scanf("%d",&n);printf("再输入n个整数:n");for(i=1;i<=n;i++){scanf("%d",&x);if(i==1)min=x;elseif(xvoidmain(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-3d",j,i,i*j);printf("n");}}(8)利用循环输出以下图案:#includevoidmain(){inti,j,k,t;t=3;for(i=1;i<=4;i++){for(j=1;j<=t;j++)printf("");t--;for(j=1;j<=2*i-1;j++)printf("*");printf("n");}//上半部分图形nt=5;for(i=1;i<=3;i++){for(j=1;j<=i;j++)printf("");for(j=1;j<=t;j++)printf("*");t=t-2;printf("n");}}(9)求Sn=a+aa+aaa+……+aa…a之值,其a中代表1到9中的一个数字。例如:a代表2,则求2+22+222+2222+22222(此时n=5),a和n由键盘输入。#includevoidmain(){inti,a,n,t,s;s=0;scanf("%d%d",&a,&n);t=a;//t表示将要加入的数for(i=1;i<=n;i++){s=s+t;t=t*10+a;}printf("s=%d",s);}(10)一个球从100米高度自由落体,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹多高?#includevoidmain(){floath,sum;inti;h=100;sum=100;for(i=1;i<=10;i++){h=h/2.0;sum=sum+2*h;}sum=sum-2*h;printf("第%d次弹起的高度为%f米,经过的距离为%f米。",i-1,h,sum);}(11)猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃了前一天剩下的一半零一个。到第10天想再吃时,见只剩下一个桃子了。编程计算第一天共摘了多少桃子?#includevoidmain(){inti,x,y;//x表示某一天没吃之前桃子的数目,y表示该天吃过之后剩下桃子的数目y=1;i=9;//第9天吃过桃子之后,还剩下y=1个桃子while(i>=1){x=2*(y+1);y=x;i--;n}printf("%dn",x);}第5章数组答案1、判断题:TFTFFTTF2、选择题:CCACABDADD3、分析以下程序的运行结果(1)5,6.000000(2)3,5,7,9,5(3)Cat(4)aaaabbcc(5)str=Language(6)123(7)str[]=abdef(8)2,34、编程题:(1)#includevoidmain(){intz=0;intl=0;intf=0;inta[6]={8,0,9,0,-6,-1};for(inti=0;i<6;i++)n{if(a[i]==0)l++;elseif(a[i]>0)z++;elseif(a[i]<0)f++;}printf("数组中正数的个数为%d,负数的个数为%d,零的个数为%d",z,f,l);}(2)#includevoidmain(){intscore[50];inthighest,lowest,average=0;for(inti=0;i<50;i++)scanf("%d",&score[i]);highest=score[0];lowest=score[0];for(inti=0;i<50;i++){if(score[i]>highest)highest=score[i];if(score[i]intmain(){inti;intf[20]={1,1};//f[0]=1,f[1]=1for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];//在i的值为2时,f[2]=f[0]+f[1],依此类推for(i=0;i<20;i++)//此循环的作用是输出20个数{if(i%5==0)printf(“n”);//控制换行,每行输出5个数据printf(“%8d”,f[i]);//每个数据输出时占8列宽度}return0;}(4)intGetStrOcur(char*cs,char*ct)n{char*p=cs;intnum=0,lcs=strlen(ct);while((p=strstr(p,ct))!=NULL){num++;p+=lcs;}returnnum;}(5)#include#includeintstreql(char*,char*);voidmain(){charchs1[]="abc";charchs2[]="abc";charchs3[]="ABC";charchs4[1000]="aas";printf("TestingAbcandAbc%dn",streql("Abc","Abc"));printf("TestingabcandAbc%dn",streql("abc","Abc"));printf("Testingabcdandabc%dn",streql("abcd","abc"));printf("complerchs1%sandchs2%sresult=%dn",chs1,chs2,streql(chs1,chs2));strcat(chs4,chs2);printf("chs4+chs2=%s",chs4);}intstreql(char*ch1,char*ch2){while((*ch1==*ch2)&&(*ch1)){ch1++;ch2++;}return((*ch1==NULL)&&(*ch2==NULL));}(6)#include#includeintmain(){chara[100];unsignedi=0;printf("输入字符串n");gets(a);for(i=0;i<=strlen(a)-1;i++)a[i]^=15;puts(a);return0;}/*注:15的二进制码是00001111,用一个二进制数异或(即^)00001111,表示对后四位取反,异或的原理是0^1=0,0^0=1,1^1=0,1^0=1,简单记为相同得0,不同得1*/(7)#include#include#defineMAX5voidmain(){charstr[MAX][20];char*pc;inti;for(i=0;im"成立,代码描述如下:k=0;while(primes[k]*primes[k]<=m)if(m%primes[k]==0){/*m是合数*/m+=2;k=1;/*不必用primes[0]=2去测试m*/}elsek++/*继续用下一个质数去测试*/3.最后的程序代码为/*利用数组求前n个质数*/#include#defineN50main(){intprimes[N];intpc,m,k;clrscr();printf("nThefirst%dprimenumbersare:n",N);primes[0]=2;/*2是第一个质数*/pc=1;/*已有第一个质数*/m=3;/*被测试的数从3开始*/while(pcintmain(){intysSum(intx);inttemp;for(inti=1;i<=30000;i++){temp=ysSum(i);//计算i的约数和if(temp>30000)//temp不能大于30000continue;if(ysSum(temp)==i)//如果temp的约数和等于i,//则是我们要的printf("t%d%dn",i,temp);}return0;}intysSum(intx){intsum=0;for(inti=1;ifloatindex(intn);/*函数原型声明*/main(){intnumber;printf("Pleaseinputelementnumbers(number):");scanf("%d",&number);printf("Thesumis%9.6fn",index(number));getch();}floatindex(intnum)/*函数定义*/{intcnt;floattemp,a=2,b=1,s=0;for(cnt=1;cnt<=num;cnt++){s=s+a/b;ntemp=a;a=a+b;b=temp;}return(s);}(5)#includelongsum(inta,intb);/*函数原型声明*/main(){printf("1---40相加=%ld,1---80相加=%ld,1---100相加=%ld",sum(1,40),sum(1,80),sum(1,100));}longsum(inta,intb){longx=0;for(inti=a;i<=b;i++)x+=i;returnx;}(6)#include#include#includevoidmain(){inti,base,len;charnum[20];floats=0;printf("输入数进制(小于等于16):");scanf("%d",&base);printf("该进制的一个整数:");scanf("%s",num);len=strlen(num);i=len-1;while(i>=0){switch(num[i]){case'A':case'a':s=s+10*pow((float)base,(float)(len-i-1));break;case'B':case'b':s=s+11*pow((float)base,(float)(len-i-1));break;case'C':case'c':s=s+12*pow((float)base,(float)(len-i-1));break;case'D':case'd':s=s+13*pow((float)base,(float)(len-i-1));break;case'E':case'e':s=s+14*pow((float)base,(float)(len-i-1));break;case'F':case'f':s=s+15*pow((float)base,(float)(len-i-1));break;case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':s=s+(num[i]-'0')*pow((float)base,(float)(len-i-1));break;n}i--;}printf("十进制结果:%gnn",s);}(7)#includeintsushu(intm);/*函数原型声明*/main(){inti,m;for(i=6;i<=1000;i+=2)for(m=3;mvoidmain(){inthcf(int,int);intlcd(int,int,int);intu,v,h,l;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("h.c.f=%dn",h);l=lcd(u,v,h);printf("l.c.k=%dn",l);}inthcf(intu,intv){intt,r;if(v>u){t=u;u=v;v=t;}while((r=u%v)!=0){u=v;v=r;}return(v);}intlcd(intu,intv,inth){return(u*v/h);}n第7章指针1.选择题BDDCCDCBBA2.填空题3.阅读下列程序,写出程序执行结果(1)012345678912345678910(2)157(3)001224002346(4)1526(5)xyzABCabcd(6)21(7)191991919本题中如果把while语句的循环体修改如下:{t=*stb;*stb++=*ste;*ste--=t;}程序的结果:987654321(8)12345(9)13-3(10)1231012134.编程题第8章结构及其它参考答案1.选择题CACDCBCAB2.程序阅读,写出运行结果(1)12(2)51,60,21(3)10,x(4)264.00(5)015.500000(6)Wordvalue:1234Highvalue:12nHighvalue:343.编程题(1)--(3)参考答案:#includestructworker{charno[10];charname[20];charsex;intage;intworkyear;floatsalary;charaddress[20];};voidmain(){structworkerw1;printf("请输入该职工的相关资料:");scanf("%s,%s,%c,%d,%d,%f,%s",w1.no,w1.name,&w1.sex,&w1.age,&w1.workyear,&w1.salary,w1.address);printf("该职工的相关信息为:职工号:%s,姓名:%s,性别:%c,年龄:%d,工龄:%d,工资:%f,住址:%s",w1.no,w1.name,w1.sex,w1.age,w1.workyear,w1.salary,w1.address);}(4)--(5)参考答案:#include#defineN10structstu{intnum;charname[20];intage;intscore[3];floataver;};voidcount(structstu*s){inti,sum=0;for(i=0;i<3;i++){sum=sum+s->score[i];s->aver=sum/3.0;}}voidmain(){inti;structstust[N],*p;p=st;printf("请输入%d个学生的信息:n",N);for(i=0;i
查看更多

相关文章