C语言课后习题答案.doc 20页

  • 159.50 KB
  • 2022-04-22 11:19:51 发布

C语言课后习题答案.doc

  • 20页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'C语言课后习题答案第一章习题答案一、选择题1~5:BDCDA6~10:DABBB11~12:CC二、填空题1、main()2、函数首部,函数体3、函数4、编辑、编译、连接、运行5、.cpp、.obj、.exe6、;或分号三、编程题#include/*包含标准库的信息*/voidmain()/*定义名为main的函数,它不接受参数值*/{/*main函数的语句都被括在花括号中*/printf("hello,worldn");/*main函数调用库函数printf以显示字符序列,其中n代表换行符*/}第二章习题答案一、选择题1~5:CBABB6~10:CDCDD11~15:CADBC16~20:BDAAD二、填空题1、整型,实型,字符型,枚举类型2、13、94、123535145、2,16、2,27、102008、a=149、2,3,110、double第三章习题答案 一、选择题1~5:CBBBC6~10:DDDBB二、填空题1、控制语句,表达式语句,复合语句2、;3、{}4、15、a6、c:dec=120,oct=170,hex=78,ASCII=x7、32767,327678、10,A,109、3310、(1)123.456001(2)□□□□□□□123.456(3)123.4560(4)8765.456700(5)□□□□□□8765.457(6)8765.4567(7)8765.4567三、编程题1、参考答案:#includevoidmain(){inta,b,c;longintu,n;floatx,y,z;charc1,c2;a=3;b=4;c=5;x=1.2;y=2.4;z=-3.6;u=51274;n=128765;c1="a";c2="b";printf("n");printf("a=%2db=%2dc=%2dn",a,b,c);printf("x=%8.6f,y=%8.6f,z=%9.6fn",x,y,z);printf("x+y=%5.2fy+z=%5.2fz+x=%5.2fn",x+y,y+z,z+x); printf("u=%6ldn=%9ldn",u,n);printf("c1="%c"or%d(ASCII)n",c1,c1);printf("c2="%c"or%d(ASCII)n",c2,c2);}2、参考答案:#includevoidmain(){floata,b,c,t;printf("pleaseinputa,b,c:n");scanf("%f,%f,%f",&a,&b,&c);t=(a+b+c)/3;printf("averageof%6.2f、%6.2fand%6.2fis%6.2fn",a,b,c,t);}3、参考答案:#includemain(){intR,d;floats;printf("请输入圆的半径");scanf("%d",&R);d=2*R;c=2*3.14159*R;printf("d=%d,c=%fn",d,c);}4、参考答案:#includevoidmain(){inth,f,x,y;/*x为鸡的数量,y为兔的数量*/printf("请输入鸡兔的总头数h,总脚数f:");scanf("%d%d",&h,&f);x=(4*h-f)/2;y=(f-2*h)/2;printf("笼中有鸡%d只,有兔%d只。n",x,y);}第四章习题答案一、选择题CDDDDCDBBC二、填空题 1、&&,||,!,!,||2、(y%20)3、14、(a+b>c&&a+c>b&&b+c>a)5、2336、7三、编程题1、参考答案:#includevoidmain(){intx;scanf("%d",&x);if(x%50&&x%70)printf("yesn");elseprintf("non");}2、参考答案:#includevoidmain(){inta,b,c,max;printf("请输入三个整数:%%d%%d%%dn");scanf("%d%d%d",&a,&b,&c);if(a>=b)if(a>=c)max=a;elsemax=c;elseif(b>=c)max=b;elsemax=c;printf("n最大数为:%dn",max);}3、参考答案:#includevoidmain(){floatx,y;printf("请输入x的值:"); scanf("%f",&x);if(x<1)y=1;elseif(x<10)y=2*x-1;elsey=3*x-11;printf("y=%.2fn",y);}4、参考答案:#includevoidmain(){intyear;floatmoney,rate,total;/*money:本金rate:月利率total:本利合计*/printf("Inputmoneyandyear=?");scanf("%f%d",&money,&year);/*输入本金和存款年限*/if(year1)rate=0.00315;/*根据年限确定利率*/elseif(year2)rate=0.00330;elseif(year3)rate=0.00345;elseif(year5)rate=0.00375;elseif(year8)rate=0.00420;elserate=0.0;total=money+money*rate*12*year;/*计算到期的本利合计*/printf("Total=%.2fn",total);}第五章习题答案一、选择题1~5:ACCBA6~10:ACDCB二、填空题1、(1)i<=9或i<10(2)j%3!=02、73、(1)ch=ch+1、(2)printf("n")三、编程题1、参考答案:#include voidmain(){inti=2;longp=1;do{p=p*i;i=i+2;}while(i<10);printf("2*4*6*8=%ldn",p);}2、参考答案:#includevoidmain(){intn=0;charc;c=getchar();while(c!="n"){if((c>="a"&&c<="z")||(c>="A"&&c<="Z"))n++;c=getchar();}printf("%dn",n);}3、参考答案:#includevoidmain(){inta,max;scanf("%d",&a);max=a;while(a!=0){scanf("%d",&a);if(maxvoidmain(){intday=0,buy=2;floatsum=0.0,ave; do{sum+=0.8*buy;day++;buy*=2;}while(buy<=100);ave=sum/day;printf(“%f”,ave);}5、参考答案:#includevoidmain(){intf1,f2,f5,count=0;for(f5=0;f5<=20;f5++)for(f2=0;f2<=(100-f5*5)/2;f2++){f1=100-f5*5-f2*2;if(f5*5+f2*2+f1100)printf("No.%2d>>5:%4d2:%4d1:%4dn",++count,f5,f2,f1);}printf("共有%d种换法",count);}6、参考答案:#includevoidmain(){inti,j,n;printf("nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n-i;j++)printf("");for(j=1;j<=2*i-1;j++)printf("*");printf("n");}}7、参考答案:#includevoidmain(){inti,j; floatg,sum,ave;for(i=1;i<=6;i++){sum=0;for(j=1;j<=5;j++){scanf(“%f”,&g);sum+=g;}ave=sum/5;printf(“No.%dave=%5.2fn”,i,ave);}}8、参考答案:#includevoidmain(){intn,t,number=20;floata=2,b=1,s=0;for(n=1;n<=number;n++){s=s+a/b;t=a;a=a+b;b=t;}printf("s=%9.6fn",s);}第六章习题答案一、选择题1~5:CBABD6~10:CDBCD二、填空题1、库函数(或系统函数),自定义函数2、无参函数,有参函数3、传值方式4、实参,形参5、136、maxis27、15 8、1,2,3三、编程题1、参考答案:#includeintis_prime(inta){inti,p=1;for(i=2;iintgongyue(intnum1,intnum2){inttemp,a,b;if(num1=i三、编程题1、参考答案:#includevoidmain(){inti,a[20],s,count;s=count=0;for(i=0;i<20;i++)scanf("%d",&a[i]);for(i=0;i<20;i++){if(a[i]<0)continue;s+=a[i];count++;}printf("s=%dtcount=%dn",s,count);}2、参考答案:#includevoidmain(){inta[3][4],i,j,max;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);max=a[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>max)max=a[i][j];printf("max=%dn",max);}3、参考答案:#includevoidmain() {inta[11]={3,4,7,9,10,13,14,15,18,20};inti,j,n;scanf("%d",&n);i=0;while(i<10){if(ni;j--)a[j]=a[j-1];a[i]=n;break;}i++;}if(i>=10)a[10]=n;for(i=0;i<11;i++)printf("%4d",a[i]);}第八章习题答案一、选择题1?5ABCCB6?10DACBB11?15DACCC二、填空题1.(1)*(2)&2.(1)*p(2)**a(3)23.104.*p>*s5.*(++p)三、编程题1.编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。#include#includevoidInverse(char*pStr)?main(){charstr[80]?printf("Inputastring:n")?gets(str)?/*输入字符串*/Inverse(str)?/*将存于str数组中的字符串逆序存放*/printf("Theinversedstringis:n")? puts(str)?/*输出字符串*/}/*函数功能:实现字符串逆序存放函数参数:字符指针变量,所指向的存储单元存放源字符串,逆序后的字符串也存放于此返回值:无*/voidInverse(char*pStr){intlen?chartemp?char*pStart?/*指针变量pStart指向字符串的第一个字符*/char*pEnd?/*指针变量pEnd指向字符串的最后一个字符*/len=strlen(pStr)?/*求出字符串长度*/for(pStart=pStr,pEnd=pStr+len?1?pStartintFindMax(intnum[],intn,int*pMaxPos)?intFindMin(intnum[],intn,int*pMinPos)?main(){intnum[10],maxValue,maxPos,minValue,minPos,i?printf("Input10numbers:n")?for(i=0?i<10?i++){scanf("%d",&num[i])?/*输入10个数*/}maxValue=FindMax(num,10,&maxPos)?/*找最大值及其所在下标位置*/minValue=FindMin(num,10,&minPos)?/*找最小值及其所在下标位置*/printf("Max=%d,Position=%d,Min=%d,Position=%dn",maxValue,maxPos,minValue,minPos)?}/*函数功能:求n个数中的最大值及其所在下标位置函数入口参数:整型数组num,存储n个整数,整型变量n,表示数组元素个数函数出口参数:整型指针变量pMaxPos,指向的地址单元存储最大值在数组中的下标位置函数返回值:最大值*/intFindMax(intnum[],intn,int*pMaxPos) {inti,max?max=num[0]?/*假设num[0]为最大*/*pMaxPos=0?/*假设最大值在数组中的下标位置为0*/for(i=1?imax){max=num[i]?*pMaxPos=i?}}returnmax?}/*函数功能:求n个数中的最小值及其所在下标位置函数入口参数:整型数组num,存储n个整数,整型变量n,表示数组元素个数函数出口参数:整型指针变量pMinPos,指向的地址单元存储最小值在数组中的下标位置函数返回值:最小值*/intFindMin(intnum[],intn,int*pMinPos){inti,min?min=num[0]?/*假设num[0]为最小*/*pMinPos=0?/*假设最小值在数组中的下标位置为0*/for(i=1?i<10?i++){if(num[i]voidmain(void){inti?char*pcolor[5]={"red","blue","yellow","green","purple"}?voidfsort(char*color[],intn)?fsort(pcolor,5)?for(i=0?i<5?i++)printf("%s",pcolor[i])?}voidfsort(char*color[],intn) {intk,j?char*temp?for(k=1?k0){temp=color[j]?color[j]=color[j+1]?color[j+1]temp?}}4.编写一个能对任意m×n阶矩阵进行转置运算的函数Transpose()。#include#defineROW3#defineCOL4voidTranspose(int(*a)[COL],int(*at)[ROW],introw,intcol)?voidInputMatrix(int(*s)[COL],introw,intcol)?voidPrintMatrix(int(*s)[ROW],introw,intcol)?main(){ints[ROW][COL]?/*s代表原矩阵*/intst[COL][ROW]?/*st代表转置后的矩阵*/printf("Pleaseentermatrix:n")?InputMatrix(s,ROW,COL)?/*输入原矩阵,s指向矩阵s的第0行,是行指针*/Transpose(s,st,ROW,COL)?/*对矩阵s进行转置,结果存放于st中*/printf("Thetransposedmatrixis:n")?PrintMatrix(st,COL,ROW)?/*输出转置矩阵,*st指向st的第0行,是行指针*/}/*函数功能:对任意row行col列的矩阵转置函数入口参数:指向一维整型数组的指针变量a,指向单元存放转置前的矩阵元素整型变量row,矩阵的行数即二维整型数组的行数整型变量col,矩阵的列数即二维整型数组的列数函数出口参数:指向一维整型数组的指针变量at,指向单元存放转置后的矩阵元素函数返回值:无*/voidTranspose(int(*a)[COL],int(*at)[ROW],introw,intcol){inti,j?for(i=0?istructteacher{charname[8]?charsex?intage?chardepartment[20]?floatsalary?}?structteachertea[2]={{"Mary","W",40,"Computer",1234},{"Andy","M",55,"English",1834}}?main(){inti?structteacher*p?for(i=0?i<2?i++)printf("%s,t%c,t%d,t%s,t%f",tea[i].name,tea[i].sex,tea[i].age,tea[i].department,tea[i].salary)?for(p=tea?pname,p?>sex,p?>age,p?>department,p?>salary)?}2.定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。#includestruct{intyear?intmonth?intday?}date?main(){intdays?printf(“Inputyear,month,day:”)?scanf(“%d,%D,%d”,&date.year,&date.month,&date.day)?switch(date.month){case1:days=date.day?break?case2:days=date.day+31?break?case3:days=date.day+59?break?case4:days=date.day+90?break?case5:days=date.day+120?break?case6:daysdate.day+31?break?case7:days=date.day+181?break?case8:days=date.day+212?break?case9:daysdate.day+243?break?case10:daysdate.day+273?break?case11:days=date.day+304?break? case12:daysdate.day+334?break?}if((date.year%40&&date.year%100!=0||date.year%4000)&&date.month>3)days+=1?printf(“n%d/%disthe%dthdayin%d.”,date.month,date.day,days,date.year)?}3.构建简单的手机通讯录,手机通讯录包括信息(姓名、年龄、联系电话),要求实现新建、查询功能。假设通信录最多容纳50名联系人信息。#include#include/*手机通讯录结构定义*/structfriends_list{charname[10]?/*姓名*/intage?/*年龄*/chartelephone[13]?/*联系电话*/}?intCount=0?/*定义全局变量Count,记录当前联系人总数*/voidnew_friend(structfriends_listfriends[])?voidsearch_friend(structfriends_listfriends[],char*name)?intmain(void){intchoice?charname[10]?structfriends_listfriends[50]?/*包含50个人的通讯录*/do{printf("手机通讯录功能选项:1:新建2:查询0:退出n")?printf("请选择功能:")?scanf("%d",&choice)?switch(choice){case1:new_friend(friends)?break?case2:printf("请输入要查找的联系人名:")?scanf("%s",name)?search_friend(friends,name)?break?case0:break?}}while(choice!=0)? printf("谢谢使用通讯录功能!n")?return0?}/*新建联系人*/voidnew_friend(structfriends_listfriends[]){structfriends_listf?if(Count50){printf("通讯录已满!n")?return?}printf("请输入新联系人的姓名:")?scanf("%s",f.name)?printf("请输入新联系人的年龄:")?scanf("%d",&f.age)?printf("请输入新联系人的联系电话:")?scanf("%s",f.telephone)?friends[Count]=f?Count++?}/*查询联系人*/voidsearch_friend(structfriends_listfriends[],char*name){inti,flag=0?if(Count0){printf("通讯录是空的!n")?return?}for(i=0?i#include#defineNULL0#defineLENsizeof(structteacher)structteacher{intno?charname[8]?floatwage?structteacher*next?}?intn?structteacher*creat(void){structteacher*head?structteacher*p1,*p2?n=0?p1=p2=(structteacher*)malloc(LEN)?scanf(“%d%s%f”,&p1?>no,p1?>name,&p1?>wage)?head=NULL?while(p1?>no!=0){n=n+1?if(n1)headp1?elsep2?>nextp1?p2=p1?p1=(structteacher*)malloc(LEN)?scanf(“%d%s%f”,&p1?>no,p1?>name,&p1?>wage)?}p2?>next=NULL?return(head)?}voidprint(structteacher*head){structteacher*p?p=head?if(head!=NULL)do{printf(“%dt%st%fn”,p?>no,p?>name,p?>wage)?p=p?>next?}while(p!=NULL)?}5.在上一题基础上,假如已经按学号升序排列,写出插入一个新教师的结点的函数insert。structteacherinsert(structteacher*head,structteacher*tea){structteacher*p0,*p1,*p2?p1=head? p0=tea?if(head=NULL){head=p0?p0?>next=NULL?}elsewhile((p0?>no>p1?>no)&&(p1?>next!=NULL)){p2=p1?p1=p1?>next?}if(p0?>nono){if(headp1)head=p0?else{p2?>nextp0?p0?>nextp1?}else{p1?>nextp0?p0?>next=NULL?}n=n+1?return(head)?}·'