C程序设计教程与实验课后习题答案-给呆呆.docx

上传人:wux****ua 文档编号:9397252 上传时间:2020-04-05 格式:DOCX 页数:34 大小:37.10KB
返回 下载 相关 举报
C程序设计教程与实验课后习题答案-给呆呆.docx_第1页
第1页 / 共34页
C程序设计教程与实验课后习题答案-给呆呆.docx_第2页
第2页 / 共34页
C程序设计教程与实验课后习题答案-给呆呆.docx_第3页
第3页 / 共34页
点击查看更多>>
资源描述
第1章习题一、选择题1、A2、D3、C4、D5、B6、C7、C8、B9、B10、A二、填空题1、一,函数体2、main(主),main(主)3、编译,目标4、.c,.obj,.exe5、缩进,无影响,/*/三、程序分析题1、*Verygood!*2、a=12,b=5a=17,b=223、r=5.50,s=95.033098四、编程题1用printf()函数在屏幕上输出自己的班级、学号、姓名。#includestdio.hvoidmain()printf(班级:BX1109n);printf(学号:111003530901n);printf(姓名:王孟荣n);2从键盘输入两个整数,计算它们的和、差、积、商,并在屏幕上输出结果。#includevoidmain()intx,y,a,b,c;floatd;printf(PleaseInputTwoIntegers:n);scanf(%d%d,&x,&y);a=x+y;b=x-y;c=x*y;d=1.0*x/y;printf(a=%dnb=%dnc=%dnd=%fn,a,b,c,d);第2章习题一、选择题15BCDCD610DBBCA二、填空题1单精度浮点型、双精度浮点型、字符型203x%10*10+x/1045.555.7206sin(sqrt(x*x)/(a*b)7,811110111737B933103三、程序分析题17,8,1021,33.5F4(int)i=12,12.505461579112四、编程题1编写程序,求表达式c=21%9-(float)a+4/b*b的值,假设表达式中a和b的值分别由键盘输入。#includevoidmain()inta,b;floatc;printf(Pleaseinputdataa,b:);scanf(%d%d,&a,&b);c=21%9-(float)a+4/b*b;printf(c=%5.2fn,c);2.编写程序,从键盘输入两个整数存入变量a和b中,求a2-b2的值并输出。#includevoidmain()inta,b,c;printf(Pleaseinputdataa,b:);scanf(%d%d,&a,&b);c=a*a-b*b;printf(c=%dn,c);第3章习题一、选择题12345678910DCA、B ABBB、C BDD二、填空题1.有穷性确定性可行性2.#3.从终端(键盘)输入一个字符4.md5.97,g6.123.456000,123.46,1237.格式控制符不正确(输入数据时不能控制列宽和小数位数)8.63,63,77,3f9.%f%f&x,&y10.chch三、程序分析题1.c=112.a=123f=4573.x=345y=3.4600004.a=1,b=3a=3,b=15.(题目需修改为:从键盘输入一个除a和z以外的小写字母)程序的功能:从键盘输入一个除a和z以外的小写字母,求出该字母对应的大写字母的前趋和后继字母,然后顺序输出此三个大写字母,每个字母所占列宽为3。运行结果:假如输入:f输出:EFG四、编程题1编写程序,计算的值并输出(保留3位小数),其中a、b的值由键盘输入。#include#includevoidmain()floata,b,x;scanf(%f%f,&a,&b);x=(a*a+b*b)/sqrt(3*(a+b);printf(x=%.3fn,x);2编写程序,从键盘输入一个梯形的上底a、下底b和高h,输出梯形的面积s。#include#includevoidmain()floata,b,h,s;scanf(%f,%f,%f,&a,&b,&h);s=(a+b)*h/2;printf(梯形面积s=%.2fn,s);3编写程序,在屏幕上输入你姓名的第一个字母,显示出该字母以及下面的信息:Hello!Thisisacprogram.Mynameis第一个字母#includevoidmain()charname;name=getchar();putchar(name);printf(nHello!n);printf(Thisisacprogram.n);printf(Mynameis%cn,name);第4章习题一、选择题12345678910BBCBCACBACC二、填空题1.!&|2.13.ab4.15.06.x%4=0&x%100!=07.568.A9.x10&x5010.-1三、程序分析题1No2-23.5324#&5(1)2(2)3CCa=2,b=2,c=4四、编程题1.有一个函数如下:x2-2(x5)y=3x+5(5x50)x-(x50)编写程序,输入x的值,计算相应的y值输出(保留3位小数)。#include#includevoidmain()floatx,y;scanf(%f,&x);if(x5)y=x*x-2;elseif(x50)y=3*x+5;elsey=x-sqrt(4*x-1);printf(x=%f,y=%.3fn,x,y);2编写一个程序,根据输入的三角形的三条边判断是否能组成三角形,如果可以则输出它的面积和三角形类型(等边、等腰、直角、一般三角形)。#include#includevoidmain()floata,b,c,s,area;scanf(%f,%f,%f,&a,&b,&c);if(a+bc&b+ca&a+cb)s=(a+b+c)/2;area=sqrt(s*(s*(s-a)*(s-b)*(s-c);printf(area=%fn,area);if(a=b&b=c)printf(等边三角形n);elseif(a=b|a=c|b=c)printf(等腰三角形n);elseif(a*a+b*b=c*c)|(a*a+c*c=b*b)|(b*b+c*c=a*a)printf(直角三角形n);elseprintf(一般三角形n);elseprintf(不能组成三角形n);3设奖金税率r有如下的要求(n代表奖金):0n10005%1000n2000r=8%2000n300010%3000n600015%6000n用switch多分支选择语句编写程序,输入奖金值,计算并输出相应的税率和实际应得奖金值。#includevoidmain()floatn,r,s;intm;printf(请输入奖金值:);scanf(%f,&n);if(n=6000)m=6;elsem=n/1000;switch(m)case0:r=0;break;case1:r=0.05;break;case2:r=0.08;break;case3:case4:case5:r=0.1;break;case6:r=0.15;break;s=n-r*n;printf(税率r=%.0f%,奖金值n=%.2f,实际应得奖金值s=%.2fn,r*100,n,s);4.从键盘输入任意4个数a、b、c、d,按照从大到小的顺序排列后重新输出。#includevoidmain()inta,b,c,d,t;scanf(%d,%d,%d,%d,&a,&b,&c,&d);if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(ad)t=a;a=d;d=t;if(bc)t=b;b=c;c=t;if(bd)t=b;b=d;d=t;if(cd)t=c;c=d;d=t;printf(%d%d%d%dn,a,b,c,d);5.给出一个不超过4位数的正整数,判断它是几位数,并按逆向输出各位数字。例1234,输出为4321。#includevoidmain()intnum,i,j,k,m;printf(输入一个少于4位的正整数:);scanf(%d,&num);if(num=0&num1000&num=100)printf(是一个3位数n);m=num%10;/*求个位上的数字*/k=num/10%10;/*求十位上的数字*/j=num/100;/*求百位上的数字*/printf(逆序数为:%d%d%dn,m,k,j);elseif(num=10)printf(是一个2位数n);m=num%10;/*求个位上的数字*/k=num/10;/*求十位上的数字*/printf(逆序数为:%d%dn,m,k);elseprintf(是一个1位数n);printf(逆序数为:%dn,num);elseprintf(是一个无效的数n);第5章习题一、选择题12345678910BCBCABDBAB二填空题1.循环switch2.4,73.64.#5.026.187.18.sum=809.c=getchar()n:m10.i%13=0break三程序分析题1.output1:216output2:56output3:5772.n=73.Max=18Min=34.1*1=12*1=22*2=43*1=33*2=63*3=95.0123123023013012四、编程题1.从键盘上输入若干字符,以按Enter键结束,统计其中字符A或a的个数。#includestdio.hmain()charch;intk=0;while(ch=getchar()!=n)if(ch=A|ch=a)k=k+1;printf(%dn,k);2.利用=的前100项之积计算p的值。#includemain()doubleterm,result=1; /*累乘项初值应为1*/intn;for(n=2;n=100;n=n+2)term=(double)(n*n)/(n-1)*(n+1); /*计算累乘项*/result=result*term;printf(result=%fn,2*result);3.用1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,问共有几种兑换方案?每种方案各换多少枚?#includemain()intx,y,z,count=0;for(x=1;x=28;x+)for(y=1;y=73;y+)z=100-x-y;if(5*x+2*y+z=150) count+;printf(%d,%d,%dn,x,y,z);printf(count=%dn,count);4.鸡兔同笼,共有98个头,386只脚,编程求鸡、兔各多少只。#includemain() intx,y;for(x=1;x=97;x+) y=98-x;if(2*x+4*y=386)printf(鸡=%d,兔=%d,x,y);5.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。#includemain()intn,i;printf(npleaseinputanumber:n);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;elsebreak;printf(%d,n);6.从键盘任意输入一个4位数x,编程计算x的每一位数字相加之和。例如,输入x为1234,则由1234分离出其千位1、百位2、十位3、个位4,然后计算1+2+3+4=10,并输出10。#include#includemain()inti1,i2,i3,i4,k,n;printf(Inputdatais:);scanf(%d,&n);k=fabs(n); /*取绝对值*/i1=k/1000; /*分离出千位*/i2=(k-i1*1000)/100; /*分离出百位*/i3=(k-i1*1000-i2*100)/10; /*分离出十位*/i4=k%10; /*分离出个位*/printf(Thesumofthetotalbitis%dn,i1+i2+i3+i4);7.打印出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=13+53+33。#includevoidmain()inti,j,k,n;printf(parcissusnumbersare:n);for(n=100;n1000;n+)i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%dn,n);8.利用泰勒级数sin(x)计算sin(x)的值。要求最后一项的绝对值小于10-5,并统计出此时累加了多少项(x由键盘输入)。#include#includemain()intn=1,count=1;floatx;doublesum,term;/*因为位数多,所以定义为双精度*/printf(Inputx:);scanf(%f,&x);sum=x;term=x; /*赋初值*/doterm=-term*x*x/(n+1)*(n+2);sum=sum+term; /*累加*/n=n+2;count+;while(fabs(term)=1e-5);printf(sin(x)=%.1f,count=%dn,sum,count);9编写一个猜数游戏:任意设置一个整数,请用户从键盘上输入数据猜想设置的数是什么,告诉用户是猜大了还是小了。10次以内猜对,用户获胜;否则,告诉用户设置的数据是什么。#includevoidmain()intnum=123,x,n;printf(hint:0number1000n);/*给出数据范围的提示信息*/for(n=1;nnum)printf(bigger!n);if(xnum)printf(smaller!n);if(n=11)printf(Lost!thenumberis%dn,x);10.编程输出以下图案。*#includemain()inti,j;for(i=1;i=1;j-)printf(%c,);for(j=0;j=1;i-)for(j=20-i;j=1;j-)printf(%c,);for(j=0;j2*i-1;j+)printf(*);printf(n);第6章习题一、选择题12345678910DADBDCBDBD二填空题1.02.14m31074.数据类型5.strcpy(S2,S1)#include6.037.7,68.sum=0i=jaij9.410.Tony三程序分析题1.max=85min=5sum=180aver=30.002.a=2b=2c=2d=2e=1f=2g=23.j=454.Ti_saCPormTss_Pgm5.1115四、编程题1从键盘输入15个整数,存放在数组中,找出其中最小数并指出其所在的位置。#include#defineN15main()intmin,i,j,aN;printf(EnterNintegers:n);for(i=0;iN;i+)scanf(%d,&ai);min=a0;for(i=1;iai)min=ai;j=i;printf(%d,%d,min,j);2将输入的十进制正整数化为十六进制数。#includemain()inti,x,j,a20;printf(请输入一个正整数:);while(1)scanf(%d,&x);if(x=0;j-)if(aj=9)printf(%d,aj);elseif(aj=15)printf(%c,aj+A-10);printf(n);3从键盘输入一行字符,统计其中有多少单词,假设单词之间以逗号分隔。#includevoidmain()charstring81;inti,num=0,word=0;charc;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=,)word=0;elseif(word=0)word=1;num+;printf(Thereare%dwordsintheline.n,num);4从键盘输入一字符串,放在字符数组a中,将字符数组a中下标值为偶数的元素按从小到大排序。#include#includevoidmain()chara80,t,m;inti,j,k;printf(请输入一字符串:);gets(a);k=strlen(a);for(i=0;i=k-2;i+=2)m=i;for(j=i+2;jaj)m=j;if(m!=i)t=ai;ai=am;am=t;puts(a);printf(n);5编写程序输出以下杨辉三角形(要求输出10行)。11112113311464115101051#include#includevoidmain()inti,j,a1010;for(i=0;i10;i+)ai0=aii=1;for(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;i10;i+)for(j=0;j=i;j+)printf(%6d,aij);printf(n);6编程将s数组中的字符串的正序和反序进行连接,形成一个新串放在t数组中。例如,当s数组中字符串为ABCD时,则t数组中的内容应为:ABCDDCBA。#include#includemain()chars100,t100;inti,d;printf(PleaseenterstringS:);scanf(%s,s);d=strlen(s);for(i=0;id;i+)ti=si;for(i=0;id;i+)td+i=sd-1-i;t2*d=0;printf(Theresultis:%sn,t);7某公司在传输数据过程中为了安全要对数据进行加密,若传递的是四位的整数,对其进行加密的规则为:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。如:输入数字7659,则加密后的数字为4012#includemain()inta,i,aa4,t;printf(输入一个需加密的四位数整数:);scanf(%d,&a);aa0=a%10;aa1=a%100/10;aa2=a%1000/100;aa3=a/1000;for(i=0;i=3;i+)aai+=5;aai%=10;for(i=0;i=0;i-)printf(%d,aai);printf(n);8编写程序查找数值18在以下二维数组中第一次出现的位置。3451881216544334187#includemain()inti,j,a34=3,4,5,18,8,12,16,54,43,34,18,7;for(i=0;i3;i+)for(j=0;j4;j+)if(aij=18)break;if(j4)break;printf(数值18第一次出现的位置在%d行,第%d列n,i+1,j+1);9设有4行4列的数组a,其元素aij=3*i+2*j-6。编写程序,实现如下功能:(1)求第二行4元素的累加和;(2)求第四列4元素的平均值;(3)求主对角线4元素中负数的个数。#includevoidmain()inta44,i,j,s=0,m=0;floatn=0;for(i=0;i4;i+)for(j=0;j4;j+)aij=3*i+2*j-6;printf(原始数组为:n);for(i=0;i4;i+)for(j=0;j4;j+)printf(%3d,aij);printf(n);for(j=0;j4;j+)s+=a1j;printf(第二行4元素累加和为:%dn,s);for(j=0;j4;j+)n+=aj3;printf(第四列4元素平均值为:%.2fn,n/4.0);for(i=0;i4;i+)if(aii0)m+;printf(主对角线4元素中负数的个数为:%dn,m);10约瑟夫环问题:编号为1,2,3,.,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计程序求出出列顺序。分析:设整型数组a中保存n个人的密码,对应的人出列后,数组元素置0作为标志。顺时针确定下一个人的方法,可将下标加1,再对n求余。#include#defineN100main()inta100;inti,j,m,n,k=0;printf(输入人数n和任选的一个正整数m:);scanf(%d%d,&n,&m);printf(输入n个人的密码:);for(i=0;in;i+)scanf(%d,&ai);printf(n出列顺序为:);for(i=0;in;i+)j=1;while(jm)while(ak=0)/*跳过已出列的人*/k=(k+1)%n;j+;k=(k+1)%n;while(ak=0)/*跳过已出列的人*/k=(k+1)%n;printf(%d,k+1);m=ak;ak=0;第7章习题一、选择题12345678910ADDBADCDBA二填空题1.main()2.main()3函数首部4.解决函数必须“定义在前,使用在后”的原则问题5.int6.定义调用7.地址传递值传递8.returnvoid9.voidf(floata,floatb)floatf(floata,floatb)10.static三程序分析题1.a=482.8,173.27214.BASICCCOBOLFORTRANPASCALSmalltalk5.6123654四、编程题1写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。#include#includevoidmain()intprime(int);intn;printf(Inputaninteger:);scanf(%d,&n);if(prime(n)printf(n%disaprime.n,n);elseprintf(n%disnotaprime.n,n);intprime(intn)intflag=1,i;for(i=2;isqrt(n)&flag=1;i+)if(n%i=0)flag=0;return(flag);2写一个函数,用于实现函数strcmp()的功能,能将两个字符串进行比较,将两个字符串中第一个不相同字符的ASCII码值之差作为函数的返回值。#includeintMyStrcmp(chars,chart);main()charstr120,str220;printf(Inputstring:);gets(str1);printf(Inputanotherstring:);gets(str2);if(MyStrcmp(str1,str2)0)printf(str1str2n);elseif(MyStrcmp(str1,str2)0)printf(str1str2n);elseprintf(str1=str2n);intMyStrcmp(chars,chart)inti;for(i=0;si=ti;i+)if(si=0)return0;return(si-ti);3.写一个函数,用于实现函数strcat()的功能,能将两个字符串连接。#includevoidmain()voidconcatenate(charstring1,charstring2,charstring);chars1100,s2100,s100;printf(inputstring1:);scanf(%s,s1);printf(inputstring2:);scanf(%s,s2);concatenate(s1,s2,s);printf(nThenewstringis%sn,s);voidconcatenate(charstring1,charstring2,charstring)inti,j;for(i=0;string1i!=0;i+)stringi=string1i;for(j=0;string2j!=0;j+)stringi+j=string2j;stringi+j=0;4.从键盘任意输入10个整数,用函数编程实现将其中最大数与最小数的位置对换后,再输出调整后的数组。#include#defineARRSIZE10voidMaxMinExchang(inta,intn)intmaxValue=a0,minValue=a0,maxPos=0,minPos=0;inti,temp;for(i=1;imaxValue)maxValue=ai;maxPos=i;elseif(aiminValue)minValue=ai;minPos=i;temp=amaxPos;amaxPos=aminPos;aminPos=temp;main()intaARRSIZE,i;printf(Input%dNumbers:n,ARRSIZE);for(i=0;iARRSIZE;i+)scanf(%d,&ai);MaxMinExchang(a,ARRSIZE);printf(AfterMaxMinExchange:n);for(i=0;iARRSIZE;i+)printf(%4d,ai);printf(n);5.写一函数,能对给定的一个二维数组(33)进行转置(即行列互换)。#include#defineN3intarrayNN;voidmain()voidconvert(intarray3);inti,j;printf(inputarray:n);for(i=0;iN;i+)for(j=0;jN;j+)scanf(%d,&arrayij);printf(noriginalarray:n);for(i=0;iN;i+)for(j=0;jN;j+)printf(%5d,arrayij);printf(n);convert(array);printf(convertarray:n);for(i=0;iN;i+)for(j=0;jN;j+)printf(%5d,arrayij);printf(n);voidconvert(intarray3)inti,j,t;for(i=0;iN;i+)for(j=i+1;jN;j+)t=arrayij;arrayij=arrayji;arrayji=t;6.写一函数,能用“起泡法”对输入的10个字符按由小到大顺序排序。#include#include#defineN10charstrN;voidmain()voidsort(charstr);inti,flag;for(flag=1;flag=1;)printf(inputstring:n);scanf(%s,str);if(strlen(str)N)printf(stringtoolong,inputagain!);elseflag=0;sort(str);printf(stringsorted:n);for(i=0;iN;i+)printf(%c,stri);printf(n);voidsort(charstr)inti,j;chart;for(j=0;jN-1;j+)for(i=0;(istri+1)t=stri;stri=stri+1;stri+1=t;7.编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数。#includeintletter,digit,space,others;voidmain()voidcount(charstr);chartext80;printf(inputstring:n);gets(text);printf(string:);puts(text);letter=0;digit=0;space=0;others=0;count(text);printf(nletter:%dndigit:%dnspace:%dnothers:%dn,letter,digit,space,others);voidcount(charstr)inti;for(i=0;stri!=0;i+)if(stri=a&stri=A&stri=0&stri=9)digit+;elseif(stri=32)space+;elseothers+;8.编写程序输出310000内的可逆素数。可逆素数是指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。如157和751均为素数,它们是可逆素数。要求调用两个子函数实现。#include#include#includeintinvert(inta)ints=0;while(a0)s=10*s+a%10;a/=10;returns;intprime(inta)inti;for(i=2;i=(int)sqrt(a);i+)if(a%i=0)return0;return1;main()inti;for(i=3;i10000;i+)if(prime(i)if(prime(invert(i)printf(%5d,i);printf(n);9.编写一个函数,实现将一个十进制数转换成八进制数。#include#includevoidmain()inti,n;chara33;voidtrans10_8(charx,intm);printf(nInputapositiveinteger:);scanf(%d,&n);trans10_8(a,n);for(i=strlen(a)-1;i=0;i-)printf(%c,ai);printf(n);voidtrans10_8(charx,intm)intr,i=0;while(m0)r=m%8;xi=r+48;m=m/8;i+;xi=0;10.编写一个函数,实现对由实参传来的一个字符串,将其字符顺序颠倒后重新存放。#include
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!