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

下载本文档

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

文档简介

1、习题解析与答案第 1 章 C 语言概述一 简答题1概述 C 语言的主要特点。【解答】(1)语言简洁、紧凑,使用方便、灵活。(2)数据类型丰富,表达能力强。(3)运算符多样。 C 语言中的运算符包含的范围非常广泛。(4)具有结构化的控制语句。 如 ifelse 语句、while 语句、do while 语句、switch 语句、 for 语句。( 5)允许直接访问物理地址。 C 语言中含有的位和指针运算,能够直接对内存地址进行访问操作。( 6 )所生成的目标代码质量高,可移植性好。2 .构成 C 语言程序的基本单位是什么它由哪几部分组成【解答】函数是构成 C 语言程序的基本单位。一个完整的 C

2、程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。3.C语言程序的运行一般要经过哪几个步骤【解答】(1)编辑;(2)编译;(3)连接,生成 EXE 文件;(4)执行。二.运行程序写结果1 .输入下面程序并运行。main()int a1 , a2, x;a1=100;a2=50;x=a1-a2;printf(“ x=%d n,x);【解答】运行结果为: x=502.输入下面程序并运行。main()int a1 ,a2, x;a1=10;a2=20;x=a1*a2;printf (“ a1=%dn,al, a2)printf(x=%d n,x);【解答】运行结果为: a1=10,a

3、2=20 x=200 3输入下面程序并运行。#include main()printf(*n);printf( *n);printf( *n);printf( *n);printf( *n);printf( *n);解答】运行结果为:思考:可以修改程序,使之输出平行四边形,等腰三角形等图形。三编程题1.参照本章例题,编写一个 C 程序,用于显示如下信息:*I love C programs!*【分析与提示】1要有文件包含语句#inelude 。C 语言中没有数据的输入、输出等功能, 数据的输入、输出都是通过调用系统提供的库函数 scanf 和 printf 等来实 现的。这些函数的说明都包括在

4、文件中。2main 是主函数的名称。用括起来的内容是函数体,函数体由若干条语 句组成,这是计算机要执行的部分,每条语句以分号“ ; ”结束。3注意显示的信息有三行,所以要用到换行符“n”。参考代码:#include main()prin tf(*n)prin tf( I love C programs! n);prin tf(*n) ,第 2 章数据类型及其运算1.C语言中的数据类型主要有哪几类短整型(short int )整型(int )匚 长整型(long int )单精度(float)L 双精度(double)l枚举类型(enum)数组类型构造类型 y 结构体类型(struct)I 共用

5、体类型(union )指针类型-空类型(void )2.字符常量与字符串常量有什么区别【解答】字符常量用单括号括起,字符串常量用双括号括起;字符常量存储 时占 1个字节,字符串常量存储时除了n 个字符外,还有系统加上的字符串终止符0 ,所以字符串常量存储时占 n+1 个字节。3.C 语言中的常量包括哪几类各自是如何构成的【解答】C 语言中的常量是一些其值预先定的量, 并且在程序执行过程中其值 不再发生变化。常量的分类遵循基本数据类型分类原则,C 语言编译系统自动将其存放在于类型相应的内存单元中。其类别包含整形常量、浮点常量、字符常量、 字符串常量和枚举常量。整形常量又分为十进制整形常量、八进制

6、整形常量、十【解基本类型 Q 字符型(char)|实型(浮点型)六进制整形常量。浮点常量分成十进制形式和指数形式。C 语言中的,字符常量是 用单括号括起来的一个字符或是字符序列,而字符串常量是用一对双括号括起来 的零个或者多个字符组成的序列。4 简述指针、变量的指针、变量的值、指针变量与指针变量的值的含义是什么【解答】 C 语言中将地址又称为“指针” 。一个变量所分配的内存空间首字节 地址,称为该变量的指针 ( 地址), 变量的值就被放入所分配的地址单元中。地址一 旦被分配,就不会再改变,所以,指针是一个常量。既然是常量就可以把它赋给 一个变量。用来存放指针的变量,被称为指针变量。一个指针变量

