收藏 分销(赏)

程序设计基础——C语言课后习题参考答案.docx

上传人:w****g 文档编号:3153594 上传时间:2024-06-21 格式:DOCX 页数:52 大小:119KB
下载 相关 举报
程序设计基础——C语言课后习题参考答案.docx_第1页
第1页 / 共52页
程序设计基础——C语言课后习题参考答案.docx_第2页
第2页 / 共52页
程序设计基础——C语言课后习题参考答案.docx_第3页
第3页 / 共52页
程序设计基础——C语言课后习题参考答案.docx_第4页
第4页 / 共52页
程序设计基础——C语言课后习题参考答案.docx_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、课后习题1答案一、选择题1、A 2、D 3、C二、编程题1. #include int main()printf(*n);printf(* Hello World! *n);printf(*n);return 0;2. #include int main()printf( *n);printf( *n);printf( *n);printf(*n);return 0;课后习题2答案一、选择题1-5、 DDBAB6-10、 DDABA11-15、CAABA16、 B二、填空题1、54,146,2552、字母,数字,下划线3、(换行字符)换行,(退格字符)移动到当前行的前一个位置,(反斜杠字符)产

2、生反斜杠字符4、float,double,char5、(10101010)2,(00010000)26、(11111011)2,(373)8,(fb)167、0000000010011101, 0000000010011101,1000000010011001,1111111101100111课后习题3答案一、选择题1-5、 CB DACD6-10、 CCBAC11-15、CADDB16-17、CD二、填空题1、-162、12,43、m/100,m/10%10,m%104、(注:表示空格)12#12#3.1415926000#3.1415926000#5、55,A,B三、编程题1. #defi

3、ne PI 3.14#include #include int main()float r,s,l;scanf(%f,&r); /*输入圆的半径*/s= PI*r*r; /*计算圆的面积*/l=2*PI*r; /*计算圆的周长*/printf(r=%4.1f,s=%4.1f,l=%4.1fn,r,s,l);return 0;运行结果:3r= 3.0,s=28.3,l=18.82 #include int main()float x,y,z,s,v;scanf(%f%f%f,&x,&y,&z); /*输入长方体的长、宽和高*/s=2*(x*y+x*z+y*z); /*计算长方体的表面积*/v=x

4、*y*z; /*计算长方体的体积*/printf(Area=%.2f,Volume=%.2fn,s,v);return 0;运行结果:3 4 5Area=94.00,Volume=60.003#include #include int main()float x1,y1,x2,y2,x3,y3,a,b,c,p,s;/*输入3个顶点的坐标*/scanf(%f%f%f%f%f%f,&x1,&y1,&x2,&y2,&x3,&y3);/*求第一条边的长度*/a=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);/*求第二条边的长度*/b=sqrt(x1-x3)*(x1-x3)+(

