C语言程序复习题及参考答案 下载本文

C语言程序设计

目 录

第一章 C语言程序设计概述 .................................................................................... 1

一、主要内容......................................................................................................... 1 二、练习题部分..................................................................................................... 1 三、参考答案......................................................................................................... 3 第三章 数据类型、运算符和表达式........................................................................ 4

一、主要内容......................................................................................................... 4 二、练习题............................................................................................................. 5

(一)练习题之数据类型.............................................................................. 5 (二)练习题之 运算符和表达式................................................................ 8 三、参考答案....................................................................................................... 13

(一)练习题之数据类型 参考答案.......................................................... 13 (二)练习题之 运算符和表达式 参考答案............................................ 14

第四章 顺序程序设计.............................................................................................. 15

一、主要内容....................................................................................................... 15 二、练习题........................................................................................................... 15 三、参考答案....................................................................................................... 16 第五章 选择结构程序设计...................................................................................... 17

一、主要内容....................................................................................................... 17 二、练习题........................................................................................................... 17 三、参考答案....................................................................................................... 22 第六章 循环结构...................................................................................................... 26

一、主要内容....................................................................................................... 26 二、练习题........................................................................................................... 26 三、参考答案....................................................................................................... 35 第七章 数组.............................................................................................................. 40

一、主要内容....................................................................................................... 40 二、练习题........................................................................................................... 40 三、参考答案....................................................................................................... 50 第八章 函数.............................................................................................................. 55

一、主要内容....................................................................................................... 55 二、练习题........................................................................................................... 56 三、参考答案....................................................................................................... 63 第九章 预处理命令.................................................................................................... 68

一、主要内容....................................................................................................... 68 二、练习题........................................................................................................... 68 第十章 指针.............................................................................................................. 70

一、主要内容....................................................................................................... 70 二、练习题........................................................................................................... 70 三、参考答案....................................................................................................... 75 第十一章 结构体和共用体...................................................................................... 77

一、主要内容....................................................................................................... 77 二、练习题........................................................................................................... 77 三、参考答案....................................................................................................... 79 第十二章 位运算...................................................................................................... 83

一、主要内容....................................................................................................... 83 二、练习题........................................................................................................... 83 第十三章 文件.......................................................................................................... 84

一、主要内容....................................................................................................... 84 二、练习题........................................................................................................... 84 三、参考答案....................................................................................................... 86

第一章 C语言程序设计概述

一、主要内容

c程序基本结构特点

函数与主函数

1. 程序由一个或多个函数组成,函数由函数头和函数体构成。 2. 必须有且只能有一个主函数main()

3. 程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。

程序语句

1. C程序由语句组成,用“;”作为语句终止符

2. /* */部分为注释,不能嵌套,不产生编译代码

编译预处理不是C语言的一部分

C程序的运行步骤

运行一个C程序,从输入源程序开始,要经过编辑源程序文件(?C)、编译生成目标文件(?obj)、连接生成可执行文件(?exe)和执行四个步骤

二、练习题部分

一、选择题:

1、C语言程序编译过程中产生的文件有: ( )

A. 索引文件和文本文件两种 B. 目标文件和可执行文件

C. 二进制文件一种 D. ASCII码文件和二进制文件两种

2、以下说法中正确的是 : ( )

A. C语言程序总是从第一个定义的函数开始执行

B. 在C语言程序中,要调用的函数必须在main函数中定义 C. C语言程序总是从main函数开始执行

D. C语言程序中,main函数必须放在程序的开始部分

3、C语言源程序的基本单位是:( )

A. 函数 B. 标识符 C. 表达式 D. 语句

4、以下叙述正确的是:( )

A) C语言比其他语言高级 B) C语言可以不用编译就能被计算机识别执行 C) C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D) C语言出现的最晚、具有其他语言的一切优点

5、在一个C语言程序中 :( )

A) main函数必须出现在所有函数之前 B) main函数可以在任何地方出现 C) main函数必须出现在所有函数之后 D) main函数必须出现在固定位置

6、C++语言中工程文件的扩展名是: 。( )

A. .cpp B. .prj C. .c D. .obj

第 1 页 共 86页

(说明:BC++环境中工程文件扩展名.prj ,VC中为.dsp) 7、C文件的扩展名是:( )

(A).cpp (B).prj (C).c (D).txt

8、一个C程序的执行是从: ( )

A)本程序的main函数开始,到main函数结束

B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束

9、以下叙述正确的是: ( )

A)在C程序中,main函数必须位于程序的最前面

B)C程序的每行中只能写一条语句 C)C语言本身没有输入输出语句 D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误

10、以下叙述不正确的是: ( )

A) 一个C源程序可由一个或多个函数组成 B) 一个C源程序必须包含一个main函数 C) C程序的基本组成单位是函数

D) 在C程序中,注释说明只能位于一条语句的后面

11、C语言规定:在一个源程序中,main函数的位置:( ) A) 必须在最开始 B) 必须在系统调用的库函数的后面 C) 可以任意 D) 必须在最后

12、一个C语言程序是由 : ( )

A) 一个主程序和若干子程序组成 B) 函数组成 C) 若干过程组成 D) 若干子程序组成

13、以下叙述中正确的是:( )

A) C语言的源程序不必通过编译就可以直接运行

B) C语言中的每条可执行语句最终都将被转换成二进制的机器指令 C) C源程序经编译形成的二进制代码可以直接运行 D) C语言中的函数不可以单独进行编译

14、以下对C语言函数的描述中,正确的是 :( ) A) C程序必须由一个或一个以上的函数组成 B) C函数既可以嵌套定义又可以递归调用 C) 函数必须有返回值,否则不能使用函数

D) C程序中有调用关系的所有函数必须放在同一个程序文件中

15、C 语言的注释定界符是:( )

A. { } B. [ ] C. * * D. /* */

第 2 页 共 86页

二、填空题:

1、C程序的运行需要经过 _ 和 _ _两步进行。 2、C语言的编译单位是 __ __。 3、C语言程序由__ _组成。

4、结构化设计中的三种基本结构是_ _、_ _和_ __ 。 5、C 语言中,一个函数一般由两个部分组成,它们是_ __和__ _。 6、一个C语言程序总是从_ _函数开始执行程序。 7、一个 C 程序中至少应包括一个__ _。

8、C语言函数是由函数头和函数体两部分组成。其中,函数头包括_ __,__ __和__ _。

9、C程序中用/*……*/ 括起来的内容是程序的 。 10、C源程序的基本单位是 。

三、判断题:

1、C语言程序的三种基本结构是递归、选择、循环。 ( ) 2、函数若无返回值,则它的返回值是整数值0。 ( ) 3、函数若无返回值,则它一定无形参。 ( )

三、参考答案

一、选择题:

1~5:BCACB 6~10:BCACD 11~15:CBBAD 二、填空题: 1、编译 连接 2、文件 3、函数

4、顺序结构 选择结构 循环结构 5、函数首部 函数体 6、主函数(或main函数) 7、函数

8、函数类型 函数名 函数参数 9、注释 10、函数

三、判断题:

1、× 2、× 3、×

第 3 页 共 86页

第三章 数据类型、运算符和表达式

(温馨提示:本章内容非常繁琐,细节较多,请将所记笔记中的说明部分和例题好好看看,一般考选择题和填空题)

一、主要内容

标识符命名原则:

1. 合法的要求是由字母,数字,下划线组成,并且第一个必须为字母或则是下划线。关

键字不可以作为用户标识符号。

2. main define scanf printf 及其他库函数的函数名都不是关键字可以用作标识

符。

3. If与if不同,If是可以做为用户标识符,因为C区分大小写。

基本数据类型:

1. 基本数据类型有哪些?所占空间大小及说明符。

2. 整型、实型、字符型常量的合法表示形式,字符串的表示形式。

a)实型数据的合法形式:小数形式和指数形式-----尤其要注意指数形式的格式e前必有数,e后必为整数。2.333e-1 就是合法的

b) 字符数据的合法形式:以单引号括起来的一个字符,注意转义字符P48表3-3。

如‘\\x6d’是合法的字符,ASCII码为十六进制的6d,‘\\141’也合法,ASCII码为八进制141,‘\\108’不合法。

c) 字符常量和字符串的区别:'a' 是字符占一个字节,

\是字符串占两个字节(含有一个结束符号)。

常量和变量

1. 符号常量的定义格式:eg #define PI 3.14159 (注意宏定义后无分号结尾) 2. 变量的定义格式:

3. 变量赋初值的方式。 int a=b=c=3;不合法

数据混合计算时数据类型的转换:P54图3-10。 a) 强制类型转换:一定是(int)a 不是 int(a),注意类型上一定有括号的。 b) 注意(int)(a+b)和(int)a+b 的区别。 前是把a+b转型,后是把a转型再加b。

运算符

1. 运算符的优先级别和结合方向: a) 单目运算>双目运算

