admin 管理员组

文章数量: 887021


2023年12月16日发(作者:sqlserver left join)

习题一

一、选择题

1.C语言是一种( C )。

A. 低级语言 B. 汇编语言 C. 高级语言 D. 机器语言

2.以下不是C语言的特点的是( D )。

A.语言简洁紧凑 B.可以直接对硬件进行操作

C.数据类型丰富 D.是面向对象的程序设计语言

3.一个C程序的执行是从( A )。

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

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

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

D. 本函数的第一个数开始,到本程序main函数结束

4.以下叙述正确的是( C )。

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

B.C程序的每行只能写一条语句

C. C语言的本身没有输入输出语句

D. 在对一个C程序进行编译的过程中,可以发现注释中的拼写错误

5.以下叙述不正确的是( D )。

A. 一个C源程序可由一个或多个函数组成

B. 一个C源程序必须包括一个main函数

C. C程序的基本组成单位是函数

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

6.C语言规定:在一个源程序中,main函数的位置( C )。

A. 必须在最开始B. 必须在系统调用的库函数的后面

C. 可以任意D. 必须在最后

7.一个C语言程序是由( B )。

A. 一个主程序和若干子程序组成B. 函数组成

C. 若干过程组成D. 若干子程序组成

8.以下叙述中正确的是( C )。

A. C程序的基本组成单位是语句 B. C程序中的每一行只能写一条语句

C. C语句必须以分号结束D. C语言必须在一行写完

9.以下叙述中正确的是( C )。

A. C程序中的注释只能出现在程序的开始位置和语句的后面

B. C程序书写格式严格,要求一行只能写一个语句

1 / 82

C. C程序书写格式自由,一个语句可以写在多行上

D. 用C语言编写的程序只能放在一个程序文件中

10.以下叙述中正确的是( C )。

A. C语言程序将从源程序中第一个函数开始执行

B. 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行

C. C语言规定必须用main作为主函数名,程序从此开始执行,在此结束

D. main可作为用户标识符,用以命名任意一个函数作为主函数

11.下列叙述中正确的是( A )。

A. 每个C程序文件中都必须要有一个main函数

B. 在C程序中main()位置是固定的

C. C程序中所有函数之间都可以相互调用,与函数所在位置无关

D. 在C程序的函数中不能定义另一个函数

12.C语言源程序的基本单位是( B )。

A. 过程 B. 函数 C. 子程序 D. 标识符

13.下列关于算法的特点描述中错误的是( D )。

A.有穷性 B.确定性 C.有零个或多个输入 D.有零个或多个输出

14.以下选项中不属于算法特性的是( C )。

A. 有穷性 B. 确定性 C. 简洁性 D. 有效性

15.用C语言编写的代码程序( B )。

A. 可立即执行 B. 是一个源程序

C. 经过编译即可执行 D.经过编译解释才能执行

二、填空题

1.C语言的源程序必须通过编译和连接后,才能被计算机执行。

2.C语言源程序文件的后缀是.c;经过编译后,生成文件的后缀是. obj;经过连接后,生成文件的后缀是.exe。

3.C语言从源程序的书写到上机运行输出结果要经过编辑、 编译、连接、执行四个步骤。

4.结构化程序由顺序结构、选择结构和循环结构三种基本结构组成。

5.C语言源程序的基本单位是函数。

6.一个C语言源程序是由若干函数组成,其中至少应含有一个主函数(或main函数)。

7.在一个C语言源程序中,注释部分两侧的分界符为/* …*/。

8.算法是程序设计的灵魂。

9.C语言程序只能从main函数开始执行。

10.自然语言、流程图和伪代码都可以用来表示算法,其中流程图是算法的图形化表示方法。

2 / 82

三、编程/思考题

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

1.C语言的主要特点有:(1)C语言具有结构化的高级编程语言应有的所有高级指令,使程序员不需要知道硬件细节。同时,C也具有一些低级指令,允许程序员能够直接快速地访问硬件。(2)C语言是结构式语言。(3)C语言是一种高效的语言。(4)C语言简洁紧凑,使用方便灵活。(5)C语言运算符丰富。(6)C语言是一种可移植性语言。

2.要得到一个可以正常运行的C语言程序,一般经过哪几个过程?

编辑C语言程序源代码,编译源文件,连接程序,执行程序。

3.算法具有哪些特点?

3.算法具有以下特点:(1)有穷性;(2)确定性;(3)有零个或多个输入;(4)有一个或多个输出;(5)有效性。

4.用流程图表示求解1×2×3×4×5的算法。

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

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

This is a simple C program!

答.#include

void main()

