《C语言程序设计能力教程(第5版)》课后参考答案 赵凤芝 包锋 李峰_第1页
《C语言程序设计能力教程(第5版)》课后参考答案 赵凤芝 包锋 李峰_第2页
《C语言程序设计能力教程(第5版)》课后参考答案 赵凤芝 包锋 李峰_第3页
《C语言程序设计能力教程(第5版)》课后参考答案 赵凤芝 包锋 李峰_第4页
《C语言程序设计能力教程(第5版)》课后参考答案 赵凤芝 包锋 李峰_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习题1一、选择题1.B2.A3.B4.A5.B6.D7.C8.D9.D10.C二、阅读程序写出结果。IloveChina!wearestudents.6三、程序设计题解:#include<stdio.h>main(){inta,b,c,v;a=10;b=20;c=15;v=a*b*c;printf("v=%d",v);}本程序运行结果为:v=3000项目实训:利用输出函数printf()输出个人信息。习题2一、选择题1.C2.B3.A4.A5.A6.C7.D8.C9.D10.C11.B12.A二、程序阅读题3,2,-8,23.000000,2.500000,-8.0000004,43123aabbccabc三、程序设计题:#include<stdio.h>#defineM5main(){floatn,c;n=2.1;c=M*n;printf("%f\n",c);}项目实训:main(){inta,b,c;floatx,y,z,sum,g,r;x=1080,y=66.5,z=129.8;printf(“请输入四个物品的数量:”);scanf(“%d,%d,%d”,&a,&b,&c);sum=a*x+b*y+c*z;printf(“总价是%.2f元”,sum);printf(“顾客付钱:”);scanf(“%f”,&g);r=g-sum;printf(“找零%.2f元”,r);}习题3一、选择题1.A2.C3.D4.C5.C二、程序阅读题x=3,a=2,b=3z=12.700000121a212三、程序填空:1.a-b2.a-b四、程序设计题#include<stdio.h>main(){intn;floatrate=0.0225,capital,deposit;scanf("%d,%f",&n,&capital);deposit=capital*n*rate+capital;printf("deposit=%.2f\n",deposit);}项目实训:#include<stdio.h>main(){inttime;floatpay,sum;printf("劳动时间和每小时工资:");scanf("%d,%f",&time,&pay);sum=time*pay*(1-0.08);printf("实发工资:%.2f元",sum);}习题4一、选择题1.B2.B3.B4.B5.C6.D7.C8.A二、填空题1.02.x>40&&x<=60||x<1203.最近的4.3225.1,2,36.-1三、程序填空:(ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')ch>='0'&&ch<='9'ch==''四、程序设计题1.#include<stdio.h>main(){charch;ch=getchar();if(ch>='A'&&ch<='Z')ch+=32;elseif(ch>='a'&&ch<='z')ch-=32;putchar(ch);putchar('\n');}2.解:#include<stdio.h>main(){floatx,y;scanf("%f",&x);if(x>-1)y=2*x;elseif(x==-1) y=3;elsey=4+x;printf("y=%f",y);}本程序运行结果为:-2<CR>y=2.0000003.#include<stdio.h>main(){intx;scanf("%d",&x);if(x%2==0)printf("IsEven\n");elseprintf("IsOdd\n");}项目实训:一、if编程:#include<stdio.h>main(){floaty,j;printf(“输入业绩:万元”);scanf(“%f”,&y);if(y>0&&y<1)j=y*0.03;elseif(y>=1&&y<5)j=y*0.1;elseif(y>=5&&y<20)j=y*0.15;elseif(y>20)j=20*0.15+(y-20)*0.2;else{printf(“输入错误”);j=0;}printf(“奖金数:%.2f万元”,j);}二、switch编程:#include<stdio.h>main(){floaty,j;intduan;printf(“输入业绩:万元”);scanf(“%f”,&y);if(y<0){printf(“输入错误”);j=0;}elseif(y>=20)duan=20;else{duan=(int)y;switch(duan){case0:j=y*0.03;break;case1:case2:case3:case4:j=y*0.1;break;case5:case6:case7:case8:case9:case10:case11:case12:case13:case14:case15:case16:case17:case18:case19:j=y*0.15;break;case20:j=20*0.15+(y-20)*0.2;break;}printf(“奖金数:%.2f万元”,j);}习题5一、选择题1.C2.C3.D4.A5.B6.D7.C8.C9.D10.B二、程序阅读题sum=3程序的功能是1至10偶数求乘积,奇数求和,运行结果为sum=25mul=3840.000000。前五项为1/22/33/55/88/13****************三、程序填空:1.ch=getchar()ch>='a'&&ch<='z'c22.n=0;i<=300或i<300i%7==0||i%17==0或!(i%7)||!(i%17)或!(i%17)||!(i%7)n%5==0或!(n%5)四、程序设计题:1.用while、do...while、for三种实现循环的语句编写程序求1~10的奇数之和。#include"stdio.h"voidmain(){inti=1,sum=0;while(i<=10){sum=sum+i;i=i+2;}printf("sum=%d",sum);}#include"stdio.h"voidmain(){inti=1,sum=0;do{sum=sum+i;i=i+2;}while(i<=10);printf("sum=%d",sum);}#include"stdio.h"voidmain(){inti,sum=0;for(i=1;i<=10;i=i+2;)sum=sum+i;printf("sum=%d",sum);}2.曾有一位印度国王要奖赏他的聪明能干的宰相达依尔。达依尔只要求在国际象棋的棋盘格上放置小麦粒,第一格放1粒,第二格放两粒,第三格放4粒,第四格放8粒,……,最后能有多少小麦粒呢?#include<stdio.h>main(){floati,s=1,t=1;for(i=1;i<=63;i++){t*=2;s+=t;}printf("s=%f\n",s);}3.打印水仙花数,即一个三位数各位上的数字之和等于它本身,如:153=13+53+33。#include<stdio.h>main(){intk1,k2,k3,i;for(k1=1;k1<=9;k1++)for(k2=0;k2<=9;k2++)for(k3=0;k3<=9;k3++){i=k1*k1*k1+k2*k2*k2+k3*k3*k3; if(i==k1*100+k2*10+k3) printf("\n%d=%d^3+%d^3+%d^3",i,k1,k2,k3);}}4.一张纸的厚度为0.1毫米,珠穆琅玛峰的高度为8848.13米,假如纸张有足够大,将纸对折多少次后可以超过珠峰的高度?#include<stdio.h>main(){floath=8848.13,h0=0.0001,h1;intm=0;h1=h0;while(h0<=h){h0=2*h0;printf("\nm=%d,high=%f",m,h0);m++;}printf("\nm=%d\n",m-1);}5.输入一行字符以@作结束标志,分别统计其中英文字母、空格、数字和其它字符的个数。#include"stdio.h"main(){charch;intcha=0,space=0,digit=0,other=0;while((ch=getchar())!='@'){if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')cha++;elseif(ch=='')space++;elseif(ch>='0'&&ch<='9')digit++;elseother++;}printf("\ncha=%d,space=%d,digit=%d,other=%d",cha,space,digit,other);}6.一个正数与3的和是5的倍数,与3的差是6的倍数,编写一个程序求符合条件的最小数。解:#include<stdio.h>main(){intn;n=1;while(1){n=n+1;if((n+3)%5==0&&(n-3)%6==0)break;}printf("n=%d",n);}本程序运行结果为:n=277.xyz+yzz=532,其中x、y、z都是数字,编写一个程序求出x、y、z分别是多少。解:#include<stdio.h>main(){intx,y,z,i;for(x=1;x<=9;x++)for(y=1;y<=9;y++)for(z=0;z<=9;z++){ i=100*x+10*y+z+100*y+10*z+z; if(i==532)printf("x=%d,y=%d,z=%d\n",x,y,z);}}本程序运行结果为:x=3,y=2,z=18、学校有近千名学生排队,5人一行余2人,7人一行余3人,3人一行余1人,求学生人数。解:#include<stdio.h>main(){intn;for(n=1000;n>=10;n--)if(n%5==2&&n%7==3&&n%3==1)break;printf("n=%d\n",n);}本程序运行结果为:n=9979.编写程序求1-1/2+1/3-1/4+…+1/99-1/100的值#include"stdio.h"main(){inti,s=-1;floatsum=1.0;for(i=2;i<=100;i++){sum=sum+1.0*s/i;s=-s;}printf("sum=%f",sum);}10.打印下列图形。*************************#include<stdio.h>main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=5-i;j++) printf("");for(j=1;j<=5;j++) printf("*"); printf("\n");}}项目实训:main(){floatfen,sum=0,max,min;intn,i;printf(“输入评委人数和第一个评分:”);scanf(“%d,%f”,&n,&fen);min=fen;max=fen;for(i=2;i<=n;i++){scanf(“%f”,&fen);sum=sum+fen;if(max<fen)max=fen;if(min>fen)min=fen;}printf(“最后得分:%.2f”,(sum-max-min)/(n-2));}习题6一、选择题1.D2.D3.C4.C5.A6.B7.B8.A9.D10.D11.A12.D13.A14.C15.D二、程序阅读题。1.输出结果:1357911246810121313131313132.输出结果:originalarray:96541sortedarray:4569三、1. str22. 03. str2[j]4.‘\0’四、程序设计题1、任意输入5个数,要求按升序排序。#include<stdio.h>voidmain(){inta[6],i,j,t;printf("Input5numbers:\n");for(i=1;i<6;i++)scanf("%d",&a[i]);printf("\n");for(j=1;j<=4;j++)for(i=1;i<=5-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumbers:\n");for(i=1;i<6;i++)printf("%d",a[i]);}2、编写一个程序计算字符串中值为x(x由键盘输入)的字符个数。#include"stdio.h"#include"string.h"main(){chara[20],x;intn=0,i=0;printf("\nPleaseinputstring,endofenterkey:");gets(a);printf("\nPleaseinputx:");x=getchar();while(a[i]!='\0'){if(a[i]==x)n++;i++;}printf("\n%d",n);} if(x[i]>ave)printf("%f",x[i]);}3、求4×5二维数组的周边元素之和#include<stdio.h>main(){inta[4][5]={{3,-2,1,2,3},{0,1,3,-2,2},{3,1,0,4,1},{1,1,3,-2,2}};inti,j,sum=0;for(i=0;i<4;i++)for(j=0;j<5;j++)if(i==0||j==0||j==4||i==3)sum=sum+a[i][j];printf("%d",sum);}程序运行结果:174.评定奥运会某参赛选手的成绩。设某参赛选手的某项目有8位评委,要求去掉一个最高分和一个最低分,给出其最后得分。#include<stdio.h>#defineN10 /*定义字符常量*/main(){intx[N],i,max,min,score=0;printf("Pleaseinput%dintegers:\n",N); /*输入N个数,存入数组中*/for(i=0;i<N;i++){scanf("%d",&x[i]);score+=x[i];} /*赋初值*/max=min=x[0]; /*将第一个数默认为最大或最小值*/for(i=1;i<N;i++){if(max<x[i])max=x[i]; /*求最大值*/if(min>x[i])min=x[i]; /*求最小值*/}printf("Thelastscoreis:%d\n",(score-max-min)/(N-2);}5.打印出以下杨辉三角形(要求打印出10行)。1121133114641…………#defineN11main(){inti,j,a[N][N];for(i=1;i<N;i++){a[i][i]=1;a[i][1]=1;}for(i=3;i<N;i++)for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<N;i++){for(j=1;j<=i;j++) printf("%6d",a[i][j]);printf("\n");}printf("\n");}本程序的运行结果为:111121133114641151010511615201561172135352171182856705628811936841261268436916.输入一个含若干个字符的字符串,分别搜索出其中的字母和数字,其余的字符一概忽略。将字母序列和数字序列分别输出#include"stdio.h"