b) 算术> 关系运算>逻辑运算>条件运算>赋值运算>逗号运算 2. 算术运算符:

a) %要求左右两边都是整型数,运算结果为余数。 b) /运算若左右两边都是整型数,结果为整数。

c) 自增自减运算符,前置先自增减,再运算;后置先运算,再自增减。自增自减运算

符只能作用于变量,不能作用于常量和表达式。

如:#define A 3

A++;是错误写法。 3. 关系运算符:

a)注意赋值=与关系= =的区别。

第 4 页 共 86页

b) c语言中没有逻辑类型,逻辑“真”用非0表示,逻辑“假”用0表示,

c) x在[a,b]间的关系表达式为x>=a && x<=b,不能写为a>=x>=b。但该表达式语法成

立,有运算结果。如3>=1>=5运算时从左向右依次运算,即3>=1为真,值为1,此时,表达式为1>=5,运算结果为假,值为0。所以整个1>=3>=5的值为0.

4. 逻辑运算符:

a)!优先级别比较高, !>&&>|| 。 b)&&和||运算时注意短路原则。(常考!)

5. 赋值运算符:

a)复合赋值运算符的使用。如a=12,则a+=a-=a*=a;运算后a的值

6. 条件运算符:

a)结合方向从右向左。

7. 逗号运算符:优先级别最低;也叫顺序执行运算符,表达式的数值逗号最右边的那个

表达式的数值。(2,3,4)的表达式的数值就是4

表达式

1. 能将数学表达式写成c表达式

2. 计算表达式的值,注意优先级别和结合方向。

二、练习题

(一)练习题之数据类型

一、选择题:

1、以下标识符中,不能作为合法的C用户定义标识符的是 ( ) A)putchar B)double C)_123 D)INT

2、下列字符序列中, 不可用作C 语言标识符的是 ( ) A. b70 B. #ab C. symbol D. a_1

3.以下不能定义为用户标识符的是:( )

A. MAIN B. _HJ C. 208ong D. LINE12 4. 以下是正确的字符常量是:( )。

A. \ B. '\\\\' C. 'W1' D. \

5. 以下各项是错误的整型常量的是:( )

A. -0xcdf B. 018 C. 0xe D. 011

6、下列四组选项中,均不是C语言关键字的选项是 :( ) A) define B) getc C) include D) while

第 5 页 共 86页

IF char scanf go type printf case pow

7、下面四个选项中,均是正确的八进制数或十六进制数的选项是:( ) A) -10 B) 0abc C) 0010 D) 0al2 0x8f -017 -0x11 -0xl23

-011 0xc 0xf1 -0x8

8、下面四个选项中,均是正确的数值常量或字符常量的选项是: ( ) A) 0.0 B) \C) '3' D) +001 0f 3.9E-2.5 011 0xabcd 8.9e lel0xFFOO 2e2 '&'

'\\' '' 0a 50.

9、下面不正确的字符串常量是:( )。 A) 'abc' B) \ D) \

10.设int类型的数据长度为2字节,则该类型数据的取值范围是: ( )

A. 0至65536 B. 0至65535 C. -32767至32768 D. -32768至32767

11、在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为( )

A)char < int < 1ong int <= float < double B)char = int < 1ong int <= float < double C)char < int < 1ong int = float = double D)char = int = 1ong int <= float < double

12.若有以下程序段(n所赋的是八进制数) int m=32767,n=0327; printf(\执行后输出结果是:( )

A) 32767,327 B) 32767,0327 C) 32767,777 D) 32767,0777

13.设变量a是整形,f是实型,i是双精度型,则表达式10+′a′+i*f值的数据类型为:( )

A. int B. float C. double D. 不确定

14. 在C语言中,char型数据在内存中的存储形式是:( )

A. 补码 B. 反码 C. 源码 D. ASCII码

15. 字符串\在内存中占据的字节个数为 : ( )

A. 0 B. 1 C. 2 D. 3

16.下列为字符常量的是:( )

第 6 页 共 86页

A.“a” B. ‘ab’ C. ‘\\n’ D.‘\\084’

17.在C语言中,下面字符串能用作变量名的是:( ) A. a+b B. auto C. 2-and D. a2

18.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句

c2 = 'A' + '6' - '3';后c2中的值为( )

A) D B) 68 C) 不确定的值 D) C

19、在C语言中合法的字符型常量是。 ( ) A、“A” B、‘\\t’ C 、65 D、A

20、以下选项中,C中正确的整型常量形式是。 ( ) A、0x16 B、-202.18 C、1,000 D、0458

二、填空题:

1. 在C语言中的实型变量分为两种类型,它们是_ __ 和 ___ ___。

2.将下列字符串表示成C语言的字符串常量

(1)C:\\TC\\LIB_____________

(2)He said:\’m a student.\_________

(3)85% student passed.____________________________

3.在C语言中,标识符中英文字母的大小写________(是/不是)等价的。换句话说,sum、Sum、SUM是3个_______(相同/不同)的标识符。 4.已知char w; int x; float y; double z;

则表达式:w * x + z - y所求得的数据类型为 。 5.变量名由字母、数字和下划线组成,并且必须是______打头。

6. C语言的数据类型分为基本类型、构造类型、指针类型和空类型 。(正确/错误)。 7.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,

则表达式ch = 'a' + '8' - '3'的值为 。

三、看程序写结果

1.如果对以下程序进行编译和运行,其结果为________。 main()

{int x,y; x=555;y=x+2; y=x+2;

printf(“x=%d”,x,y);}

2.执行以下程序,写出程序运行结果________。 main() {

int c1,c2; c1=97;

第 7 页 共 86页

c2=98;

printf(\ printf(\ }

3.执行以下程序,写出程序运行结果________。 main()

{ char c1, c2;

c1='A' ; c2='a' ; c1=c1+2 ; c2=c2+2 ;

printf(\ }

(二)练习题之 运算符和表达式

一、选择题:

1、以下运算符中,优先级最高的运算符是( ) A. = B. != C. *(乘号) D. ()

2、若有以下定义,则能使值为3的表达式是( ) int k=7, x=12;

A. x%=(k%=5) B. x%=(k-k%5) C. x%=k-k%5 D. (x%=k)-(k%=5)

3、设在tc2.0中有整型变量x,y,z均为3,表达式(x++)+(y++)+(z++)的值是 ( ) A. 6 B. 7 C. 8 D. 9

4、有以下程序运行后的输出结果是: ( ) main()

{ char a='A',b; print(\ printf(\ }

A. B,B B. B,C C. A,B D. A,C 5、有以下程序运行后的输出结果是 :( ) main()

{ char a='a';

printf (\ printf(\ }

A)b,b B)b,c C)a,b D)a,c

6、设a=6,b=4,则表达式b*=a+3的值为 : ( ) A)3 B)18 C)27 D)36

第 8 页 共 86页

7、有如下程序段,其输出结果是: ( )

int a=3;

float b=15.6,f=1.5;

printf(“%d”,a+(int)b/2+(int)f%3); A)10 B)11 C)12 D)13

8、以下程序的输出结果是: ( ) main( ) {int a=3 ;

printf ( \

A. 4 3 B. 4 4 C. 5 3 D. 5 4 9、以下程序的输出结果是( )。

main( ) {

int a=10;

printf ( \ }

(A)11 10 (B)11 11 (C)12 20 (D)12 11

10、若有定义:int a=8,b=5,c;执行语句c=a / b+0.4 ; 后c的值为( )。

(A)1.4 (B)1 (C)2.0 (D)2

11、若x,i,j和k都是int型变量, 则执行下面表达式x = (i = 4, j = 16, k = 32)后x的值为( )

A) 4 B) 16 C) 32 D) 52

12、若有代数式3ae/bc,则不正确的C语言表达式是: ( ) A) a / b / c * e * 3 B) 3 * a * e / b / c C) 3 * a * e / b * c D) a * e / c / b * 3

13、以下不正确的叙述是:( )

A)在C程序中,逗号运算符的优先级最低 B)在C程序中,APH和aph是两个不同的变量

C)若a和b类型相同,在执行了赋值表达式a=b后b中的值将放人a中,而b中的值不变。 D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。

14、已知各变量的类型说明如下: ( ) int i = 8, k, a, b; unsigned long w = 5;

double x = 1.42, y = 5.2;

则以下符合C语言语法的表达式是:

A) a += a -= (b = 4) * (a = 3) B) a = a * 3 = 2

第 9 页 共 86页

C) x % (-3) D) y = f1oat(i)

15、若有定义:int a = 7; float x = 2.5, y = 4.7; 则表达式x + a % 3 * (int)(x + y) % 2 / 4的值是:( )

A) 2.500000 B) 2.7500OO C) 3.500000 D) 0.000000。

16、表达式b*=(b=3)+(a=10)的值为: ( ) (A)3 (B)19 (C)27 (D)39

17、假设所有变量均为整型,则表达式(a = 2, b = 5, b ++, a + b)的值是: ( A) 7 B) 8 C) 6 D) 2 18、若有以下程序:

main()

{int k=2,i=2,m;

m=(k+=i*=k); printf(\ }

执行后的输出结果是: ( ) (A) 8,6 (B) 8,3 (C) 6,4 (D) 7,4

)

19.在C语言中运算对象必须是整型的运算符是:( ) A. % B. / C. = = D. <=

20.若有以下定义:int x=10,y=3,z; 则语句:printf(“%d\\n”,z=(x%y, x/y));的输出结果为 ( ) A. 1 B. 0 C. 2 D. 3

21.下列哪一个表达式的值是整数类型( )。 A. 15/2 B. 15/2+2.0 C. 25/5.0 D. 0.5*10

22.若double x=2,y;则执行y=x+3/2;后,y的值是( )。 A. 3.500000 B. 3.000000 C. 2.000000 D. 3

23、以下运算符中优先级最低的是 ( )

A) && B) & C) || D) |

24、设以下变量均为int类型,则值不等于7的表达式是( ) A) (x=y=6,x+y,x+1) B) (x=y=6,x+y,y+1) C) (x=6,x+1,y=6,x+y) D) (y=6,y+1,x=y,x+1)

25.设有以下定义

int a=0; double b=1.25; char c=’A’; #define d 2

则下面语句中错误的是: ( ) (A) a++; (B) b++ (C) c++; (D) d++;

26、若有int x=12,n=5;则x%=(n%=2);后x的值是。 ( )

第 10 页 共 86页

A、1 B、0 C、-1 D、2

27、设有定义int k=0;则以下四个表达式中与其它三个的值不同的是。 ( ) A、k++ B、k+=1 C、++k D、k+1

二、填空题:

1、若有以下定义int m=5,y=2;则计算表达式y+=y-=m*=y后的y值是 。 2、若a为int型变量,则下面表达式的值为 。 (a = 4 * 5, a * 2), a + 6

3、若a是int型变量,则执行表达式\后,a的值为 。 4、s=3,s++,s; 这个语句执行完后,s的值为 。

5、C语言中的标识符只能由三种字符组成,他们是字母、数字和 。 6、已知 i=5;写出语句 a= -- i, 执行后整型变量 a 的值是 。 7、设 x 的值为15,n 的值为2,则表达式 x*=n+3 运算后 x 的值是 。 8、int x=2;x*=y=z=4; 则x的值为 。 9、表达式 i++ 相当于表达式i= 。

10、若s是unsigned int型变量,则下面表达式的值是________。

s%2+(s+1)%2 11、程序段执行后c3的值是_______。

int c1=1,c2=2; float c3; c3=1/c2*c1;

12、已知’a’的ASCII码为97,printf(“\\\n”,’e’)的输出是______;

printf(“]\\n”,’e’)的输出是___________。 13、表达式:5%2=__________,2/3=__________。

14、在C语言中,单目运算符的结合方向(运算方向)是_____________;唯一的一个三目运算符是_____________。

15、设a,b,t 为整型变量,初值为a=7,b=9,执行完语句t=(a>b)?a:b后,t 的值是 。

16、算术表达式 a=b+3 中, a、b 称为_________, 3 称为________,=、+称为_________。

17、若有定义:int b = 7;float a = 2.5,c = 4.7;

则表达式a + (int)(b / 3 * (int)(a + c) / 2) % 4的值为 。 18.C语言中为了简化程序,提高程序的编译效率,在赋值运算符前面加上其他运算符号构

第 11 页 共 86页

成复合运算符。例如:x=x+5 用复合运算符可以写成 。 19、表达式1/4+2.75的值是 。

20、若a是int型变量,且a的初值为6,则计算表达式“a+=a-=a*a”后a的值为 21、若s是int型变量,且s=6,则表达式“s%2+(s+1)%2”的值为 。 22、若x是int型变量,则执行表达式“x=(a=4,6*2)”后,x的值为 。 23、若x和n均是int型变量,且x的初值为12,n的初值为5,

则执行表达式“x%=(n%=2)”后,x的值为 。

24、设 int x=1/4;则x的值为 。

25、若 char w,int x,float y,double z;则表达式w*x+z-y的结果为 类型。 26、设 x 的值为15,n 的值为2,则表达式 x*=n+3 运算后 x 的值是 。 27、假设有条件 int x=1,y=2,z=3;则表达式z+=x>y?++x:++y的值是 。 28、int a = 2, b = 3; 表达式 a > b ? a ++ : ++ b的值为 。

29、执行语句\后,变量a、c的值依次为 、 。 30、表达式a = 3, a ++, - -a的值为 。

31、设a、b、c为整型数,且a = 3,b = 5,c = 2,则执行完以下语句:

a *= 16 + (b ++) - (++ c);后a的值是 。

32、以下程序运行后的输出结果是 main( )

{ int a=1,b=4,c=2; a=(a+b)/c;

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

运行结果 ;

33、设int a=3,b=5;float x=7.5,y=3.5;则表达式

(float)a+b/2+(int)x%(int)y; 的值是 34、在C语言的表达式中,x=x+5 用复合运算符可以写成 。 35、设a=12,表达式a/=a+a 运算后,a的值是 。 36.若定义:char c=‘\\010’;则变量c中包含的字符个数是 。 37.赋值语句是由 加上一个分号构成。 38.a=12,n=5,表达式a%=(n%=2)值是 。 39.设说明为 int a=10; 执行语句 a*=1+2+3; 后a的值是____________。 40、设int m=1,n=2;则m==--n的结果是 。

41、设x为int型变量,则执行语句x=10;x+=x-=x-x;后x的值为 。

第 12 页 共 86页

42、设所有变量均为整型,则表达式(a=5,b=3,--a,++b,a-b)的值为 。 三、看程序写结果:

1、写出以下程序运行的结果________。 main ( ) {

int i,j,m,n; i=8; j=10; m=++i; n=j++;

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

2、阅读下列程序,写出运行结果 #include main( )

{ int a=1,b=4,c=2; a=(a+b)/c;

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

运行结果 ;

3、阅读下列程序,写出运行结果 main() { int n=1;

printf(\; }

运行结果 ;

4、main( )

{ int i=3 ;

printf(\ i++);

} 运行结果 ;

5、执行以下程序,写出程序运行结果 main() {

int a=-017L; printf(\}

三、参考答案

(一)练习题之数据类型 参考答案

第 13 页 共 86页

一、选择题:

1、B 2、B 3、C 4、B 5、B 6、A 7、C 8、D 9、A 10、D 11、A 12、A 13、C 14、D 15、C 16、C 17、D 18、A 19、B 20、A

二、填空题:

1、float double

2、 (1) ”c:\\\\TC\\\\LIB”

(2) ”He said :\\”I\\’ am a student” (3)”85%% student passed” 3、不是 ,不同 4、double

5、字母、下划线 6、正确 7、 ‘f’

三、看程序写结果 1、x=555 2、 a b

97 98 3、67 c

(二)练习题之 运算符和表达式 参考答案

一、选择题:

1、D 2、D 3、D 4、A 5、A 6、D 7、B 8、A 9、A 10、B 11、C 12、C 13、D 14、A 15、A 16、D 17、B 18、C 19、A 20、D 21、A 22、B 23、C 24、C 25、D 26、B 27、D

二、填空题:

1、-16 2、 26 3、2 4、4 5、下划线 6、4 7、 75 8、8 9、i+1 10、1

11、0 12、□□□□e □□101 13、1 0

14、由右向左 条件运算符 15、9 16、变量 常量 运算符 17、5.5 18、x+=5 19、2.75 20、-60 21、1 22、12 23、0 24、0 25、double

26、75 27、6 28、4 29、11 6 30、3 31、54 32、1 33、6.0 34、x+=5 35、0

36、1 37、赋值表达式 38、0 39、60 40、 1 41、20 42、0

三、看程序写结果 1、9,11,9,10 2、 1 3、1 0 1 4、4,3 5、-15

第 14 页 共 86页

第四章 顺序程序设计

一、主要内容

输入输出函数

1. printf函数的格式考查:

a)格式:printf(“格式控制串”,输出表)

b)输出表:要输出的数据(可以没有,多个时以“,”分隔)

格式控制串:包含两种信息

? 格式说明: %[修饰符]格式字符 ,用于指定输出格式 ? 普通字符或转义序列:原样输出 c)修饰符m、n、l的功能: 修饰符 功能 m 输出数据域宽,数据长度

a)格式:scanf(“格式控制串”,地址表)

b)格式控制字符串中包含的非格式控制字符要原样输入;如:

scanf(“sum=%d”,&a); 输入时”sum=”也要输入。

scanf函数中没有精度控制,如:scanf(“%5.2f”,&a) ;是非法的。 3.getchar( )获取一个字符。 a)格式:char c; c=getchar();

4. putchar()输出一个字符,括号中的参数是一个字符变量或常量 a)格式:putchar(‘a’);