7、的值是变量的 地址,一个指针变量可以被赋予不同的指针值。5 下面哪些是不合法的常量说明不合法的理由。123, 0892, M , n, Oxabc,,” Morning”,【解答】非法常量有:0892含有非八进制数字 8 和 9非法指数形式浮点常量:规定 e 后面的指数必须为整数。 6下面对变量定义的语句哪些不正确为什么请改正。(1) char c1,int a2;(2) INT a,b; FLOAT x,y;(3) a,b:char;( 4) char if;(5) int a,b(6) Int a:b:c;( 7) int a,x; float x,y;【解答】(1) char c1,in

8、t a2;错误。定义不同类型的变量时,应用分号彼此分开。改正为: char c1; int a2;2) INT a,b; FLOAT x,y;错误。 C 语言中表示类型名的关键字必须小写 改正为: int a,b; float x,y;( 3) a,b:char;错误。C 语言中变量定义格式为:类型名变量名;改正为: char a,b;( 4) char if;错误。变量名不能与 C 语言的关键字重名。改正为: char f1;( 5) int a,b 错误。变量定义以语句形式出现,应以分号结尾。改正为: int a,b;( 6) Int a:b:c; 错误。类型名不能有大写字母,相同类型名之

9、间用逗号分隔。改正为: int a,b,c;( 7) int a,x; float x,y; 错误。在同一程序位置上,同一变量名不能重复定义充当两个不同的变量。 改正为: int a,x; float x1,y;7 下述字符串常量的长度是多少在内存中存储时各自占用的单元数又是多少(1) “Hello! ”(2)“ABC” (3) “765+123=”【解答】( 1)“Hello! ” 字符串长度为 6,占用内存字节数为 7。2)“ABC字符串长度为 9,占用内存字节数为 10。因为其中各自只占一个字符的位置10(3)“765+123=该字符串不是合法的,因为765 表示的值太大,超出合法的 A

10、SCII 字符集的范围。二.运行程序写结果1._ 以下程序的执行结果是。mai n()int i,j ;i=15 ;printf( “d,%d , i+,i-);【解答】14,152._ 以下程序的执行结果是。mai n()int a=20,b=10,c,一p1,*p2;p1= &a;p2=&b;c=(-*p1)/(*p2)+6;prin tf(a=%d,b=%dn,a,b);pri ntf(”*p1=%d,*p2=%dn,*p1,*p2);prin tf(c=%dn,c);【分析与提示】p1-a-【解答】a=20,b=1|0其中各自只占一个字符的位置10P2b*p1=20,*

11、p2=10 c=43._ 以下程序的执行结果是。#in elude mai n()char a= G ,b= o ,c= o ,d= d;a=a+32;b=b-6;c=c+3;d=d+8;prin tf(%c%c%c%cn,a,b,c,d);【分析与提示】从 ASCII 代码表可以看出, 字符“G、 “0”、 “0”、 “d”的 ASCII代码值为 71、111、101,因此,G +32、 o -6、 o +3、 d +8 的值分 别是103、105、114、108,它们所对应的字符分别是“ g”、“i ”、“r”、“I”。常用结论:(1) 在 C 语言中,字符数据可以按其 ASCII 代码值

12、参加整数运算。由于英文字母在 ASCII 代码表中是按顺序排列的,所以在计算o+3代表的字母时,可从字符o其顺序向后取 3 个字母,该字母是“ r ”。(2)从 ASCII 代码表可以看出“小写字母”-“对应大写字母”的结果是 32, 因此可推算出如下等式:大写字母的 ASCII 值+32=对应小写字母的 ASCII 值;小 写字母的ASCII 值-32=对应大写字母的 ASCII 值。【解答】girl4._ 以下程序的执行结果是。#in clude mai n()int x;x=-3+4*5-6;pri ntf(x1=%dn,x);x=3+4%5-6;pri ntf(x2=%dn,x);x=

