c程序设计第三版习题参考解答全.docx

上传人:b****6 文档编号:5957078 上传时间:2023-01-02 格式:DOCX 页数:157 大小:115.22KB
下载 相关 举报
c程序设计第三版习题参考解答全.docx_第1页
第1页 / 共157页
c程序设计第三版习题参考解答全.docx_第2页
第2页 / 共157页
c程序设计第三版习题参考解答全.docx_第3页
第3页 / 共157页
c程序设计第三版习题参考解答全.docx_第4页
第4页 / 共157页
c程序设计第三版习题参考解答全.docx_第5页
第5页 / 共157页
点击查看更多>>
下载资源
资源描述

c程序设计第三版习题参考解答全.docx

《c程序设计第三版习题参考解答全.docx》由会员分享,可在线阅读,更多相关《c程序设计第三版习题参考解答全.docx(157页珍藏版)》请在冰豆网上搜索。

c程序设计第三版习题参考解答全.docx

c程序设计第三版习题参考解答全

C程序设计(第三版)课后习题参考解答

第1章C语言概述

1.5参照本章例题,编写一个C程序,输出以下信息:

******************************

VeryGood!

******************************

解:

main()

{printf(“******************************\n”);

printf(“\n”);

printf(“VeryGood!

\n”);

printf(“\n”);

printf(“******************************\n”);

}

1.6写一个程序,输入a,b,c三个值,输出其中最大者。

解:

main()