二、练习题

一、选择题: 1.设有语句scanf(“%d,%d”,&m,&n);要使m、n的值依次为2,3,正确的输入是 ( ) A. 2?3↙ B. 2,3↙ C. 2;3 D. 2↙3↙

2.______是C语言的标准函数名。 ( )

A. scanf B. case C. while D. int

3、若有int i=-19,j=i%4;printf(“%d”,j);结果为。 ( ) A、-3 B、1 C、3 D、-1

4、int x,y;

第 15 页 共 86页

scanf(“%d,%d”,&x,&y) ;若要使x得11,y得12,则以下输入形式中错误的是。 ( ) A、11,12↙ B、 11空格12↙ C、11,空格↙12↙ D、11,↙12↙ 二、填空题:

1、在TC中,printf()函数输出表列的求值顺序是 。 2、在scanf函数中, 表示变量的地址。

3、以下程序的运行结果是 。 main()

{ printf(\

4、若想通过以下输入语句使 a=5.0,b=4,c=3,则输入数据的形式应该是 。 int b,c; float a;

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

5、若变量x、y已定义为int类型且X的值为99,y的值为9,

请将输出语句printf(_____,x/y);补充完整,使其输出的计算结果形式为:x/y=11。

6、表达式pow(2.8,sqrt(double(x)))值的数据类型为 。

7、 输入一个华氏温度,要求输出摄氏温度: void main( ) {

float c,f;

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

; /* 摄氏温度c= (f - 32) */

printf(\摄氏温度为%5.2f\\n\}

8、int x=102,y=012;printf(“-,-\\n”,x,y); 则执行结果是 。

三、参考答案

一、选择题:

1、B 2、A 3、A 4、B 二、填空题:

1、由右向左 2、& 3、computer,□□com 4、5,4,c=3 5、“x/y=%d” 6、double 7、scanf(“%f”,&f); c=5.0/9*(f-32); 8、102,10

第 16 页 共 86页

第五章 选择结构程序设计

一、主要内容

三种程序结构:顺序结构、选择结构、循环结构 if语句(条件选择语句) a)if语句的三种形式:

b)if后面的表达式类型任意的;若执行语句是多条,必须为复合语句,即 写在一对花括号内。

c)if结构可以嵌套,注意缺省{ }时,else总是和它上面离它最近的未配对

的if配对 switch语句

a)格式中,E1,E2,…En是常量表达式,且值必须互不相同

b)注意执行时语句中有break和无break时,执行流程的区别。(本处常考) c)default可以不写。

二、练习题

一、选择题:

1、经过以下语句定义后, 表达式z+=x>y?++x:++y 的值为:( )

int x=1,y=2,z=3;

A. 2 B. 3 C. 6 D. 5

2、能正确表示逻辑关系:\或a≤ 0\C 语言表达式是 : ( )

A. a>=10 or a<=0 B.a>=0|a<=10 C. a>=10&&a<=0 D. a>=10||a<=0 3.已知int a=5,b=7,c=3;则逻辑表达式a

A. 1 B. 0 C. 3 D. 4 4、下列程序的输出结果是 :( )

main()

{ int x, y, z ; x=y=z=1 ;

++x&&++y||++z ;

printf(\ }

A.1 1 1 B. 2 2 2 C. 2 2 1 D. 2 1 1 5、在C语言中逻辑值“真”是用 表示的。 ( ) A. 预定义为真值的宏 B. 非零值 C. 正数 D. 非零整数

6、 设有int x,y; 以下语句判断x和y是否相等,正确的说法是该语句:( )

if (x=y) printf(\A. 语法错 B. 不能判断x和y是否相等

C. 编译出错 D. 能判断x和y是否相等 7、以下程序的输出结果是:( )。 main()

{ int a=5,b=4,c=6,d;

printf(\

第 17 页 共 86页

}

A. 5 B. 4 C. 6 D. 不确定

8、若希望当A 的值为奇数时, 表达式的值为\真\的值为偶数时, 表达式的值为\假\则以下不能满足要求的表达式是 :( )

A. A%2==1 B. !(A%2==0) C. !(A%2) D. A%2

9、若希望当A 的值为奇数时, 表达式的值为\真\的值为偶数时, 表达式的值为\假\则以下不能满足要求的表达式是 :( )

A. A%2==1 B. !(A%2==0) C. !(A%2) D. A%2 10、执行以下语句后,a,b的值分别为:( )。 int a ,b ,c ; a=b=c=1 ; ++a||++b&&++c;

(A)2 ,2 (B)1 ,1 (C)2 ,1 (D)1 ,2 11、 判断char型变量c l是否为小写字母的正确表达式为: ( )

A. ’a’<=c1<=’z’ B. (c1>=a)&&(c1<=z)

C. (‘a’>=c1) (‘z’<=c1) D. (c1>=’a’)&&(c1<=’z’) 12、已知int x=10,y=20,z=30;以下语句执行后x,y,z的值分别是:( )。

if(x>y) z=x ; x=y ; y=z ;

(A)x=10,y=20,z=30 (B)x=20,y=30,z=10

(C)x=20,y=30,z=30 (D)x=20,y=30,z=20 13、以下选项中非法的表达式是: ( )

(A) 0<=x<100 (B) i=j==0 (C) (char)(65+3) (D) x+1=x+1 14、阅读以下程序:

main() { int x;

scanf(\

if(x--<5) printf(\else printf(\}

程序运行后,如果从键盘上输人5,则输出结果是:( ) (A)3 (B) 4 (C) 5 (D) 6 15. C语言对于嵌套if语句规定else总是与( )匹配。 A)与最外层的if B.)与之前最近的if

C)与之前最近的不带else的if D)与最近的{ }之前的if

16.以下有关switch语句的正确说法是________。 ( A)break语句是语句中必须的一部分

B)在switch 语句中可以根据需要使用或不使用break语句 C)break语句在switch 语句中不可以使用

D)在switch 语句中的每一个case都要用break语句

17.设有: int a=2,b=3,c=7,d=8,m=3,n=3; 执行 (m=a>b)&&(n=c>d) 后的_________。

A) 0 B) 1 C ) 2 D) 3 )

第 18 页 共 86页

) n 值为(

18.可判断非0变量 a为正,b为负的正确表达式是_________。 )

A) a*b <0 B) (a>0||b >0)&&a*b <0

C) (a<0||b<0)&&a*b <0 D) a>0&&a*b<0

(

19.假定 int a=3, b=2, c=1, 表达式: (c==a>c)+(a/b) 的值是_________。 )

A) 1.75 B) 2 C) 1.5 D) 2.5

20.设a、b和c都是int型变量,且a=3,b=4,c=5;则以下的表达式中,值为0的

