c语言程序设计第五版习题答案_第1页
c语言程序设计第五版习题答案_第2页
c语言程序设计第五版习题答案_第3页
c语言程序设计第五版习题答案_第4页
c语言程序设计第五版习题答案_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计第五版习

题答案

Lastrevisionon21December2020

习题解析与答案

第1章C语言概述

一.简答题

1.概述C语言的主要特点。

【解答】

⑴语言简洁、紧凑,使用方便、灵活。

⑵数据类型丰富,表达能力强。

⑶运算符多样。C语言中的运算符包含的范围非常广泛。

(4)具有结构化的控制语句。如if,"else语句、whiIe语句、dowhile语句、

switch语句、for语句。

⑸允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进

行访问操作。

⑹所生成的目标代码质量高,可移植性好。

2.构成C语言程序的基本单位是什么它由哪几部分组成

【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、

宏定义、函数说明、变量和一个或若干个函数组成。

3.C语言程序的运行一般要经过哪几个步骤

【解答】⑴编辑;⑵编译;⑶连接,生成EXE文件;⑷执行。

二.运行程序写结果

1-输入下面程序并运行。

main()

(

intal,a2,x;

al=100;

a2=50;

x=aI-a2;

printf(r/x=%d\nM,x);

)

【解答】运行结果为:x=5。

2.输入下面程序并运行。

main()intaha2,x;

al:10;

a2=20;

x=aI*a2;

printf("al=%d,a2=%d\n",al,a2);

printf("x=%d\n,r,x);

1

【解答】运行结果为:al=10,a2=20x=200

3.输入下面程序并运行。

#include<>

main()

(

printf("******\n");

printf("*****\n");

printf("****\n");

printf("***\n");

printf("

printf("*\n");

)

【解答】运行结果为:******

*****

思考:可以修改程序,使之输出平行四边形,等腰三角形等图形。

三.编程题

1.参照本章例题,编写一个C程序,用于显示如下信息:

********>k>k******

IloveCprograms!

*>k***********>k>k>k>k**

【分析与提示】

①要有文件包含语句include<>°C语言中没有数据的输入、输出等功能,数据的

输入、输出都是通过调用系统提供的库函数scanf和printf等来实现的。这些函数

的说明都包括在文件中。

②main是主函数的名称。用{}括起来的内容是函数体,函数体由若干条语句组

成,这是计算机要执行的部分,每条语句以分号“;”结束。

③注意显示的信息有三行,所以要用到换行符“\n”。

参考代码:

#include<>

main()

H

printf('*************************\n')printf(IloveCprograms!\n");

printf(''************************\n'))

第2章数据类型及其运算

一­简答题

1C语言中的数据类型主要有哪几类

【解答】短整型(shortint)

「整型J整型(int)

长整西(longintS

基本类字字符型(cdr)单精度(float),

3型(浮点型)]J

双精‘(double)I

出举类型(enum)<

4组类型r

构造类,结构体类目(struct)

少用体类型(unLn)

指针类在

I空类型(void)

2.字符常量与字符串常量有什么区别

【解答】字符常量用单括号括起,字符串常量用双括号括起;字符常量存储时占1

个字节,字符串常量存储时除了n个字符外,还有系统加上的字符串终止符\。,所以字符

串常量存储时占n+1个字节。

3.C语言中的常量包括哪几类各自是如何构成的

【解答】C语言中的常量是一些其值预先定的量,并且在程序执行过程中其值不再

发生变化。常量的分类遵循基本数据类型分类原则,C语言编译系统自动将其存放在于类

型相应的内存单元中。其类别包含整形常量、浮点常量、字符常量、字符串常量和枚举

常量。整形常量又分为十进制整形常量、八进制整形常量、十六进制整形常量。浮点常

量分成十进制形式和指数形式。C语言中的,字符常量是用单括号括起来的一个字符

或是字符序列,而字符串常量是用一对双括号括起来的零个或者多个字符组成的序列。

4.简述指针、变量的指针、变量的值、指针变量与指针变量的值的含义是什么

【解答】C语言中将地址又称为“指针;一个变量所分配的内存空间首字节地址,

称为该变量的指针(地址),变量的值就被放入所分配的地址单元中。地址一旦被分配,

就不会再改变,所以,指针是一个常量。既然是常量就可以把它赋给一个变量。用来存放

指针的变量,被称为指针变量。一个指针变量的值是变量的地址,一个指针变量可以被

赋予不同的指针值。

5.下面哪些是不合法的常量说明不合法的理由。

123,,0892,Oxabc,,"Morning"【解答】非法常量有:

0892——含有非八进制数字8和9

——非法指数形式浮点常量:规定e后面的指数必须为整数。

6.下面对变量定义的语句哪些不正确为什么请改正。

(1)charcLinta2;(2)INTa,b;FLOATx,y;(3)a.b:char:

(4)charif;(5)inta,b(6)Inta:b:c;

(7)inta,x;floatx,y;

【解答】

(1)charcLinta2;

错误。定义不同类型的变量时,应用分号彼此分开。

改正为:charcl;inta2;

(2)INTa.b;FLOATx.y;

错误。C语言中表示类型名的关键字必须小写。

改正为:inta,b;floatx,y;

(3)a,b:char;

错误。C语言中变量定义格式为:类型名变量名;

改正为:chara.b:

(4)charif;

错误。变量名不能与C语言的关键字重名。

改正为:charfl;

(5)inta,b

错误。变量定义以语句形式出现,应以分号结尾。

改正为:inta,b;

(6)Inta:b:c;

错误。类型名不能有大写字母,相同类型名之间用逗号分隔,

改正为:inta,b,c;

(7)inta,x;floatx,y;

错误。在同一程序位置上,同一变量名不能重复定义充当两个不同的变量。

改正为:inta,x;floatxl,y;

7.下述字符串常量的长度是多少在内存中存储时各自占用的单元数又是多少

11)“Hell。!"(2)“ABC\ii\\TH\C64V(3)u\xAB*V765+123="

【解答】

21)-Hello!”字符串长度为6,占用内存字节数为7。

32)“ABC\n\\TH\064\”字符串长度为9,占用内存字节数为10。因为其中\n\\

\064\各自只占一个字符的位置。

43)“\xAB*\765+123二”该字符串不是合法的,因为\765表示的值太大,超出合法