{inta,b,c,max;

printf(“请输入三个数a,b,c:

\n”);

scanf(“%d,%d,%d”,&a,&b,&c);

max=a;

if(max

max=b;

if(max

max=c;

printf(“最大数为:

%d”,max);

}

第2章程序的灵魂——算法

2.1什么叫结构化的算法?

为什么要提倡结构化的算法?

解:

由一些基本结构顺序组成的算法称为结构化的算法。

由于在基本结构之间不存在非顺序的跳转,流程的转移只存在于一个基本结构范围之内,因而提高了算法的质量。

2.7什么叫结构化程序设计?

它的主要内容是什么?

解:

结构化程序就是用高级语言表示的结构化算法。

它的主要内容包括“自顶向下,逐步细化”的分析方法和“模块化设计”的解决方法,以及“结构化编码”的实现方法。

第3章数据类型、运算符与表达式

3.4将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。

注:

如果没有学过二进制和补码,此题可以不做。

解:

各数据在内存中的存储形式如下表所示:

变量的类型

25

-2

32769

int型

00…000011001

8位

111111*********0

15

100…001(溢出)

14

long型

00…000011001

24

11…1110

31

00…0100…001

1614

short型

100…000011001

8

111111*********0

15

100…001(溢出)

14

signedchar(8位)

100011001

11111110

00000001(溢出)

unsignedint型

00…000011001

8

11…110

15

100…001

14

unsignedlong型

00…000011001

24

11…110

31

00…0100…001

1614

unsignedshort型

00…000011001

8

11…110

15

100…001

8

unsignedchar型

00011001

11111110

00000001

其中int和short类型,其取值范围是-32768~32767。

32769在这两种类型中实际表示负数,它是一个负数的补码,对其再求一次补码可得其真值,即-(65536-32769)=-32767。

char和unsignedchar为8位,若将int或long类型数据赋给这种类型,则截取数据低8位。

同理,若将long赋给int,则截取低16位。

3.5字符常量和字符串常量有什么区别?

解:

字符常量是一个字符,用单引号括起来。

字符串常量是由0个或若干个字符组合而成,用双引号括起来,存储时自动在字符串最后加一个结束符号’\0’。

3.6写出以下程序运行的结果:

main()

{charcl=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;

printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);

printf(“\t\b%c%c”,c4,c5);

}

解:

程序运行的结果为:

aabbccabc

AN

3.7要将“China”译成密码,密码规律是:

用原来的字母后面第4个字母代替原来的字母。

例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。

因此,“China”应译为“Glmre”。

请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为’C’,’h’,’i’,’n’,’a’,经过运算,使c1,c2,c3,c4,c5的值分别变为’G’,’l’,’m’,’r’,’e’,并输出。

解:

main()

{charcl=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;

c1+=4;

c2+=4;

c3+=4;

c4+=4;

c5+=4;

printf(“密码是%c%c%c%c%c\n,c1,c2,c3,c4,c5);

}

运行结果:

密码是Glmre

3.8例2.6能否改成如下:

main()

{intc1,c2;(原为charc1,c2)

c1=97;

c2=98;

printf(“%c%c\n”,c1,c2);

printf(“%d%d\n”,c1,c2);

}

解:

可以。

因为在可输出的字符范围内,用整型和用字符型作用相同。

3.9求下面算术表达式的值。

x+a%3*(int)(x+y)%2/4

设x=2.5,a=7,y=4..7

(float)(a+b)/2+(int)x%(int)y

设a=2,b=3,x=3.5,y=2.5

解:

(1)2.5

(2)3.5

3.10写出程序运行的结果。

main()

{inti,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

printf(“%d,%d,%d,%d”,i,j,m,n);

}

解:

运行结果为:

9,11,9,10

3.11写出下面赋值的结果。

格中写了数值的是要将它赋给其他类型的变量,将所有空格填上赋值后的数值。

int

99

42

char

‘d’

unsignedint

76

65535

float

53.65

longint

68

解:

int

99

100

76

53

68

42

-1

char

‘c’

‘d’

‘L’

‘5’

‘D’

‘*’

unsignedint

99

100

76

53

68

42

65535

float

99.000000

100.000000

76.000000

53.65

68.000000

42.000000

65535.000000

longint

99

100

76

53

68

42

65535

3.12出下面表达式运算后a的值,设原来a=12。

设a和n都已定义为整型变量。

(1)a+=a

(2)a-=2

(3)a*=2+3(4)a/=a+a

(5)a%=(n%=2),n的值等于5(6)a+=a-=a*=a

解:

(1)24

(2)10

(3)60(4)0

(5)0(6)0

第4章最简单的C程序设计——顺序程序设计

4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,n=128765,c1=’a’,c2=’b’,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。

要求输出的结果如下:

a=□3□□b=□4□□c=□5

x=1.200000,y=2.400000,z=-3.600000

x+y=□3.60□□y+z=-1.20□□z+x=-2.40

u=□51247□□n=□□□128765

c1=’a’□or□97(ASCII)

c2=’b’□or□98(ASCII)

解:

main()

{

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=51247;n=128765;

c1=’a’;c2=’b’;

printf(“\n”);

printf(“a=%2d□□b=%2d□□c=%2d\n”,a,b,c);

printf(“x=%.6f,y=%.6f,z=%.6f\n”,x,y,z);

printf(“x+y=□%.2f□□y+z=%.2f□□z+x=%.2f\n”,x+y,y+z,z+x);

printf(“u=%6ld□□n=%9ld\n”,u,n);

printf(“c1=’%c’or%d(ASCII)\n”,c1,c1);

printf(“c2=’%c’or%d(ASCII)\n”,c2,c2);

}

4.5请写出下面程序的输出结果:

main()

{inta=5,b=7;

floatx=67.8564,y=-789.124;

charc=’A’;

longn=1234567;

unsignedu=65535;

printf(“%d%d\n”,a,b);

printf(“%3d%3d\n”,a,b);

printf(“%f,%f\n”,x,y);

printf(“%-10f,%-10f\n”,x,y);

printf(“%8.2f,%8.2f,%4f,%4f,%3f,%3f\n”,x,y,x,y,x,y);

printf(“%e,%10.2e\n”,x,y);

printf(“%c,%d,%o,%x\n”,c,c,c,c);

printf(“%ld,%lo,%x\n”,n,n,n);

printf(“%u,%o,%x,%d\n”,u,u,u,u);

printf(“%s,%5.3s\n”,”COMPUTER”,”COMPUTER”);

}

运行结果:

5□7

□□5□□7

67.856400,-789.124023

67.856400□,-789.124023

□□□67.86,□□-789.12,67.8564,-789.1240,67.856400,-789.124023

6.785640e+01,□□-7.9e+02

A,65,101,41

1234567,4553207,d687

65535,177777,ffff,-1

COMPUTER,□□COM

可以发现,输出数据中若有负号、e和小数点,这些字符也占位。

4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。

问在键盘上如何输入?

#include

voidmain()

{

inta,b;

floatx,y;

charc1,c2;

scanf(“a=%db=%d”,&a,&b);

scanf(“%f%e”,&x,&y);

scanf(“%c%c”,&c1,&c2);

}

解:

a=3□b=7

□8.5□71.82

□A□a

4.7下面的scanf函数输入数据,使a=10,b=20,c1=’A’,c2=’a’,x=1.5,y=-3.75,z=67.8,请问在键盘上如何输入数据?

scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z);