5、y1-y3)*(y1-y3);/*求第三条边的长度*/c=sqrt(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3);p=(a+b+c)/2;/*求三角形的面积*/s=sqrt(p*(p-a)*(p-b)*(p-c);printf(Area=%fn,s);return 0;运行结果:5 6 3 8 0 23Area=12.000013课后习题4答案一、选择题1-5、 CCCCC 6-8、 DBB二、填空题1、02、y%2或y%2=13、(x0 & y0) | (x0 & z0 & y0 & z2 & x3 | xc & a+cb & b+caa=b & b=ca=b | a=c |

6、 b=c9、0.60000010、x=0xamin11、4-i2*i-112、#*#*#*13、a=16,y=60三、编程题1. #include int main()int a,b,num;scanf(%d,%d,&a,&b); if(a*a+b*b100)num=(a*a+b*b)/100;else num=a+b;printf(%d,num);return 0;运行结果:(1)测试数据一:3 47(2)测试数据二:9 512. #include int main()int x;float y;scanf(%d,&x);if(x=0)y=0;else if(x=10)y=x;else if

7、(x=20)y=10;else if(x40)y=-0.5*x+20;printf(%fn,y);return 0;3. #includeint main()int score;char grade;scanf(%d,&score); /*输入百分制成绩*/switch(score/10)case 10: case 9: grade=A; break;case 8: grade=B; break;case 7: grade=C; break;case 6: grade=D; break;default: grade=E;printf(%cn,grade);return 0;运行结果:96A4.

8、 #includeint main()int i;for(i=1;i=99;i+)if(i*i%10=i | i*i%100=i)printf(%dn,i);return 0;运行结果:15625765. #includeint main()int n,i,j;printf(请输入行数:);scanf(%d,&n);/*外层循环控制输出的行数*/for(i=1;i=n;i+)/*输出每行的空格*/for(j=1;j=i-1;j+)printf( );/*输出每行的星号*/for(j=1;j=2*n+1-2*i;j+)printf(*);/*输出换行符*/printf(n);return 0;6

9、. #include #define EPS 1E-7int main()int n;double x,an,sum;printf(input x:);scanf(%lf,&x);sum=0;an=1;n=1;dosum+=an; an*=(-x*x)/(n+1)*(n+2);n+=2;while(fabs(an)=EPS);printf(sin(%.4lf)=%.4lfn,x,sum);return 0;课后习题5答案一、选择题1-5、 DABDC6-8、 DCB二、填空题1、j=2j=02、Search Successful!The index is:53、j+=2aiaj4、#&*&%三

10、、编程题1.#include #define N 30int main()int arrayN,i,j,sum=0;float arrAver6;for(i=0;iN;i+)arrayi=2*(i+1);for(i=0;i6;i+)/*按顺序求5个数的和*/for(j=0;j5;j+)sum+=array5*i+j;/*求5个数的平均值*/arrAveri=sum/5.0;for(i=0;i6;i+)printf(%.2f ,arrAveri);printf(n);return 0;运行结果:6.00 22.00 48.00 84.00 130.00 186.002.#include #def

11、ine M 5#define N 4int main()int arrMN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0,0,0,0;int i,j;for(j=0;jN;j+)for(i=0;iM-1;i+)arrM-1j+=arrij;for(j=0;jN;j+)printf(%d ,arrM-1j);printf(n);return 0;运行结果:28 32 36 403.#include#define M 5#define N 4int main()int aMN;int i,j,maxj,count=0,flag;printf(请输入%d*%d阶矩

12、阵A:n,M,N );for(i=0;iM;i+)for(j=0;jN;j+)scanf(%d,&aij); for(i=0;iM;i+)maxj=0;for(j=1;jN;j+)/*找到第i行中最大的那个元素的列下标*/if(aimaxjaij)maxj=j;flag=1;/*定位第maxj列,看看aimaxj是否是该列中最小的那个元素 如果是不是,则flag为0;如果是,则flag保持为1*/for(j=0;jM;j+)if(ajmaxjaimaxj)flag=0;if(flag=1)count+;printf(第%d个鞍点:a%d%d=%dn,count,i,maxj,aimaxj);i

13、f(count=0)printf(没有鞍点); return 0;4.#include#define N 40int main() int i,j=0,iMax,max,count;char strN;char insertStr5=(,m,a,x,);/待插入的多个字符“(max)”printf(输入一个字符串:);gets(str);/*用假设法求字符串str中最大的元素max和最大元素所在的下标iMax*/count=strlen(str);/*字符串str中字符元素的个数*/max=str0; /*假设字符串的第一个字符最大*/iMax=0; /*字符串中最大字符的下标置为0*/for

14、(i=1;imax)max=stri;/*字符串中最大的字符存放到max中*/iMax=i; /*字符串中最大的字符的下标存放到iMax中*/*字符串最大的字符后的字符依次往后移动5个字符*/for(i=count-1;iiMax;i-)stri+5=stri;/*字符串最大的字符后插入字符串“(max)”*/for(i=iMax+1;i=iMax+5;i+)stri=insertStrj;j+;/*新串的末尾加上0*/strcount+5=0;puts(str); return 0;运行结果:MyFriendMy(max)Friend5.#include#define M 40#define

15、 N 20int main()char strAM,strBN,cntB,i=0,j=0;printf(请输入字符串a:);gets(strA);printf(请输入字符串b:);gets(strB);cntB=strlen(strB);/*找到a串的末尾*/while(strAi!=0)i+;if(cntB5)/*将b串的所有字符都连接到a串末尾*/while(strBj!=0)strAi+j=strBj;j+;else/*将b串的前5个字符连接到a串末尾*/while(j5)strAi+j=strBj;j+;/*新串的末尾加上串结束标志0*/ strAi+j=0;puts(strA); r

16、eturn 0;运行结果:(1)测试数据一:请输入字符串a:hubei请输入字符串b:wuhanhubeiwuhan(2)测试数据二:请输入字符串a:shanxi请输入字符串b:xianhubeiwuhan6.略7.#include #define N 6int main()/*学生的学号数组*/char numN9=99077101,99077102,99077103,99077104,99077105,99077106,tmpNum9;/*学生的姓名数组*/char nameN8=张红,王建,王连,李立,刘虹,丁平,tmpName8;/*学生的四门课程数组*/int scoreN4=85,

17、90,92,88,90,95,95,90,76,78,80,70,56,36,66,97,78,79,87,89,89,79,70,87,tmpScore;int sumN,i,j,k;float averN,tmpAver; /*学生平均分数组*/*求每个学生4门课程成绩的总分sum和平均分ave*/for(i=0;iN;i+)sumi=0; /*每个学生4门课程成绩总分置0*/for(j=0;j4;j+)sumi+=scoreij;averi=(float)sumi/4;/*用冒泡排序法将学生信息按升序排序*/for(i=1;iN;i+)for(j=0;javerj+1)/*交换平均成绩*

18、/tmpAver=averj;averj=averj+1;averj+1=tmpAver;/*交换学号*/strcpy(tmpNum,numj);strcpy(numj,numj+1);strcpy(numj+1,tmpNum);/*交换姓名*/strcpy(tmpName,namej);strcpy(namej,namej+1);strcpy(namej+1,tmpName);/*交换成绩*/for(k=0;k4;k+)tmpScore=scorejk;scorejk=scorej+1k;scorej+1k=tmpScore;/*按格式输出学生所有信息*/printf( 学号t 姓名t 数学

19、t 物理t 英语t计算机t平均成绩n);for(i=0;iN;i+)printf(%st%st,numi,namei); /*输出学号和姓名*/for(j=0;j4;j+)printf(%4dt,scoreij);/*输出4科成绩*/printf(%6.1fn,averi);/*输出平均分*/return 0;课后习题6答案一、选择题1-5、 DBADB6-10、 BABBB二、填空题1、0 2 4 6 8 10 12 14 16 180 2 4 6 8 10 12 14 16 182、8,173、10104、7三、编程题1#include int F(int);int main()int a

20、;printf(input a number:);scanf(%d,&a);if (F(a)=0)printf(不是水仙花数。n);elseprintf(是水仙花数。n);return 0;int F(int a)int b,c,d;b=a/100;/*百位*/c=a%100/10;/*十位*/d=a%10;/*个位*/if (a=b*b*b+c*c*c+d*d*d)return 1;elsereturn 0;2#include#define N 30/*函数名:提取str数组中的数字字符,转换成数字存放到num数组中 函数参数:str为字符数组 num为整型数组返回值:num数组中数字的个数

21、*/int fun(char str,int num)int i,f=0,n=0,j=0;for(i=0;stri!= 0;i+)/*遍历整个数组str元素 */if(stri=0 & stri=9) /*为数字字符*/numj=stri- 0; /*将数字字符转换为数字*/j+;return j; /*返回num数组中有多少个数字*/int main()char stringN;int numberN;int n,i;long sum=0;gets(string);n=fun(string,number);/*number数组中有n个数字元素*/*将number数组中的数字转换成整数值,存放

22、到sum变量中*/sum=number0;for(i=1;in;i+) sum=sum*10+numberi; printf(%ldn,sum);return 0;3(1)递归程序#include int half(int s,int a,int b,int key)int mid;if(a=b)if(key=sa)return (a);elsereturn (-1);elsemid=(a+b)/2;if(keysmid)return(half(s,mid+1,b,key);if(key=smid)return (mid); (2)非递归程序#include int half(int s,in

23、t a,int b,int key)int left=0;int right=n-1;int middle;while(leftsmiddle)left=middle+1;elseright=middle-1;return -1;课后习题7答案一、选择题1-5、 CBDCD6-10、 CBACA11-12、DC二、填空题1、302、12,10,10,123、*(p+5)4、*pp-str5、46、98768767、*(p+4*i+j)8、pij 或 *(*(p+i)+j) 或 (*(p+i)j9、pqmax*qmin三、程序设计题1.方法一:#include #include /*函数功能:将

24、字符串str2逆序后放入字符串str1中 函数参数:字符串指针str1 字符串指针str2 函数返回值:void*/void strreverse(char *str1,char *str2)char *p1,*p2;int len2;/*获取str2所指向的字符串的长度*/len2=strlen(str2);p1=str1;p2=str2+len2-1;/*将str2所指向的字符串其逆序放入str1中*/while(p2=str2)*p1=*p2;p1+;p2-;/*str1所指向的字符串的末尾增加串结束标志*/*p1=0;int main()char str120;char str220;

25、scanf(%s,str2);strreverse(str1,str2);printf(逆序后的字符串为:%sn,str1);return 0;方法二:#include #include /*函数功能:将字符串str2逆序后放入字符串str1中 函数参数:字符串指针str1 字符串指针str2 函数返回值:void*/void strreverse(char *str1,char *str2)int len2,i;char tmp;/*获取str2所指向的字符串的长度*/len2=strlen(str2);/*将str2所指向的数组元素全部逆序*/for(i=0;ilen2/2;i+)tmp=

26、*(str2+i);*(str2+i)=*(str2+len2-1-i);*(str2+len2-1-i)=tmp;/*将str2所指向的数组中的元素依次拷贝到str1所指向的数组中*/for(i=0;ilen2;i+)*str1+=*str2+;/*str1所指向的数组的末尾加0*/*str1=0;int main()char str120;char str220;scanf(%s,str2);strreverse(str1,str2);printf(逆序后的字符串为:%sn,str1);return 0;运行结果:abcdefg逆序后的字符串为:gfedcba2.方法一:#include

27、#include /*函数功能:将书名按照由大到小的顺序排序 函数参数:书名的二维数组bookName 书的本数n 函数返回值:void*/void sort(char bookName8,int n)char tempName8; int i,j; for(i=1;i=n-1;i+) /*冒泡法排序*/for(j=1;j0)strcpy(tempName,bookNamej-1);strcpy(bookNamej-1,bookNamej);strcpy(bookNamej,tempName);/*函数功能:输出各字符串 函数参数:书名的二维数组bookName 书的本书n 函数返回值:voi

28、d*/void print(char bookName8,int n)int i; for(i=0;in;i+)printf(%sn,bookNamei);int main()char name8=Java,C,PHP,HTML,Pascal;int n=5;sort(name,n); /*对字符串排序*/print(name,n); /*输出排序好的各字符串*/return 0;方法二:#include #include /*函数功能:将书名按照由大到小的顺序排序 函数参数:指针数组name 数组元素个数n 函数返回值:void*/void sort(char *name,int n)cha

29、r* temp=NULL; int i,j; for(i=1;i=n-1;i+) /*冒泡法排序*/for(j=1;j0)temp=namej-1;namej-1=namej;namej=temp;/*函数功能:输出各字符串 函数参数:指针数组name 数组元素个数n 函数返回值:void*/void print(char *name,int n)int i; for(i=0;iday2、ex3、234、2002Shangxian5、char *data;struct link *next;6、struct list *next;int data;7、x.link=z;8、134319、(st

30、ruct list *) malloc(sizeof(struct list);(struct list *)malloc(sizeof(struct list);return(h); 或 return h;10、break;pre-next=newp;newp-next=suc;三、编程题1. 难度系数:解题思路:用daytab数组存放非闰年和闰年各月份的天数。对于年year,判断其是否为闰年的条件为: leap=(year%4=0&year%100!=0|year%400=0);用一个结构体类型date的变量dt存放用户输入的日期。程序如下:#include/*数组daytab存放非闰年和

31、闰年各月份的天数*/int daytab213=0,31,28,31,30,31,30,31,31,30,31,30,31,0,31,29,31,30,31,30,31,31,30,31,30,31;/*日期struct date结构体*/struct date int year;int month;int day;dt;/*函数功能:求指定日期是该年的第几天 函数参数:年year 月month 日day 函数返回值:整数第几天day*/int day_of_year(int year,int month,int day)int i,leap;/*是闰年leap=1,非闰年leap=0*/le

32、ap=(year%4=0&year%100!=0|year%400=0);for(i=1;idaytableapi;i+)yearday-=daytableapi;*pmonth=i;*pday=yearday;int main()int k,days;while(1) /*用户选择:起到菜单的作用*/printf(1:日期天数n2:年,天数日期n其他:退出n请选择:n);scanf(%d,&k);if(k=1)printf(输入日期(年 月 日):n);scanf(%d%d%d,&dt.year,&dt.month,&dt.day);printf(%d年%d月%d日是这一年的第%d天n,dt

33、.year,dt.month,dt.day,day_of_year(dt.year,dt.month,dt.day);else if(k=2)printf(输入年份 天数:n);scanf(%d%d,&dt.year,&days);month_day(dt.year,days,&dt.month,&dt.day);printf(对应日期是%d年%d月%d日n,dt.year,dt.month,dt.day);else break;return 0;运行结果:2. 难度系数:算法设计:step 1 定义学生链表节点。step 2 参照教材中的程序8-7,定义创建链表函数create,显示链表节点数据信息函数display,释放链表所有节点内存函数destroy。其中创建链表函数create

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服