main()

{

inti;

chart[80];

printf("Enterastring:");

gets(t);

for(i=0;t[i];i++)

if(t[i]>='a'&&t[i]<='z'||t[i]>='A'&&t[i]<='Z')

printf("%c",t[i]);

printf("\n");

for(i=0;t[i];i++)

if(t[i]>='0'&&t[i]<='9')

putchar(t[i]);

putchar('\n');}7.、一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中。不用strcpy函数。拷贝时,‘\0’也要拷贝过去。‘\0’后面的字符不拷贝。解:#include"stdio.h"main(){charfrom[80],to[80];inti;printf("Inputstring:");scanf("%s",from);for(i=0;i<=strlen(from);i++)to[i]=from[i];printf("theresult:%s\n",to);}本程序的运行结果为:theresult:Inputstring:student8.编写一个程序判定用户输入的正数是否为“回文数”,所谓回文数是指数正读反读都相同。#include<stdio.h>main(){intbuffer[10],i,k,b;longnumber,n;printf("inputapositivenumber:");scanf("%ld",&number);k=0;n=number;do{buffer[k]=n%10;k=k+1;n=n/10;}while(n!=0);b=1;for(i=0;i<=(k-1)/2;i++)if(buffer[i]!=buffer[k-1-i])b=0;if(b)printf("%ldishuiwenshu\n",number);elseprintf("%ldisnothuiwenshu\n",number);}项目实训:如果考虑密码。见书中128页例6.15.不考虑密码程序如下:#defineN50main(){floata[N],sum=0,ave,b[N];/*a数组为初始工资,b数组为缴税后工资*/inti=0,k=0,m=0,t=0;/*k为员工总人数,m为缴税人数*/scanf(“%f”,&a[i]);k=1;while(a[i]>=0){i++;k++;scanf(“%f”,&a[i]);}for(i=0;i<k;i++){if(a[i]>3500){b[i]=(a[i]-3500)*0.95+3500;s=s+(a[i]-3500)*0.05;m++;}elseb[i]=a[i];sum=sum+b[i];}ave=1.0*sum/k;for(i=0;i<k;i++)if(b[i]>ave)t++;printf(“高出平均人数:%.2f”,t);printf(“上缴税金总数:%.2f,缴税人数:%.2f”,s,m);}习题7一、选择题1.B2.D3.C4.B5.B6.D7.A8.A9.D二、程序阅读题1.x=102.73.sum=6三、程序填空1.inti;2.i%3==0||i%5==0||i%8==03.funcsum()四、程序设计题1.写一个判定偶数的函数,在主函数中输入一个整数,输出是否是偶数的信息。#include“stdio.h”inteven(intx){if(x%2==0)return(1);elsereturn(0);}main(){intx;scanf("%d",&x);if(even(x))printf("xiseven.");elseprintf("xisnoteven.");}floatadd(floatx,floaty){floatz;z=x+y;return(z);}3.输入10个学生的成绩,分别用函数实现:(1)求平均成绩;(2)按分数高低进行排序并输出。解:main(){floataverage(floatb[]);voidsort(floatb[]);floata[10],j,aver;printf("input10:");for(j=0;j<10;j++)scanf("%f",&a[j]);aver=average(a);//求平均值,可省略printf("aver=%.2f\n",aver);sort(a);for(j=0;j<10;j++)printf("%10.2f",a[j]);}floataverage(floatb[])//求平均值,可省略{intj;floatsum=0,aver;for(j=0;j<10;j++)sum=sum+b[j];aver=sum/10.0;return(aver);}voidsort(floatb[]){inti,j,max,k;for(i=0;i<10;i++){max=b[i];k=i; for(j=i+1;j<10;j++) if(max<b[j]) {max=b[j];k=j;} b[k]=b[i]; b[i]=max; }}本程序运行结果为:input10:45128685798485964589<cr>(输入)aver=70.6096.0089.0086.0085.0085.0084.0079.0045.0045.0012.00习题8一、选择题1.D2.A3.C4.C5.D6.C7.D8.A二、填空题1.m2.对3.ABCDCD4.175.sum=256.5,4,3,2,1逆序存储三、程序设计题(要求使用指针方法实现)1.输入三个整数a、b、c,利用指针方法找出其中最大值。main(){inta,b,c,*p1,*p2,*p3;scanf("%d,%d,%d",&a,&b,&c);p1=&a;p2=&b;p3=&c;if(*p1<*p2)max=*p1elsemax=*p2;if(*p3<max)max=*p3;printf("\nmax=%d\n",max);}程序结果:9,0,10<回车>max=102.编一个程序,用指针变量实现输入10个整数存入一维数组,再按逆序重新存放后输出。#include<stdio.h>main(){inta[10],*p,i,t;p=a;for(i=0;i<10;i++)scanf("%d",p+i);for(i=0;i<5;i++){t=*(p+i);*(p+i)=*(p+9-i);*(p+9-i)=t;}for(i=0;i<10;i++)printf("%5d",*(p+i));printf("\n");}3.从键盘输入一个字符串,存入一个数组中,求出输入的字符串的长度。#include<stdio.h>main(){charstr[80],*p,i,len=0;p=str;gets(p);for(i=0;*(p+i)!='\0';i++)len++;printf("len=%d\n",len);}习题9一、选择题1.A2.B3.C4.AD5.B6.D7.B二、程序阅读题1.Qian2.3,3三、程序填空:1p<=person+22old=p->age3q->name,q->age四、程序设计题1.定义一个结构体变量来表示日期(包括年、月、日),并编程来计算某一日期是本年的第几天,距离元旦多少天,注意考虑闰年的问题。解:struct{intyear;intmonth;intday;}date;main(){intdays;printf("Pleaseinputdate:(year,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:days=date.day+151;break;case7:days=date.day+181;break;case8:days=date.day+212;break;case9:days=date.day+243;break;case10:days=date.day+273;break;case11:days=date.day+304;break;case12:days=date.day+334;break;}if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.month>=3)days+=1;printf("\n%dmonth%ddayis%ddayof%d.",date.month,date.day,days,date.year);printf("\n距离元旦还有%d天。",365-days);}本程序运行结果为:Pleaseinputdate:(year,month,day)2000,3,13month1dayis61dayof2000.距离元旦还有305天。2、有10名学生,每个学生包括学号、姓名、3科成绩,编程序求每个学生的平均成绩,并打印最高分学生的信息。#defineN4main(){structstudent {intnum; charname[15]; floatc[3]; floatave;};structstudentstu[N];structstudent*p[N],*t;inti,j,k;floatx1,x2,x3;for(i=0;i<N;i++){scanf("%d%s%f%f",&stu[i].num,stu[i].name,&x1,&x2,&x3);stu[i].c[0]=x1;stu[i].c[1]=x2;stu[i].c[2]=x3;k=0;for(j=0;j<=2;j++)k=k+stu[i].c[j];stu[i].ave=k/3.0;p[i]=&stu[i];}/*排序-由大到小*/for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)if(p[j]->ave<p[i]->ave){t=p[j];p[j]=p[i];p[i]=t;}printf(“%5d%15s%3d%3d%6.1f\n”,p[0]->num,p[i]->name, p[0]->c[0],p[0]->c[1],p[0]->c[2]);} 3、建立一个3名学生数据的单链表。解:#defineNULL0#defineLENsizeof(structstudent)structstudent{intno;structstudent*next;};structstudent*head;structstudent*creat(){structstudent*p,*q;intn,i;printf("howmany:");

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论