解:

main()

{

inta,b;floatx,y,z;

charc1,c2;

scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z);

printf(“a=%d,b=%d,c1=5c,c2=%c,x=%6.2f,y=6.2f,z=6.2f\n”),a,b,c1,c2,x,y,z);

}

运行情况如下:

□□□10□□□20Aa1.5–3.75□1.5,67.8(此行为输入的数据,其中□为空格)

a=10,b=20,c1=A,c2=a,x=1.50,y=-3.75,z=67.80(此行为输出)

说明:

按%5d格式的要求输入a和b时,要先键入三个空格,然后再键入10与20。

%*f是用来禁止赋值的。

在输入时,对应于%*f的地方,随意打入了一个数1.5,该值不会赋给任何变量。

4.8圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。

用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。

请编程序。

解:

main()

{

floatpi,h,r,l,s,sq,vq,vz;

pi=3.1415926;

printf(“请输入圆半径r,圆柱高h:

\n”);

scanf(“%f,%f”,&r,&h);

l=2*pi*r;

s=r*r*pi;

sq=4*pi*r*r;

vq=3.0/4.0*pi*r*r*r;

vz=pi*r*r*h;

printf(“圆周长为:

l=%6.2f\n”,l);

printf(“圆面积为:

s=%6.2f\n”,s);

printf(“圆球表面积为:

sq=%6.2f\n”,sq);

printf(“圆球体积为:

sv=%6.2f\n”,vq);

printf(“圆柱体积为:

sz=%6.2f\n”,vz);

}

运行结果:

请输入圆半径r,圆柱高h:

1.5,3↙

圆周长为:

l=9.42

圆面积为:

s=7.07

圆球表面积为:

sq=28.27

圆球体积为:

sv=7.95

圆柱体积为:

sz=21.21

4.9输入一个华氏温度,要求输出摄氏温度,公式为C=(5/9)(F-32)

输出要有文字说明,取2位小数。

解:

main()

{floatc,f;

printf(“请输入一个华氏温度:

\n”);

scanf(“%f”,&f);

c=(5.0/9.0)*(f-32);/*注意5和9要用实型表示,否则5/9的值为0*/

printf(“摄氏温度为:

%5.2f\n”,c);

};

运行结果:

请输入一个华氏温度:

78↙

摄氏温度为:

25.56

第5章选择结构程序设计

5.2语言中如何表示“真”和“假”?

系统如何判断一个量的“真”和“假”?

解:

设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。

但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。

例如3&&5的值为“真”,系统会给出3&&5的值为1。

5.3写出下面各逻辑表达式的值。

设a=3,b=4,c=5。

(1)a+b>c&&b==c

(2)a||b+c&&b-c

(3)!

(a>b)&&!

c||1

(4)!

(x=a)&&(y=b)&&0

(5)!

(a+b)+c-1&&b+c/2

解:

(1)0

(2)1

(3)1

(4)0

(5)1

5.4有3个整数a,b,c,由键盘输入,输出其中最大的数。

解:

方法一:

程序如下:

main()

