《C语言程序设计》课后习题参考答案.docx
- 文档编号:3513816
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:27
- 大小:24.52KB
《C语言程序设计》课后习题参考答案.docx
《《C语言程序设计》课后习题参考答案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》课后习题参考答案.docx(27页珍藏版)》请在冰豆网上搜索。
《C语言程序设计》课后习题参考答案
第三部分《C语言程序设计》习题参考答案
习题一习题答案
一、单项选择题
1、C2、C3、C4、D5、C6、D7、D8、B9、D 10、C
二、程序题
1、请参照本章例题,编写一个C程序,输出以下信息:
************
VeryGood!
************
#include
main()
{
Printf("************\n");
printf("VeryGood!
\n");
printf("************\n");
}
2、编写一个程序,输入abc三个值,输出其中最大者。
#include
voidmain()
{
inta,b,c;
printf("inputa,b,c\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
if(a>c)printf("max=%d",a);
else
printf("max=%d",c);
elseif(b elseprintf("max=%d",b); } 习题二习题答案 一、简答题(略) 二、选择题 1.D2.B3.D4.B5.B6.A7.D8.C9.B 10.D11.B12.B13.D14.B15.D16.C17.D 习题三习题答案 3-1输入两个正整数m和n,求它们的最大公约数和最小公倍数。 #include main() { intm,n,c,a,b; printf("pleaseinputtwonumbles: "); scanf("%d,%d",&m,&n); a=m; b=n; c=a%b; while(c! =0) { a=b; b=c; c=a%b; } printf("themaxis%d\n",b); printf("theminis%d\n",m*n/b); } 一、选择题 1.B2.D3.A4.A5.B6.C7.A8.C9.B10.B 二、填空题 1.inti;i%3==0||i%5==0||i%8==0 2.b=0;count++; 3.f1=1;i=3;i<=30;i=i+2 4.for(k=1;k<=35;k++) 5.count=count+1;或count++; 三、编程题 1、请编写代码求500以内的所有的素数之和。 #include #include main() { intsum=0,i,j,yes; for(i=2;i<=500;i++) { yes=1; for(j=2;j<=sqrt(i);j++) if(i%j==0) { yes=0; break; } if(yes)sum+=i; } printf("%d\n",sum); } 运行结果: 21536 2.求四位的奇数中,每位数字之和是30的倍数的数的累加和。 #include main() { intge,shi,bai,qian; longintresult=0; for(ge=0;ge<=9;ge++) for(shi=0;shi<=9;shi++) for(bai=0;bai<=9;bai++) for(qian=1;qian<=9;qian++) if((ge+shi+bai+qian)%30==0&&(qian*1000+bai*100+shi*10+ge)%2! =0) result+=(qian*1000+bai*100+shi*10+ge); printf("%ld\n",result); } 运行结果: 411090 3.用一元纸币兑换一分、两分和五分的硬币,要求兑换硬币的总数为50枚,问共有多少种换法? (注: 在兑换中一分、两分或五分的硬币数可以为0枚)。 #include main() { intone,two,five,cout=0; for(five=0;five<=20;five++) for(two=0;two<=50;two++) for(one=0;one<=100;one++) if(five*5+two*2+one==100&&five+two+one==50) cout++; printf("%d\n",cout); } 运行结果: 13 4.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第12次落地时,第12次反弹多高? 按四舍五入的方法精确到小数点后面四位。 #include"stdio.h" main() { floathn,sn=100.0; inti; hn=sn/2; for(i=2;i<=12;i++) hn/=2; printf("%.4f",hn); } 运行结果: 0.0244 5.所谓回文数是从左至右与从右至左读起来都是一样的数字,如: 121。 编一个程序,求出在300-900的范围内回文数的个数。 #include main() { inti,count=0,low,high; for(i=300;i<=900;i++) { low=i%10; high=i/100; if(low==high) count++; } printf("%d\n",count); } 运行结果: 60 6.已知S=2+(2+4)+(2+4+6)+(2+4+6+8)+…,求S<=10000的最大值S。 #include main() { inti,j,k,s=0,sum=0; for(k=2;;k+=2) { s=s+k; sum=sum+s; if(sum>10000)break; } sum=sum-s; printf("%d\n",sum); } 运行结果: 9920 第四章习题答案 一、选择题 (1)B (2)C(3)C(4)A(5)C(6)C(7)B(8)B(9)D(10)B (11)D(12)B(13)B(14)A(15)A(16)D(17)C(18)A(19)D(20)A 二、填空题 (1)main函数 (2)函数首部,函数体 (3) I=7;j=6;x=7 I=2;j=7;x=5 (4)111 (5)maxis2 (6)1010 (7) <1.>x=2y=3z=0 <2.>X=4y=9z=5 <3>X=2y=3z=0 第五章习题答案 一、选择题 (1)A (2)A(3)D(4)A(5)C(6)C(7)C(8)B(9)B(10)B (11)D(12)A(13)B(14)C(15)A(16)C(17)B(18)D(19)D(20)B 二、填空题 (1)4 (2)8 (3)6 (4)strcat (5)putchar (6)strcmp (7)依次连接str2和str3构成一个新的字符串 (8)24 (9)20 (10)2 (11)5 (12)97 (13)n (14)abcd (15)4 (16)5 三、编程题 (1)已知5个整数3,-5,8,2,9,求出最大值,最小值和平均值并输出。 源代码 #include voidmain() { inta[5]={3,-5,8,2,9}; intsum=0; floataverage=0; intmax=a[0]; intmin=a[0]; inti; for(i=0;i<5;i++) sum+=a[i]; average=(float)sum/5; for(i=1;i<5;i++) if(a[i]>max)max=a[i]; for(i=1;i<5;i++) if(a[i] printf("最大值为: %d\n",max); printf("最小值为: %d\n",min); printf("平均值为: %f\n",average); } (2)从键盘输入10个实数,按从小到大的顺序排列起来。 源代码 #include voidsort_bubble(inta[],intn) { inti,j,temp; for(i=0;i for(j=i+1;j if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } voidmain() { inti,a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); sort_bubble(a,10); for(i=0;i<10;i++) { printf("%6d",a[i]); } printf("\n"); } 第六章习题答案 一、选择题 1.B2.B3.D4.D5.C6.D7.A8.A9.C 10.C11.A12.C13.D14.B15.A16.D17.C 18.B19.D20.A 二、填空题 1.整型变量的地址(指针)2.a[0](数组首地址),a[3]3.24.&a[1][0]5.eXAMPLE6.2,27.58.s[m]! ='\0'(*(s+m)=='\0'&&*(t+m)=='\0')9.3510.s+m-1t2-- 编程题 1.编写一个函数,将字符串s转换为整型数返回并在主函数中调用该函数输出转换后的结果,注意负数处理方法。 解: 用指针处理字符串非常方便。 使用符号位来处理负数。 #include intatoi(chars[]) { inttemp=0,f=1,i=0; while(s[i]! ='\0'&&s[i]! ='-'&&(s[i]<'0'||s[i]>'9'))i++;//去除串前部无效字符 if(s[i]=='-')//读负号 { f=-1; i++; } if(s[i]<'0'||s[i]>'9')cout<<"error! "< while(s[i]>='0'&&s[i]<='9')//转换数字串 { temp=temp*10+s[i]-48; i++; } returnf*temp; } voidmain() { charnum[20]; gets(num); printf("%d\n",atoi(num); } 2.编程定义一个整型、一个双精度型、一个字符型的指针,并赋初值,然后显示各指针所指目标的值与地址,各指针的值与指针本身的地址及各指针所占字节数(长度)。 (其中地址用十六进制显示。 ) 解: #include voidmain() { int*ip,ival=100; double*dp,dval=99.9; char*cp,cval='A'; ip=&ival; dp=&dval; cp=&cval; printf("%d\t%x\t%d\n",*ip,&*ip,sizeof(*ip)); printf("%d\t%x\t%d\n",*dp,&*dp,sizeof(*dp)); printf("%d\t%x\t%d\n",*cp,(void*)&*cp,sizeof(*cp)); //字符指针输出是字符串,必须强制转换为无类型指针 printf("%x\t%x\t%d\n",ip,&ip,sizeof(ip)); printf("%x\t%x\t%d\n",dp,&dp,sizeof(dp)); printf("%x\t%x\t%d\n",(void*)cp,&cp,sizeof(cp)); } 3.利用指向行的指针变量求5×3数组各行元素之和。 解: #include voidmain() { inta[5][3]={{1,2,3},{4,5,6},{7,8,9},{11,22,33},{44,55,66}}; int(*p)[3]; inti,j,s; for(i=0;i<5;i++){ p=&a[i];//指向第i行 s=0; for(j=0;j<3;j++) s+=*(*p+j); printf("sumoflineis: %d=%d\n",i,s); } } 4.编写一个求字符串的函数(参数用指针),在主函数中输入字符串,并输出其长度。 解: #include intfun(char*s) { intk=0; while(*s! ='\0') { k++; s++; } returnk; } voidmain() { charstr[100]; printf("Stringis: \n"); gets(str); printf("lengthis: %d",fun(str)); } 5.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 解: #include voidmain() { voiddeal(int*); inti,a[10],*p; p=a; for(i=0;i<10;i++) scanf("%d",p+i); deal(a); for(i=0;i<10;i++) printf("%4d",*(p+i)); } voiddeal(int*p) { inti,j,k,t; k=i=0; for(j=i+1;j<10;j++) if(*(p+k)>*(p+j))k=j; t=*(p+i);*(p+i)=*(p+k);*(p+k)=t; k=i=9; for(j=i-1;j>=0;j--) if(*(p+k)<*(p+j))k=j; t=*(p+i);*(p+i)=*(p+k);*(p+k)=t; } 6.有若干个学生成绩(每个学生有4门课),要求在用户输入学号后,能输出学生的全部成绩。 解: #include voidmain() { floatscore[][4]={{66,76,86,96},{66,77,88,99},{48,78,89,90}}; float*serach(float(*pointer)[4],intn); float*p; inti,m; printf("Enterthenumberofstudent: "); scanf("%d",&m);//输入要查找的学生序号 printf("ThescoresofNo.%dare: \n",m); p=search(score,m); for(i=0,i<4;i++)//输出第n个学生的全部成绩 printf("%6.2f",*(p+i)); } } float*search(float(*pointer)[4],intn)//函数的返回值为指向实型数据的指针 { float*pt;pt=*(pointer+n); //把指针定位在第把指针定位在第把指针定位在第把指针定位在第n个学生的第一个学生的第一个学生的第一个学生的第一个数据上个数据上个数据上个数据上 return(pt);//函数的返回值第n个学生成绩的首地址 } 7.将一个5×5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素,顺序为从左到右,从上到下顺序依次从小到大存放。 解: #include voidmain() { voidchange(int*); inta[5][5],*p,i,j; printf("inputmartix: \n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) scanf("%d",&a[i][j]); } p=&a[0][0]; change(p); printf("Now,martix: \n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%d",&a[i][j]); printf("\n"); } } voidchange(int*p)//交换函数的实现 { inti,j,temp; int*pmax,*pmin; pmax=p; pmin=p; for(i=0;i<5;i++)//寻找最大值和最小值 { for(j=i;j<5;j++) { if(*pmax<*(p+5*i+j)) pmax=p+5*i+j; if(*pmin>*(p+5*i+j)) pmin=p+5*i+j; } } temp=*(p+12);//最大值换给中心元素 *(p+12)=*pmax; *pmax=temp; temp=*p; *p=*pmin; *pmin=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++); { if(((p+5*i+j)! =p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; } temp=*pmin; *pmin=*(p+4); *(p+4)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) { if(((p+5*i+j)! =(p+4)&&(p+5*i+j)! =p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; } temp=*pmin; *pmin=*(p+20); *(p+20)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) { if(((p+5*i+j)! =p)&&((p+5*i+j)! =(p+4))&&((p+5*i+j)! =(p+20))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; } temp=*pmin; *pmin=*(p+24); *(p+24)=temp; } 8.有一字符串,包含n个字符。 编写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 解: #include #include voidmain() { voidcopystring(char*,char*,int); intm; charstring1[20],string2[20]; printf("inputstring: "); gets(string1); printf("whichcharacterthatbegintocopy? "); scanf("%d",&m); if(strlen(string1) {printf("inputerror! ");} else { copystring(string1,string2,m); printf("result: %s\n",string2); } } voidcopystring(char*p1,char*p2,intm)//字符串复制函数 { intn=0; while(n { n++; p1++; } while(*p1! ='\0') { *p2=*p1; p1++; p2++; } *p2='\0'; } 第七章习题答案 一、选择题 1.B2.D3.C4.C5.A6.C7.B8.A9.B 10.A11.C12.C 二、填空题 1.整型变量的地址(指针)2.a[0](数组首地址),a[3]3.24.&a[1][0]5.eXAMPLE6.2,27.58.s[m]! ='\0'(*(s+m)=='\0'&&*(t+m)=='\0')9.3510.s+m-1t2-- 编程题 1.在学生数据中,找出各门课平均分在85以上的同学,并输出这些同学的信息。 解: #include #defineM5//学生数 #defineN3//课程数 structstudent { longnum; charname[20]; floatscore[N]; structstudent*next; }; //创建链表子函数 structstudent*create(intn) { structstudent*head=NULL,*p1,*p2; inti,j; for(i=1;i<=n;i++)//逐个创建结点并输入相关数据 { p1=(structstudent*)malloc(sizeof(structstudent)); print
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课后 习题 参考答案
![提示](https://static.bdocx.com/images/bang_tan.gif)