《c语言程序设计第五版习题答案27448.pdf》由会员分享,可在线阅读,更多相关《c语言程序设计第五版习题答案27448.pdf(143页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、习题解析与答案 第 1 章 C 语言概述 一简答题 1概述 C 语言的主要特点。【解答】(1)语言简洁、紧凑,使用方便、灵活。(2)数据类型丰富,表达能力强。(3)运算符多样。C 语言中的运算符包含的范围非常广泛。(4)具有结构化的控制语句。如 ifelse 语句、while 语句、dowhile 语句、switch 语句、for 语句。(5)允许直接访问物理地址。C 语言中含有的位和指针运算,能够直接对内存地址进行访问操作。(6)所生成的目标代码质量高,可移植性好。2构成 C 语言程序的基本单位是什么?它由哪几部分组成?【解答】函数是构成 C 语言程序的基本单位。一个完整的 C程序一般由文件
2、包含、宏定义、函数说明、变量和一个或若干个函数组成。3语言程序的运行一般要经过哪几个步骤?【解答】(1)编辑;(2)编译;(3)连接,生成 EXE 文件;(4)执行。二运行程序写结果 1输入下面程序并运行。main()inta1,a2,x;a1=100;a2=50;x=a1-a2;printf(x=%dn,x);【解答】运行结果为:x=50 2输入下面程序并运行。main()inta1,a2,x;a1=10;a2=20;x=a1*a2;printf(a1=%d,a2=%dn,a1,a2);printf(x=%dn,x);【解答】运行结果为:a1=10,a2=20 x=200 三编程题 1参照本
3、章例题,编写一个程序,用于显示如下信息:*IloveCprograms!*【分析与提示】要有文件包含语句#include。C 语言中没有数据的输入、输出等功能,数据的输入、输出都是通过调用系统提供的库函数 scanf 和 printf 等来实现的。这些函数的说明都包括在 stdio.h 文件中。main 是主函数的名称。用括起来的内容是函数体,函数体由若干条语句组成,这是计算机要执行的部分,每条语句以分号“;”结束。注意显示的信息有三行,所以要用到换行符“n”。参考代码:#include main()printf(*n);printf(IloveCprograms!n);printf(*n);
4、第2章 数据类型及其运算 一简答题 1C 语言中的数据类型主要有哪几类?【解答】短整型(shortint)整型整型(int)长整型(longint)基本类型字符型(char)单精度(float)实型(浮点型)双精度(double)枚举类型(enum)数组类型 构造类型结构体类型(struct)共用体类型(union)指针类型 空类型(void)2 字符常量与字符串常量有什么区别?【解答】字符常量用单括号括起,字符串常量用双括号括起;字符常量存储时占1个字节,字符串常量存储时除了n个字符外,还有系统加上的字符串终止符0,所以字符串常量存储时占 n+1个字节。3 C 语言中的常量包括哪几类?各自是
5、如何构成的?【解答】C 语言中的常量是一些其值预先定的量,并且在程序执行过程中其值不再发生变化。常量的分类遵循基本数据类型分类原则,C 语言编译系统自动将其存放在于类型相应的内存单元中。其类别包含整形常量、浮点常量、字符常量、字符串常量和枚举常量。整形常量又分为十进制整形常量、八进制整形常量、十六进制整形常量。浮点常量分成十进制形式和指数形式。C 语言中的,字符常量是用单括号括起来的一个字符或是字符序列,而字符串常量是用一对双括号括起来的零个或者多个字符组成的序列。4 简述指针、变量的指针、变量的值、指针变量与指针变量的值的含义是什么?【解答】C 语言中将地址又称为“指针”。一个变量所分配的内
6、存空间首字节地址,称为该变量的指针(地址),变量的值就被放入所分配的地址单元中。地址一旦被分配,就不会再改变,所以,指针是一个常量。既然是常量就可以把它赋给一个变量。用来存放指针的变量,被称为指针变量。一个指针变量的值是变量的地址,一个指针变量可以被赋予不同的指针值。5 下面哪些是不合法的常量?说明不合法的理由。123,3.1415926,0892,M,n,0 xabc,0.618E-6,”Morning”,3.8e-3.14【解答】非法常量有:0892含有非八进制数字 8 和 9 3.8e-3.14非法指数形式浮点常量:规定 e 后面的指数必须为整数。6下面对变量定义的语句哪些不正确?为什么
7、?请改正。(1)charc1,inta2;(2)INTa,b;FLOATx,y;(3)a,b:char;(4)charif;(5)inta,b(6)Inta:b:c;(7)inta,x;floatx,y;【解答】(1)charc1,inta2;错误。定义不同类型的变量时,应用分号彼此分开。改正为:charc1;inta2;(2)INTa,b;FLOATx,y;错误。C 语言中表示类型名的关键字必须小写。改正为:inta,b;floatx,y;(3)a,b:char;错误。C 语言中变量定义格式为:类型名变量名;改正为:chara,b;(4)charif;错误。变量名不能与 C 语言的关键字重名
8、。改正为:charf1;(5)inta,b 错误。变量定义以语句形式出现,应以分号结尾。改正为:inta,b;(6)Inta:b:c;错误。类型名不能有大写字母,相同类型名之间用逗号分隔。改正为:inta,b,c;(7)inta,x;floatx,y;错误。在同一程序位置上,同一变量名不能重复定义充当两个不同的变量。改正为:inta,x;floatx1,y;7 下述字符串常量的长度是多少?在内存中存储时各自占用的单元数又是多少?(1)“Hello!”(2)“ABCnTH064?”(3)“xAB*765+123=?”【解答】(1)“Hello!”字符串长度为 6,占用内存字节数为 7。(2)“A
9、BCnTH064?”字符串长度为 9,占用内存字节数为 10。因为其中n064?各自只占一个字符的位置。(3)“xAB*765+123=?”该字符串不是合法的,因为765表示的值太大,超出合法的 ASCII 字符集的范围。二运行程序写结果 1以下程序的执行结果是。main()inti,j;i=15;printf(“%d,%d”,i+,i-);【解答】14,15 2以下程序的执行结果是。main()inta=20,b=10,c,*p1,*p2;p1=&a;p2=&b;c=(-*p1)/(*p2)+6;printf(a=%d,b=%dn,a,b);printf(*p1=%d,*p2=%dn,*p1
10、,*p2);printf(c=%dn,c);【分析与提示】p1a P2b【解答】a=20,b=10*p1=20,*p2=10 c=4 3以下程序的执行结果是。#include 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%cn,a,b,c,d);【分析与提示】从 ASCII 代码表可以看出,字符“G”、“o”、“o”、“d”的ASCII代 码 值 为71、111、101,因此,G+32、o-6、o+3、d+8 的值分别是 103、105、114、108,它们所对应的字符分别是“g”、“i”、“r”、“l”。常用
11、结论:(1)在 C 语言中,字符数据可以按其 ASCII 代码值参加整数运算。由于英文字母在 ASCII 代码表中是按顺序排列的,所以a 2b 1在计算o+3代表的字母时,可从字符o其顺序向后取 3 个字母,该字母是“r”。(2)从 ASCII 代码表可以看出“小写字母”-“对应大写字母”的结果是 32,因此可推算出如下等式:大写字母的 ASCII值+32=对应小写字母的 ASCII 值;小写字母的 ASCII 值-32=对应大写字母的 ASCII 值。【解答】girl 4以下程序的执行结果是。#include main()intx;x=-3+4*5-6;printf(x1=%dn,x);x=
12、3+4%5-6;printf(x2=%dn,x);x=-3*4%-6;printf(x3=%dn,x);【分析与提示】x1=11(4*5 是 20,-3+20 是 17,17-6 等于11)x2=1(4%5 等于 4,3+4 等于 7,7-6 等于 1)x3=0(-3*4 等于-12,-12%-6 等于 0)【解答】x1=11 x2=1 x3=0 5以下程序的执行结果是。#include main()printf(%dn,NULL);printf(%d,%cn,49,49);printf(%d,%c,%on,48+10,48+10,48+10);【分析与提示】0(NULL 的 ASCII 码值
13、是 0)49,1(数字 1 的 ASCII 码值是 49)58,:,72(48+10 等于 58,正好是“:”的 ASCII 码值,八进制表示是 72)【解答】0 49,1 58,:,72 三、改错题 1 请修改下列程序,使其能够通过编译。#include VoidMain()inta=6;b=8;intc;c=a*b;printf(%d,c);【答案】错误的地方有 3 处:(1)第 2 行关键字应该小写;(2)定义 b 时前面应该用逗号;(3)打印语句的格式应该用双引号括起来。正确的程序如下:#include voidmain()inta=6,b=8;intc;c=a*b;printf(%d
14、,c);2 请修改下列程序,使其能够正确运行。#include voidmain();floatf=7.12;charc=”c”;printf(“%dn”,int(f%3);printf(“%c”,c);【答案】错误的地方有 3 处:(1)第 2 行 main();不应该有分号;(2)定义 charc=”c”;时,字 符 常 量 应 该 用 单 引 号;(3)打 印 语 句printf(“%dn”,int(f%3);的格式有错,应该在 f 前的int 用括号括起来,因为实型数据不能执行取余运算。正确的程序如下:#include voidmain()floatf=7.12;charc=c;pri
15、ntf(%dn,(int)f%3);printf(%c,c);第 3 章顺序结构程序设计 一简答题 1程序有哪三种基本结构?【解答】程序的三种基本结构为:顺序结构、选择结构和循环结构。2C 语言的语句有哪几类?表达式语句与表达式有什么不同?【解答】C 语句可分为以下五类:表达式语句、函数调用语句、控制语句、复合语句和空语句。其中表达式语句与表达式的区别在于表达式语句是表达式加上“;”组成。二、填空题 1符号&是运算符,&a 是指。2C 语言中的空语句就是。3Scanf 函数中的“格式字符”后面应该是,而不应该是。4若想输出字符%,则应该在“格式字符”的字符串中用表示。5intx=7;执行 x+
16、=x-=x+x;后 x 的值是。6inta=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.以下程序的执行结果是。#include main()doubled=3.2;intx,y;x=1.2;y=(x+3.8)/5.0;printf(%dn,d*y);【解答】0 2以下程序的执行结果是。main()doubled;floatf;longl;inti;i=f=l=d=20/3;printf(%d%ld%f%fn,i
17、,l,f,d);【解答】666.0000006.000000 3以下程序的执行结果是。main()intk=17;printf(%d,%o,%xn,k,k,k);【解答】17,21,11 4以下程序的执行结果是。#include main()chara,b,c,d;a=A,b=B,c=C,d=D;printf(%1cn,a);printf(%2cn,b);printf(%3cn,c);printf(%4cn,d);【分析与提示】可以用%c 格式输出的,也可以用%d 格式输出,所以与md 近似,m 指出了要输出数据的宽度。若数据位数小于 m,则左端补空格,若数据位数大于 m,则按实际位数输出。【
18、解答】A B C D 5以下程序的执行结果是。#include main()charc1,c2;scanf(%c%c,&c1,&c2);printf(c1=%c,c2=%c,c3=%d,c4=%d,c1+,-c2,c1,c2);【解答】运行输入:AB 运行结果为:c1=A,c2=A,c3=65,c4=66 6以下程序的执行结果是。#include main()charc1,c2;scanf(%c,%c,&c1,&c2);+c1;-c2;printf(c1=%c,c2=%cn,c1,c2);【分析与提示】例如当输入 B,C,B,C 的 ASCII 码值为 66,67,执行+c1;-c2;后,c1
19、 为 66+1 变成 67 即 C,c2 为 67-1变成 66 即 B。【解答】运行输入:B,C,运行结果为:c1=C,c2=B 7以下程序的执行结果是。main()charch=a;inta=98;unsignedb=1000;longx=3.14;doubley=1.2345678;printf(1)a=%d,a=%c,ch=%d,ch=%cn,a,a,ch,ch);printf(2)b=%un,b);printf(3)c=%ldn,c);printf(4)x=%f,y=%fn,x,y);printf(5)x=%e,y=%en,x,y);printf(6)y=%-10.2fn,y);【解
20、答】(1)a=98,a=b,ch=97,ch=a(2)b=1000(4)x=3.140000,y=1.234568(5)x=3.14000e+00,y=1.23457e+00(6)y=1.23 8以下程序的执行结果是。#include main()inta,b;floatx;scanf(%d,%d,&a,&b);x=a/b;printf(nx=%fn,x);【解答】运行输入:2,2,运行结果为:1.000000 9 当输入 12345,a 时,给出程序的运行结果,执行结果是。#include main()inta;charc;scanf(%3d,%c,&a,&c);printf(n%d,%dn
21、,a,c);【分析与提示】md,m 指出了要输出数据的宽度。若数据位数小于 m,则左端补空格,若数据位数大于 m,则按实际位数输出。a 的 ASCII 码值是 97。【解答】12345,97 10分析下面程序,在键盘上输入数据才能使得变量 a=10,b=20,c1=A,c2=a,x=1.5,y=-3.75,z=67.8。程序如下:#include 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=%c,c2=%c,x=%f,y=%f,z
22、=%f,a,b,c1,c2,x,y,z);【分析与提示】按%5d 格式输入 a 与 b 的值时,要先键入三个空格,然后再键入 10 与 20。%*f 是用来禁止赋值的。在输入时,对应%*f 位置可以随意输入一个数(我们输入 1.5,该数不会赋值给任何变量的)。【解答】运行输入:1020Aa1.5-3.751.5,67.8 11一个程序中,使用了多个 scanf 函数输入数据,用a=3,b=7,x=8.5,y=71.82,c1=A,c2=a输入到每个变量,应该如何输入数据?main()inta,b;floatx,y;charc1,c2;scanf(a=%d,b=%d,&a,&b);scanf(x
23、=%f,y=%e,&x,&y);scanf(c1=%cc2=%c,&c1,&c2);printf(a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn,a,b,x,y,c1,c2);【分析与提示】在使用多个 scanf 函数输入数据时,第一个输入行末尾输入的回车被第二个 scanf 函数吸收,因此在第二、三个 scanf 函数的双引号后放置一个空格以抵消上行输入的回车键。若没有一个空格,则按上面输入的数据会出错。【解答】运行输入:a=3,b=4 X=8,y=71.82 C1=AC2=a 运行结果:a=3,b=7,x=8.500000,y=71.820000,c1=A,c2=a 四编
24、程题 1由键盘输入 1 个字母,输出其 ASCII 码值。【分析与提示】将一个字符常数赋给一个字符变量,并不是把该字符本身放到内存单元中去,而是将该字符的 ASCII 代码放到内存单元中,因此,字符型数据也可以像整型数据那样使用,可以用来表示一些特定范围内的整数。所以 int 型与 char 型变量的值可以互换,分别用%c 和%d 不同格式输出就行了。但是注意这种转换是有条件的。因为,char 变量在内存占一个字节,而 int 整型变量占 2 个字节。当 int 型高位字节是 0时,char 与 int 可以互换;若不是 0,则不可以互换。例如,用%c格式输出时,取低位字节,高位字节被舍弃。参
25、考代码:#includestdio.h main()charch;ch=getchar();printf(%c,%d,ch,ch);【解答】运行输入:B 运行结果:B,66 2从键盘上输入一个大写字母,把它转换成小写字母,然后显示出来。【分析与提示】大写字母转换小写时 ASCII 码值+32,相反的,小写字母转换成大写字母时 ASCII 码值-32。参考代码:#include main()charx1,x2;printf(x1=?n);scanf(%c,&x1);x2=x1+32;printf(%c,%cn,x1,x2);【解答】运行输入:A 运行结果:A,a 3从键盘上输入两个实型数,求两数
26、的和、差、积,输出结果时要求小数部分占两位。【提示】结果要求保留 2 位小数,所以输出的结果格式为%.2f。main()floatx,y,a,b,c;printf(pleaseinputx,y:);scanf(%f,%f,&x,&y);a=x+y;b=x-y;c=x*y;printf(x=%f,y=%fn,x,y);printf(x+y=%.2fnx-y=%.2fnx*y=%.2fn,a,b,c);【解答】运行输入:pleaseinputx,y:10,20 运行结果:x=10.000000,y=20.000000 x+y=30.00 x-y=-10.00 x*y=200.00 4编写一个程序,
27、求出给定半径 r 的圆以及内正 n 边形的面积,并且输出计算结果。r 和 n 的值由用户输入。【分析与提示】由数学知识得到:半径为 r 圆的面积2rs,半径为 r 圆的内接正 n 边形的面积2/sin2nrA,其中n/2 处理步骤:提示信息,接收参数值;计算圆的面积;计算正 n 边形的面积;输出结果。参考代码:#include#include#definePI3.14 main()intn;floatr,s,area;printf(PleaseinputtheradiusandtheN.:n);scanf(%f%d,&r,&n);s=PI*r*r;area=(n*r*r*sin(2*PI/n)
28、/2.0;printf(S=%.2ftA=%.2fn,s,area);return(0);运行结果如下:PleaseinouttheradiusandtheN.;1 5 S=3.14A=2.38 5已知华氏温度与摄氏温度之间的转换公式是:)32(9/5Fc,编写一个程序,将用户输入的华氏温度转换成摄氏温度,并予以输出。【分析与提示】首先要定义输入输出温度为浮点型,且 5/9两数相除结果为整数,5/9 的值为 0,故不能写成 5/9,而应写成(5.0/9.0)*(f-32)。结果要求保留 2 位小数,所以输出的结果格式为%5.2f。参考代码:#include main()intf;floatc;
29、printf(npleaseinputtheF:);scanf(%d,&f);c=5.0/9*(f-32);/*不能写成 5/9,两数相除结果为整数,5/9的值为 0*/printf(theC.temperatureis:%.2f,c);return(0);【解答】运行结果如下:pleaseinputtheF:75 theC.te,eratureis:23.89 6由键盘输入 5 个学生的计算机成绩,计算他们的平均分并保留 2 位小数。【分析与提示】方法与上题类似,同样是保留两位有效数字%6.2f。参考代码:main()inta,b,c,d,e;floattotal,aver;printf(P
30、leseinput5studentsscores:n);scanf(%d,%d,%d,%d,%d,&a,&b,&c,&d,&e);total=a+b+c+d+e;aver=total/5.0;printf(Average:%6.2fn,aver);【解答】运行输入:80,93,75,68,87 运行结果:Average:80.60 7编写将输入的英里转换为公里,每英里等于 5380 英尺,每英尺等于 12 英寸,每英寸等于 2.54 厘米,每公里等于 100000 厘米。main()doublemile,k;printf(“entermile:”);scanf(“%lf”,&mile);k=m
31、ile*5380*12*2.54/100000;printf(“%lfmileis%lfkilometern”,mile,k);【解答】运行:entermile:2 2.000000mileis3.279648kilometer 第 4 章选择结构程序设计 4.1 习题 一填空题 1.已知 a=3,b=4,c=5。则逻辑表达式 a+bc&b=c 的值为,!(ab)&c|1 的值为,!(a+b)+c-1&b+c/2 的值为。【分析与提示】本题考查运算符的优先级别。【解答】0;1;1 二、运行程序写结果 1.下列程序运行的运行结果为。#include main()inta=3,b=8,c=9,d=
32、2,e=4;intmin;min=(ab)?a:b;min=(minc)?min:c;min=(mind)?min:d;min=(mine)?min:e;printf(Minis%dn,min);【分析与提示】本题程序的功能为:找出 a,b,c,d,e 中最小的值并输出。【解答】Minis2 2 若输入 3,4,下列程序运行的运行结果为;若输入 4,3,下列程序运行的运行结果为。#include main()inta,b,c;printf(Inputa,b:);scanf(%d,%d,&a,&b);if(a=b)c=a*b;printf(%d*%d=%dn,a,b,c);else c=a/b;
33、printf(%d/%d=%dn,a,b,c);【分析与提示】本题程序的功能为:从键盘输入变量 a,b,计算 c 的值(若 a=b,则 c=a*b,若 ab 则 c=a/b),并输出 a,b,c 的值。【解答】3/4=0;4*3=12 3下列程序运行的运行结果为。#include main()intx=1,y=0,a=0,b=0;switch(x)case1:switch(y)case0:a+;break;case1:b+;break;case2:a+;b+;break;printf(a=%d,b=%dn,a,b);【分析与提示】本题中 case1:后面是一个 switch 语句,执行完该语句
34、后,直接执行 case2:后面的语句。【解答】a=2,b=1 三编程题 1输入一个字母,若为小写,则把它变成大写输出。【分析与提示】小写字母的 ASCII 码值与其对应的大写字母的 ASCII 码值相差 32。参考代码:main()charc;printf(请输入一个字母n);scanf(%c,&c);if(c=a&c=z)c=c-32;printf(%cn,c);2企业发放的奖金根据利润提成。利润(I)低于或等于 10万元时,奖金可提 10%;利润高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10%提成,高于 10 万元的部分,可可提成7.5%;20 万到 40 万之间时,
35、高于 20 万元的部分,可提成 5%;40 万到 60 万之间时高于 40 万元的部分,可提成 3%;60 万到 100万之间时,高于 60 万元的部分,可提成 1.5%,高于 100 万元时,超过 100 万元的部分按 1%提成,从键盘输入当月利润 I,求应发放奖金总数?【分析与提示】请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。参考代码:main()longinti;intbonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(%ld,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus
36、4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i=100000)bonus=i*0.1;elseif(i=200000)bonus=bonus1+(i-100000)*0.075;elseif(i=400000)bonus=bonus2+(i-200000)*0.05;elseif(i=600000)bonus=bonus4+(i-400000)*0.03;elseif(ib?a:b;max=maxc?max:c;min=ab?a:b;min=minc?min:c;printf(最大值为:%
37、d,最小值为:%dn,max,min);4有一函数:x(x1)y=2x-1(1x10)3x-11(x10)编一程序,输入一个 x 值,输出 y 值。【分析与提示】本题考查if语句的嵌套,应当注意if与else的配对关系。从最内层开始,else总是与它上面最近的(未曾配对的)if配对。参考代码:main()floatx,y;printf(请输入 x 的值n);scanf(%f,&x);if(x=10)y=3*x-11;elsey=2*x-1;printf(x=%6.2f,y=%6.2f,x,y);5从键盘上输入星期号,并显示该日期的英文名字。【分析与提示】本实例知识点:switch语句。swit
38、ch 语句的控制流程是:首先计算表达式的值,然后依次与每一个 case 中的常量值进行比较,一旦发现了某个能够匹配的值,就执行该 case 后面的语句组,直到遇到 break 语句为止。如果表达式的值与所有 case 中的常量都不匹配,则执行 default后面的语句组。参考代码:main()intxqh;charywm;printf(请输入星期号(17):n);scanf(%d,&xqh);switch(xqh)case1:printf(Monday);break;case2:printf(Tuesday);break;case3:printf(Wednesday);break;case4:
39、printf(Thursday);break;case5:printf(Friday);break;case6:printf(Saturday);break;case7:printf(Sunday);break;default:printf(error);6某市不同车牌的出租车 3 公里的起步价和计费分别为:夏利 7 元/公里,3 公里以外 2.1 元/公里;富康 8 元/公里,3 公里以外 2.4 元/公里;桑塔纳 9 元,3 公里以外 2.7 元/公里。编程:从键盘输入乘车的车型及行车公里数,输出应付车资。【分析与提示】可设三个变量,分别表示乘车的车型、行车公里数和应付车资,根据乘车的车型
40、和行车公里数,计算出应付的车资。参考代码:main()intcx;/*定义乘车的车型变量 cx*/floatgl,cf;/*定义行车公里数变量 gl、应付车资变量cf*/printf(t1-夏利nt2-富康nt3-桑塔纳n);printf(t 请输入车型(1-3):);scanf(%d,&cx);printf(nt 请输入行车公里数:);scanf(%f,&gl);switch(cx)case1:if(gl=3)cf=7.0;elsecf=7+(gl-3)*2.1;break;case2:if(gl=3)cf=8.0;elsecf=8+(gl-3)*2.4;break;case3:if(gl=
41、3)cf=9.0;elsecf=9+(gl-3)*2.7;printf(应付车资为%.1fn,cf);7给一个不多于 5 位的正整数,要求:求出它是几位数;分别打印出每一位数字;按逆序打印出各位数字。如原数为12345,则逆序为 54321。【分析与提示】本题的思路是:设 5 个变量,分别代表个位、十位、百位、千位和万位。从个位起,依次将各个位取出来,按取出的顺序组合成新的数据,并记录当前取出的数字的个数。参考代码:#includestdio.h main()unsignedx,m,n=0,w=0;unsignedge=0,shi=0,bai=0,qian=0,wan=0;printf(请输入
42、一个正整数);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=m/10;w=4;n=n*10+qian;if(m)wan=m;w=5;n=n*10+wan;printf(n%u 为%u 位数,n,w);printf(n 正整数的原序为:%u,x);printf(n 正整数的逆序为:%u,n);注:当该程序输入一个较大的 5 位数时,输出结果就不正确了,思考为什么?动手试一下怎样修改该程
43、序。第 5 章循环结构程序设计 一、填空题 1下面程序的功能是用“辗转相除法”求两个正整数的最大公约数。请填空。#include main()intr,m,n;scanf(%d%d,&m,&n);if(mn)(1);r=m%n;while(r)m=n;n=r;(2);printf(%dn,n);【分析与提示】辗转相除法:两数相除,若不能整除,则以除数作为被除数,余数作为除数,继续相除,直到余数为 0 时,当前除数就是最大公约数。【解答】(1)r=m;m=n;n=r;(2)r=m%n;二运行程序写结果 1下列程序运行的运行结果为。#include main()inty=10;do y-;whil
44、e(-y);printf(%d,y-);【分析与提示】注意 y-与 y-的运算顺序。【解答】0 2下列程序运行的运行结果为。main()intx=3,y=6,z=2;while(x+!=(y-=1)z+=1;if(yx)break;printf(“%d,%d,%dn”,x,y,z);【解答】4,5,3 3下列程序运行的运行结果为。main()inta=1,b=0;for(?;a3?;a+)switch(a+)case1:b-;case2:b+;case3:b+=3;break;printf(“%dn”,b);【解答】3 4下列程序运行的运行结果为。main()intx=10,y=10,i;fo
45、r(i=0;i2?;y=i+)printf(“%4d%4d”,x-,y);【解答】101090 三编程题 1.求 s=1+2+4+8+64 的值。【分析与提示】本题为数学项求和问题,数学项间的关系为:第 n 项的值为第 n-1 项的值 2 倍。参考代码:main()inti,s=0,t=1;while(t=64)s=s+t;t=2*t;printf(s=%dn,s);2.求 s=1+1/2+1/3+1/100 的值。【分析与提示】本题为分数数学项求和问题,要想得到每一项的正确结果,分式中的分子、分母至少要有一个为实型数据。参考代码:main()inti;floats=0,t;for(i=1;i
46、=100;i+)t=1.0/i;s=s+t;printf(s=%.2fn,s);3.求 T=1!+2!+3!+10!的值。【分析与提示】本题为数学项求和问题,数学项间的关系为:第 n 项的值为第 n-1 项的 n 倍。参考代码:main()longintt=0,tn=1;inti;for(i=1;i=10;i+)tn=i*tn;t=t+tn;printf(t=%ld,t);4.求 s=2/1+3/2+4/3+5/4+22/21 的值。【分析与提示】请抓住分子与分母的变化规律。参考代码:main()intm;floats=0,n=2.0;for(m=1;m=a&c=A&c=0&c=9)digit
47、+;elseother+;printf(字母数=%d 空格数=?%d 数字数=%d 其它字符数=%dn,letters,space,digit,other);6.求 100 以内能被 8 整除的数,并求它们的和。【提示】判断一个数 m 能否被 n 整除的方法是:将 m 对 n 取余数,若余数为 0,则为整除。参考代码:main()intn,s=0;for(n=1;n=100;n+)if(n%8=0)s=s+n;printf(%4d,n);printf(ns=%dn,s);7.打印出所有的“水仙花数”。所谓“水仙花数”是指一个三 位 数,其 中 各 位 数 字 的 立 方 和 等 于 该 数 本
48、 身。例 如153=13+53+33。【分析与提示】利用 for 循环控制 100999 个数,每个数分解出个位,十位,百位。参考代码:main()inti,j,k,n;printf(水仙花数是:);for(n=100;n1000;n+)i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%5d,n);printf(n);8.以下面的格式,输出九九乘法表。1*1=1 1*2=22*2=4 1*3=32*3=63*3=9 1*9=92*9=183*9=279*9=81【提示】分行与列考虑,共 9 行 9 列,利用双重 for 循环,外
49、循环 i 控制行,内循环 j 控制列。参考代码:main()inti,j;for(i=1;i10;i+)for(j=1;j=i;j+)printf(%d*%d=%-4d,j,i,j*i);printf(n);9用 for 循环打印输出以下图案。*(图形 a)(图形 b)输出图形 a 程序代码:#includestdio.h main()inti,j,k;for(i=0;i4;i+)/*控制打印行数*/for(j=0;j10+i;j+)/*控制空格输出位置*/printf();for(k=0;k4;k+)/*控制每行*的输出个数*/printf(*);printf(n);输出图形 b 序代码:#
50、include“stdio.h”main()inti,j,k;for(i=0;i4;i+)/*控制打印行数*/for(j=0;j3-i;j+)/*控制空格输出位置*/printf(“”);for(k=0;k0)x1=(x2+1)*2;x2=x1;day-;printf(桃子总数=%dn,x1);11.求出 500 以内所有素数。【提示】判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表 明此数不是素数,反之是素数。参考代码:#includemath.h main()intm,k,i,n=0;for(m=2;m=500;m+)k=sqrt(m);for(i=2;i=