{inta,b,c;

printf(“请输入3个整数:

”);

scanf(“%d,%d,%d”,&a,&b,&c);

if(a

if(b

printf(“max=%d\n”,c);

else

printf(“max=%d\n”,b);

elseif(a

printf(“max=%d\n”,c);

else

printf(“max=%d\n”,a);

}

运行结果:

请输入3个整数:

12,34,9↙

max=34

方法二:

使用条件表达式,可以使程序更简明,清晰。

main()

{inta,b,c,temp,max;

printf(“请输入3个整数:

”);

scanf(“%d,%d,%d”,&a,&b,&c);

temp=(a>b)?

a:

b;/*将a和b中的大者存入temp中*/

max=(temp>c)?

temp:

c;/*将a和b中的大者与c比较,取最大者*/

printf(“3个整数中最大数是%d\n”,max);

}

方法三:

a>b?

(a>c?

a:

c):

(b>c?

b:

c)

运行结果:

请输入3个整数:

12,34,9↙

3个整数的最大数是34。

5.5有一函数:

写一程序,输入x值,输出y值。

解:

程序如下

main()

{intx,y;

printf(“输入x:

”);

scanf(“%d”,&x);

if(x<1)/*x<1*/

{y=x;

printf(“x=%d3d,y=x=%d\n”,x,y);

}

elseif(x<10)/*1≤x<10*/

{y=2*x-1;

printf(“x=%3d,y=2*x-1=%d\n”,x,y);

}

else/*x≥10*/

{y=3*x-11;

printf(“x=%3d,y=3*x-11=%d\n”,x,y);

}

}

运行结果:

输入x:

4↙

x=4,y=2*x-1=7

输入x:

-1↙

x=-1,y=x=-1

输入x:

20↙

x=20,y=3*x-11=49

5.6给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。

90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。

解:

程序如下

#include"stdio.h"

voidmain()

{

floatscore;

chargrade;

printf("请输入学生成绩:

");

scanf("%f",&score);

while(score>100||score<0)

{

printf("\n输入有误,请重输");

scanf("%f",&score);

}

switch((int)(score/10))

{

case10:

case9:

grade='A';break;

case8:

grade='B';break;

case7:

grade='C';break;

case6:

grade='D';break;

case5:

case4:

case3:

case2:

case1:

case0:

grade='E';

}

printf("\n成绩是%5.1f,相应的等级是%c。

\n",score,grade);

}

5.7给定一个不多于5位的正整数,要求:

①求它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字。

例如原数为321,应输出123。

解:

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=(int)(num-ten_thousand*10000)/1000;

hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;

ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;

indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);

switch(place)

{case5:

printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);

printf(“\n反序数字为:

”);

printf(“%d%d%d%d%d\n”,indiv,ten,hundred,thousand,ten_thousand);

break;

case4:

printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv);

printf(“\n反序数字为:

”);

printf(“%d%d%d%d\n”,indiv,ten,hundred,thousand);

break;

case3:

printf(“%d,%d,%d”,hundred,ten,indiv);

printf(“\n反序数字为:

”);

printf(“%d%d%d\n”,indiv,ten,hundred);

break;

case2:

printf(“%d,%d”,ten,indiv);

printf(“\n反序数字为:

”);

printf(“%d%d\n”,indiv,ten);

break;

case1:

printf(“%d”,indiv);

printf(“\n反序数字为:

”);

printf(“%d\n”,indiv);

break;

}

}

运行结果:

请输入一个整数(0~99999):

98765↙

位数=5

每位数字为:

9,8,7,6,5

反序数字为:

56789

5.8企业发放的奖金根据利润提成。

利润I低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元(1000001000000时,超过100万的部分按1%提成。

从键盘输入当月利润I,求应发放奖金总数。

要求:

(1)用if语句编程序;

(2)用switch语句编程序。

解:

计算利润时,要特别注意不同利润的不同提成比例。

例如,利润为15万元,其中由10万元按10%的比例提成,另外5万元则按7.5%提成。

用i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1