13、-3*4%-6;pri ntf(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=11x2=1x3=05._ 以下程序的执行结果是。#in elude mai n()prin tf(%dn,NULL);pri ntf(%d,%cn,49,49);pri ntf(%d,%c,%on,48+10,48+10,48+10);【分析与提示】0(NULL 的 ASCII 码值是 0)49,1 (数字

14、1 的 ASCII 码值是 49)58,:,72(48+10 等于 58,正好是“:”的 ASCII 码值,八进制表示是 72)【解答】049,1 58,:,72三、改错题1 请修改下列程序,使其能够通过编译。#include Void Main()int a=6;b=8;int c;c=a*b;printf( %d,c);【答案】错误的地方有 3 处:(1)第 2 行关键字应该小写;(2)定义 b 时前面应该用逗号; ( 3)打印语句的格式应该用双引号括起来。正确的程序如下 :#include void main()int a=6,b=8;int c;c=a*b;printf(%d,c);2

15、 请修改下列程序,使其能够正确运行。#include void main();float f=;I”char c= ”c”;printf( “%d n”,int(f%3);printf( “%c”,c);【答案】错误的地方有 3 处:(1)第 2 行 main(); 不应该有分号;( 2)定义I”char c= ”c”;时,字符常量应该用单引号; ( 3)打印语句 printf( “%d n”,int(f%3); 的格式有错, 应该在 f 前的 int 用括号括起来 , 因为实型数据不能执行取余 运算。正确的程序如下 :#include void main()float f=;char c=c

16、;printf(%dn,(int)f %3); printf(%c,c);第 3 章 顺序结构程序设计一.简答题1.程序有哪三种基本结构【解答】程序的三种基本结构为:顺序结构、选择结构和循环结构。2.C语言的语句有哪几类表达式语句与表达式有什么不同【解答】C 语句可分为以下五类:表达式语句、函数调用语句、控制语句、复 合语句和空语句。其中表达式语句与表达式的区别在于表达式语句是表达式加上“;”组成。二、填空题1 .符号 & 是_ 运算符,&a 是指_。2._C 语言中的空语句就是o3._Seanf 函数中的“格式字符”后面应该是_,而不应该是_o4. 若想输出字符%则应该在“格

17、式字符”的字符串中用_ 表示。5. int x=7; 执行 x+=x- =x+x; 后 x 的值是_。6.int a=10,b=20;a+=b;b=a-b;a- =b;的功能是_。答案:1.地址、变量 a 的内存地址。2 一个分号。3.变量地址,变量名。4.连续 2 个%号05.-146. 交换 变量 a,b 的值,打印出 a=20,b=10。三.运行程序写结果1._ 以下程序的执行结果是0#in elude mai n()double d=;i nt x,y;x二;y=(x+/;pri ntf(%dn,d*y);【解答】02._ 以下程序的执行结果是。mai n()double d;floa

18、t f;l ong l;i nt i;i=f=l=d=20/3;pri ntf(%d %ld %f %fn,i,l,f,d);【解答】6 63._ 以下程序的执行结果是。mai n()int k=17;pri ntf(%d,%o,%xn,k,k,k);【解答】17, 21, 114._ 以下程序的执行结果是。#in elude mai n()char a,b,e,d;a=A,b=B,e=C,d=D;pri ntf(%1cn,a);pri ntf(%2cn,b);pri ntf(%3cn,c);pri ntf(%4cn,d);【分析与提示】可以用 %c 格式输出的,也可以用 %d 格式输出,所以

19、与 md 近似,m 指出了要输出数据的宽度。若数据位数小于m,则左端补空格,若数据位数大于 m,则按实际位数输出。【解答】AD5._ 以下程序的执行结果是。#in elude mai n()char c1,c2;sea nf(%c%c, &c1, &c2);pri ntf(c1=%c,c2=%c,c3=%d,c4=%d,c1+,-c2,c1,c2);【解答】运行输入:AB运行结果为:c1=A,c2=A,c3=65,c4=666._ 以下程序的执行结果是。#in clude mai n()char c1,c2;sca nf(%c,%c, &c1, &c2);+c1

20、;-c2;pri ntf(c1=%c,c2=%cn,c1,c2);【分析与提示】例如当输入 B,C,B,C 的 ASCII 码值为 66, 67,执行+;-C2;后,c1 为 66+1 变成 67 即 C,c2 为 67-1 变成 66 即 B。【解答】运行输入:B,C 回车,运行结果为:c1=C,c2=B7._ 以下程序的执行结果是。mai n()char ch=a; int a=98;double y=;pri ntf(1)a=%d,a=%c,ch=%d,ch=%cn,a,a,ch,ch);prin tf(2)b=%un,b);prin tf(3)c=%ldn,c);prin tf(4)x