(

表达式是__________。 ( )

A) a&&b B) a<=b C) a||b+c&&b-c D) !((a

21、如果a=4,b=3,c=2,d=1,则条件表达式a<b?a:c<d?c:d的值是。 ( ) A、1 B、2 C、3 D、4 22、设有定义int a=1,b=2,c=3,d=4,m=2,n=2; 则执行表达式(m=ad)后,n的值为。 ( ) A、1 B、2 C、3 D、0

二、填空题:

1、设x=3,y=-4,z=5,则表达式!(x>y)+(y!=z)||(x+y)&&(y=z)的值是 。 2、 当a=5,b=4,c=2时,表达式 a>b!= c的值是 _______。

3、 为表示关系x ≥ y ≥z,正确的C语言逻辑、关系表达式为 。 4、有int a=3,b=4,c=5,x,y;,则以下表达式的值为

!(x=a)&&(y=b)&&c

5、在C语言中,表示逻辑\真\值用 .

6、当a=3,b=2,c=1时,表达式f=a>b>c的值是 .

7、与if(x==0) 等价的表达式写法写法是 。

8、若定义:int a=5,b=2,c=1; 则表达式 a-b>c||b==c 的值是 ; 表达式 a-b>c&&b==c 的值是 。

9、 “: ?”条件运算符是C语言中唯一的三目运算符。由其连接的表达式为条件表达式,

其格式为: <表达式1>?<表达式2>:<表达式3> 。执行过程:首先计算表达式1的值,如果表达式1的值是“真”(非0),则整个表达式的值为 的值;如果表达式1的值是“假”(0),则整个表达式的值为 的值。 10.C语言提供的三种逻辑运算符是______、______和_______。 11.若已知a=10,b=20,则表达式!a

12.若a,b变量的值任意,表达式(a==b)&&(a>b)的值是_________。 13.设x,y,z均为int型变量,请写出:

(1)x、y中至少有一个小于z的表达式_____________; (2)x、y都大于z的表达式____________;

14、能正确表示a>=10或a<=0的关系表达式为 。 15、以下程序的功能是:输出a、b、c三个变量中的最小值,请填空。 #include

第 19 页 共 86页

main()

{ int a,b,c,min;

scanf(\

if( ) min=a; else min=b; if( ) min=c; printf(\

三、看程序写结果:

1、main()

{ int x, y, z ; x=y=z=1 ;

z=++x&&++y||++z ; 运行结果: printf(\

2、main( ) { int m=5;

if(m++>5)printf(\,m); 运行结果: else printf(\,m--); }

3、若从键盘输入58,则以下程序输出的结果是 。 main() { int a;

scanf(“%d”,&a);

if(a>50) printf(“%d”,a); if(a>40) printf(“%d”,a); if(a>30) printf(“%d”,a); }

4、 以下程序运行后的输出结果是 。 main()

{ int p,a=5; if(p=a!=0)

printf(\else

printf(\}

5、 源程序如下: #include main()

{ int a=2,b=7,c=5; switch(a>0)

第 20 页 共 86页

{case 1: switch(b<0)

{case 1: printf(\ case 2: printf(\ }

case 0: switch(c==5)

{case 0: printf(\case 1: printf(\case 2: printf(\}

default: printf(\}

printf(\

运行结果:

6、main( )

{ int x=1, y=2;

switch(x) {case 0 :

case 1 : switch(y) 运行结果:

{ case 1:

case 2: y+=2; }

case 2 : x++; }

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

7.以下程序的输出结果是 。 main()

{ int x=1,y=1,a=0,b=0; switch(x)

{ case 1:switch(y) {case 0: a++; case 1: b++;

case 2: b++;break;

}

case 2: a++;b++;break; case 3: a++;b++;

}

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

8. 以下程序段的运行结果是_________。

int a,b,c; a=50;b=100;c=30;

if(a>b) { a=b;b=c;c=a;}

第 21 页 共 86页

printf(\

9.下面程序的输出结果是

void main() { int i=10; switch(i) {

case 9:i+=1; case 10:i+=1; case 11:i+=1; case 12:i+=1; }

printf(“i=%d\\n”,i); }

( )

四、编程题:

1、从键盘输入3个整数,按照从大到小的顺序输出。 2、设有一个函数如下。编程,输入x,求y值。 y=错误!未找到引用源。

2

3、求一元二次方程ax+bx+c=0的根,要求考虑所有根的情况。 4、设有一个函数如下。编程,输入x,求y值。 y=错误!未找到引用源。

5.输入一个字符,判断其是否是大写字母,如果是,则转换成为小写字母,然后输出字符,如果不是小写字母,则直接输出字符。 6、有分段函数 x, x<1 y= 2x -1,1<=x<10 3x –11, x>=10

编写一程序,输入x,输出相应的y值。

7、分别用两种判断方法,写出判断一个年份为闰年的程序。

三、参考答案

一、选择题:

1~5 :CDCCB 6~10:BCCCC 11~15:DCDBC 16~20:BDDBD 21、A 22、B 二、填空题:

1、1 2、1 3、(x>=y)&&( y>=z ) 4、0 5、非零值 6、0 7、if(!x) 8、1 0 9、表达式2 ,表达式3 10、 ! ,&& ,|| 11、1 12、0 13、(1)x

第 22 页 共 86页

(2) x>z && y>z 14、a>=10||a<=0 15、(1)a

1、221 2、6 3、585858 4、1 5、#& 6、2,4

7、a=1,b=3 8、a=100,b=30,c=100 9、i=13

四、编程题:

1、从键盘输入3个整数,按照从大到小的顺序输出。 main() {

int x,y,z,t;

scanf(\if (x>y)

{t=x;x=y;y=t;} /*交换x,y的值*/ if(x>z)

{t=z;z=x;x=t;} /*交换x,z的值*/ if(y>z)

{t=y;y=z;z=t;} /*交换z,y的值*/ printf(\}

2、设有一个函数如下。编程,输入x,求y值。 y=错误!未找到引用源。 #include main()

{ double x,y;

scanf(\if (x>0) y=sqrt(x); else if(x<0)

y=(x+1)/(x*x+2); else y=0;

printf(\}

2

3、求一元二次方程ax+bx+c=0的根,要求考虑所有根的情况。 教材P108例5.6

4、设有一个函数如下。编程,输入x,求y值。 y=错误!未找到引用源。

第 23 页 共 86页

#include main()

{ double x,y;

scanf(\if (x>=0)

y=sqrt(x+1); else

y=sin(x);

printf(\}

5.输入一个字符,判断其是否是大写字母,如果是,则转换成为小写字母,然后输出字符,如果不是小写字母,则直接输出字符。 main() { char ch;

scanf(\

if (ch>=’A’ &&ch<=’Z’) ch=ch+32;

printf(\}

6、有分段函数 x, x<1 y= 2x -1,1<=x<10 3x –11, x>=10

编写一程序,输入x,输出相应的y值。 #include main()

{ double x,y;

scanf(\if (x>10) y=3*x-11; else if(x>1) y=2*x-1; else y=x;

printf(\}

7、分别用两种判断方法,写出判断一个年份为闰年的程序。 见教材P106页例5.5

第 24 页 共 86页

第六章 循环结构

一、主要内容

三种循环结构: 1.while 语句

a)当型结构,条件成立执行循环体。

b)先判断表达式,后执行循环体。循环体有可能一次都不执行 2. do ~ while 语句

a)先执行后判断,至少执行一次循环体 b)do~while语句表达式后面必须加分号 3. for 语句

a)for语句中expr1, expr2 ,expr3 类型任意,都可省略,但分号;不可省

循环嵌套:

1.执行时先内存循环,后外层循环。(看程序写结果题) 2.外层循环可包含两个以上内循环,但不能相互交叉 break和continue (注意程序中两者的区别)

1. break语句在循环语句和switch语句中,终止并跳出循环体或开关体 2. break只能终止并跳出最近一层的结构

3. continue语句,结束本次循环,跳过循环体中尚未执行的语句,进行下一次

是否执行循环体的判断 4. continue仅用于循环语句中

二、练习题

一、选择题:

1. 执行语句:for(i=1;i<9; i++)后; 变量i的值是( )。

(A)10 (B)9 (C)不定 (D)11 2.若t为int类型,进人下面的循环之前,t的值为0 , while( t=l ) { ……}

则以下叙述中正确的是( )。

(A) 循环控制表达式的值为0 (B) 循环控制表达式的值为1

(C) 循环控制表达式不合法 (D) 以上说法都不对 3. 对do...while语句错误的描述是:( )

A.可构成多重循环结构 B. 循环次数不可能为0 C.循环次数可能为0 D. 先执行后判断。 4.下面程序段的运行结果是( )。 int n=0;

while(n++<=2) ; printf(“%d” ,n ) ;

第 25 页 共 86页

(A)4 (B)3 (C)2 (D)有语法错误 5. 以下描述正确的是( )。

A. 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。

B. do-while循环由do开始,用while结束,在while(表达式)后面不能写分号。 C. 在do-while循环体中,一定要有能使while后面表达式的值变成零(“假”)的操作。 D. do-while循环中,根据情况可以省略while。

6.关于do-while 语句的正确叙述是( )

A. do-while 语句构成的循环不能用其它语句构成的循环来代替 B. do-while 语句构成的循环只能用continue语句退出

C. 用do-while 语句构成的循环, 在while后的表达式为非零时结束循环 D. 用do-while 语句构成的循环, 在while后的表达式为零时结束循环

7.C 语言中,while 和 do…while 循环的主要区别是( )。 A. while 的循环控制条件比do…while 的循环控制条件严格 B. do…while 的循环体至少无条件执行一次 C. do…while 允许从外部转到循环体内 D. do…while 的循环体不能是复合语句

8.以下程序的输出结果是( ) 。 main( )

{ int x=10,y=10,i; for(i=0;x>8;y=++i)

printf(\,%d \,x- -,y); }

A. 10 1 9 2 B. 9 8 7 6 C. 10 9 9 0 D. 10 10 9 1

9.现已定义整型变量int i=1;执行循环语句while(i+ +<5);后,i的值为( A)1 B)5 C)6 D)以上三个答案均不正确

10.有以下程序 main() { int i;

for(i=0;i<=3;i++) switch(i)

{ case 1: printf(\

case 2: printf(\default: printf(\} }

执行后输出的结果是 :( )

A. 01123 B. 012 C. 012020 D. 120 11、执行语句:for(i=1;i<=9; i++);后变量i的值是:( )

第 26 页 共 86页

A. 10 B. 9 C. 不定 D. 11

12.设执行变量y值为3,执行下列循环语句后,变量y的值是( )。

do y++; while(y++<4); (A)3 (B)4 (C)5 (D)6

13.若k为整型变量,则下面while循环执行的次数是( )。

k=10;

while(k= =0) k=k-1; (A)0次 (B)1次 (C)10次 (D)无限次 14. 以下程序段_________。

x=-1; do

{x=x*x;} while (!x);

A) 是死循环 B) 循环执行 2 次 C) 循环执行 1 次 D) 有语法错误

15.对表达式for( 表达式1; ;表达式3) 可理解为( )

A.)for(表达式1;0; 表达式3) B)for(表达式1;1; 表达式3) C)for(表达式1; 表达式1; 表达式3) D)for(表达式1; 表达式3; 表达式3)

二、填空题:

1. 在循环语句中,continue和break语句的区别是: 语句提前结束本次循环,进

行下一次循环的判断;而 语句跳出循环结构,结束循环。

2、执行下面的程序段后,k值是 。 k=1; n=263; do

{ k*=n;

n/=10; } while(n);

3.用_________________语句可以实现提前结束循环。

4.执行完语句 for (i=0; i <3 ; i ++);后,变量i的值为_________________。

5、在C语言中,实现循环的语句有:if__goto语句、while语句、 语句和for语句。

三、看程序写结果:

1.下列程序段的输出结果是 。 void main() { int i,j;

for(i=4;i>=1;i--) { for(j=1;j<=i;j++)

第 27 页 共 86页

printf(\printf(\}

2.以下程序运行后的输出结果是 。 #include main()

{int k=1,s=0; do{

if((k%2)!=0)continue; s+=k;k++; }while(k>10); printf(\}

3.源程序如下,运行时假定键盘输入数据为:2004 #include void main(void) {int n=0; char c;

while( (c=getchar())!='') {if(c>='0'&&c<='9') n=n*10+c-'0';}

printf(\

结果为:

4.以下程序运行后的输出结果是 。 main() {

char c1,c2; c1='0',c2='9'; for( ;c1

printf(\ \ printf(\}

5.以下程序运行后的输出结果是 。 main()

{ int i, j, k;

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

{ for(j=1; j<=31-i; j++)printf(\ for(k=1; k<=2*i-1 ; k++)printf(\*\ printf(\

第 28 页 共 86页

}

}

6.以下程序运行后的输出结果是 。 #include void main(void) {int n=0; char c;

while( (c=getchar())!='')

{if(c>='0'&&c<='9') n=n*10+c-'0';}

printf(\(设输入:2518)

7. 以下程序的输出结果是 。 main () {int s,i;

for(s=0,i=1;i<3;i++,s+=i); printf(\}

8.以下程序运行后的输出结果是 。 main() { int s=0,n;

for(n=0;n<3;n++) {switch(s) { case 0:

case 1: s+=1;

case 2: s+=2;break; case 3: s+=3; default: s+=4; }

printf(“%d ”,s); } }

9. 以下程序的运行结果是_________。

main() { int num=0; while (num<=2)

{ printf(“=”,num); num++;} }

第 29 页 共 86页

10.写出程序运行结果 。

#include main() {

int i=10,j=0; do {

j=j+i; i--;

}while(i>2); printf(\}

11.设有以下程序:

#include main() { }

程序运行后,如果从键盘上输入7648;写出输出结果为 。

int n1,n2; scanf(\while(n2!=0) { }

printf(\

n1=n1*10+n2; n2=n2/10;

四、程序填空题:

1.以下程序的功能是:打印出所有的水仙花数。请补充完整。

#include ; void main() { int i,j,k,n;

printf(\ for(n=100; n<=999; n++) {

i= ; j=(n/10);

k= ; 第 30 页 共 86页

if (n==pow(i,3)+pow(j,3)+pow(k,3)) printf(\ } }

2.以下程序是求1+1/2+1/4+1/6……+1/100的值。请补充完整。 #include main( ) { int i=2; float sum=1; while ( ) { sum=sum+1.0/i; ; }

printf(“sum=%f”, sum); }

3. 下列程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。 #include void main( ) {

int n=0, ch; ch=getchar( );

while( ______________ )

{ if ( _______________ ) n++; c=getchar( ); } }

4. 统计所有四位正整数中各个数位上数字之和是9的数的个数。 如:1008、1017是满足条件的数 #include void main() {

int i,j,s, count;

;

for(i=1000;i<=9999;i++) { j=i; s=0;

while( ) {

第 31 页 共 86页

; j=j/10; }

if(s==9) count++; }

printf(\}

5. 下列程序用来计算n!的值,请填空。

main( )

{int i,s,n; s=1;

printf(\ scanf(\for(i=1;i<=n;i++) printf(\}

6.下面程序的功能是计算并输出“(1)*(1+2)*(1+2+3)*……*(1+2+3+……+10)”,请完善程序:(本题4分) main()

{ float x,y=1; int i,j;

for(i=1;i<11;i++)

{ _;

for(j=1;j<=i;j++) _ __; y=y*x;

}

printf(\}

7.下面程序的功能是计算1-3+5-7+…-99+101的值存在s中,请填空。

#include main() {

int i,t=1,s=0;

for(i=1;i<=101;_______) { s=s+i*t; t=_______;

第 32 页 共 86页

} }

8、程序的功能是计算:s=1-2+3-4+5-…+99-100,请填空。 main()

{ int s=0,i,falg=1; for( i=1; i<=100; i++ ) { s+= ; ;}

printf(\

9、程序的功能是计算:s=2+22+222+2222+22222,请填空。 main()

{ int s=0,i,a=0; for( i=1; i<=5; i++)

{ a= ; s= ; }

printf(\

10、程序的功能是计算:s=1+12+123+1234+12345,请填空。 main()

{int s=0,i,a=0;

for( i=1; i<=5; i++) { a= ; s= ; }

11、编写程序,把100到200之间的能被3整除的数输出。

main() { int i;

for(i=100;i<201;i++) {if ( )

continue; __ _____; } }

五、程序设计题:

1、编程实现:输入两个正整数m和n,求其最大公约数和最小公倍数。

2、求1+2+4+6+……+100之和。分别用三种循环语句实现(while,do-while,for)。 3、编写程序求2到100间的全部素数,要求每行输出5个数。 4、编程输出九九乘法表。

5、编程求Fibonacci数列前20个数。这个数列有如下特点:第1、2两个数为1、1。 从第3个数开始,该数是其前面两个数之和。

第 33 页 共 86页

6、一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过了多少米?第10次反弹多高?

7、 编写程序,把100到200之间的能被3整除的数输出。

8、试编写程序输出100~300间的所能能同时被3和5整除的数。 9、 请编写程序解决如下数学计算问题:

一个整数被5除余3,被7除余5,被9除余7,这个数最小是几? 10、设计程序求自然数1~100(包含1和100)中所有素数的和。 11、编写程序,使用下面的公式求出e的近似值。 e≈1+

11111???????? (精确要求?10?6)

n!1!2!3!n!

12、求出所有的“水仙花数”并输出。提示:所谓水仙花数,是指一个3位数,其各位数字

333 。

立方和等于该数字本身,例如153是一个水仙花数,因为153=1+5+3。

三、参考答案

一、选择题:

1~5:BBCAC 6~10:DBDCA 11~15:ACACB 二、填空题:

1. continue break

2. 36 3. break 4.3 5. do…while

三、看程序写结果:

1. ***** *** ** *

2. s=0

3. value=2004

4. 0,9 1,8 2,7 3,6 4,5 5. * *** ***** ******* ********* ***********

************* *************** ***************** ******************* 6. value=2518

第 34 页 共 86页

7. 5 8. 3 10 14 9. 0 1 2 10. 52 11. 8467

四、完成程序:

1. (1) #include (2) n/100 (3) n 2. (1)while(i<=100) (2) i+=2

3. (1)while(ch!= '\\n') (2)if(ch<'9'&&ch>'0')

4. (1) count=0 (2)while(j!=0) (3)s=s+j 5. (1) s=s*i

6. (1)x=0 (2)x=x+j 7. (1) i+=2 (2)-t 8. (1) i (2)flag=-flag 9. (1) a*10+2 (2) s+a 10.(1) a*10+i (2) s+a

11.(1) i%3||i%5 (2) printf(“%d ”,i)

五、编程题:

1、编程实现:输入两个正整数m和n,求其最大公约数和最小公倍数。 main()

{ int m,n,temp,s;

printf(\ scanf(\ if(m

while(n!=0)/*利用辗除法,直到n为0为止*/ {

temp=m%n; m=n; n=temp; }

printf(\printf(\}

2、求1+2+4+6+……+100之和。分别用三种循环语句实现(while,do-while,for)。

(1) main( )

{ int i=2,sum=1; while (i<=100) { sum=sum+i; i=i+2;

}

printf(“sum=%d”, sum);

第 35 页 共 86页

}

(2) main( )

{ int i=2,sum=1;

do

{ sum=sum+i; i=i+2;}while(i<=100);

printf(“sum=%d”, sum); }

(3) main( )

{ int i,sum;

for(i=2,sum=1;i<=100;i+=2)

sum=sum+i;

printf(“sum=%d”, sum); }

3、编写程序求2到100间的全部素数,要求每行输出5个数。

#include main()

{ int m,k,i,n=0;

for(m=2;m<=100;m+=2) { k=sqrt(m);

for(i=2;i<=k;i++) if(m%i==0) break; if(i>=k+1)

{ printf(“]”,m); n=n+1;

}

if(n%5==0) printf(“\\n”); } }

4、编程输出九九乘法表。 #include \main() {

int i,j,result; printf(\

for (i=1;i<10;i++) { for(j=1;j<10;j++) {

result=i*j;

printf(\ \表示左对齐,占3位*/ }

printf(\每一行后换行*/ } }

5、编程求Fibonacci数列前20个数。这个数列有如下特点:第1、2两个数为1、1。 从第3个数开始,该数是其前面两个数之和。 main()

{long int f1=1,f2=1,f;

第 36 页 共 86页

int i;

printf(“]] ”,f1,f2); for(i=3;i<=20;i++) { f=f1+f2;

printf(“]”,f); f1=f2; f2=f; } }

6、一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过了多少米?第10次反弹多高?

main() {

float sn=100.0,hn=sn/2; int n;

for(n=2;n<=10;n++) {

sn=sn+2*hn; /*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ }

printf(\printf(\}

7、 编写程序,把100到200之间的能被3整除的数输出。 main() {int i;

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

if(i%3= =0) printf(“]”,i); }

8、试编写程序输出100~300间的所能能同时被3和5整除的数。 main() {int i;

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

if((i%3= =0)&&(i%5= =0) printf(“]”,i); }

9、 请编写程序解决如下数学计算问题:

一个整数被5除余3,被7除余5,被9除余7,这个数最小是几? main() {int i=8; while(1)

{if((i%5= =3)

if(i%7= =5)

if(i%9= =7) {printf(“]”,i); break;}

i=i+5; }

第 37 页 共 86页

}

10、设计程序求自然数1~100(包含1和100)中所有素数的和。 #include main()

{ int m,k,i,s=0;

for(m=2;m<=100;m+=2) { k=sqrt(m);

for(i=2;i<=k;i++) if(m%i==0) break; if(i>=k+1) s=s+m; }

printf(“sum=%d”,s); }

11、编写程序,使用下面的公式求出e的近似值。 e≈1+

11111???????? (精确要求?10?6)

n!1!2!3!n!main()

{int i=1

float sum=1,t=1; while(t<1e6) {t=t*i;

sum=sum+1.0/t; i=i+1; }

printf(“%.2f”,sum); }

12. 求出所有的“水仙花数”并输出 main() {

int i,j,k,n;

for(n=100;n<1000;n++) {

i=n/100;/*分解出百位*/ j=n/10;/*分解出十位*/ k=n;/*分解出个位*/

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) printf(\ } }

第 38 页 共 86页

第七章 数组

一、主要内容

一维数组:

1. 一维数组的定义:数据类型 数组名[常量表达式]; (a)常量表达式表示数组元素个数,从0开始计算。

(b)不能用变量来表示元素的个数,可以是符号常量或常量表达式。 (c)数组名为地址常量

2. 一维数组元素的引用:数组名[下标]

(a)只能逐个引用数组元素,不能一次引用整个数组

3. 一维数组初始化:类型说明符 数组名[常量表达式]={值1,值2,…… ,}; (a)只给部分数组元素赋初值,当{}中值的个数少于元素个数时,只给前面部分元

素赋值,其余自动赋零。

(b)当全部数组元素赋初值时,可不指定数组长度

二维数组:

1. 二维数组的定义:数据类型 数组名[常量表达式] [常量表达式]; (a)数组元素的存放顺序:按行序优先

2. 二维数组元素的引用:数组名[行下标] [列下标] (a)只能逐个引用数组元素,不能一次引用整个数组 3. 二维数组初始化: (a)可以按行赋值,也可逐元素赋值。 (b)当全部数组元素赋初值时,可不指定数组长度

字符数组:

1. 字符数组的定义:char 数组名[常量表达式]; (a)数组元素的存放顺序:按行序优先

2.字符数组的输入输出:

(a)按字符输入输出 (getchar、putchar、printf+%c控制字符、scanf+%c) (b)字符串输入输出 (gets、puts、printf+%s控制字符、scanf+%s)(此方法的4

个函数格式要重点掌握)

3.字符串处理函数

(a)头文件 #include

(b) 常用函数:strlen strcat strcmp strcpy

二、练习题

一、选择题:

1. C 语言的注释定界符是: ( )

A) { } B) [ ] C) * * D) /* */ 2.在定义一个一维数组时,不能用来表示数组长度的是:( ) A) 常量 B)符号常量

C)常量表达式

D)已被赋值的变量

3. 若定义数组并初始化int a[10]={1,2,3,4},以下语句哪一个成立? ( )

A. 若引用a[10],编译时报错 B. 若引用a[10],连接时报错 C. 若引用a[10],运行时出错 D. 若引用a[10],系统不报错

第 39 页 共 86页

4.对以下说明语句 int a[10]={6,7,8,9,10}; 的正确理解是:( )

A)将5个初值依次赋给a[1] 至a[5] B)将5个初值依次赋给a[0] 至a[4] C)将5个初值依次赋给a[6] 至a[10]

D)因为数组长度与初值的个数不相同, 所以此语句不正确 5.以下一维数组a的正确定义是:( )

A. int a(10); B. int n=10,a[n]; C. int n; D. #define N 10 scanf(“%d”,&n); int a[N]; int a[n]; 6.以下二维数组 a 的正确说明是:(

)

A) int a[1,1]; B) float a(3,4); C) double a[1][4]; D) float a(3)(4); 7.设已定义:int x[2][4]={1,2,3,4,5,6,7,8}; 则元素x[1][1]的正确初值是( )

A. 6 B. 5 C. 7

D. 1

8.若有说明:int a[3][4]; 则对a数组元素的非法引用是: ( )

(A)a[0][2*1] (B)a[1][3] (C)a[4-2][0] (D)a[0][4] 9.以下定义语句中,错误的是 ( )

A. int a[ ]={1,2} B. int a[ ][3]={1,2,3,4,5}; C. char s[10]=“test”; D. int n=5,a[n]; 10.若有说明:int a[3][4]; 则对a数组元素的正确引用是:( )

(A)a[2][4] (B)a[1, 3] (C)a[1+1][0] (D)a(2)(1)

11.以下对二维数组a 的正确说明是:( )

A. int a[3][] B. float a(3,4) C. double a[1][4] D. float a(3)(4) 12.以下不能正确定义二维数组的选项是 ( )

A)int a[2][2]={{1},{2}}; B)int a[][2]={1,2,3,4}; C)int a[2][2]={{1},2,3}; D)int a[2][]={{1,2},{3,4}}; 13. 若二维数组a有m列,则在a[i][j]前面的元素个数为: ( )

A. j*m+i B. i*m+j C. i*m+j-1 D. i*m+j+1

14.数组定义为:int a[4][5]; 引用“a[1]+3”表示的是。(以下记数均从自然数1开始) (A)a数组第2行第4列元素的地址

(B)a数组第2行第4列元素的值 (C)a数组第4行的首地址

(D)a数组第1行第3个元素的地址 ( )

15.C标准库函数中,字符串处理函数的原形在 头文件中。( ) A. stdio.h B. math.h C. string.h D. ctype.h 16.有以下程序 main()

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;

第 40 页 共 86页

while(i<7&&p[i]%2){k=k+p[i]; i++;} printf(\}

执行后输出的结果是:( )

A) 58 B) 56 C) 45 D) 24

17.有数组定义:char array[]=”Computer”;则数组array所占的存储空间为 ( ) A)7个字节 B) 8个字节 C)9个字节 D)10个字节 18.以下程序的输出结果是。 ( ) main()

{ char ch[3][5]={\printf ( \}

A. AAAA B. BBB C. BBBCC D. CC 19.判断字符串s1是否大于字符串s2,应当使用的表达式是: (A)if(s1>s2) (B)if(a= =b)

(C)if(strcpy(s2,s1)>0) (D)if(stcmp(s1,s2)>0) 20.以下程序段的输出结果是: ( )

char s[]=\printf (\

(A) 5 (B) 6 (C) 8 (D) 9

21.下面是对s的初始化,其中不正确的是: ( )

(A)char s[5]={“abc”}; (B)char s[5]={‘a’, ‘b’, ‘c’}; (C)char s[5]= “ ”; (D)char s[5]=“abcdef”; 22.有两个字符数组a,b,则以下正确的输入格式是: ( )

(A)gets(a, b); (B)scanf(“%s%s”, a, b); (C)scanf(“%s%s”, &a, &b); (D)gets(“a”); gets(“a”);

23. 若有以下程序段:

int a[ ]={4,0,2,3,1},i,j,t; for(i=1;i<5;i++) { t=a[i]; j=i-1;

while(j>=0&&t>a[j]) {a[j+1]=a[j]; j--;} a[j+1]=t;}

则该程序段的功能是:( )

A)对数组a进行插入排序(升序) B)对数组a进行插入排序(降序) C)对数组a进行选择排序(升序) D)对数组a进行选择排序(降序) 24、在int a[ ][3]={{1},{3,2},{4,5,6},{0}}中a[1][1]的值是。 ( ) A、0 B、6 C、5 D、 2 25、若有定义int a[3][4];则能正确表示a数组元素地址的表达式是 (A) &a[3][2] (B) a[3][2] (C) &a[1][2] (D) a[2] 26 、若有定义:int b[3];则数组元素的不合法引用是。

(A) b[1] (B) b[0] (C)b[2] (D) b[3] ( )

第 41 页 共 86页

二、 填空题:

1. 若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是________ a[2][1]得到的初值是 ___________。

2. 在C语言中,二维数组元素的内存中的存放顺序是_______________。

3. C 语言对数组下标的引用一般从_____________开始。

4. 若有定义:double x[3][5];则数组中行下标的下限为______________,列下标的上限为 ______________。

5.若二维数组a有m列,则在a[i][j]前面的元素个数为_________________。 6.设有数组a[10],数组元素a[3]的地址可以写成_________________。 7.字符串 \在内存中占用的字节数为_________________。 8.strlen(\的值为: _________________。 9.下面程序段的运行结果是 。

char c[5]={‘a’, ‘b’, ‘\\0’, ‘c’, ‘\\0’}; printf(“%s”, c);

10、char str[12]={‘s’,’t’,’d’,’i’,’o’};

printf(“%d\\n”,strlen(str));则输出结果为 。

三、 看程序写结果:

1. 以下程序运行后的输出结果是 。

int main()

{ char c1[5]={‘A’,‘B’,‘C’,‘D’},c2[5]; int i;

for(i=0;i<4;i++)

c2[i]=(c1[i]-‘A’-3+26)&+‘A’; c2[4]= ‘\\0’ ; puts(c2); }

2.以下程序运行后的输出运行结果 main()

{

int y[2][3]={{9,8,7},{6,5,4}}; int m[2],k,j;

for(k=0;k<=1;k++) {m[k]=y[k][0];

第 42 页 共 86页

for(j=1;j<=2;j++)

if(y[k][j]

printf(“%d,%d\\n”,m[k],m[k+1]); }

3. 以下程序运行后的输出运行结果

#include main() {

int i,a[10];

for(i=0;i<=9;i++) a[i]=i;

for(i=10;i>=1;i--)

printf(\ printf(\}

4.以下程序运行后的输出结果是 main()

{ int i,n[]={0,0,0,0,0};

for(i=1;i<=4;i++) {

n[i]=n[i-1]*2+1; printf(\} }

5. 以下程序运行后的输出结果是 void main( ) { int i,a[10]; for(i=0;i<=9;i++)

a[i]=i+1;

for(i=9;i>=7;i--)

printf(\ }

6.以下程序输出的结果是 。 main()

{ char s[]=\s[3]='\\0';

printf(\}

第 43 页 共 86页

7.以下程序输出的结果是 。

#include #include main() {

char p1[10]=\strcpy(str+2,strcat(p1,p2)); printf(\}

8.以下程序输出的结果是 。

#include main() {

int i=5;

static char c[6]=\do {

c[i]=c[i-1]; i--; }while(i>0); puts(c); }

9.以下程序输出的结果是 。

void main( )

{ char *s=\int v1=0,v2=0,v3=0,v4=0,k; for(k=0;s[k];k++) switch(s[k]) { case '1': v1++; case '3': v3++;break; case '2': v2++; default: v4++; }

printf(\

10、main( )

{ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=0;i<3;i++) for(j=0;j

第 44 页 共 86页

}

s+=a[i][j];

printf(“%d\\n”,s); }

结果是 。

四、 完善程序

1. 下面程序的功能是:将二维数组a的行和列元素互换后存到另一个二维数组b中。请完善程序: main()

{ int i,j,b[3][2],a[2][3]={{1,2,3},{4,5,6}}; printf(\ for(i=0;i<2;i++)

{for(j=0; ;j++) {printf(\

b[j][i]= ; } printf(\ }

printf(\

for(i=0; ;i++) {for(j=0;j<=1;j++)

printf(\ printf(\}

2. 有一个3×4的矩阵,要求编程以求出其中值最大的那个元素,以及它所在的行号和列号。请完善程序:程序如下: main() {

int i,j,row,col,max;

int a[3][4]={{3,5,1,8},{6,4,11,7},{9,3,10,2}}; max= ; for(i=0;i<3;i++) for(j=0;j<4;j++) if( )

{ max= ; row=i; col=j; }

printf(\ }

3.下面程序将字符数组a复制到字符数组b中。

main() {

第 45 页 共 86页

char a[]=\int i;

for(i=_______;a[i]!='\\0';i++) {

_____________; }

______________; }

4.下面程序段将字符数组b连接到数组a的后面。

main() {

char a[20]=.\char b[]=.\int i,j; i=strlen(a);

for(j=_____;b[j]!='\\0';j++) {

a[_____]=b[______]; }

a[______]=_______; }

5.用数组来处理求Fibonacci数列问题。

main( ) {

int i;

; for(i=2; i<20; i++)

; for(i=0; i<20; i++) {

if(i%3= =0) printf(“\\n”); printf(“d” , f[i]); } }

6.以下程序从输入终端读入数据到数组中,统计其中正数的个数,并计算正数之和及平均值。 main()

{ int i,a[20],count;float ave,sum; sum=0.0;count=0;ave=0;

for(i=0;i<20;i++) scanf(\ for(i=0;i<20;i++) { if( ) { count++;

sum+= ; }

第 46 页 共 86页

}

ave=

printf(\

7.以下程序从终端读入数据到数组中,统计其中偶数的个数,并计算它们之和及平均值。 main()

{ int i,a[20],count;float ave,sum; sum=0.0;count=0;ave=0;

for(i=0;i<20;i++) scanf(\ for(i=0;i<20;i++) { if( ) { count++;

sum+= ; } }

ave=

printf(\ }

8.下面程序的功能是将字符串a中的下标为奇数的元素由小到大排序,其他元素不变,请填空。

main()

{ char a[]=\ for(i=1;i<7;i+=2)

for(j=i+2;j<8; ) if( )

{t=a[i];a[i]=a[j];a[j]=t;} puts(a); }

9.对排序数列进行折半查找问题:

#include #include #define N 19 int main()

{int a[N]={2,5,6,7,8,13,15,17,19,21,23,25,26,27,28,35,41,52,63}; int mid,top,bot,x; top=0;bot=N-1;

printf(“请输入要找的元素:”); scanf(“%d”,&x); while(top<=bot)

{ ; if(x==mid)

{printf(“\\n找到的元素%d是:a[-]\\n”,x,mid);

exit(0); }

第 47 页 共 86页

else if(x>mid) ___________________; else ____________________;

}

printf(“没有找到该元素!\\n”); return 0;

}

10、以下程序中函数f的功能是:在数组x的n个数(假定n个数互不相同)中找出最大数,将最大的数放在下标最大的元素中,请填空。(本题4分) #include void f(int x[ ],int n) { int maxi, max, ,i,temp; max= x[0]; maxi =0; for(i=1;i

{if(x[i]>max) {max=x[i]; maxi=i;} }

temp=x[maxi]; x[maxi]= ________; _ _______=temp; //最大值与最后一个数的对换

11、以下程序的功能是:为数组a中所有的元素输入数据,请填空。(本题4分) main(){

int a[10],i=0;

while(i<10)sacnf(“%d”, ________)}

五、编程题:

1. 实现用选择法对n个整数的排序,按从小到大的顺序。 2.利用冒泡排序的方法,实现对10个整数的升序排列。

3.有n个整数,使其前面各数顺序向后移动m(m<=n)个位置,最后的m个数变成最前面的m个数,且移动的元素之间的相对位置不变。

4.从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个数中找到x,则打印“Found!”;如果找不到,则打印“Not found!”。

5. 编程实现:输入4行5列的矩阵,输出其中最大的那个元素的值,以及其所在的行号和列号。

6. 编写一个程序,将一个3*4的矩阵转置。 7.求一个3*3矩阵的对角线元素之和。

8. 编程实现:输入一行文字,求出其中大写字母、小写字母、空格、数字及其他字符各有多少。

9. 编写一程序,将两个字符串连接起来,要求不用strcat函数。 10.设计一个候选人得票统计程序。设有3个候选人,他们的姓名分别是:Li、Zhang、Wang。

编程输入得票的候选人的名字,要求最后统计出得票结果。

11.有一行文字,要求删去其中某个字符,此行文字和要删除的字符均由键盘输入。 12.有一篇短文,共有3行文字,每行最多有80个字符。要求统计出其中英文大写字母、小写字母、数字、空格及其他字符各有多少个。

13.译密码。为使电文保密,往往按照一定规律将其转换成密码,收报人再按约定的规律将

其译回原文。一种明文向密文转换的规则是:将字母A变成F,a变成f,即变成其后

第 48 页 共 86页