{

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

printf("This is a simple C program!n");

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

习题二

一、选择题

1.下列几个选项中,属于C语言的基本数据类型的是( B )。

A.整型、实型、结构体类型 B.整型、实型、字符型

C.整型、逻辑型、实型D.整型、字符型、数组类型

2.C语言规定,标识符的命名只能由字母、数字和下划线三种字符组成,且第一个字符( C )。

A.必须是字母 B.必须是下划线 C.必须是字母或下划线 D.必须是数字

3 / 82

3.下列标识符中,合法的标识符为( B )。

A.6adc B._max1 C.a*$bn D.123bc

4.下列标识符中,不合法的标识符为( A )。

A. intB. _n5C. i_5abD. q5n

5.下列不合法的字符常量是( D )。

A.‘a’ B.’”’ C.’n’ D.”a”

6.下列不合法的字符串常量是( A )。

A.‘abc’ B.”abc” C.”dfb345” D.””

7.下列不合法的转义字符是( D )。

A. ‘ ’ B. ‘t’C. ‘x6a’ D.’89’

8.下面四个选项中,均是不合法的转义字符的选项是( B )。

A. ‘’’‘t’‘’

B. ‘1234’‘018’‘x3h’

C. ‘n’‘16’‘”‘

D. ‘x8a’‘&’‘101’

9.下列整型常量中,不合法的是( D )。

A.89 B. -16 C. 0x4b D.0668

10.下面四个选项中,均是不合法的整型常量的选项是( A )。

A. -0f1 018 2e5

B. 25 0xf3 3.5

C. 065 -54 -0a4

D. 013 0xk5 -069

11.下列实型常量中,不合法的是( C )。

A. 0.0B. .123 C. 123 D. 2.34

12.下列实型常量中,合法的是( D )。

A. e3 B. 2e4.3 C.–e4 D. 2e-4

13.下面四个选项中,均是不合法的实型常量的选项是( B )。

A. 3e5.4 0.0 2e5

B. e5 5e2.5 68

C. 3.14 2e-4 123e-5

D. 0.98 -e-3 123e

14.在C语言中,int、char和short 三种类型数据在存中所占用的字节数( D )。

A. 由用户自己定义 B. 均为2个字节

C. 是任意的 D.由所使用的编译系统决定

15.若有说明语句:char c=’72’;则变量c( A )。

A.包含1个字符 B.包含2个字符

C.包含3个字符 D.说明不合法,c的值不确定

16.设变量a是整型,f是实型,i是双精度型,则表达式10+’a’+i*f值的数据类型为( C

4 / 82

。 )

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

17.设有说明语句:char w; int x; float y; double z; 则表达式w*x+z-y值的数据类型为(D)。

A. float B. char C. int D. double

18.在C语言中,负整数在存中的存储形式是( A )。

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

19.在C语言中,字符型数据在存中的存储形式是( D )。

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

20.在C语言中,实型数据在存中的存储形式是( B )。

A. 小数形式 B. 指数形式 C. 十进制形式 D. ASCII码

21. 在C语言中,设一个short型数据在存中占用2个字节存储,则unsigned short 型数据的取值围为( C )。

A. 0~255 B. 0~32767 C. 0~65535 D. 0~2147483647

22.在C语言中,设一个float型数据在存中占用4个字节来存储,则一个float型数据的有效数字位数为( B )。

A. 5位B. 6~7位C.15~16位D. 18~19位

23.已知小写字母’a’的ASCII码为十进制数97,则执行语句c=’a’+2后,变量c中的字符为( B )。

A. AB. cC. CD. b

24.设有定义float x=3.5;则执行(int)x之后,x的值为( A )。

A. 3.500000 B. 3C. 4D. 3.0

25.若想确定所使用的编译系统中,int型数据所占用的存储宽度,可使用( B )进行测试。

A.(int) (int) C.(int)x D.(sizeof) int

二、填空题

1.C语言中的实型变量分为两种类型,它们是float和double。

2.C语言中的常量分为普通常量和符号常量两种类型

3.C语言中的标识符只能由3种字符组成,他们是字母、数字、下划线、和。

4.在C语言中,有一类特殊字符以“”开头,称为转义字符。转义字符’n’的功能是 回车换行;转义字符’r’的功能是 ,回车不换行。

5.在C语言中,用关键字float定义单精度实型变量,用关键字 DOUBLE 定义双精度实型变量,用关键字char定义字符型变量。

6.要定义双精度实型变量a和b,并使它们的初值都为5.6,则定义语句为doube a=5.6,b=5.6;。

7. 设C语言中一个short型数据占用2个字节存储,一个int型数据占用4个字节存储,则要将数值32768正确无误的存储在变量x中,应使用的定义语句为int x=32768。

8.若有定义 char ch;则执行ch=’A’+32后,变量ch中的字符为‘a’。

9.以下程序运行后的输出结果是9,90。

#include

void main()

5 / 82

{

int x=011,y=0x5a;

printf("%d,%dn",x,y);

}

10. 以下程序的输出结果是Beijing

China。

# include

void main( )

{

printf("BeijingnChinan",n);

}

三、思考题

1.C语言规定对所有用到的变量必须“先定义,后使用”,这样做有什么好处?

1.解:C语言中,要求对所有用到的变量“先定义,后使用”,这样做的好处是:能够保证程序中变量名使用得正确;在编译时就能为变量分配相应的存储单元;便于在编译过程中检查对该变量进行的运算是否合法。

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

2.解:字符常量是一个字符,在程序中是用单撇号括起来的;字符串常量由0个或若干个字符组合而成,在程序中是用双撇号括起来的,在存储时,系统自动在字符串最后加上一个字符串结束符’0’。

3.若想要将一个大写字母转换为对应的小写字母,可以如何操作?

3.解:在存中,字符型数据以ASCII码存储,ASCII码是一串二进制编码,每个字符的ASCII码对应一个整数值,大写字母与其对应小写字母的ASCII码对应整数值相差32。因此,要将一个大写字母转换为小写字母,只需将该变量的值加上32即可。

4.常量’a’与”a”在存中所占用的字节数是否相同?为什么?

4.解:常量’a’与”a”在存中所占用的字节数不相同,因为’a’是字符常量,在存中占用一个字节存储,而”a”是字符串常量,在存中存储时,系统自动在其后加上一个字符串结束符’0’,在存中占用2个字节存储。

5.若有定义int a;float f,则表达式’c’+a+f的结果为何种数据类型?为什么?

5.若有定义int a;float f,则表达式’c’+a+f的结果为double型。因为表达式中f为float型,在计算之前必须先转换为double型,根据数据类型的自动转换规则,表达式的结果为double6 / 82

型。

6.设C语言中,一个short型数据占用2个字节存储,若有定义 short x=-12,则变量x的值-12在存中存储的二进制代码是如何表示的?

6.解:整数在存中以补码形式存储,负数的补码为反码+1,所以,当x=-12时,其在存中的存储形式为:1111 1111 1111 0100。

7.设C语言中,一个short型数据占用2个字节存储,若有定义short x=32768,则用输出语句printf(”%dn”,x);输出x值为多?为什么?

7.解:输出结果为-32768,因为一个short型数据在存中占用2个字节存储,所能表示的数值围为-32768~32767,当x=32768时,超出了其能表示的围,发生了溢出,数值32768的二进制编码的16位正好对应数值-32768。

8.若有x为int型变量,则执行x=3.14后,变量x的值为多少?为什么?

8.解:若有x为int型变量,则执行x=3.14后,变量x的值为3,因为x为int型变量,不能存储实型数据,当把一个实型数据赋给x时,发生了数据类型转换,系统自动把实型数据的小数部分舍去。

9. 分析下面两个程序运行结果是否相同?为什么?

程序A: #include 程序B: #include

void main( ) void main( )

{ {

char c1,c2; int c1,c2;

c1=’a’; c1=97;

c2=’b’; c2=98;

printf(“%c,%cn”,c1,c2); printf(“%c,%cn”,c1,c2);

} }

9.解:两个程序的运行结果相同。因为字符型数据以ASCII码存储,ASCII码是一串二进制编码,每个字符的ASCII码对应一个整数值。因此,在一定围,整型数据和字符型数据是可以通用的。字符’a’和’b’对应的ASCII编码值分别为97,98。

10. 分析下面程序的运行结果:

#include

void main()

{

char c1='A',c2='B',c3='C',c4='101',c5='x42';

7 / 82

printf("a%cb%ctc%ctabcn",c1,c2,c3);

printf("%ct%c bBn",c4,c5);

aAbB□□□□cC□□□□□□abc

A□□□□□□□BB

}

习题三

一、选择题

1.若有代数式3aebc,则不正确的C语言表达式是( 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

2.在C语言中,要求运算数必须是整型的运算符是( D )。

A. / B. = C. ++ D. %

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

A.2.500000 B. 2.750000 C

4.若有定义int x=5,y=2,则表达式5/2的结果为( B )。

A. 2.5 B.2 C. 2.0 D. 3

5.判断char型变量ch是否为大写字母的正确表达式是( C )。

A.‘A’<=ch<=’Z’B. (ch>=’A’)&(ch<=’Z’)

C. (ch>=’A’)&&(ch<=’Z’)D. (ch>=’A’)and(ch<=’Z’)

6.为表示关系a≥b≥c,则正确的C语言表达式为( C )。

A. a>=b>=cB. (a>=b)&(b>=c)

C. (a>=b)&&(b>=c) D. (a>=b)||(b>=c)

7.逻辑运算符两侧运算对象的数据类型( D )。

A.只能是0或1 B.只能是0或非0正数

C.只能是整型或字符型 D.可以是任何数据类型

8.下列运算符中,优先级最高的是( B )。

A. < B. + C. && D. ==

9.设x、y、z是int型变量,且有x=3,y=4,z=5,则下面表达式中值为0的是(D )。A. ‘x’&&’y’B. x<=y

C.x||y+z&&y-z D. !((x

10.已知x=43,ch=’A’,y=0;则表达式(x>=y&&ch<’B’&&!y)的值为( B )。

8 / 82

A. 0 B.1 C.“假” D. true

11.下列表达式中,不满足条件“当x为奇数时值为真,当x为偶数时值为假”的是( C )。

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

12.设有int a=1,b=2,c=3,d=4,m=2,n=2;则执行表达式(m=a>b)&&(n=c>d)后,n的值为( C )。

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

13.判断char型变量c是否为0到9的数字的正确表达式为( C )。

A.‘0’<=c<=’9’B. 0<=c<=9C. c>=’0’&&c<=’9’D.c>=0&&c<=9

14.设有int x=3,y=4,z=5,则执行表达式!(x+y)+z-1&&y+z/2的结果是( D )。

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

15.以下程序的运行结果是( B )。

#include

void main( )

{

int a,b,d=241;

a=d/100%9;

b=(-1)&&(-1);

printf(“%d,%dn”,a,b);

}

A. 6,1 B. 2,1 C. 6,0 D. 2,0

16.执行以下语句后x的值为,y的值为( C )。

int x=5,y=6,t=1,a=2,b=3,z=4;

(x=t>a)&&(y=b>z)

A. 5,6 B. 5,0 C. 0,6 D. 0,0

17.以下表达式中,与表达式!a等价的是( D )。

A. a==0B. a==1C. !a==0D. !a==1

18.以下符合C语言语法的赋值表达式是( D )。

A. a=10+n+m=a+3 B. a=10+m,b=a+5

C.b=b*8=2D. a+=a-=(m=4)*(n=3)

19.若有int a=7,b=12,则以下表达式中,值为3的是( D )。

A. b%=(a%=5)B.b%=(a-a%5)

C. b%=a-a%5 D. (b%=a)-(a%=5)

20.已知各变量的类型说明如下。

int a=2,b;

double x=2.56;

则以下不符合C语言语法的表达式是( A )。

A. x%(-3) B. a+=2 C. a+=a-=(b=4) D. x/=(b=3)

9 / 82

21.设以下变量均为int类型,则值不等于7的表达式是( C )。

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)

22.若x,i,j,k都是int型变量,则执行表达式x=(i=4,j=16,k=32)后,x的值为( C )。

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

23.执行下面程序段后,输出结果为( C )。

int x=13,y=5;printf(“%d”,x%=(y/2));

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

24.设x,y均为float型变量,则以下不合法的赋值语句是( B )。

A. x=0.0B. y=(x%2)/10;C. x*=y+8;D. x=y=0;

25.设int a=10,则执行语句a+=a*=a/5+10;后,a的值是( A )。

A.240 B.120 C.30 D.60

26.设有定义语句int x=2;则以下表达式中,值不为6的是( D )。

A. x*=x+1 B. x=2,3*x C. x*=(1+x) D. 2*x,x+=2

27.已知变量x、y、z都为int型,则执行z=2+(y=1,y+=1,x=y,x+8)后,x和z的值分别为( A )。

A.x=2,z=12 B.x=2,z=10 C.x=10,z=12 D.x=10,z=10

28.若w=1,x=2,y=3,z=4,则条件表达式w

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

29.若w、x、y、z、m均为int型变量,则执行下面语句后,m的值为( A )。

w=1;x=2,y=3;z=4

m=(w

m=(m

m=(m

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

30.若运行时给变量x输入12,则以下程序的运行结果是( A )。

#include

void main( )

{

int x,y;

scanf(“%d”,&x);

y=x>12?x+10:x-12;

printf(“%dn”,y);

}

A. 0 B.22 C. 12 D. 10

31.若已知num、sum均为int型变量,且num=sum=7;则计算表达式sum=num++,sum++后,sum的值为( B )。

10 / 82

A. 7 B. 8 C. 9 D. 10

32.若有int x=11,则表达式(x++*1/3)的结果为( B )。

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

33.若有定义语句:int x=3;则以下表达式中,值为5的是( A )。

A. ++x,x+1 B. x+=2,--x C. x+=2,x+1 D. x++,x++

34.若已知m,n,x,y为int型变量,则执行以下语句后,变量y的值为( D )。

m=10;n=5;

x=(--m==n++)?--m:++n;

y=n;

A. 5 B. 10 C. 6 D. 7

35.执行以下程序段后,变量a,b,c的值分别为(B )。

int x=10,y=9;

int a,b,c;

a=(--x==y++)?--x:++y;

b=x++;

c=y;

A. a=9,b=9,c=9 B. a=8,b=8,c=10C. a=9,b=10,c=9 D. a=1,b=11,c=10

36.以下程序的输出结果是( C )。

#include

void main( )

{

int w=3,z=7,x=10;

printf(“%dn”,x>10?x+100:x-10);

printf(“%dn”,w++||z++);

printf(“%dn”,!w>z);

printf(“%dn”,w&&z);

}

A. 0 B.1 C. 0 D. 0

1 1 1 1

1 1 0 0

1 1 1 0

37.以下关于运算符优先顺序的描述中正确的是( C )。

A. 关系运算符<算术运算符<赋值运算符<逻辑与运算符

B. 逻辑与运算符<关系运算符<算术运算符<赋值运算符

C. 赋值运算符<逻辑与运算符<关系运算符<算术运算符

D. 算术运算符<关系运算符<赋值运算符<逻辑与运算符

11 / 82

38.下列运算符中,优先级最高的是( D )。

A. < B. % C. && D. ++

39.设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是( C )。

A. ‘x’&&’y’B. x<=y<=z

C. y+z&&y-z&&(x+1)%2 D. !x||x

40.以下不能将变量c中的大写字母转换为对应小写字母的语句是( D )。

A. c+=32 B. c=c-‘A’+’a’ C. c=c-65+97 D. c=c-32

二、填空题

1.若s是int型变量,且有s=6,则表达式s%2+(s+1)%2的值为 1 。

2.若a是int型变量,则计算表达式a=25/3%3后,a的值为 2 。

3. 若有定义:int b=7;float a=2.5,c=4.7;则表达式a+(int)(b/3*(int)(a+c)/2)%4的值为

5.5 。

4.若有定义:int a=2,b=3;float x=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y的值为

3.5 。

5.若有定义:int x=3,y=2; float a=2.5,b=3.5;则表达式(x+y)%2+(int)a/(int)b的值为

1 。

6.当a=3,b=2,c=1时,表达式f=a>b>c的值为 0 。

7.当a=5,b=4,c=2时,表达式a>b&&!c的值为 0 。

8.C语言提供的三种逻辑运算符是&&、||、!。

9.若a=2,b=4,则表达式!(x=a)||(y=b)&&0的值为 0 。

10.若a=1,b=4,c=3,则表达式!(a

11.若a=6,b=4,c=3,则表达式a&&b+c||b-c的值为 1 。

12.若a=3,b=4,c=5,则表达式a||b+c&&b==c的值为 1 。

13.条件“0≤x≤1或-1≤x≤0”的C语言表达式是x>=0&&x<=1||x>=-1&&x<=0。

14.若有定义:int m=5,y=2;则计算表达式y+=y-=m*=y后,y的值为-16。

15.若a是int型变量,且a的初值为6,则计算表达式a+=a-=a*a后,a的值为-60。

16.若a是int型变量,则表达式(a=4*5,a*2),a+6的值为26。

17.若x和n均为int型变量,且有x=n=5,则计算表达式x+=n++后,x的值为10,n的值为

6 。

18.若n、i均为int型变量,则表达式n=i=2,++i,i++的值为 3 。

19.若有定义:int x=1,y=0;则表达式x<(y+x)?’B’:’C’>y++?’A’:’Z’的值为 A 。

20.若有定义:int x=0,y=1;则表达式x++*x--!=’y’?8-4:y的值为 4 。

三、思考/编程题

1.设有定义:int a=3,b=4;float x=2.5,y=3.5;分析下面算术表达式的值

12 / 82

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

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

2.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”“假”?

2.如果一个表达式的值为“真”,则以1表示,如果值为“假”,则以0表示;当判断一个量的逻辑值时,系统将0判断为“假”,将非0判断为“真”。

3.设有定义:int a=3,b=4,c=5,试分析下列表达式的值:

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

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

(3)!(a>b)&&!c||1 1

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

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

4.设有定义:int a=15,n=7;试分析下列表达式执行后a的值为多少?

(1) a+=a (2) a-=5 (3) a*=5-2

(4) a%=(n%3) (5) a/=(a+a) (6) a+=a-=a*a

(7) a+=a-=a*=a

4.(1) 30; (2) 10;(3)45;(4)0;(5)0;(6)-420;(7)0

5.设有定义:int a,b;试分析下面表达式执行后变量a、b和表达式的值各是多少?

a=3,b=a+2,a++,(b++)+1

.a=4,b=6,表达式的值为6;

6.试分析下面程序的运行结果。

#include

void main( )

{

int i=10,j=10;

int m,n;

m=++i;

n=j--;

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

6.11,9,11,10

7.试分析下面程序的运行结果。

#include

void main( )

13 / 82

{

int a,b,c;

a=b=1;

c=a++-1;

printf(“%d,%dn”,a,c);

c+=-a+++(++b||++c);

printf(“%d,%dn”,a,c);

} 2,0

3,-1

8.若程序运行时从键盘输入3 4 5,试分析下面程序的运行结果:

#include

void main( )

{

int x,y,z,max;

scanf(“%d%d%d”,&x,&y,&z);

max=x>y&&x>z?x:y>x&&y>z?y:z;

printf(“%dn”,max);

} 5

9.编写程序,从键盘输入整型变量x的值,判断并输出x是奇数还是偶数。

9.#include

void main( )

{

int x;

printf("请输入x的值:");

scanf("%d",&x);

x%2?printf("奇数n"):printf("偶数n");

}

10.编写程序,从键盘输入一个大写字母赋给字符型变量ch,并将其转换成对应小写字母后输出。]

10.#include "stdio.h"

void main()

{char ch;

printf("请输入一个大写字母:");

scanf(“%c”,&ch);

14 / 82

ch=ch+32;

printf("%cn",ch);

}

习题四

一、选择题

1.C语言程序的三种基本结构是( A )。

A.顺序结构、选择结构、循环结构 B.递归结构、循环结构、转移结构

C.嵌套结构、递归结构、顺序结构 D.循环结构、转移结构、顺序结构

2.以下能正确定义且赋初值的语句是( B )。

3.以下能正确定义整型变量a,b和c并为其赋初值5的语句是(A)。

A. int a=b=c=5; B. int a,b,c=5;C. a=5,b=5,c=5;D. a=b=c=5;

4.在下列选项中,不正确的赋值语句是(D )。

A.++t; B.n1=(n2=(n3=0)); C.k=i==j; D.a=b+c=1

5.有以下程序:

main()

{ int a=0,b=0;

a=10;

b=20;

printf("a+b=%dn",a+b);

}

程序运行后的输出结果是( B )。

A.a+b=10 B.a+b=30 C.30 D.出错

6.有以下程序段:

char ch='a';

int k=12;

printf("%c,%d,",ch,ch,k); printf("k=%dn",k);

已知字符a的ASCII十进制代码为97,则执行上述程序段后输出结果是( D )。

A.因变量类型与格式描述符的类型不匹配输出无定值

B.输出项与格式描述符个数不符,输出为零值或不定值

C.a,97,12k=12

D.a,97,k=12

7.执行下面程序段后的输出结果是( D )。

15 / 82

int a=15;

printf("a=%d,a=%o,a=%xn",a,a,a);

A.a=15,a=15,a=15

B.a=15,a=017,a=0xf

C.a=15,a=17,a=0xf

D.a=15,a=17,a=f

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

main()

{int a=010,b=10,c=0x10;

printf("%d,%d,%d",a,b,c);}

A.8,10,16 B.8,10,10 C.10,10,10 D.10,10,16

9.以下程序的运行结果是(A )。(注:□代表空格)

#include

main ( )

{ int m=5,n=10;

printf ("%d,%dn",m++,--n);

}

A. 5,9 B. 6,9 C. 5,10 D. 6,10

10.设有以下程序:

# include

main ( )

{ int a=201,b=012;

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

}

程序执行后的输出结果是( B )。

A.01,02 B.201,10 C.01,10 D.20,01

11.有定义语句int a,b; ,若要通过语句scanf("%d,%d",&a,&b);使变量a得到数值6,变量b得到数值5,下面输入形式中错误的是( C )。(注:□代表空格)

A. 6,5<回车> B. 6,□□5<回车> C. 6 5<.回车> D. 6,<回车> 5<回车>

12.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是( A )。(注:□表示空格)

int a1,a2; char c1,c2;

scanf("%d%c%d%c",&a1,&c1,&a2,&c2);

A. 10A□20B<回车> B. 10□A□20□B<回车>

C. 10A□20B<回车> D. 10A20□B<回车>

16 / 82

13.已有定义语句int x;float y;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345□678<回车>,则x的值为( B )。(注:□表示空格)

A.12345B. 123C. 45D.345

14.有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b的值为3,c的值为2;从键盘输入数据的正确形式应当是( D )。(注:□表示空格)

A. 132<回车> B. 1,3,2<回车>

C. a=1□b=3□c=2<回车> D. a=1,b=3,c=2<回车>

15.设有如下程序:

# include

main ( )

{ char ch1='A',ch2='a';

printf("%cn", (ch1,ch2));

}

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

A.程序的输出结果为大写字母A

B.程序的输出结果为小写字母a

C.运行时产生错误信息

D.格式说明符的个数少于输出项的个数,编译出错

16.执行下面程序段后的输出是( A )。(注:□表示空格)

float f1=111.111;

printf(“%%f f1=%8.3fn”,f1);

A.%f f1=□111.111

B.%f f1=111.111

C.f1=111.111

D.f1= 111.111

17.以下不符合C语法的赋值语句是( C )。

A. m=(2+1,m=1);B. m=n=0;C. m=1,n=2D. n++;

18.以下程序的输出结果是( D )。(注:□代表空格)

main ( )

{ printf ("n*s1=%15s*", "chinabeijing");

printf ("n*s2=%―5s*", "chi");

}

A.* s1=chinabeijing□□□* B. * s1=chinabeijing□□□*

* s2=**chi* * s2=chi□□*

C. * s1=*□□chinabeijing* D. * s1=□□□chinabeijing*

* s2=□□chi* * s2=chi□□*

17 / 82

19.根据以下定义语句和数据输入方式,scanf 语句的正确形式应为( B )。

已有定义:float f1, f2;

数据的输入方式:4.53<回车>

3.5<回车>

A. scanf ("%f,%f ",&f1,&f2);B. scanf ("%f%f ",&f1,&f2);

C. scanf ("%3.2f%2.1f",&f1,&f2);D. scanf ("%3.2f%,2.1f",&f1,&f2);

20.阅读以下程序,当输入数据的形式为25,13,10<回车>,程序的输出结果为( D )。

main ()

{ int x,y,z;

scanf ("%d%d%d",&x,&y,&z);

printf ("x+y+z=%dn",x+y+z);

}

A. x+y+z=48 B. x+y+z=35 C. x+z=35 D. 不确定值

21.以下scanf函数的叙述中,正确的是( D )。

A.输入一项可以为一实型常量,如scanf("%f",3.5);

B.只有格式控制,没有输入项,也能进行正确输入,如scanf("a=%d,b=%d");

C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%4.2f ",&f);

D.当输入数据时,必须指明变量地址,如scanf("%f ",&f);

22.若有以下定义,则正确的赋值语句是( B )。

int a,b;float x;

A. a=1,b=2,B. b++;C. a=b=5D. b=int(x);

23.已知ch是字符型变量,下面不正确的赋值语句是( A )。

A. ch='a+b';B. ch='0';C. ch='7'+'9';D. ch=5+9;

24.设x,y均为float型变量,则以下不合法的赋值语句是( D )。

A. ++x;B. y=(x%2)/10;C. x*=y+8;D. x=y=0;

25.设int a=10,则执行语句a+=a*=a/5+10;后,a的值是( A )。

A.240 B.120 C.30 D.60

26.以下程序的运行结果是( D )。

# include

main ( )

{ int x1=0xabc, x2=0xdef;

x2-=x1;

printf("%xn", x2);

}

A. ABC B. 0xabc C. 0x333 D. 333

27.有以下程序,其中%u表示按无符号整数输出:

18 / 82

main()

{unsigned int x=0xFFFF;

printf("%un",x);

}

程序运行后的输出结果是( B )。

A.-1 B.65535 C.32767 D.0XFFFF

28.设有以下程序:

# include

main ()

{char c1,c2,c3,c4,c5,c6;

scanf ("%c%c%c%c", &c1,&c2,&c3,&c4);

c5=getchar( );c6=getchar( );

putchar(c1);putchar(c2);

printf ("%c%cn",c5,c6);

}

若运行时从键盘输入数据:

abc<回车>

defg<回车>,则输出结果是( B )。

A. abcd B. abde C. abef

29.以下程序的运行结果是( A )。(注:□表示空格)

main ()

{ int y=23456;

printf("y=%3xn",y);

printf("y=%8xn",y);

printf("y=%#8x|n",y);

}

A.y=5ba0 B.y=□□□5ba0

y=□□□□5ba0 y=□□□□□□□5ba0

y=□□0x5ba0 y=□□0x5ba0

C.y=5ba0 D.y=5ba0

y=5ba0 y=□□□□5ba0

y=0x5ba0 y=####5ba0

30.若x,y均定义为int型, z定义为double型,以下不合法的scanf函数调用语句是( D

A. scanf("%d%lx,%le",&x,&y,&z);("%2d%*d%lf",&x,&y,&z);

("%x%*d%o",&x,&y,&z);("%x%o%6.2f",&x,&y,&z);

19 / 82

。 )

二、填空题

1.C语句的最后用;结束。

2.以下printf语句中的负号的作用是输出数据左对齐。

# include

main( )

{ int x=12;double a=3.1415926;

printf("%6d##n",x);

printf("% -6d##n",x);

}

3.以下printf语句中*号的作用是可以使同一输出语句中的输出宽度得以改变。

# include

main( )

{ int i=1;

printf("##%*dn",i,i);

}

4.以下程序的输出结果是x=1 y=2 *sum*=3。

main( )

{int x=1,y=2;

printf("x=%d y=%d*sum*=%dn",x,y,x+y);

}

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

# include

main( )

{ int m=177;

printf("%on",m);

}

6. 已有定义 int a;float b,x;char c1,c2; 为使a=3,b=6.5,x=12.6,c1='a',c2='A',正确的scanf函数调用语句是scanf("%d%f%f%c%c",&a,&b,&c1,&c2);。

7.若整型变量a和b中的值分别为7和9,要求按以下格式输出a和b的值:

a=7

b=9

请完成输出语句:printf("_______a=%dnb=%dn _______",a,b);。

8.以下程序运行后的输出结果是10,11。

main()

{int m=011,n=11;

printf("%d,%dn",++m,n++);

20 / 82

}

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

# include

main( )

{ int n=0;

n+=(n=10);

printf("%dn",n);

}

10.执行以下程序时输入1234567,则输出结果是12 34。

#include

main()

{int a=1,b;

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

printf("%d %dn",a,b);

}

11.以下程序的输出结果是*3.140000,3.14*。

main( )

{printf("*%f,%4.3f*n",3.14,3.1415);}

12.以下程序的输出结果是2,48,20.0,20.0。

# include

main( )

{ int n=100;char c;

float f=10.0; double x;

x=f*=n/=(c=48);

printf("%d,%d,%3.1f,%3.1fn",n,c,f,x);

}

13.若要求下列程序的输出结果为8.00,则[ ]中应填入的是3.6。

# include

main( )

{ int k=2,m=5;

float s,x=1.2,y=[ ];

s=2/3+k*y/x+m/2;

printf("%4.2fn",s);

}

14.已知字母A的ASCII码值为65。以下程序的输出结果是a=66,b=E。

# include

21 / 82

main( )

{ char a,b;

a='A'+'4'-'3';

b='A'+'6'-'2';

printf("a=%d,b=%cn",a,b);

}

15.若有以下定义和语句,为使变量c1得到字符'A',变量c2得到字符'B',正确的输入形式是A□□□B□□□<回车>。

char c1,c2;

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

三、编程题

1.编写程序,用一个16进制数对整型变量a赋值,按十进制数输出a的值。

1.#include

main( )

{int a;

a=0x123;

printf(“%dn”,A.;

}

2.编写程序,把450分钟换算成用小时和分钟表示,然后进行输出。

2.#include

main( )

{int h,m,t=450;

h=t/24;

m=t%24;

printf("450分钟换算成小时和分钟表示:%d小时,%d分钟n",h,m);

}

3.编写程序,从终端键盘输入圆的半径r,圆柱的高h,分别计算出圆周长c1,圆面积cs,和圆柱的体积cvz。输出计算结果时要求有文字说明,并取小数点后2为数字。

3.#include

main( )

{ float pi,r,h,c1,cs,cvz;

printf("请输入圆的半径r和圆柱的高h:");

scanf("%f,%f",&r,&h);

22 / 82

pi=3.14159;

c1=2*pi*r;

cs=pi*r*r;

cvz=pi*r*r*h;

printf("圆的周长为: %6.2fn",c1);

printf("圆的面积为: %6.2fn",cs);

printf("圆柱的体积为:%6.2fn",cvz);

}

4.编写程序,输入一个字母,输出与之对应的ASCII码,输入输出都要有相应的文字提示。

4.#include

main( )

{ char ch;

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

scanf("%c",&ch);

printf("字母%c对应的ASCII码为%dn",ch,ch);

}

5.编写程序,从键盘输入两个整数,分别计算出它们的商和余数。输出时,商要求保留2为小数,并对第三位进行四舍五入。

5.#include

main( )

{ int x,y;

printf("请输入两个整数:");

scanf("%d%d",&x,&y);

printf("两数的商是%5.2f,两数的余数是%dn",(double)x/y,x%y);

}

6.编写程序,从键盘输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32),输出要有相应的文字说明。

6.#include

main( )

{float f,c;

printf("请输入华氏温度:");

scanf("%f",&f);

c=5.0/9.0*(f-32);

23 / 82

printf("摄氏温度为:%fn",C.;

}

7.编写程序,从键盘输入一个大写字母,要求输出对应的小写字母,输入输出都要有相应的文字提示。

7.#include

main( )

{char ch;

printf("请输入一个大写字母:");

scanf("%c",&ch);

ch=ch+32;

printf("小写字母为:%cn",ch);

}

8.编写程序,从键盘输入三个整数,求它们的平均值。输出计算结果时要求有文字说明,并取小数点后2为数字。

8.#include

main( )

{int num1,num2,num3;

float aver;

printf("请输入三个整数:");

scanf("%d,%d,%d",&num1,&num2,&num3);

aver=(num1+num2+num3)/3.0;

printf("三个整数分别为:%d,%d,%dn",num1,num2,num3);

printf("平均值=%7.2fn",aver);

}

9.编写程序,从键盘输入两个整数给变量x和y,交换x和y的值后输出。输入输出都要有相应的文字提示。

9.#include

main( )

{int x,y,t;

printf("请输入两个整数:");

scanf("%d,%d",&x,&y);

printf("交换前:x=%d,y=%dn",x,y);

t=x;x=y;y=t;

24 / 82

printf("交换后:x=%d,y=%dn",x,y);

}

10.编写程序,用gechar函数读入两个字符给ch1、ch2,然后分别用putchar函数和printf函数输出这两个字符。

10.#include "stdio.h"

main()

{char ch1,ch2;

printf("请输入两个字符:");

ch1=getchar();

ch2=getchar();

printf("用putchar函数输出结果为:");

putchar(ch1);putchar(ch2);

putchar('n');

printf("用printf函数输出结果为:");

printf("%c,%cn",ch1,ch2);

}

习题

一、选择题

1.在C语言中,紧跟在关键字if 后一对圆括号里的表达式( D )。

A.只能用逻辑表达式 B.只能用关系表达式

C.只能用逻辑表达式或关系表达式 D.可以是任意表达式

2.在嵌套使用if语句时,C语言规定else总是( C )。

A.和之前与其具有相同缩进位置的if配对

B.和之前与其最近的if配对

C.和之前与其最近的且不带else的if配对

D.和之前的第一个if配对

3.若有条件表达式(exp)?a++: b--,则以下表达式中能完全等价于表达式(exp)的是( B )。

A. (exp= =0) B. (exp!=0)

C. (exp= =1) D. (exp!=1)

4.以下程序的输出是( B )。

main( )

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

if(x

25 / 82

if(y<0) z=0;

else z+=1;

printf(“%dn”,z);

}

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

5.若有表达式(w)?(-x):(++y),其中与w等价的表达式是( D )。

A.w==1 B.w==0 C.w!=1 D.w!=0

6.C语言中的switch语句形式如下所示,关键字switch后一对圆括号中表达式exp的类型是( A )。

switch (exp)

{ case常量表达式1:语句1;

case常量表达式n:语句n;

default:语句n+1;

}

A.只能是整型或字符型 B.只能是int类型

C.只能是字符型 D.只能是整型或实型

7.以下不正确的if语句形式是( D )。

(x>y&&x!=y); (x= =y) x+=y;

(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y); D. if (x

8.执行以下程序后的输出是( B )。

int i=-1;

if(i<=0) printf(“****n”)

else printf(“%%%%n”);

A.**** B.有语法错误,不能正确执行

C.%%%%c D.%%%%

9.下列叙述正确的是( D )。

语句只能用于switch语句

B.在switch语句中必须使用default

语句必须与switch语句中的case配对

D.在switch语句中,不一定使用break语句

10.已知 int x=10,y=20,z=30;执行以下语句后x,y,z的值是( B )。

if (x>y)

z=x; x=y; y=z;

A. x=10,y=20,z=30 B. x=20,y=30,z=30 C. x=20,y=30,z=10 D.

x=20,y=30,z=20

26 / 82

11.已知a,b,c的值分别为1,2,3,则执行下列语句后a,b,c 的值分别是( D )。

if(a++

else a=b=c=0;

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

12.若有定义”int x,y;”并已正确给变量赋值,则以下选项与表达式”(x-y)?(x++):(y++)”中的条件表达式”(x-y)”等价的是( C )。

A.(x-y>0) B.(x-y<0) C.(x-y<0||x-y>0) D.(x-y==0)

13.以下程序( D )。

main( )

{int a=5,b=0,c=0;

if (a=b+c) printf(“***n”);

else printf(“$$$n”);

}

A. 有语法错误不能通过编译 B. 可以通过编译但不能通过连接

C. 输出*** D. 输出$$$

14.有以函数关系是:当x<0,y= x-1;当x=0,y= x,当x>0,y= x+1。以下能正确表示上面关系的程序段是( C )。

A. y=x+1; B. y=x-1

if(x>=0) if(x!=0)

if(x= =0) y=x; if(x>0) y=x+1;

else y=x-1; else y=x;

C. if(x<=0) D. y=x;

if(x<0) y=x-1; if(x<=0)

else y=x; if(x<0) y=x-1;

else y=x+1; else y=x+1;

15.若运行时为变量x输入12,则以下程序的运行结果是( A )。

main( )

{ int x,y;

scanf(“%d”,&x);

y=x>12?x+10:x-12;

printf(“%dn”,y);

}

A. 0 B. 22 C. 12 D. 10

16.以下if语句中格式正确的是( B )。

(a>b) b++ else a++; (a>b) {b++;printf(“%d”,b);}

else {a++;printf(“%d”,a);}

27 / 82

(a>b) {b++;printf(“%d”,b)} (a>b) b++;printf(“%d”,b);

else {a++;printf(“%d”,a);} else printf(“%d”,a);

17. 以下语确的if语句是( B )。

(x>0) (x>0)

printf(“%f”,x) {x=x+y;printf(“%f”,x);}

else printf(“%f”, -x); else printf(“%f”, -x);

(x>0) (x>0)

{x=x+y;printf(“%f”,x);}x=x+y;printf(“%f”,x);

else rintf(“%f”, -x); elseprintf(“%f”, -x);

18.有以下程序,从键盘上输入3和4,则程序输出是( B )。

#include

main()

{int a,b,s;

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

s=a;

if(a

s=b;

s=s*s

printf(“%d”,s);

}

A.14 B.16 C.18 D.20

19.有以下程序,从键盘上输入-1,则程序输出是( A )。

#include

main()

{int x,y;

printf(“Enter an integer(x):”);

scanf(“%d”,&x);

if(x++<0) y=-1;

else if(x==0) y=0;

else y=1;

printf(“%d”,y);

}

A.-1 B.0 C.1 D.不确定的值

20.以下程序的输出是( C )。

main( )

{ int a=100,x=10,y=20,ok1=5,ok2=0;

28 / 82

if(x

if(y!=10)

if(!ok1)

a=1;

else

if(ok2) a=10;

a=-1;

printf(“%dn”,a);

}

A. 1 B. 0 C.-1 D. 值不确定

21.有以下程序,程序运行的结果是( D )。

#include

main()

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

if(x>y)

if(y

else printf(“%d”,++y);

printf(“%dn”,x++);

}

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

22.若变量已正确定义,有以下程序段:

int a=3,b=5,c=7;

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

if(c!=a) c=b;

printf(“%d,%d,%dn”,a,b,c);

其输出结果是( B )。

A.程序段有语法错误 B.3,5,3 C.3,5,5 D.3,5,7

23.以下程序的输出是( A )。

#include”stdio.h”

main( )

{ int x=1;

if(x=2)

printf(“OK”);

else if(x<2)printf(“%dn”,x):

else printf(“Quit”);

A. OK B. Quit C. 1 D. 无输出结果

29 / 82

24.有以下程序:

main()

{int a=0,b=0,c=0,d=0;

if(a=1)

b=1;c=2;

else

d=3;

printf(‘%d,%d,%d,%dn”,a,b,c,d);

}

程序输出( D )。

A.0,1,2,0 B.0,0,0,3 C.1,1,2,0 D.编译有错

25.以下程序所表示的分段函数是( D )。

#include”stdio.h”

main( )

{int x,y;

printf(“Enter x :”);

scanf(“%d”,&x);

y=x>=0? 2*x+1:0;

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

}

A. f(x)=0 (x<=0) B. f(x)=0 (x>=0)

f(x)=2x+1) (x>0) f(x)=2x+1 (x<0)

C. f(x)= 2x+1 (x<0) D. f(x)=0 (x<0)

f(x)=0 (x>=0) f(x)=2x+1 (x>=0)

26. 若w=1,x=2,y=3,z=4,则条件表达式w

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

27. 若w,x,y,z,m均为int型变量,则执行下面语句后的m值是( A )。

w=1;x=2;y=3;z=4;

m=(w

m=(m

m=(m

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

28.若执行下面的程序时从键盘上输入10,则输出的是( B )。

main()

{int a;

scanf(“%d”,&a);

30 / 82

if(a++>10)

printf(“%dn”,++a);

else printf(“%dn”,a--);}

A.12 B.11 C.10 D.9

29.有以下程序,输出的是( B )。

main()

{int x=100,a=10,b=20,v1=5,v2=0;

if(a

if(b!=15)

if(!v1)

x=1;

else

if(v2) x=10;

x=-1;

printf(“%dn”,x);}

A.100 B.-1 C.1 D.10

30.有以下程序,( A )是正确的判断。

main()

{int x,y;

scanf(“%d, %d”,&x, &y);

if(x>y)

x=y;y=x;

else

x++;y++;

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

A.有语法错误 B.若输入3和4,则输出4和5

C.若输入4和3,则输出3和4 D.若输入4和3,则输出4和4

31.设变量x和y均已正确定义并赋值,以下的if语句中,在编译时将产生错误信息的是( C )。

(x++); (x>y&y!=0);

(x>y)x-- (y<0) {;}

else y++; else x++;

32.若变量都已正确定义,则以下程序段的输出是( B )。

a=10;b=50;c=30;

if(a>b) a=b,b=c;c=a;

printf(“a=%db=%dc=%dn”,a,b,c);

31 / 82

A.a=10 b=30 c=10 B.a=10 b=50 c=10 C.a=50 b=30 c=10 D.a=50 b=30 c=50

33.当a=1,b=3,c=5,d=4时,执行以下程序段后x的值是( B )。

if (a

if (c

else

if(a

if (b

else x=3;

else x=6;

else x=7;

A. 1 B. 2 C. 3

34.以下程序的输出是( B )。

#include”stdio.h”

main( )

{ int a=5,b=8,c=3,max;

max=a;

if(c>b)

if(c>a)

max=c;

else

if(b>a)

max=b;

printf(“max=%dn”,max);

}

A. max=8 B. max=5 C. max=3

35.以下程序的运行结果是( D )。

main( )

{ int k=4,a=3,b=2,c=1;

printf(“n%dn”,k

}

A. 4 B. 3 C. 2

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

#include

main()

{int x=2,y=3;

printf(x>y?"***x=%d":"###y=%dn",x,y);}

32 / 82

D. 6

D. 无输出结果

D. 1

A.语法错误 B. ***x=2 C. ###y=2 D. ###y=3

37.有以下程序,运行后的输出结果是( A )。

main()

{int a=2,b=0,c= -1;

if(a=b+c)

if(a>0) b=c=a;

else if(a==0) a=b=c=0;

else a=b=c=1;

else a=b=c=-1;

printf(“%d,%d,%d”,a,b,c);}

A.1,1,1 B.0,0,0 C.-1,-1,-1 D.2,2,2

38.若u,w,x,y均为正整型变量,则以下正确的switch语句是( A )。

(x+y) x

{case10:u=x+y;break; {default:u=x+y;

case11:w=x-y;break; case10:w=x-y; break;

} case11:u=x*y; break;

(x*x+y*y) (pow(x,2)+pow(y,2))(注:pow是求幂的数学函数)

{case3: {case1:case3:w=x+y; break;

case3:w=x+y; break; case0:case5:w=x-y;

case0:w=y-x; break; }

39.有以下程序,程序的运行结果是( D )。

#include

main()

{int x=1,y=0,a=0,b=0;

switch(x)

{case 1:

switch(y)

{case 0:a++;break;

case 1:b++;break;

}

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

case 3:a++;b++;

}

printf(“a=%d,b=%dn”,a,b);

}

33 / 82

A.a=1, b=0 B.a=2,b=2 C.a=1,b=1 D.a=2,b=1

40. 有以下程序,运行后的结果是( C )。

#include

main()

{int x=0,y=2,z=3;

switch(x)

{case 0:switch(y==2)

{case 1:printf("*");break;

case 2:printf("%");break; }

case 1: switch(z)

{case 1:printf("$");

case 2:printf("*");break;

default: printf("#");}

}

}

A.* B.*$ C. *# D.*$*

二、填空题

1.若运行时输入:16<回车>,则以下程序的运行结果是your $ 3.0 yuan/xiaoshi。

#include

void main( )

{int year;

printf(“Input your year:”);

scanf(“%d”,&year);

if (year>=18)

printf(“your $ 4.5 yuan/xiaoshi”);

else

printf(“your $ 3.0 yuan/xiaoshi”);

}

2.以下程序对应的数学表达式当a<0,b=-1;当a=0,b=0;当a>0,b=1。

#include”stdio.h”

main( )

{int a,b;

scanf(“%d”,&a);

if(a<0) b=-1;

else if(a= =0)

34 / 82

b=0;

else b=1;

printf(“a=%d,b=%dn”,a,b);

}

3.若运行时输入:5999<回车>,则以下程序的运行结果(保留小数点后一位)是3635.4。

main ( )

{ int x;

float y;

scanf(“%d”,&x);

if(x>=0&&x<=2999) y=18+0.12*x;

if(x>=3000&& x<=5999) y=36+0.6*x;

if(x>=6000&&x<=10000) y=54+0.3*x;

printf(“%6.1f”,y);

}

4.以下程序的功能是:输出x、y、z三个数中的最大者。请填空。

main ( )

{int x=4,y=6,z=7;

int u,v;

if(x>y) u=x;

else u=y;

if(u>z) v=u;

else v=z;

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

}

5.以下程序的输出结果是x=2。

#include”stdio.h”

main( )

{ int x,y;

x=y=2;

if(x= =1)

if(x= =2)

printf(“x=%dn”,x=x+y);

else

printf(“x=%dn”,x=x-y);

printf(“x=%dn”,x);

}

35 / 82

6.下面程序的功能是:根据函数关系(当2

main( )

{int x,y;

scanf(“%d”,&x);

if(x>2&&x<=10) y=x*(x+2);

else if(x>-1&&x<=2) y=2*x;

else if(x<=-1) y=x-1;

else y=-1;

if(y!=-1) printf(“d”,y);

else printf(“error”);

}

7.以下程序的功能是:根据输入的三角形的三条边,判断是否能组成三角形,若可以则输出它的面积。请填空。

#include

main ( )

{ float a,b,c;

float s ,area;

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

if(a+b>c&&b+c>a&&a+c>b)

{ s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c) );

printf(“%f”,area);

}

else printf(“不能输出三角形”);

}

8.以下程序的运行结果是-1。

main ( )

{ int a=2,b=3,c;

c=a;

if(a>b) c=1;

else if (a= =b) c=0;

else c=-1;

printf(“%dn”,c);

}

9.以下程序的运行结果是0,1。

36 / 82

main ( )

{ int x,y,z;

x=3;

y=z=4;

printf(“%d,”,(x>=y>=x)?1:0);

printf(“%dn”,z>=y&&y>=x);

}

10.以下程序的功能是计算x、y个z中的最小值。请填空。

main( )

{ int x=4,y=5,z=8;

int u,v;

u=x

v=u

printf(“%d”,v);

}

11.将以下含有switch语句的程序段改写成对应的含有非嵌套if语句的程序段。请填空。

* 含有switch语句的程序段:

int x,y,m;

y=(int)(x /10);

switch(y)

{case 10:m=5;break;

case 9:m=4;break;

case 8:m=3;break;

case 7:m=2;break;

case 6:m=1;break;

default:m=0;

}

* 含有含if语句的程序段:

int x,m;

if(x<110&&x>=100) m=5;

if (x<100)&&(x>=90) ) m=4;

if (x<90)&&(x>=80) ) m=3;

if (x<80)&&(x>=70) ) m=2;

if (x<70)&&(x>=60) ) m=1;

if((x<60)| |(x>109)) m=0;

12.以下程序段的输出结果是x=5

37 / 82

The value of x is unknown.。

#include”stdio.h”

main( )

{int x,y;

x=5;

switch(x)

{ case 1:

case 2:

case 3:

case 4:printf(“x<5n”);

case 5:printf(“x=%dn”,x);

default:printf(“The value of x is unknown.n”);

}

}

13.以下程序的运行结果是F。

main ( )

{if (2*2= =5<2*2= =4)

printf(“T”);

else

printf(“F”);

}

14.以下程序的功能是输入两个数x,y,比较x+y和x*y哪个大。。

#include”stdio.h”

main( )

{int x,y,sum,product;

printf(“Enter x and y:”);

scanf(%d,%d”,&x,&y);

sum=x+y;

product=x*y;

if(sum>product)

printf(“(x+y)>(x*y)”);

else

printf(“(x*y)>=(x+y)”);

}

15.以下程序的运行结果是2,0,0。

main( )

38 / 82

{ int a,b,c;

int s,w,t;

s=w=t=0;

a=-1;b=3;c=3;

if(c>0) s=a+b;

if(a<=0)

{ if(b>0)

if(c<=0) w=a-b;

}

else if (c>0) w=a-b;

else t=c;

printf(“%d,%d,%d”,s,w,t);

}

16.以下程序的运行结果是20。

main( )

{ int a,b,c,d,x;

a=c=0;

b=1;

d=20;

if(a) d=d-10;

else if(! b)

if(!c) x=15;

else x=25;

printf(“%dn”,d);

}

17.以下程序的运行结果是5,5,1。#include

void main (void)

{ int x,y=1,z;

①if(y!=0) x=5;

printf(“%dn”,x);

② if(y= =0) x=4;

else x=5;

printf(“%dn”,x);

③ x=1;

if(y<0)

39 / 82

if(y>0) x=4;

else x=5;

printf(“t%dn”,x);

}

18.为了使以下程序的输出结果为t=4,输入值a和b应满足的条件是0

main( )

{ int s,t,a,b;

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

s=1;

t=1;

①if(a>0) s=s+1;

②if(a>b) t=s+t;

else if(a= =b) t=5;

else t=2*s;

printf(“s=%d,t=%d”,s,t);

}

19.根据以下给出的嵌套if语句,填写对应的switch语句,使它完成相同的功能。

(假设mark的值在1~100之间。)

* if语句:

if( mark<60)k=1;

else if(mark<70) k=2;

else if(mark<80) k=3;

else if(mark<90) k=4;

else if(mark<100) k=5;

* switch语句:

switch(mark/10)

{ case 0:

case 1:

case 2:

case 3:

case 4:

case 5:k=1;break;

case 6:k=2;break;

case 7:k=3;break;

case 8:k=4;break;

case 9:

40 / 82

case 10: k=5;

}

20.若有以下程序段,且grade的值为C,则输出结果是60~69

<60

Error!。

switch(grade)

{case’A’:printf(“85~100n”);

case’B’:printf(“70~84n”);

case’C’:printf(“60~69n”);

case’D’:printf(“<60n”);

default:printf(“error! n”);

}

三、编程题

1.编写程序,输入一个整数,判断输出它是奇数还是偶数

#include

main( )

{int x;

printf("请输入一个整数:");

scanf("%d",&x);

if(x%2==0)

printf("%d是偶数!n",x);

else

printf("%d是奇数!n",x);

}

2.编写程序,输入整数a和b,若a2+b2>100,则输出a2+b2的百位以上数字,否则直接输出a2+b2的和。

#include

main( )

{

int a,b,x,y;

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

x=a*a+b*b;

if(x>100)

{y=x/100;

printf("%d",y);}

41 / 82

else

printf("%d",x);

}

3.有一函数:

0x<0

y= x 0

-0.5x+20x>10

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

3.

#include

main( )

{

int x;

float y;

scanf("%d",&x);

if(x<0) y=0;

else if(x>0&&x<=10) y=x;

else y=-0.5*x+20;

printf("%f",y);

}

4.编写程序,根据输入的生日(年y,月m,日d)和今天的日期(年yt,月mt,日dt)计算并输出实际年龄。

4.

#include

main()

{int y=0,m=0,d=0,yt=0,mt=0,dt=0,age=0;

printf("请输入生日日期:");

scanf("%d%d%d",&y,&m,&d);

printf("请输入今天日期:");

scanf("%d%d%d",&yt,&mt,&dt);

age=yt-y;

if(mt

else if(mt=m&&dt

printf("实际年龄:%d",age);

42 / 82

}

5. 字符型数据可以简单分为数字、大写字母、小写字母与其他字符四类。编写程序,从键盘输入一个字符,输出它的类型。

#include

main()

{

char ch;

printf("请输入一个字符:");

scanf("%c",&ch);

if(ch>='0'&&ch<='9') printf("%c是数字!n",ch);

else if(ch>='A'&&ch<='Z') printf("%c是大写字母!n",ch);

else if(ch>='a'&&ch<='z') printf("%c是小写字母!n",ch);

else printf("%c是其他字符!n",ch);

}

6.

#include

main( )

{ int x;

scanf("%d",&x);

if((x%3==0)&&(x%5==0)&&(x%7==0))

printf("%d能被3,5,7整除!n",x);

else if((x%3==0)&&(x%5==0))

printf("%d能被3,5整除!n",x);

else if((x%3==0)&&(x%7==0))

printf("%d能被3,7整除!n",x);

else if((x%5==0)&&(x%7==0))

printf("%d能被5,7整除!n",x);

else if(x%3==0)

printf("%d能被3整除!n",x);

else if(x%5==0)

printf("%d能被5整除!n",x);

else if(x%7==0)

printf("%d能被7整除!n",x);

else

printf("%d不能被3,5,7整除!n",x);

43 / 82

}

6.

7. 编写程序,输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一:

(1)能同时被3,5,7整除;

(2)能被其中两数(要指出哪两个数)整除;

(3)能被其中一个数(要指出哪一个数)整除;

(4)不能被3,5,7中任一一个数整除。

#include

main( )

{ float x;

int y;

printf("x=");

scanf("%f",&x);

switch(x<0)

{case 1:y=-1;break;

case 0: switch(x==0)

{case 1:y=0;break;

default:y=1;

}

}

printf("y=%d",y);

}

7.有一函数:

-1 x<0

y= 0x=0

1x>0

用switch语句编写程序,输入一个x值,输出y值。

#include

main( )

{ float x;

int y;

printf("x=");

scanf("%f",&x);

switch(x<0)

{case 1:y=-1;break;

44 / 82

case 0: switch(x==0)

{case 1:y=0;break;

default:y=1;

}

}

printf("y=%d",y);

}

8.编写程序,输入两个运算数(datal和 data2)与一个运算符(op),计算表达式datal op data2的值,其中op可以为+、-、*、/四个符号中的任一种(要求用switch语句实现)。

#include

#include

main()

{ float data1,data2,data3;

char op;

printf("表达式:");

scanf("%f%c%f",&data1,&op,&data2);

switch(op)

{case '+':data3=data1+data2;break;

case '-':data3=data1-data2;break;

case '*':data3=data1*data2;break;

case '/':if(data2==0)

{printf("除数为0!");

exit (1); }

data3=data1/data2;break;

}

printf("%6.2f%c%6.2f=%6.2fn",data1,op,data2,data3);

}

9.编写程序,对于给定的一个百分制成绩,改用相应的五级分成绩表示。设:90分以上为A,80~89为B,70~79为C,60~69为D,60以下为E(要求用switch语句实现)。

#include

main( )

{ int score,temp;

char grade;

printf("请输入分数:");

45 / 82

scanf("%d",&score);

temp=score/10;

if((score>100)||(score<0))

printf("输入错误!n");

else

{switch(temp)

{

case 10:

case 9:grade='A';break;

case 8:grade='B';break;

case 7:grade='C';break;

case 6:grade='D';break;

default:grade='E';

10.编写程序,输入一个复数,输出其共轭复数。例如,输入2+3i<回车>时,输出2-3i;输入2-3i<回车>时,输出2+3i。

#include

main( )

{ int a,b;

char symbol;

printf("请输入一个复数:");

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

printf("复数为:%d%c%din",a,symbol,b);

if(symbol=='-')

symbol='+';

else

symbol='-';

printf("共轭复数为:%d%c%din",a,symbol,b);

习题

一、选择题

1.设有程序段

int k=10;

while(k=0) k=k-1;

则下面描述中正确的是( C )。

循环执行10次 B.循环是无限循环

46 / 82

C.循环体语句一次也不执行 D.循环体语句执行一次

2.以下描述中正确的是(C )。

,do-while,for循环中的循环体语句都至少被执行一次

-while循环中,在while(表达式)后面的分号可以省略

循环体中,一定要有能使while后面表达式的值变为零("假")的操作

-while循环中,根据情况可以省略while。

3.以下正确的描述是( B )。

ue语句的作用是结束整个循环的执行。

B.只能在循环体和switch语句体使用break语句。

C.在循环体使用break语句或continue语句的作用相同。

D.从多层循环嵌套中退出时,只能使用goto语句。

4.下面有关for循环的正确描述是( D )。

循环只能用于循环次数已经确定的情况

循环是先执行循环体语句,后判断表达式

C.在for循环中,不能用break语句跳出循环体

循环的循环体可以包括多条语句,但必须用花括号括起来

5.若i为整型变量,则以下循环执行次数是( B )。

for (i=2;i= =0;) printf("%d",i- -);3

A.无限次 B.0次 C.1次 D.2次

6.以下for循环的执行次数是( C )。

for(x=0,y=0;(y=123)&&(x<4);x++);

A.是无限循环 B.循环次数不定 C.4次 D.3次

7.执行语句for(i=1;i++<4;);后变量的值为( C )。

A.3 B.4 C.5 D.不定

8.下面程序的功能是在输入一批正整数中求出最大者,输入0结束循环,请选择填空。

#include "stdio.h"

main()

{int a,max=0;

scanf("%d",&a);

while( B )

{if (max

scanf("%d",&a);

}

printf("%d",max);}

A.a= =0 B.a C.!a= =1 D.!a

9.下面程序的运行结果是(C )。

47 / 82

#include

main()

{int num=0;

while(num<=2)

{num++;

printf("%dn",num);

}

}

A.1 B.1 C.1 D.1

2 2 2

3 3

4

10.下面程序的功能是计算1~10之间的奇数之和和偶数之和。请选择填空。

#include

main()

{ int a,b,c,i;

a=c=0;

for(i=0;i<=10;i+=2)

{ a+=i;

( B );

c+=b;

}

printf("偶数之和=%dn",a);

printf("奇数之和=%dn", c-11 );

}

A.b=i-- B.b=i+1 C.b=i++ D.b=i-1

11.设有以下程序段

int x=0,s=0;

while(!x!=0) s+=++x;

printf("%d",s);

则( B )。

A.运行程序段后输出0 B.运行程序段后输出1

C.循环的控制表达式不正确 D.程序段执行无限次

12.语句while(!E);中的!E等价于( A )。

A.E= =0 B.E!=1 C.E!=0 D.E= =1

13.下面程序段的运行结果是( A )。

48 / 82

a=1;b=2;c=2;

while(a

printf("%d,%d,%d",a,b,c);

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

14.下面程序段的运行结果是( D )。

x=y=0;

while(x<15)

y++,x+=++y;

printf("%d,%d",y,x);

A.20,7 B.6,12 C.20,8 D.8,20

15.下面程序段的运行结果是( C )。

int n=0;

while(n++<=2);

printf("%d",n);

A.2 B.3 C.4 D.语法错误

16.以下能正确计算10!的程序段是( C )。

{i=1;s=1; {i=1;s=0;

s=s*i; s=s*i;

i++; i++;

}while(i<=10); }while(i<=10);

C.i=1;s=1; D.i=1;s=0;

do{s=s*i; do{s=s*i;

i++; i++;

}while(i<=10); }while(i<=10);

17.以下程序段( C )。

x=-1;

do

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

A.是死循环 B.循环执行两次 C.循环执行一次 D.有语法错误

18.若有语句如下,则程序段的输出是( B )。

int x=3;

do {printf("%d",x-=2);}while(!(--x));

A.1 B.1和-2 C.3和0 D.死循环

19.下面程序的功能是计算正整数2345的各位数字平方和。

#include "stdio.h"

main()

49 / 82


本文标签: 程序 输出 语句 结果 变量