的ASCII字符集的范围。

--运行程序写结果

5.以下程序的执行结果是main()

intij;

i=15;

printf("%d,%d”,;

J

【解答】14,15

6.以下程序的执行结果是______o

main()

(

inta=20,b=10.c,*p1,*p2;

PI=&a;

p2二&b;

c=(-*p1)/(*p2)+6;

printf(na=%d,b=%d\n",a,b);

printfC+p1=%d,*p2=%d\n*\*p1,*p2);printfCc=%d\n\c);

)

【分析与提示】

pla

c=4

7.以下程序的执行结果是

#incIudeo

main()

(

chara=,G,.b=,o',c=,o',d=,d';

a=a+32;

b=b-6:

c=c+3;

d=d+8;

printf("%c%c%c%c\n'\a.b.c.d);

)

【分析与提示】从ASCH代码表可以看出,字符“G,、寸的ASCII代码值

为71、111、101,因此,’G+32、,o-6、,o'+3、1d1+8的值分别是103、

105、114、108,它们所对应的字符分别是I"、"V、匕"、T。

常用结论:

⑴在C语言中,字符数据可以按其ASCII代码值参加整数运算。由于英文字母

在ASCII代码表中是按顺序排列的,所以在计算,。~3代表的字母时,可从字符,。,

顺序向后取3个字母,该字母是匕”。

⑵从ASCII代码表可以看出“小写字母”一对应大写字母,的结果是32.因此可推

算出如下等式:大写字母的ASCII值+32二对应小写字母的ASCH值;小写字母的ASCII

值-32二对应大写字母的ASCII值。

【解答】girI

8.以下程序的执行结果是o

#includeoniain(){intx;

x=-3+4*5-6;

printfCx1=%d\n",x);

x=3+4%5-6;

printf("x2=%d\n",x);

x=-3*4%-6;

printf("x3=%d\n",x);

)