21、=%f,y=%fn,x,y);pri ntf(5)x=%e,y=%en,x,y);prin tf(6)y=%n,y);【解答】(1)a=98,a=b,ch=97,ch=ab=1000(4)x=, y=x=+00,y=+00(6)y=8._以下程序的执行结果是。#in clude mai n()int a,b;float x;sca nf(%d,%d, &a,&b);x=a/b;prin tf(nx=%fn,x);【解答】运行输入:2,2回车,运行结果为:9当输入 12345, a 时,给出程序的运行结果,执行结果是 _。#in cludemai n()int a;char c;

22、sca nf(%3d,%c, &a, &c);pri ntf(n%d,%dn,a,c);【分析与提示】 md, m 指出了要输出数据的宽度。若数据位数小于m,则左端补空格,若数据位数大于m 则按实际位数输出。a 的 ASCII 码值是 97。【解答】12345,9710.分析下面程序,在键盘上输入数据 _ 才能使得变量 a=10,b=20, c1= A,c2= a, x=, y=, z=。程序如下 :#includemain()int a,b;float x,y,z;char c1,c2; scanf(%5d%5d%c%c%f%f%*f,%f,&a,&b,&am

23、p;c1,&c2,&x,&y,&z);printf(a=%d,b=%d,c1=%c,c2=%c,x=%f,y=%f,z=%f,a,b,c1,c2,x,y,z);【分析与提示】按%5 d 格式输入 a 与 b 的值时,要先键入三个空格,然后再键入 10 与 20。 %*f 是用来禁止赋值的。在输入时,对应 %*f 位置可以随意输入一 个数(我们输入,该数不会赋值给任何变量的) 。【解答】运行输入:I。, 11 一 个 程 序 中 ,使 用 了 多 个 scanf 函 数 输 入 数 据 ,用 a=3,b=7,x=,y=,c1=A,c2= a 输入到每个变量,应该如

24、何输入数据main()int a,b;float x,y;char c1,c2;scanf(a=%d,b=%d,&a,&b);scanf( x= %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 函数的双引号后放置一 个空格以抵消上行输入的回车键。若没有一个

25、空格,则按上面输入的数据会出错。【解答】运行输入: a=3, b=4X=8, y=C1=AC2=a 回车运行结果: a=3,b=7,x=,y=,c1=A,c2=a四编程题1由键盘输入 1 个字母,输出其 ASCII 码值。【分析与提示】将一个字符常数赋给一个字符变量,并不是把该字符本身放 到内存单元中去,而是将该字符的 ASCII 代码放到内存单元中,因此,字符型数 据也可以像整型数据那样使用,可以用来表示一些特定范围内的整数。所以 int 型与 char 型变量的值可以互换,分别用 %c 和小不同格式输出就行了。但是注意这种转换是有条件的。因为, char 变量在内存占一个字节,而 int

26、整型变量占 2 个字节。当 int 型高位字节是 0 时, char 与 int 可以互换;若不是 0,则不可以互换。例如,用c 格式输出时,取低位字节,高位字节被舍弃。参考代码:#include main()char ch;ch=getchar();printf(%c,%d,ch,ch);【解答】运行输入: B 运行结果: B, 662从键盘上输入一个大写字母,把它转换成小写字母,然后显示出来。 【分析与提示】大写字母转换小写时 ASCII 码值+32,相反的,小写字母转换 成大写字母时 ASCII 码值 -32 。参考代码:#include main()char x1,x2;printf(

27、x1=n);scanf(%c,&x1);x2=x1+32;printf(%c,%cn,x1,x2);【解答】运行输入: A 回车运行结果: A, a3从键盘上输入两个实型数,求两数的和、差、积,输出结果时要求小数部分占两位。【提示】结果要求保留 2 位小数,所以输出的结果格式为 %.2f main()float x,y,a,b,c;printf(please input x,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,

28、a,b,c);【解答】运行输入: please input x,y:10运行结果: x=,y=x+y=x-y=x*y=4编写一个程序,求出给定半径 算结果。 r 和 n 的值由用户输入。【分析与提示】 由数学知识得到:, 20回车r 的圆以及内正 n 边形的面积,并且输出计2半径为 r 圆的面积s r2, 半径为 r 圆的内处理步骤:提示信息,接收参数值;计算圆的面积;计算正 n 边形的面积;输出结果参考代码:#include #include #define PI main()int n; float r,s,area;printf(Please input the radius and t

