c语言实例教程 课后题答案.docx
- 文档编号:6223770
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:95
- 大小:79.65KB
c语言实例教程 课后题答案.docx
《c语言实例教程 课后题答案.docx》由会员分享,可在线阅读,更多相关《c语言实例教程 课后题答案.docx(95页珍藏版)》请在冰点文库上搜索。
c语言实例教程课后题答案
第4章选择结构
一.选择题
1、D2、C3、B4、B5、C6、C7、C
8、D9、C10、A11、A12、D13、B14、C
二.填空题
1、02、013、max=124、end5、d=20
6、17、70~848、first
Errorthird
三.编程题
1.由键盘输入三个学生成绩,求平均成绩,并找出最高成绩。
程序:
main()
{
floatx,y,z;
floatmax,avg;
printf(″请输入三个数x,y,z:
″);
scanf(″%f,%f,%f″,&x,&y,&z);
max=x;
if(y>max)max=y;
if(z>max)max=z;
avg=(x+y+z)/3;
printf(”平均成绩=%5.2f,最高成绩=%5.2f\n”,avg,max);
}
2.有一个函数:
x(x<1)
y=2x-1(1≤x<10)
3x-11(x≥10)
写一程序,输入x,输出y值。
main()
{
intx,y;
printf(”inputx:
”);
scanf(”%d”,&x);
if(x<1)
{
y=x;
printf(”x=%d,y=x=%d\n”,x,y);
}
elseif(x<10)
{
y=2*x-1;
printf(”x=%d,y=2*x-1=%d\n”,x,y);
}
else
{
y=3*x-11;
printf(”x=%d,y=3*x-11=%d\n”,x,y);
}
}
3.编写程序,输入一位学生的生日,并输入当前的日期,输出该生的实足年龄。
main()
{
intage,y1,m1,d1,y2,m2,d2;
printf(”输入生日日期(年、月、日):
”);
scanf(”%d%d%d”,&y1,&m1,&d1);
printf(”输入当前日期(年、月、日):
”);
scanf(”%d%d%d”,&y2,&m2,&d2);
age=y2-y1;
if(m1>m2)age--;
if(m1==m2&&d1>d2)age--;
printf(”ageis%d\n”,age);
}
4.给一个不多于5位的正整数,求出它是几位数,分别打印出每一位数字,然后再按逆序打印出各位数字。
main()
{
longintnum;
intindiv,ten,hundred,thousand,ten_thousand,place;
printf(”请输入一个整数(0~99999):
”);
scanf(”%ld”,&num);
if(num>9999)place=5;
elseif(num>999)place=4;
elseif(num>99)place=3;
elseif(num>9)place=2;
elseplace=1;
printf(”place=%d\n”,place);
printf(”每位数字为:
”);
ten_thousand=num/10000;
thousand=(num-ten_thousand*10000)/1000;
hundred=(num-ten_thousand*10000-thousand*1000)/100;
ten=(num-ten_thousand*10000-thousand*1000-hundred*100)/10;
indiv=num-ten_thousand*10000-thousand*1000-hundred*100-ten*10;
switch(place)
{
case5:
printf(”%d,%d,%d,%d,%d\n”,ten_thousand,thousand,hundred,ten,indiv);
printf(”反序数字为:
”);
printf(”%d,%d,%d,%d,%d\n”,indiv,ten,hundred,thousand,ten_thousand);
break;
case4:
printf(”%d,%d,%d,%d\n”,thousand,hundred,ten,indiv);
printf(”反序数字为:
”);
printf(”%d,%d,%d,%d\n”,indiv,ten,hundred,thousand);
break;
case3:
printf(”%d,%d,%d\n”,hundred,ten,indiv);
printf(”反序数字为:
”);
printf(”%d,%d,%d\n”,indiv,ten,hundred);
break;
case2:
printf(”%d,%d\n”,ten,indiv);
printf(”反序数字为:
”);
printf(”%d,%d\n”,indiv,ten);
break;
case1:
printf(”%d\n”,indiv);
printf(”反序数字为:
”);
printf(”%d\n”,indiv);
break;
}
}
5.某商场在节日期间举办促销活动,顾客可按购买商品的款数多少分别给予以下不同的优惠折扣:
购物不足250元的,没有折扣,赠送小礼品;
购物满250元,不足500元的,折扣5%;
购物满500元,不足1000元的,折扣10%;
购物满1000元,不足2000元的,折扣15%;
购物满2000元及2000元以上,折扣20%;
试用switch语句编写程序,计算顾客的实际付款数。
main()
{
floatpayment,discount,amount;
inttemp;
charrmb=’\x9d’;
printf(”Pleaseinputyourpayment:
”);
scanf(”%f”,&payment);
temp=(int)payment/250;
switch(temp)
{
case0:
discount=0;
printf(”youcangetalittlegift.\n”);
break;
case1:
discount=5.0;
break;
case2:
case3:
discount=10.0;
break;
case4:
case5:
case6:
case7:
discount=15.0;
break;
default:
discount=20.0;
break;
}
amount=payment*(1-discount/100);
printf(”youpay%c%.2f\n”,rmb,amount);
}
第5章循环结构程序设计
三.编程题
1.求从1到100之间的偶数之和。
main()
{
inti,sum=0;
for(i=1;i<=100;i++)
if(i%2==0)sum+=i;
printf("sum=%d\n",sum);
}
2.编程求出200~300之间,满足条件:
三位数字之积为42,三位数字之和为12的数。
main()
{
inti=2,j,k;
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
if(i*j*k==42&&i+j+k==12)
printf("%d\t",100*i+10*j+k);
}
3.打印出以下图案:
*
***
*****
*******
main()
{
inti,j,k;
for(i=1;i<=4;i++)
{
for(j=1;j<=4-i;j++)
printf((””);
for(k=1;k<=2*i-1;k++)
printf(”*”);
printf(”\n”);
}
}
4.编程实现百钱买百鸡的方法。
设公鸡每只5钱,母鸡每只3钱,小鸡3只1钱,且需包含公鸡、母鸡和小鸡,求可有哪几种方案。
main()
{
inti,j,k;
for(i=1;i<=20;i++)
for(j=1;j<=33;j++)
for(k=1;k<=100;k++)
if(5*i+3*j+k/3.0==100&&i+j+k==100)
printf("%d,%d,%d\n",i,j,k);
}
5.从键盘输入一些整数,统计大于零的整数个数和小于零的整数个数。
提示:
用输入零来结束输入。
main()
{
intn,sum1=0,sum2=0;
scanf(”%d”,&n);
while(n!
=0)
{
if(n>0)sum1++;
elsesum2++;
scanf(”inputn:
”,&n);
}
printf(”大于零的整数个数=%d,小于零的整数个数=%d”,sum1,sum2);
}
一.选择题
1、D2、A3、C4、B5、C6、C7、D
8、B9、C10、D11、B12、A13、A14、A
二.填空题
1、52、523、89214、175、#*#*$6、y=-1
7、1010918、X9、x>=0x 第6章 三.编程题 1.用带参的宏,从3个数中找出最大数。 #include"stdio.h" #defineMAX(a,b)((a)>(b)? (a): (b))/*带参宏定义,注意加括号*/ voidmain() { inta,b,c; printf("Inputthreeintegers: "); scanf("%d,%d,%d",&a,&b,&c); printf("max=%d\n",MAX(MAX(a,b),c)); } 2.用条件编译方法实现以下功能: 输入一行电报文字,可以任选两种输出: 一为原文输出;一为将字母变成其下一字母(如’a’变成’b’……’z’变成’a’。 其他字符不变)。 用#define命令来控制是否要译成密码。 例如: “#defineCHANGE1” 则输出密码。 若 “#defineCHANGE0” 则不译成密码,按原码输出。 (字符数组请参阅第8章)程序见下一页 分析: 字符数组以‘\0’结束,可采用第3种方式条件编译。 如果想输出原文,可以将程序第3行改为: #defineCHANGE0 #include"stdio.h" #defineMAX80/*宏定义*/ #defineCHANGE1 voidmain() { charstr[MAX]; inti; printf("Inputtext: \n"); gets(str); #if(CHANGE)/*条件编译*/ {for(i=0;i {if(str[i]! ='\0') if(str[i]>='a'&&str[i]<'z'||str[i]=='A'&&str[i]=='Z') str[i]+=1; elseif(str[i]=='z'||str[i]=='Z') str[i]-=25; } } #endif printf("Output: \n%s",str); } 第7章函数 1.写两个函数,分别求两个整数的最大公约数和最小公倍数。 分析: 设两个整数为u和v,用辗转相除法求最大公约数,最小公倍数=uv/最大公约数。 “辗转相除”法有下列步骤: 1)若u>v,用u除以v求余数r. 2)若r=0,则v为最大公约数;若r! =0,将r赋给v,v赋给u. 3)r=0,v(最后一次)为最大公约数。 程序如下: inthcf(intu,intv)/*求最大公约数*/ { intt,r; if(v>u) {t=u;u=v;v=t;} while((r=u%v)! =0) {u=v;v=r;} return(v); } intlcd(intu,intv,inth)/*求最小公倍数*/ { return(u*v/h); } main()/*主函数*/ { intu,v,h,l; scanf(”d%,d%”,&u,&v); h=hcf(u,v); printf(”H.C.F=d%\n”,h); l=lcd(u,v,h); printf(”L.C.D=d%\n”,l); } 2.编写一个函数,判断从键盘输入的一个整数是否为奇数,并在调用函数中输出是奇数的整数。 #include intodd(intn)/*判断是否为奇数,是奇数flag值为1,不为奇数flag值为0*/ { intflag=1; if(n%2==0) flag=0; return(flag); } voidmain() { intx; printf("Inputaninteger: "); scanf("%d",&x); if(odd(x))/*调用函数odd*/ printf("\n%disaodd.",x); elseprintf("\n%disnotaodd.",x); } 3.编写两个函数分别完成电文的加密和解密工作。 加密方法为: 将电文中字母A变成E,a变成e,即变成其后的第4个字母,W变成A,X编程B,Y变成C,Z变成D,非字母字符不变,例如”China! ”加密后变为”Glmre! ”。 在主程序中输入一行字符,对其进行加密,输出密码,并对密码进行解密,输出原文。 #include”stdio.h” charjiami(charc) { if((c>=′a′&&c<=′z′)||(c>=′A′&&c<=′Z′)) { if(c>=′w′&&c<=′z′)||(c>=′W′&&c<=′Z′)}c=c-22; elsec=c+4; } return(c); } charjiemi(charc) { if((c>=′a′&&c<=′z′)||(c>=′A′&&c<=′Z′)) { if(c>=′a′&&c<=′d′)||(c>=′A′&&c<=′D′)}c=c+22; elsec=c-4; } return(c); } voidmain() { charc[100],d[100]; gets(c); printf(″原文: ″); puts(c); printf(″\n密码: ″); for(i=0;c[i]! =′\0′;i++) { d[i]=jiami(c[i]); printf(″%c″,d[i]); } d[i]=’\0’; printf(″\n解密后原文: ″); for(i=0;d[i]! =′\0′;i++) { printf(″%c″,jiemi(d[i]); } } 4.编写一个递归函数fib,用于计算Fibonacci数列的第n项。 fib(0)=0,fib (1)=1,fib(n)=fib(n-1)+fib(n-2))。 fib(intn) { intc; if(n==1||n==0) c=1; else c=fib(n-1)+fib(n-2);/*递归调用*/ return(c); } main() { intn; printf(”Entern: ”); scanf(”d%”,&n); printf(”theresultis: d%\n”,fib(n)); } 5.写一个判素数的函数,在主函数中输入一个整数,输出是否素数的信息。 #include intprime(intn);/*函数声明*/ voidmain() { intn; printf("Inputaninteger: "); scanf("%d",&n); if(prime(n))/*调用函数prime*/ printf("\n%disaprime.",n); else printf("\n%disnotaprime.",n); } intprime(intn)/*判断是否为素数,是素数flag值为1,不为素数flag值为0*/ { intflag=1,i; for(i=2;i<=n/2&&flag==1;i++) if(n%i==0) flag=0; return(flag);} 6.编写函数,求输入的三个整数值的最大值,并在主函数中输出。 #include intmaxmum(intx,inty,intz);/*说明一个用户自定义函数*/ voidmain() { inti,j,k,max; printf("i,j,k=? \n"); scanf("%4d%4d%4d",&i,&j,&k); printf("%4d%4d%4d\n",i,j,k); max=maxmum(i,j,k);/*调用子函数,并将返回值赋给max*/ printf("Themaxmumvalueis%d\n",max); } maxmum(intx,inty,intz) { intmax;/*求最大值*/ max=x>y? x: y; max=max>z? max: z; return(max);/*返回最大值*/ } 例1: 定义一维数组,从键盘输入10个数,计算其中负数的和,在屏幕上显示输出结果。 main() { inta[10],i,sum=0; for(i=0;i<10;i++)scanf("%d",&a[i]); for(i=0;i<10;i++) if(a[i]<0)sum=sum+a[i]; for(i=0;i<10;i++)printf("%f",a[i]); printf(“\n"); printf(“sum=%d\n",sum); } 例2: 纠错题.程序功能: 逐个输入8个浮点型数到数组a中,然后找出数组元素中的最小值并输出min的值。 mian() { inta[8],i,min; printf("InputScore(8): \n") for(i=1;i<8;i++)scanf("%d",a[i]); min=a[0]; for(i=1;i<=8;i++) if(a[i]>min)min=a[i]; printf("min=%d",min); 正确程序: main() { inti; floata[8],min; printf("InputScore(8): \n"); for(i=0;i<8;i++)scanf("%f",&a[i]); min=a[0]; for(i=1;i<8;i++) if(a[i] printf("min=%f",min); } 例4: 定义一个5行5列的整型二维数组,对角线上元素赋值为1,其它元素赋值为0,在屏幕上显示输出矩阵数据。 main() { inta[5][5],i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) if(i==j)a[i][j]=1; elsea[i][j]=0; for(i=0;i<5;i++) { for(j=0;j<5;j++)printf(”%d”,a[i][j]); printf(”\n”); } } 例5: 定义一个3行4列的整型二维数组,存放矩阵数据,用循环嵌套的方式输入数据,统计二维数组中负数的个数,在屏幕上显示输出矩阵数据,输出矩阵数据中负数个数。 main() { inta[3][4],i,j,n=0; printf("Inputa[3][4]\n: "); for(i=0;i<3;i++) for(j=0;j<4;j++) { scanf("%d",&a[i][j]); if(a[i][j]<0)n++; } for(i=0;i<3;i++) { for(j=0;j<4;j++)printf("%d",a[i][j]); printf(”\n”); } printf("二维数组中负数的个数为%d\n",n); } 例6: 分析程序运行结果。 intf(intx) { inty=4; x=x+1;y=y+1; return(x+y); } main() { intm=3,i; for(i=0;i<=2;i++)printf("%4d",f(m)); } 程序的运行结果是: 999 intfun(intx) { staticinty=4; x=x+1;y=y+1; return(x+y); } main() { intm=3,i; for(i=0;i<=2;i++)printf("%4d",fun(m)); } 运行结果是: 91011 例8: 分析程序运行结果。 inta=3,b=5; max(a,b) inta,b; { return(a>b? a: b); } main() { inta=8; printf("%d",max(a,b)); } 运行结果: 8 将上面程序改为如下形式: max(inta,intb) { return(a>b? a: b); } inta=3,b=5; main() { inta=8; printf("%d",max(a,b)); } 运行结果: 8 数组 三.编程题 1.编写一个程序,从键盘输入10个学生成绩,统计最高分、最低分和平均分。 main() { inti,j,k; floatarray[10],max,min,avg,sum=0; printf("输入10个学生的成绩: \n"); for(i=0;i<10;i++) scanf("%f",&array[i]); printf("\n"); max=a[0]; min=a[0]; for(i=0;i<10;i++) { if(a[i]>max)max=a[i]; if(a[i] sum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言实例教程 课后题答案 语言 实例教程 课后 答案