【分析与提示】xl=ll分*5是20,-3+20是17,17-6等于11)

x2=l(4%5等于4,3+4等于7.7-6等于1)x3=0(-3*4等于-12,-12%-6

等于0)x2=lx3=0

9.以下程序的执行结果是_____o

#inekideomain()(

printf("%d\n",NULL);

printf("%d,%c\n",49,49);

printf("%d,%c,%o\n",48+10,48+10,48+10);

)

【分析与提示】

0(NULL的ASCH码值是0)

49,1(数字1的ASCII码值是49)

58.1,72(48+10等于58,正好是“:”的ASCII码值,八进制表示是72)

【解答】。

49.1

58,:.72

三、改错题

1-请修改下列程序,使其能够通过编译。

#include<>

VoidMain()

(

inta=6;b=8;

intc;

c=a*b;

printfC%d\c);

)

【答案】错误的地方有3处:⑴第2行关键字应该小写;⑵定义b时前面

应该用逗号;⑶打印语句的格式应该用双引号括起来。

正确的程序如下:

#incIude<>voidmain()inta=6,b=8;

intc;

c=a*b:

printf("%d",c);

1

2请修改下列程序,使其能够正确运行。

#inekide<>voidmain();

floatf=;

charc=,'c

printf("%c:c);

)

【答案】错误的地方有3处:⑴第2行main。;不应该有分号;⑵定义

charc=,'c";

时,字符常量应该用单引号:⑶打印语句printf("%d\n",int(f%3));的格式有

错,应该在f前的int用括号括起来,因为实型数据不能执行取余运算。

正确的程序如下:

#include<>voidmain()(floatf=;

charc=c*;