29、he N.:n); scanf(%f%d,&r,&n);s=PI*r*r; area=(n*r*r*sin(2*PI/n)/; printf(S=%.2ftA=%.2fn,s,area);return(0);运行结果如下:Please inout the radius and the N.;15S= A=5 已知华氏温度与摄氏温度之间的转换公式是:c程序,将用户输入的华氏温度转换成摄氏温度,并予以输出。【分析与提示】首先要定义输入输出温度为浮点型,且整数,5/9 的值为 0,故不能写成 5/9 ,而应写成 *(f-32) 。 所以输出的结果格式为 %。参考代码:#include

30、 main() int f; float c;printf(nplease input the F:); scanf(%d,&f);c=9*(f-32); /* 不能写成 5/9 ,两数相除结果为整数, printf(theis : %.2f,c); return(0);【解答】运行结果如下:please input the F: 75the ,erature is :6由键盘输入 5 个学生的计算机成绩,计算他们的平均分并保留【分析与提示】方法与上题类似,同样是保留两位有效数字参考代码:main()5/9 (F 32), 编写一个5/9 两数相除结果为结果要求保留 2 位小数,5/9

31、 的值为 0*/int a,b,c,d,e;float total,aver;printf(Plese input 5 students scores : n);scanf(%d,%d,%d,%d,%d,&a,&b,&c,&d,&e); total=a+b+c+d+e;aver=total/;printf(Average : %n,aver);【解答】运行输入: 80,93,75,68,87 运行结果: Average :7编写将输入的英里转换为公里,每英里等于5380 英尺,每英尺等于 12英寸,每英寸等于 2. 54 厘米,每公里等于 100 000

32、 厘米。main()double mile,k;printf( “enter mile: ”);scanf( “%lf ”,&mile); k=mile*5380*12*100000;printf( “ %lf mile is %lf kilometern” ,mile,k);【解答】运行:enter mile:2/mile is kilometer第 4 章选择结构程序设计习题一. 填空题1.已知 a=3, b=4, c=5。则逻辑表达式a+bc&b二=c 的值为 _(ab)&c|1 的值为_ ,!(a+b)+c-1 &b+c/2的值为_。【分析与提示】本题考

33、查运算符的优先级别。【解答】o ; 1 ; 1二、运行程序写结果1.下列程序运行的运行结果为 _。#in eludemain ()int a=3, b=8, c=9, d=2, e=4;int min;min二(ab) a:b;min二(minvc) min:c;min=( mind) min:d;min二(minve) min:e;printf (Min is%dn ,min);【分析与提示】本题程序的功能为:找出a,b,c,d,e 中最小的值并输出。【解答】Min is 22 .若输入 3,4回车,下列程序运行的运行结果为 _ ;若输入 4,3回车,下列程序运行的运行结果为 _。#in c

34、ludemain ()int a , b, c;printf(Input a , b:);scanf(%d, %d, &a, &b);if (a=b)c=a*b; printf(%d*%d=%dn, a, b, c) ; elsec=a/b; 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=123.下列程序运行的运行结果为 _。#in clude main ()int x=1, y=0

35、, a=0, b=0;switch (x) case 1:switch(y ) case 0: a+; break;case 1: b+; break;case 2:a+; b+; break;printf(a=%d, b=%dn, a, b) ;【分析与提示】本题中 case 1: 后面是一个 switch 语句,执行完该语句后, 直接执行 case 2: 后面的语句。【解答】 a=2, b=1三编程题1输入一个字母,若为小写,则把它变成大写输出。【分析与提示】小写字母的 ASCII 码值与其对应的大写字母的 ASCII 码值相 差 32。参考代码:main( )char c;printf(

36、 请输入一个字母 n) ;scanf(%c, &c);if(c= a&c= z)c=c-32;printf(%cn,c) ;2 企业发放的奖金根据利润提成。利润 (I) 低于或等于 10 万元时,奖金可 提 10%;利润高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10%提成,高 于 10 万元的部分,可可提成 %; 20 万到 40 万之间时,高于 20 万元的部分,可提 成 5%;40 万到60 万之间时高于 40 万元的部分,可提成 3%;60 万到 100 万之间 时,高于 60 万元的部分,可提成 %,高于 100 万元时,超过 100 万元的部分按

37、 1% 提成,从键盘输入当月利润 I ,求应发放奖金总数【分析与提示】请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。参考代码:main()long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(%ld,&i);bonus1=100000*;bonus2=bonus1+100000*;bonus4=bonus2+200000*;bonus6=bonus4+200000*;bonus10=bonus6+400000*;if(i=100000) bonus=i*;else if(i=200000)bonus=bo

38、nus1+(i-100000)*;else if(i=400000)bonus=bonus2+(i-200000)*;else if(i=600000)bonus=bonus4+(i-400000)*;elseif(iba:b ;max=maxcmax:c;min二aba:b;min二mi n cmi n:c;printf(最大值为:%d,最小值为:%dn,max,min);4.有一函数:(x1)(1 x 10)【分析与提示】本题考查 if 语句的嵌套,应当注意 if 与 else 的配对关系内层幵始,else 总是与它上面最近的(未曾配对的)if 配对参考代码:mai n()float x,

39、y;printf( 请输入 x 的值n); sca nf(%f, &x);if(x=10) y=3*x-11;else y=2*x-1;prin tf(x=%,y=%,x,y);5从键盘上输入星期号,并显示该日期的英文名字y= 2x-13x-11编一程序,输入一个x 值,输出 y 值。从最【分析与提示】本实例知识点: switch 语句。switch 语句的控制流程是:首先计算表达式的值,然后依次与每一个 case 中 的常量值进行比较, 一旦发现了某个能够匹配的值, 就执行该 case 后面的语句组, 直到遇到break 语句为止。如果表达式的值与所有 case 中的常量都不匹配,则

40、执 行 default 后面的语句组。参考代码:main( )int xqh;char ywm;printf( 请输入星期号(17): n);scanf(%d,&xqh);switch(xqh) case 1: printf(Monday); break;case 2: printf(Tuesday); break;case 3: printf(Wednesday); break;case 4: printf(Thursday); break;case 5: printf(Friday); break;case 6: printf(Saturday); break;case 7: pr

41、intf(Sunday); break;default : printf(error);6某市不同车牌的出租车 3 公里的起步价和计费分别为:夏利 7 元/公里, 3 公里以外元 /公里;富康 8 元/公里,3 公里以外元 /公里;桑塔纳 9 元,3 公里以 外元/ 公里。编程:从键盘输入乘车的车型及行车公里数,输出应付车资。【分析与提示】可设三个变量,分别表示乘车的车型、行车公里数和应付车 资,根据乘车的车型和行车公里数,计算出应付的车资。参考代码:main( )int cx; /* 定义乘车的车型变量 cx */float gl, cf; /* 定义行车公里数变量 gl 、应付车资变量 c

42、f */printf(t1-夏利 n t2-富康 n t3-桑塔纳 n);printf(t 请输入车型( 1-3): );scanf(%d,&cx);printf(nt 请输入行车公里数 : );scanf(%f,&gl);switch(cx) case 1: if(gl=3) cf=;else cf=7+(gl-3)* ;break;case 2: if(gl=3) cf=;else cf=8+(gl-3)* ;break;case 3: if(gl=3) cf=;else cf=9+(gl-3)* ;printf( 应付车资为 %.1fn,cf);7 .给一个不多于 5 位

43、的正整数,要求:求出它是几位数;分别打印出每一位数字;按逆序打印出各位数字。如原数为12345,贝 V 逆序为 54321。【分析与提示】本题的思路是:设 5 个变量,分别代表个位、十位、百位、千位和万位。从个位起,依次将各个位取出来,按取出的顺序组合成新的数据,并记录当前取出的数字的个数。参考代码:#include main( )unsigned x,m,n=0,w=0;unsigned ge=0,shi=0,bai=0,qian=0,wan=0;printf( 请输入一个正整数 );scanf(%u,&x);m=x;ge=m%10; m=m/10; w=1; n=ge;if(m)s

44、hi=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)qia n=m%10; m=m/10; w=4; n=n *10+qia n;if(m)wan二m; w=5; n=n *10+wa n;prin tf(n%u为口位数,n ,w);prin tf(n正整数的原序为:%u,x);prin tf(n正整数的逆序为:%u, n);注:当该程序输入一个较大的5 位数时,输出结果就不正确了,思考为什么动手试一下怎样修改该程序。第 5 章循环结构程序设计一、填空题1.下面程序的功能是用“辗转相除法”求两

45、个正整数的最大公约数。请填空#in cludemai n()int r , m, n;scanf(%d%d &m &n);if(mr) (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 .下列程序运行的运行结果为 _。#in elude main ()int y=10;doy-; while (-y );printf

46、( %d,y-);【分析与提示】注意 y-与 y-的运算顺序。【解答】02._ 下列程序运行的运行结果为。mai n()int x=3,y=6,z=2;while(x+!=(y-=1)z+=1;if(yx) break;printf(“d,%d,%d n” ,x,y,z);【解答】4,5,33. 下列程序运行的运行结果为 _mai n()int a=1,b=0;for(;a3;a+)switch(a+)case 1:b-;case 2:b+;case 3:b+=3;break;printf( “%d n” ,b);【解答】34. 下列程序运行的运行结果为 _mai n()int x=10,y=

47、10,i;for(i=0;i2;y=i+) printf( “%4d%4”d ,x -,y);【解答】 10 10 9 0三 编程题1. 求 s=1+2+4+8+64 的值。【分析与提示】本题为数学项求和问题,数学项间的关系为:第 n 项的值为第 n-1 项的值 2 倍。参考代码:main( )int i,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( )int

48、 i;float s=0,t;for(i=1;i=100;i+) t=i;s=s+t;printf(s=%.2fn,s);3.求 T=1!+2!+3!+ +10!的值。【分析与提示】本题为数学项求和问题, 数学项间的关系为: 第 n-1 项的 n 倍。参考代码:main( )long int t=0,tn=1;int i;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 的值。n 项的值为第while(c=getchar()!=n)分析与提示】请抓住分子与分母的变化规律。参考代码:mai

49、n( )int m;float s=0,n=;for(m=1;m= a&c= A&c= 0&c=9 )digit+;else other+;printf(”字母数=%d 空格数=%d 数字数=%d 其它字符数=%dn,letters,space,digit,other);6.求 100 以内能被 8 整除的数,并求它们的和。【提示】判断一个数 m 能否被 n 整除的方法是:将 m 对 n 取余数,若余数为 0,则为整除。参考代码:main( )int n,s=0;for(n=1;n=100;n+)if(n%8=0)s=s+n;printf(%4d,n);printf(n

50、s=%dn,s);7. 打印出所有的“水仙花数” 。所谓“水仙花数”是指一个三位数,其中各位 数字的立方和等于该数本身。例如153=13+53+33。【分析与提示】利用 for 循环控制 100999 个数,每个数分解出个位,十位, 百位。参考代码:main( )int i,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*2=2 2*2=41*3=3 2*3=6 3*

51、3=91*9=9 2*9=18 3*9=279*9=81【提示】分行与列考虑,共 9 行 9 列,利用双重 for 循环,外循环 i 控制行, 内循环 j 控制列。参考代码:main( )int i,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 程序代码:#include main( )int i,j,k;for(i=0;i4;i+) /*for(j=0;j10+i;j+) /*printf( );for(k=0;k4;k+)

52、 /*printf(*);printf(n);输出图形 b 序代码 :#include “”main( )int i,j,k;for(i=0;i4;i+) /*for(j=0;j3-i;j+) /*print f( “ ” );控制打印行数 */控制空格输出位置 */控制每行 * 的输出个数 */控制打印行数 */控制空格输出位置 */for(k=0;k0)x1=(x2+1)*2;x2=x1;day-;printf( 桃子总数 =%dn,x1);11. 求出 500 以内所有素数提示】判断素数的方法:用一个数分别去除2 到 sqrt( 这个数 ) ,如果能被整除,则表 明此数不是素数,反之是素

53、数 参考代码:#include main( )int m,k,i,n=0;for(m=2;m=500;m+)k=sqrt(m);for(i=2;i=k+1) printf(%-5d,m); n=n+1;if(n%10=0)printf(n);printf(n);12. 输入一个整数( 099999),判断它的位数,并重新组合成同样位数的最大值。如,输入 1345,输出 5431。【提示】先求出该整数的位数;其次分解出每一位数(个位、十位、百位、 千位、万位);接着将 5 个位数进行排序;最后根据整数的位数重新组合成同样位 数的最大值。参考代码:main( )long int num, t,d1

54、,d2,d3,d4,d5,n;/* 分别代表个位,十位,百位,千位, 万位和位数*/printf( 请输入一个整数( 099999) :) ;scanf(%ld, &num);if(num9999) n=5;else if(num999) n=4;else if(num99) n=3;else if(num9) n=2;else n=1;printf(n=%ldn,n) ; d5=num/10000;d4=(num-d5*10000)/1000; d3=(num-d5*10000-d4*1000)/100;d2=(num-d5*10000-d4*1000-d3*100)/10;d1=n

55、um-d5*10000-d4*1000-d3*100-d2*10;if(d5d4) t=d5;d5=d4;d4=t;if(d5d3)t=d5;d5=d3;d3=t;if(d5d2)t=d5;d5=d2;d2=t;if(d5d1)t=d5;d5=d1;d1=t;if(d4d3)t=d4;d4=d3;d3=t;if(d4d2)t=d4;d4=d2;d2=t;if(d4d1)t=d4;d4=d1;d1=t;if(d3d2)t=d3;d3=d2;d2=t;if(d3d1)t=d3;d3=d1;d1=t;if(d2d1)t=d2;d2=d1;d1=t;switch(n) case 5: num=d5*1

56、0000+d4*1000+d3*100+d2*10+d1; break;case 4: num=d5*1000+d4*100+d3*10+d2; break;case 3: num=d5*100+d4*10+d3; break;case 2: num=d5*10+d4; break;case 1: num=d5;printf( 重组后的数为: %ldn,num);13. 求证 100 以内哥德巴赫猜想是成立的。 即:100 以内任何一个大的偶数 (大 于等于 6)都可以表示成两个素数之和。【分析与提示】我们先不考虑怎样判断一个数是否为素数,而从整体上对这个问题进行考虑,可以这样做:读入一个偶数

57、n,将它分成 p 和 q,使 n=p+q。怎样分呢可以令 p 从 2 幵始,每次加 1,而令 q=n-p,如果 p、q 均为素数,则正为 所求,否则再试。参考代码:#include #include main( )int j,n,p,q,flagp,flagq;printf(please input n :n);scanf(%d,&n );if (n%2)!=0)|(n=4)printf(input data error!n);else p = 1 ;do p = p + 1 ;q = n - p ;flagp = 1 ;for(j=2;j0;-k)if(ak%2=0)prin tf(

58、%d ,ak);【提示】从后向前把能被 2 整除的数组元素输出。【解答】6 4 22._以下程序的执行结果是。#in elude mai n()char str=SSSWLIA,c;int k;for(k=2;(c=strk)!=0;k+)switch(c)case T:+k;break;case L:c ontinue;default:putchar(c);c on ti nue;putchar(*);【提示】从字符串中第 3 个字符幵始,把符合要求的字符运用输出字符函数putchar()输出;最后在其后输出一个*。【解答】SW*3. 以下程序的执行结果是 _。mai n()char ss10=12345;strcat(ss,6789);gets(ss);prin tf(%s,ss);假设输入ABC【分析与提示】运用字符串连接函数strcat(),

温馨提示

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

评论

0/150

提交评论