printf(^dXn",((int)f%3));

printfC*%c".c):

।第3章顺序结构程序设计

简答题

1.程序有哪三种基本结构

【解答】程序的三种基本结构为:顺序结构、选择结构和循环结构。

2.C语言的语句有哪几类表达式语句与表达式有什么不同

【解答】C语句可分为以下五类:表达式语句、函数调用语句、控制语句、复合语

句和空语句。其中表达式语句与表达式的区别在于表达式语句是表达式加上“二组成。

二、填空题

运算符,%是指

2.C语言中的空语句就是

3.Scanf函数中的“格式字符”后面应该是___________而不应该是

4.若想输出字符%,则应该在“格式字符。的字符串中用表示。

5.intx=7:执行x+=x-=x+x:后X的值是C

6.inta=10,b=20;a+=b;b=a-b;a-二b;的功能是

答案:1.地址、变量a的内存地址。

2.一个分号。

3.变量地址,变量名。

4.连续2个%号。

5.-14

6.交换变量a,b的值,打印出a=20,b=10。

三.运行程序写结果

1以下程序的执行结果是。

#inekideoniain()fdoubled=:intx.y:x=:y=(x+/:

printf("%d\n';d*y);}

【解答】0

2.以下程序的执行结果是o

main()(doubIed;fIoatf;IongI;inti;

i=f=l=d=20/3;

printf("%d%ld%f%An",i,I,f,d);)

【解答】66

3.以下程序的执行结果是

main()

{

intk=17;

printf("%d,%o,%x\ii",k,k,k);

)

【解答】17,21,11

4.以下程序的执行结果是,

#inekideomain(){

chara,b,c,d;

a='A,b=B,c=C;d='D;

printf("%lc\n",a);

printf("%2c\n",b);

printf("%3c\n",c);

printf("%4c\n",d);

)

【分析与提示】可以用%C格式输出的,也可以用%€1格式输出,所以与%md近

似,m指出了要输出数据的宽度。若数据位数小于m,则左端补空格,若数据位数大于m,则

按实际位数输出。

【解答】A

BCD

5.以下程序的执行结果是

#incIudeomain(){

charcl,c2;

scanf('%c%c\&c1,&c2);

printf(ncl=%c,c2=%c,c3=%d,c4=%d',c1++,—c2,c19c2);

)

【解答】运行输入:AB〈回车〉

运行结果为:c1=A,c2=A,c3=65,c4=66

6.以下程序的执行结果是

#inekideomain()(

charcI.c2:

scanf("%c,%c\&c1,&c2);

++cl;

~c2;

printf(Hcl=%c,c2=%c\nH,c1,c2);

)

【分析与提示】例如当输入B,C<回车〉,B,C的AS析I码值为66,67,执行-

7;后,cl为66+1变成67即C,c2为67-1变成66即B。

【解答】运行输入:B,C〈回车),运行结果为:cl=C,c2=B

7.以下程序的执行结果是o

main()

(

charch=*a;inta=98;

doubley=;

printf(1(1)a=%d,a=%c,ch=%d,ch=%c\n\a,a,ch,ch);

printfC⑵b=%u\n';b);

printf("(3)c=%Id\nM,c);

printf(n(4)x=%f,y=%f\nH,x,y);

printf(n(5)x=%e,y=%e\n'\x,y);

printf(n(6)y=%\n\y);}

[解答](1)a=98,a=b,ch=97,ch=a

(2)b=l000(4)x=,y=(5)x=+00,y=+00(6)y=

8.以下程序的执行结果是_______o

#inckide<>main()(inta,b;

floatx;

scanf(1,%d,%d",&a,&b);

x=a/b;

printfC\nx=%f\n",x);

1

【解答】运行输入:2,2〈回车〉,运行结果为;

9.当输入123451a时,给出程序的运行结果,执行结果是。

#inckide<>

main()

(

inta;charc;

scanf("%3d,%c",&a,&c);

printf(r\n%d,%d\n",a,c);

)

【分析与提示】%md,m指出了要输出数据的宽度。若数据位数小于叫则左端补空

格,若数据位数大于rn,则按实际位数输出。a的ASCII码值是97。

【解答】12345.97

1C.分析下面程序,在键盘上输入数据才能使得变量a=10.b=20.

cl='A',c2='a"x=,y=,z=o

程序如下:

#include<>

main()

inta,b;

floatx,y,z;

charcI,c2;

scanf("%5d%5d%c%c%f%f%*f,%f,,&a,&b,&cI,&c2,&x,&y,&z);

printfCa=%d.b=%d,c1=%c.c2=%c,x=%f.y=%f.z=%F'.a.b,c1.c2,x.y.z):

)

【分析与提示】按%5d格式输入a与b的值时,要先键入三个空格,然后再键入

1。与2。。%*f是用来禁止赋值的。在输入时,对应%*f位置可以随意输入一个数(我们输

入,该数不会赋值给任何变量的)。

【解答】运行输入:一〈回车》

11.一个程序中,使用了多个scanf函数输入数据,用a=3,b=7,x=,y=,cl=,A\c2=W

输入到每个变量,应该如何输入数据

inta,b;

floatx,y;

charcI.c2;

scanf(a=%d,b=%d,&a,&b);

scanf(Hx=%f,y=%e",&x,&y);

scanf(Hcl=%cc2=%c,\&c1,&c2);

printf(Ha=%d,b=%dx=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2);

)

【分析与提示】在使用多个scanf函数输入数据时,第一个输入行末尾输入的回车

被第二个scanf函数吸收,因此在第二、三个scanf函数的双引号后放置一个空格以抵消

上行输入的回车键。若没有一个空格,则按上面输入的数据会出错。

【解答】运行输入:a=3,b=4V回车〉

X=8,y*回车〉

CI=AC2=a<回车>

15彳丁结果:a=3,b-7,x=,y,cl-A,c2-a

四.编程题

1.由键盘输入1个字母,输出其ASCII码值。

【分析与提示】将一个字符常数赋给一个字符变量,并不是把该字符本身放到内存

单元中去,而是将该字符的ASCII代码放到内存单元中,因此,字符型数据也可以像整型

数据那样使用,可以用来表示一些特定范围内的整数。所以依型与char型变量的值可

以互换,分别用枇和洞不同格式输出就行了。

但是注意这种转换是有条件的。因为,char变量在内存占一个字节,而int整型

变量占2个字节。当int型高位字节是。时,char与int可以互换;若不是。,则不可以互

换。例如,用心格式输出时,取低位字节,高位字节被舍弃。

参考代码:

#incIudc

charch;

ch=getchar();

printf("%c,%d",ch.ch);

)

【解答】运行输入:B〈回车〉

运行结果:B,66

2.从键盘上输入一个大写字母,把它转换成小写字母,然后显示出来。

【分析与提示】大写字母转换小写时ASCII码值+32,相反的,小写字母转换成大

写字母时ASCII码值-32。

参考代码:

#include<>main()

f

charxI,x2;

printfCxU'n,;

scanf("%cH,&xl);

x2=xl+32;

printf(n%c,%c\nH,x1,x2);)

【解答】运行输入:A〈回车》

运行结果:A,a

3.从键盘上输入两个实型数,求两数的和、差、积,输出结果时要求小数部分占两位。

【提示】结果要求保留2位小数,所以输出的结果格式为%.2九

main()(

floatx,y,a,b.c;

printfCpleaseinputx,y:;

$canf("%f,%f",&x,&y);

a=x+y;

b=x-y;

c=x*y:

nn

printf(x=%f,y=%f\n,x5y);

printf(Hx+y=%.2f\nx-y=%.2f\nx*y=%.2f\n\a.b,c);

【解答】

运行输入:pleaseinputx,y:10,20V回车〉

运行结果:x=,y=

x+y=x-y=x*y=

4.编写一个程序,求出给定半径r的圆以及内正n边形的面积,并且输出计算结

果。r和n的值由用户输入。

【分析与提示】由数学知识得到:半径为r圆的面积5二加[半径为r圆的内接正

n边形的面积4二”飞心々/2,其中。=21/〃

处理步骤:提示信息,接收参数值;计算圆的面积;计算正n边形的面积;输出

结果。

参考代码:

#inckideo

#inekideo

#definePI

niain()

(

intn;

floatr,s.area;

printf(uPleaseinputtheradiusandthe

scant("%f%d",&rt&n);

s=PI*r*r;

area=(n*r*r*sin(2*Pl/n))/;

printf(nS=%.2f\tA=%.2f\n\s,area);

return(0);

)

运行结果如下:

PleaseinouttheradiusandtheN.;

15

S=A=

5.已知华氏温度与摄氏温度之间的转换公式是:c=5/9x(F-32),编写一个程序,将

用户输入的华氏温度转换成摄氏温度,并予以输出。

【分析与提示】首先要定义输入输出温度为浮点型,且5/9两数相除结果为整数,

5/9的值为0,故不能写成5/9,而应写成*(932)。结果要求保留2位小数,所以输出的结果

格式为%。

参考代码:

#include<>

niain()

(

intf;

floatc;

printf(n\npleaseinputtheF:n);

scanf("%d'\&f);

c=9*(f-32);〃不能写成5/9,两数相除结果为整数,5/9的值为0*/

printfCtheis:%.2f\c);

return(0);

)

【解答】运行结果如下:

pleaseinputtheF:75〈回车〉

the,[eratureis:

6.由键盘输入5个学生的计算机成绩,计算他们的平均分并保留2位小数。

【分析与提示】方法与上题类似,同样是保留两位有效数字%。

参考代码:

main()

(

inta,b,c,d,e;

floattotaLaver;

printf(Pleseinput5students'scores:\nH);

scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d,&e);

totaI=a+b+c+d+e;

aver-totaI/;

printf("Average:%\iV\aver);

【解答】运行输入:80,93,75,68.87〈回车)

运彳丁结果:Average:

7.编写将输入的英里转换为公里,每英里等于538。英尺,每英尺等于12英

寸,每英寸等于2.54厘米,每公里等于10。00。厘米。

main()

(

doubIemiIe,k;

priiitfCenter

scanf(u%lf\&miIe):

k=mile*5380*12*100000;

print*"%lfmiIeis%lfkilometerNn'\mile*k);

)

【解答】运行:entermile:2/

miIeiskilometer

第4章选择结构程序设计

习题

1.已知a=3,b=4,c=5。则逻辑表达式a+b>c&&b==c的值为

(a>b)&&clII的值为,!(a+b)+c-l&&b+c/2的值为。

【分析与提示】本题考查运算符的优先级别。

【解答】0:1:1

二、运行程序写结果

L下列程序运行的运行结果为。

#inekideo

main()

inta=3,b=8,c=9,d=2,e=4;

intmin;

min=(a<b)a:b;

min=(min<c)minic;

min=(min<d)min:d;

min=(min<e)mime;

printf("Minis%d\n",min);

)

【分析与提示】本题程序的功能为:找出a,b,c,d,e中最小的值并输出。

【解答】Minis2

2.若输入3.4〈回车),下列程序运行的运行结果为;若输入4.3〈回车》,下列

程序运行的运行结果为0

#inckide<>

main()

(

irta,b,c;

printf("Inputa.b:");

ecanf("%d,%d",ab);

if(a>=b)

{c=a*b;printf(,%d*%d=%d\n"ja,b,c);}

eIse

{c=a/b;printf("%d/%d=%d\n'\a,b,c);}

)

【分析与提示】本题程序的功能为:从键盘输入变量a.b,计算c的值(若a>王则

c-a*b,若a<b贝ljc-a/b),并输出a.b.c的值。

【解答】3/4=0;4*3=12

3.下列程序运行的运行结果为。

#inekideo

main()

(

intx=l,y=0,a=0?b=0;

switch(x)

(

case1:

swtch(y)

{case0:a++;break;

case1:b++;break;

)

case2:a++;b++;break;

)

printf("a=%d,b=%d\n",a.b);

)

【分析与提示】本题中easel:后面是一个switch语句,执行完该语句后,直接执行

case2:后面的语句。

【角翠答】a=2tb=l

三.编程题

1.输入一个字母,若为小写,则把它变成大写输出。

【分析与提示】小写字母的ASCII码值与其对应的大写字母的ASCII码值相差32。

参考代码:

main()

charc;

printf("请输入一个字母、n");

scanf(n%c\&c);

if(c>=,a'&&cv='z')

c=c-32;

printf("%c\n",c):)

2.企业发放的奖金根据利润提成。利润⑴低于或等于1。万元时,奖金可提

10%;利润高于10万元,低于20万元时,低于10万元的部分按10节提成,高于10万元的

部分,可可提成舟;20万到40万之间时,高于20万元的部分,可提成5%;40万到

60万之间时高于40万元的部分,可受成3*;60万到100万之间时,高于60万元的部

分,可提成%,高于1。0万元时,超过1。。万元的部分按居提成,从键盘输入当月利润

I,求应发放奖金总数

【分析与提示】请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

参考代码:

main()

{

longinti;

intbonusI,bonus2,bonus4,bonus6,bonusIO,bonus;

snanf(〃/1d〃,&i);

bonusI=100000*;bonus2=bonusI+100000*;

bonus4=bonus2+200000*;

bonus6=bonus4+200000*;

bonus10=bonus6+400000*;

if(i<=100000)

bonus=i*;

elseif(i<=200000)

bonus二bonusl+(i-100000)*;

elseif(i<=400000)

bonus=bonus2+(i-200000)*;

elseif(i<=600000)

bonus=bonus4+(i-400000)*;

elseif(i<=1000000)

bonus=bonus6+(i-600000)*;

else

bonus=bonus10+(i-1000000)*;

printf("bonus-%d”,bonus);

)

3.由键盘输入三个整数a、b、c.用条件运算符求出其中最大值和最小值。

【分析与提示】首先比较输入的a,b的大小,并把大数装入sax,小数装入min中,然

后再与c比较,若max小于c,则把c赋予max;如果c小于min,则把c赋予min©因此max内

总是最大数,而min内总是最小数。最后输出max和min的值即可c

参考代码:

main()

inta.b,c,max.min;

scanf(*d,$d,$d,&a.&b.&c);

max=a>ba:b;

niax=max>cmax:c;

min=a<ba:b;

min=min<cmin:c;

printf("最大值为:%d,最小值为:%d\n”,max.min);

)

4.有一函数:

Xf(x<l)

y=2x-l(IWx<10)

3x-lI(xNIO)

编一程序,输入一个x值,输出y值。

【分析与提示】本题考查if语句的嵌套,应当注意if与else的配对关系。从最内层开

始,else总是与它上面最近的(未曾配对的)if配对。

参考代码:

main。(floatx,y;printfC请输入x的值\rT);scanf(*f;&x);

if(x<l)y=x;

eIse

if(x>=10)y=3*x-l1;

eIsey=2*x-l;

printf("x=%,y=%v,x,y);

I

5.从键盘上输入星期号,并显示该日期的英文名字。

【分析与提示】本实例知识点:switch语句。

switch语句的控制流程是:首先计算表达式的值,然后依次与每一个case中的常量值

进行比较,一旦发现了某个能够匹配的值,就执行该case后面的语句组,直到遇至IJbreak

语句为止。如果表达式的值与所有case中的常量都不匹配,则执行default后面的语句组。

参考代码:

man()

intxqh;

charywm;

printf("请输入星期号(1-7):\n");

scanf(n%dM,&xqh);

swtch(xqh)

{case1:printf(Monday,1);break;

case2:printf(HTuesdayw);break;

case3:printf('<WednesdayM);break;

case4:printf(HThursdayH);break;

case5:printf(HFridayH);break;

case6:printf("Saturday1*);break:

case7:printf("Sunday,;break;

default:printf(“error");

)

)

6.某市不同车牌的出租车3公里的起步价和计费分别为:夏利7元/公里,3公里以

外元/公里;富康8元/公里,3公里以外元/公里;桑塔纳9元,3公里以外元/公里。编

程:从键盘输入乘车的车型及行车公里数,输出应付车资。

【分析与提示】可设三个变量,分别表示乘车的车型、行车公里数和应付车资,

根据乘车的车型和行车公里数,计算出应付的车资。

参考代码:

main()

(

intex;/*定义乘车的车型变量ex*/

floatgl,cf;/*定义行车公里数变量gl、应付车资变量cf*/

夏利\n\t2-富康\n\t3-桑塔纳\n");

printf(%请输入车型(1-3)scanf("%d",&cx);

printf("\n\t请输入行车公里数:”);

scanf("%f',&gl);

switch(ex)

{case1:if(gI<=3)cf=;

eIsecf=7+(gl-3)*;break;

case2:if(gI<=3)cf=:

eIsecf=8+(gI-3)*;break;

case3:if(gI<=3)cf=;

eIsecf=9+(g1-3)*;

)

printf(M应付车资为%.1

)

7.给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;

③按逆序打印出各位数字。如原数为12345.则逆序为54321。

【分析与提示】本题的思路是:设5个变量,分别代表个位、十位、百位、千位

和万位。从个位起,依次将各个位取出来,按取出的顺序组合成新的数据,并记录当前取

出的数字的个数。

参考代码:

incIudemain()(

unsignedx,m,n=0,w=0;

unsignedge=05shi=0,bai=0.qian=0,wan=0;

“intf(“请输入一个正整数)

scanf(*u\&x);

m=x;

ge=m%10;m=m/10;w=1;n=ge;

if(m)

{shi=m%10;m=m/10;w=2;n=n*10+shi;

if(m)

{bai=m%10;m=m/10;w=3;n=n*10+bai;

if(m)

(qian=m%10;m=ni/10;w=4;n=n*10+qian;

if(m)

{wan=m;w=5;n=n*10+wan;J

)

)

)

printf(H\n%u为%11位数",n,w);

printf("\n正整数的原序为:%u",x);

printf("\n正整数的逆序为:%u\n);

)

注:当该程序输入一个较大的5位数时,输出结果就不正确了,思考为什么动手试

一下怎样修改该程序。

第5章循环结构程序设计

一、填空

1.下面程序的功能是用“辗转相除法力求两个正整数的最大公约数。请填空。

#inckide<>

mail()

intr,m.n;

scanf('%d%dni&m,&n);

if(m<n)(1);

r=m^n;

while(r){m=n;n=r;;)

printf("%d\n",n);

)

【分析与提示】辗转相除法:两数相除,若不能整除,则以除数作为被除数,余

数作为除数,继续相除,直到余数为。时,当前除数就是最大公约数。

【解答】(I)r=m;m=n;n=r;(2)r=m%n;

二,运行程序写结果

1.下列程序运行的运行结果为0

#inekideo

n)ain()

(

inty=10;

do

{y—;

}wniIe(-y);

printf("%d।y-);

【分析与提示】注意丫~与丫一的运算顺序。

【解答】0

2.下列程序运行的运行结果为。

main()

(

intx=3,y=6,z=2:

while(x++!=(y-=l))

(

z+=l;

if(y<x)

break;

priiitfC%d,%d,%d\ir\x,y.z);

)

1

【解答】4,5,3

3.下列程序运行的运行结果为.

main()

(

inta=Lb=O;

for(;a<3;a++)

switch(a++)

(

caseI:b—:

case2:b++;

case3:b+=3;break;

1

printf(u%d\nn,b);

)

【解答】3

4.下列程序运行的运行结果为。

main()intx=10,y=10J;

for(i=0:i<2;y=i++)priiitf(%4dMeI,x-y);

)

【解答】101090

三.编程题

1,求s=I+2+4+8+-+64的值c

【分析与提示】本题为数学项求和问题,数学项间的关系为:第n项的值为第n-1

项的值2倍。参考代码:

main。

(

inti,s=05t=I;

whiIe(t<=64)

Is=s+t;

t=2*t;

)

printf(Hs=%d\n*\s);

)

2.求s=l+l/2+l/3+-+l/100的值。

【分析与提示】本题为分数数学项求和问题,要想得到每一项的正确结果,分式

中的分子、分母至少要有一个为实型数据。

参考代码:

main()

(inti;

floats=0,t;

for(i=l;i<=100;i++)

{t=i;

s=s+t;

)

printf("s=%.2f\n",s);

)

3.求T=1!+2!+3!+・・・+10!的值。

【分析与提示】本题为数学项求和问题,数学项间的关系为:第n项的值为第n-1

项的n倍。参考代码:

main()

longintt=0.tn=l;

inti;

for(i=l;i<=10;i++)

{tn=i*tn;

t=t+tn;

)

printfCt=%ld",t);

)

4.求s=2/1+3/2+4/3+5/44—+22/21的值。

【分析与提示】请抓住分子与分母的变化规律。

参考代码:

main()

(

intm;

floats=0,n=;

for(m=l;m<=2I;m++)

{s=s+ii/m;

n=n+1;

)

printf("s=%.2fui",s);

)

5.输入一行字母,分别统计其中的英文字母、空格、数字和其他字符的个数。

【分析与提示】利用while语句,条件为输入的字符不为.

参考代码:

include

main()

(

charc;

intletters=0,space=0,digit=0,other=0:

Printf("请输入一行字符:\n");

whiIe((c=getchar())!=\n)

(if(c>=a&&c<=zllc>=A&&c<=Z)letters++;

elseif(c=')space++;

elseif(c>-0&&c<=9)digit++;

eIseother++;

1

printf(“字母数<d空格数;*d数字数=%d其它字符数二%d\n”,letters,space,digit,other);)

6.求100以内能被8整除的数,并求它们的和。

【提示】判断一个数m能否被n整除的方法是:将m对n取余数,若余数为。,

则为整除。

参考代码:

main。

(

intn,s=0;

for(n=1;n<=100;n++)

if(r%8==0)

|s=s+n;

printf("

温馨提示

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

评论

0/150

提交评论