admin 管理员组文章数量: 887031
2023年12月18日发(作者:wordpress唯美个人博客主题)
1
目录
第 1-3 章 C 语言基础知识习题 ................................................................................................ 2
1 选择题 ............................................................................................................................. 2
2 填空题 ............................................................................................................................. 7
3 答案及部分解析 ............................................................................................................. 9
第 4 章 选择结构习题 ............................................................................................................. 11
1 选择题 ........................................................................................................................... 11
2 填空题 ........................................................................................................................... 17
3 答案及部分解析 ........................................................................................................... 23
第 5 章 循环结构习题 ............................................................................................................. 26
1 选择题 ........................................................................................................................... 26
2 填空题: ....................................................................................................................... 32
3 答案及部分解题分析 ................................................................................................... 39
第 6 章 数组习题 ..................................................................................................................... 41
1. 单项选择题 .................................................................................................................. 41
2. 填空题 .......................................................................................................................... 44
3. 判断题 .......................................................................................................................... 45
4. 程序填空题 .................................................................................................................. 45
5. 阅读程序,分析程序的功能。 .................................................................................. 49
第 7 章 函数习题 ..................................................................................................................... 55
1. 单项选择题 .................................................................................................................. 55
2. 填空题 .......................................................................................................................... 56
3. 判断题 .......................................................................................................................... 57
4. 程序填空题 .................................................................................................................. 58
5. 写出下列程序运行结果 .............................................................................................. 59
第 8 章 指针习题 ..................................................................................................................... 67
1 选择题 ........................................................................................................................... 67
2 填空题 ........................................................................................................................... 69
1
第 1-3 章 C 语言基础知识习题
1 选择题
1. 以下不是 C 语言的特点的是( )。
A、语言简洁紧凑
B、能够编制出功能复杂的程序C、C 语言可以直接对硬件操作D、C 语言移植性好
2. 下列字符序列中,不可用作 C 语言标识符的是( )。
A.abc123 B.no.1 C._123_ D._ok
3. 正确的 C 语言标识符是 ( )。
A.
_buy_2 B.2_buy C.?_buy D.buy?
4. 请选出可用作 C 语言用户标识符的一组标识符( )。
A.
void B.a3_b3 C.For D.2a
define _123 -abc DO
WORD IF Case sizeof
5. 下列符号中,不属于转义字符的是( )。
A. B.0xAA C.t D.0
6. 不属于 C 语言关键字的是( )。
A.
int B.break C.while D.character
7. 是 C 语言提供的合法关键字的是( )。
A.
Float B.signed C.integer D.Char
8. 以下不能定义为用户标示符的是( )。
A.
scanf B.Void C._3com_ D.int
9. 一个 C 程序是由( )。
A.
一个主程序和若干子程序组成
B.
一个或多个函数组成C.若干过程组成
D. 若干子程序组成
10. C 语言程序的基本单位是( )。
A.
程序行 B.语句 C.函数 D.字符
11. 下 列 说 法 中 , 错 误 的 是 ( )。A.每个语句必须独占一行,语句的最后可以是一个分号,也可以是一个回车换行符号B.每个函数都有一个函数头和一个函数体,主函数也不例外
C.主函数只能调用用户函数或系统函数,用户函数可以相互调用
D.程序是由若干个函数组成的,但是必须有、而且只能有一个主函数
12. 以下说法中正确的是( )。
A.C 语言程序总是从第一个定义的函数开始执行
B.在 C 语言程序中,要调用的函数必须在 main( )函数中定义
C.C 语言程序总是从 main( )函数开始执行
1
D.C 语言程序中的 main( )函数必须放在程序的开始部分
13. C 编译程序是( )。
A.C 程序的机器语言版本
B.
一组机器语言指令
C.
将 C 源程序编译成目标程序
D.
由制造厂家提供的一套应用软件
14.以下选项中,合法的用户标识符是( )。
A.long B._2abc C.3dmax D.
15.以下选项中,合法的实型常数是( )。
A.5E2.0 B.E-3 C.2E0 D.1.3E
16.
已知大写字母 A 的 ASCII 码值是 65, 小写字母 a 的 ASCII 码是 97,则用八进制表示的字符常量’101’是( )。
A.字符 A B.字符 a C.字符 c D.非法的常量17.以下选项中, 合法转义字符的选项是( )。
A.’’ B.’018’ C.’xab’ D.’abc’
18.以下选项中,正确的字符常量是( )。
A.”F” B.’’’ C.’W’ D.’’
19.
以下选项中可作为 C 语言合法整数的是
A.10110B B.0386 C.0Xffa D.x2a2
20.下列变量定义中合法的是
A.short _a=1-.le-1; B.double b=1+5e2.5;
C.long do=0xfdaL; D.float 2_and=1-e-3;
21.
与数学式子
9xn
2x 1
对应的 C 语言表达式是( )。
B.9*x**n/(2*x-1)
D.9*pow(n,x)/(2*x-1)
A.9*x^n/(2*x-1)
C.9*pow(x,n)*(1/(2*x-1))
22.
若有代数式
3ab
cd
,则不正确的 C 语言表达式是( )。
B.3*a*b/c/d
D.a*b/d/c*3
A.
a/c/d*b*3
C.3*a*b/c*d
23.
已知各变量的类型说明如下:
int m=8,n, a, b;
unsigned long w=10;
double x=3.14, y=0.12;
则以下符合 C 语言语法的表达式是( )。
A.a+=a-=(b=2)*(a=8) B. n=n*3=18
C.x%3 D.y=float (m)
24.
以下符合 C 语言语法的赋值表达式是( )。
A.a=9+b+c=d+9 B.a=(9+b, c=d+9)
C.a=9+b, b++, c+9 D.a=9+b++=c+9
25.
已知字母 A 的 ASCII 码为十进制数 65,且 S 为字符型,则执行语句 S=’A’+’6’-’3’;
后,S 中的值为( )。
A.
’D’ B.68 C.不确定的值 D.’C’
26.在 C 语言中,要求运算数必须是整型的运算符是( )。
A./ B.++ C.*= D.%
27.
若有说明语句:char s=’72’;则变量 s( )。1
A.包含一个字符
B.
包含两个字符
C.包含三个字符
D.说明不合法,s 的值不确定
28.
若有定义:int m=7; float x=2.5, y=4.7; 则表达式 x+m%3*(int)(x+y)%2/4 的值是( )。A.2.500000 B.2.750000 C.3.500000 D.0.000000
29.
在 C 语言中,char 型数据在内存中的存储形式是( )。
A.
补码 B.反码 C.原码 D.ASCII 码
30.
设变量 x 为 float 类型,m 为 int 类型,则以下能实现将 x 中的数值保留小数点后两位,
第三位进行四舍五入运算的表达式是( )。
A.x=(x*100+0.5)/100.0
B.m=x*100+0.5, x=m/100.0
C.x=x*100+0.5/100.0
D.x=(x/100+0.5)*100.0
31.表达式 13/3*sqrt(16.0)/8 的数据类型是( )。
A.
int B.float C.double D.不确定32.设以下变量均为 int 类型,则值不等于 7 的表达式是( )。
A.(m=n=6, m+n, m+1)
B.(m=n=6, m+n, n+1)
C.(m=6, m+1, n=6, m+n)
D.(m=6, m+1, n=m, n+1)
33.假设所有变量均为整型,则表达式(x=2, y=5, y++, x+y)的值是( )。
A.7 B.8 C.6 D.2
34.已知 s 是字符型变量,下面不正确的赋值语句是( )。
A.s=’012’; B.s= ’u+v’;
C.s=’1’+’2’; D.s=1+2;
35.
已知 s 是字符型变量,下面正确的赋值语句是( )。A.s=’abc’; B.s=’08’;
C.s=’xde’; D.s=””;
36.
若有以下定义,则正确的赋值语句是( )。int x,y;
float z;
A.x=1,y=2, B.x=y=100
C.x++; D.x=int (z);
37.
设 x、y 均为 float 型变量,则不正确的赋值语句是( )。A.++x ; B.x*=y-2;
C.y=(x%3)/10; D.x=y=0;
38.
下列语句中符合 C 语言的赋值语句是( )。
A.a=7+b+c=a+7; B.a=7+b++=a+7;
C.a=7+b,b++,a+7 D.a=7+b,c=a+7;
39.putchar 函数可以向终端输出一个( )。
A.整型变量表达式值。 B.字符串
C.实型变量值。 D.字符或字符型变量值。40.以下程序段的输出结果是( )。
int a=12345; printf(”%2dn”, a);
1
A.12 B.34 C.12345 D.提示出错、无结果
41.若 x 和 y 均定义为 int 型,z 定义为 double 型,以下不合法的 scanf()函数调用语句为
( )。A.scanf(”%d%lx,%le”,&x,&y,&z); B.scanf (”%2d*%d%lf ”,
&x, &y, &z); C.scanf(”%x%*d%o”,
&x,&y);
D。scanf(”%x%o%6.2f”, &x,&y,&z);
42.有如下程序段:
int x1,x2;
char y1,y2;
scanf(”%d%c%d%c”,&x1,&y1,&x2,&y2);
若要求 x1、x2、y1、y2 的值分别为 10、20、A、B,正确的数据输入是( )。(注:└┘代表空格)
A.10A└┘20B B.10└┘A20B
C.10
└┘A└┘20└┘ B D.10A20└┘B
43.
若变量已正确说明为 float 类型, 要通过语句 scanf(”%f %f%f”, &a, &b, &c);给 a 赋予
10.0, b 赋予 22.0, c 赋予 33.0, 不正确的输入形式为( )。
A.10<回车> B.10.0,22.0,33.0<回车>
22<回车>
33
C.10.0<回车> D.10 22<回车>
22.0 33.0<回车> 33<回车>
44.
有如下程序,若要求 x1、x2、y1、y2 的值分别为 10、20、A、B,正确的数据输入是
( )。(注:└┘代表空格)
int x1,x2;
char y1,y2;
scanf(”%d%d”,&x1,&x2);
scanf(”%c%c”, &y1,&y2);
A.1020AB B.10└┘20└┘ABC
C.10└┘20 D.10└┘20AB
AB
45.
已有定义 int a=-2;和输出语句:printf(”%8lx”,a);以下正确的叙述是( )。
A.整型变量的输出格式符只有%d 一种
B.
%x 是格式符的一种,它可以适用于任何一种类型的数据
C.
%x 是格式符
D.
%8lx 不是错误的格式符,其中数字 8 规定了输出字段的宽度46.有如下程序段,对应正确的数据输入是( )。
float x,y; scanf(”%f%f”,
&x,&y);
printf(”a=%f,b=%f”, x,y);
A.2.04<回车> B.2.04,5.67<回车>
5.67<回车>
C.A=2.04,B=5.67<回车> D.2.055.67<回车>
47.
有如下程序段,从键盘输入数据的正确形式应是( )。(注:└┘代表空格)
float x,y,z;
scanf(“x=%d,y=%d,z=%d”,&a,&y,&z);
1
A.123 B.x=1,y=2,z=3
C.1,2,3 D.x=1└┘ y=2└┘ z=3
48.
以 下 说 法 正 确 的 是 ( )。A.输入项可以为一个实型常量,如 scanf(”%f”,3.5);
B.只有格式控制,没有输入项,也能进行正确输入,如 scanf(”a=%d,b=5d”);
C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如 scanf(”%4.2f”,&f);
D.当输入数据时,必须指明变量的地址,如 scanf(”%f”,&f);
49.
根据定义和数据的输入方式,输入语句的正确形式为:( )。(注:└┘代表空格) 已有定义:float x,y;
数据的输入方式:1.23<回车>
4.5<回车>
A.scan(”%f,%f”,&x,&y); B.scanf(”%f%f”,&x,&y);
C.scanf(”%3.2f└┘%2.1f”,&x,&y); D.scanf(”%3.2f%2.1f”,&x,&y);
50.根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为( )。
#include ”stdio.h”
main()
{char s1,s2,s3;
输入语句;
printf(”%c%c%c”,s1,s2,s3);
}
输入形式:A└┘B└┘C<回车> (注:└┘代表空格)
输出形式:A└┘B
A.scanf(”%c%c%c”,&s1,&s2,&s3);
B.scanf(”%c└┘%└┘c%c”,&s1, &s2,&s3);
C.scanf(”%c,%c,%c”,&s1,&s2,&s3);
D.scanf(”%c%c”, &s1, &s2,&s3);
51.
以下程序的执行结果是:( )。#include ”stdio.h”
main()
{ int x=2,y=3;
printf(”x=%%d,y=%%dn”,x,y);
}
A. x=%2,y=%3 B. x=%%d,y=%%d
C. x=2,y=3 D. x=%d,y=%d
52.
以下程序的输出结果是( )。(注:└┘代表空格)
#include ”stdio.h”
main()
{ printf(”nstring1=%15s*”, ”programming”);
printf(”nstring2=%-5s*”, ”boy”);
printf(”string3=%2s*”, ”girl”);
}
A.
string1=programming└┘└┘└┘└┘* B.string1=└┘└┘└┘└┘programming*
string2=boy* string2=boy└┘└┘*string3=gi*
string3=gi*
C.string1=programming└┘└┘└┘└┘* D.string1=└┘└┘└┘└┘programming*
string2=└┘└┘boy*string3=girl* string2=boy└┘└┘*string3=girl*
53.
根据题目中已给出的数据的输入和输出形式,程序中输入输出语句的正确内容是( )。
1
#include ”stdio.h”
main()
{ int a;
float b;
输入语句输出语句
}
输入形式:1└┘2.3<回车> (注:└┘代表空格)
输出形式:a+b=3.300
A.scanf(”%d%f”,&a,&b); B.scanf(”%d%3.1f”,&a,&b);
printf(”na+b=%5.3f”,a+b); printf(”na+b=%f”,a+b);
C.scanf(”%d,%f”,&a,&b); D.scanf(”%d%f”,&a,&b);
printf(”na+b=%5.3f”,a+b) printf(”na+b=%f”,a+b);
54.
阅读以下程序,当输入数据的形式为:12,34,正确的输出结果为( )。#include ”stdio.h”
main()
{ int a,b;
scanf(”%d%d”, &a,&b);
printf(”a+b=%dn”,a+b);
}
A.
a+b=46 B.有语法错误
C.a+b=12 D.不确定值
55.
若有定义:int x,y; char s1,s2,s3; 并有以下输出数据:(注:└┘代表空格)
1└┘2< 回 车 >
U└┘V└┘W<回车>
则能给 x 赋给整数 1,给 y 赋给整数 2,给 s1 赋给字符 U,给 s2 赋给字符 V,给 s3 赋给字符 W 的正确程序段是( )。
A.
scanf(”x=%dy=%d”,&x,&y); s1=getchar();s2=getchar();s3=getchar();
B.scanf(”%d%d”,&x,&y); s1=getchar();s2=getchar();s3=getchar();
C.scanf(”%d%d%c%c%c”,&x,&y,&s1,&s2,&s3);
D.scanf(”%d%d%c%c%c%c%c%c”,&x,&y,&s1,&s1,&s2,&s2,&s3,&s3);
2 填空题
1. C 语言的符号集包括 、 、 。
2. 结构化设计中的三种基本结构是 、 、 。
3. C 语言源程序文件的后缀是 ,经过编译后生成文件的后缀是
接后生成文件的后缀是 。
4. C 语言的关键字都用 {大写或小写}。
5. 一个函数由两部分组成,它们是 、 。
6. 函数体一般包括 、 。
7. C 语言是通过 来进行输入和输出的。
8. 以下程序的执行结果 。
#include ”stdio.h”
main()
,经过链
1
{ short i=-1,j=1;
printf(”dec:%d,oct:%o,hex:%x,unsigned:%un”,i,i,i,i);
printf(”dec:%d,oct:%o,hex:%x,unsigned:%un”,j,j,j,j);
}
9. 以下程序的执行结果是 。
#include ”stdio.h”
main()
{ char s=’b’;
printf(”dec:%d,oct:%o,hex:%x,ASCII:%cn”, s,s,s,s);
}
10. 以下程序的执行结果是 。(注:└┘代表空格)
#include ”stdio.h”
main()
{ float pi=3.1415927;
printf(”%f,%.4f,%4.3f,%10.3f”,pi,pi,pi,pi);
printf(”n%e,%.4e,%4.3e,%10.3e”,pi,pi,pi,pi);
}
11. 以下程序的执行结果是: 。#include ”stdio.h”
main()
{ char c=’c’+5;
printf(”c=%cn”,c);
}
12. 以下程序输入 1└┘2└┘3 后的执行结果是 。(注:└┘代表空格)
#include ”stdio.h”
main()
{ int i,j;
char k;
scanf(”%d%c%d”,&i,&k,&j);
printf(”i=%d,k=%c,j=%dn”,i,k,j);
}
13.有以下程序,若输入 9876543210 后的执行结果是 ;若输入为:98└┘76└┘543210
后的执行结果是 ;若输入为:987654└┘3210 后的执行结果为: 。(注:└┘
代表空格)
#include ”stdio.h”
main()
{ int x1,x2;
char y1,y2;
scanf(”%2d%3d%3c%c”,&x1,&x2,&y1,&y2);
printf(”x1=%d,x2=%d,y1=%c,y2=%cn”,x,y);
}
14.
若 x 和 y 均为 int 型变量,则以下语句的功能是 。x+=y; y=x-y; x-=y;
15.
有一输入函数 scanf(”%d”,k);则不能使 float 类型变量k 得到正确数值的原因是: 。
16.
有如下程序段,输入数据:12345ffl678 后,u 的值是 【1】 ,v 的值是 【2】 。
int u;
float v;
scanf(“%3d%f”,&u,&v);
1
3 答案及部分解析
一.选择题答案
1.B 2.B
7.B 8.D
13.C 14.B
19.C 20.A
25.A 26.D
31.C 32.C
37.C 38.D
43.B 44.D
49.B 50.A
55.D
14.
解析:C 语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须3.A
9.B
15.C
21.C
27.A
33.B
39.D
45.D
51.D
4.B
10.C
16.A
22.C
28.A
34.B
40.C
46.A
52.D
5.B
11.A
17.A
23.A
29.D
35.C
41.D
47.B
53.A
6.D
12.C
18.C
24.B
30.B
36.C
42.A
48.D
54.D
为字母或下划线。而且不能与 C 语言规定的关键字同名。关键字如:auto, break,
case, char, const, continue, default, do, double, else, entry, extern, for, float, goto, if, int,
int, long, register, return, short, signed, sizeof, static, struct, unsigned, while, switch,
typedef, void, volatile, unior。这些关键字先不必硬背下来,随着后续的学习, 你将发现它们都是一些数据的类型、语句等,自然会随着学习的深入,而记下来。
15.
解析:用指数形式表示一个实型常数时,E 或 e 之前必须有数字,且 E 后面指数必须为整数。
16.解析:’101’为转义字符,相对应一个 ASCII 码字符。(101)8=(65)10=A.
17.解析:转义字符的特征是以“”开头,其后跟一些字符,如n, t, ’, , }, ”, b, f 等代表一些特殊的含义,而后如跟数字,可以为八进制或者十六进制,将其转换为对应的 ASCII 码值,就可以得出对应的字符。“”后跟八进制的写法:0nn, 或者nn,
表示“0”或者“”后只能跟 1 或 3 位 0——7 之间的数字;“”后跟十六进制的写法:xnn,或者nn, 表示“x”或者“”后只能跟 1 或 2 位 0——9 及 a——
f(A——F)之间的字符。选项 B 的错误在于 8 不是八进制;而选项 C 的错误在于没有“”;选项 D 的错误在于超长(多了一位)。
21.解析:B 的错误在于赋值语句的左侧只能为一个简单变量,如:n=3*(n=18); C 的错误在于%运算符只能适用于整型数据,D 的错误在于作类型转换时,应将类型加上括号,即为:y=(float) m
31.解析:逗号表达式的最终结果为最右端的表达式(即 x+y)的值,其运算顺序是从左自右的。第三个表达式 y++,其隐含有两步操作:先取 y 的原值,再执行 y=y+1 运算;
而本题中,虽然没有将 y 赋给某个变量(取其原值),但还是一定会执行加运算的。因而,经过第三个表达式,y 已经自加为 6,故 x+y 的值为 8,相对应得表达式最终结果为 8。若本题改为:(x=2, y=5, z=y++, x+z),则其结果应为 7。
二.填空题答案
1. 答案:英文字母、数字、一些有特定含义的标点符号
2. 答案:顺序结构、选择结构、循环结构
3. 答案:C,OBJ,EXE
4. 答案:小写
1
5.
6.
7.
8.
答案:函数说明部分和函数体
答案:变量定义部分和执行部分
答案:输入和输出函数
答案:dec:-1,oct:177777,hex:ffff,unsigned:65535
dec:1,oct:1,hex:1,unsigned:1
9. 答 案 :dec:98,oct:142,hex:62,ASCII:b
10.答案:3.141593,3.1416,3.142,
└┘└┘└┘└┘└┘3.142
3.141593e+00,3.1416e+00,3.142e+00,└┘└┘3.142e+00
(注:由于 c 编译系统不同,我们上机使用的机器,其第二个 printf 语句实际结果为:
3.14159e+00,3.142e+00,3.14e+00,└┘└┘3.14e+00,即:小数点后取 5 位。)
11.答案:c=h
12.答案:i=1,k=└┘,j=2
13.答案:第一种情况的执行结果:x1=98,x2=765,y1=4,y2=1
第二种情况的执行结果:x1=98,x2=76,y1=└┘,y2=3
第三种情况的执行结果:x1=98,x2=765,y1=4,y2=2
14.
答案:交换 x 和 y 的值
15.
答案:(1)格式符应为:%f;(2)变量前边未加取地址符&, 即应为 scanf(”%f”,&k);
16.答案:【1】123 【2】45.000000
··
第 4 章 选择结构习题
1 选择题
1. 已有定义:int x=3, y=4, z=5; 则表达式!(x+y)+z-1 && y+z/2 的值是()。
A.6 B.0 C.2 D.1
2. 设 a=5,b=6,c=7,d=8,m=2,n=2, 则执行(m=a>b) && (n=c>d)后 n 的值为()。
A.1 B.2 C.3 D.4
3. 设 x、y 和 z 都是 int 类型变量,且 x=3,y=4,z=5, 则下面的表达式中,值为 0 的表达式为()。
A.’x’ && ’y’ B.x<=y
C.x||y+z && y-z D.!((x 4. 为了避免嵌套的 if-else 语句的二义性,C 语言规定 else 总是与()组成配对关系。A.缩排位置相同的 if B. 在其之前未配对的 if C.在其之前未配对的最近的 if D.同一行上的 if 5. 逻辑运算符两侧运算对象的数据类型()。 A. 只能是 0 或 1 B. 只能是 0 或非 0 正数C.只能是整型或字符型数据D.可以是任何类型的数据 6. 以下关于运算符优先顺序的描述中正确的是()。 A.关系运算符<算术运算符<赋值运算符<逻辑与运算符B.逻辑与运算符<关系运算符<算术运算符<赋值运算符C.赋值运算符<逻辑与运算符<关系运算符<算术运算符D.算术运算符<关系运算符<赋值运算符<逻辑与运算符 7. 下列运算符中优先级最高的是()。 A.< B.&& C.+ D.!= 8. 选择出合法的 if 语句(设 int x,a,b,c;)()。 A.if(a=b) c++; B. if(a= C. if(a<>b) c++; D. if(a=>b) c++; 9. 能正确表示“当 x 的取值在[-58,-40]和[40,58]范围内为真,否则为假”的表达式是()。 A.(x>= -58) && (x<= -40) && (x>=40) && (x<=58) B.(x>= -58) || (x<= -40) || (x>=40) || (x<=58) C.(x>= -58) && (x<= -40) || (x>=40) && (x<=58) D.(x>= -58) | |(x<= -40) && (x>=40) || (x<=58) 10. 判断 char 型变量 s 是否为小写字母的正确表达式是()。 A.’a’ <= s<=’z’ B.(s>=’a’) & (s<=’z’) C.(s>=’a’) && (s<=’z’) D.(’a’<=s) and (’z’>=s) ·· 11. 若希望当 x 的值为奇数时,表达式的值为“真”,x 的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是()。 A.x%2==1 B.!(x%2==0) C.!(x%2) D.x%2 12.已知 x=45, y=’a’, z=0; 则表达式(x>=z && y<’z’ || !y)的值是()。 A.0 B.语法错 C.1 D.“假” 13. 指出下列程序段所表示的逻辑关系是()。 if(a {if(c==d) x=10; } else x=-10; 14. 10 a b且c d A. x 10a b且c d 10 a b且c d B. x a b 10 10 a b且c d C. x 10 a b且c d 10 a b且c d D. x 10 c d 1 x 0 有一函数: y 0 x 0 ,以下程序段中不能根据 x 值正确计算出 y 值的是()。 x 0 1 A.if (x>0) y=1; else if (x==0) y=0; else y= -1; B.y=0; if (x>0) y=1; else if (x<0) y= -1; C.y=0; if (x>=0) if(x>0) y=1; else y= -1; D.if (x>=0) if (x>0) y=1; else y=0; else y= -1; 15. 执行以下语句后,y 的值为()。 int x,y,z; x=y=z=0; ++x || ++y && ++z; ·· A.0 B.1 C.2 D.不确定值16.已知 int a=1,b=2,c=3; 以下语句执行后 a,b,c 的值是()。 if(a>b) c=a; a=b; b=c; A.a=1, b=2, c=3 B.a=2, b=3, c=3 C.a=2, b=3, c=1 D.a=2, b=3, c=2 17.请阅读以下程序:该程序()。 #include ”stdio.h” main() { int x=-10, y=5, z=0; if (x=y+z) printf(”***n” ); else printf(”$$$n”); } A.有语法错不能通过编译 B.可以通过编译但不能通过连接C.输出*** D. 输 出 $$$ 18.以下程序的运行结果是()。 #include ”stdio.h” main() { int a=1; if (a++>1) printf(”%dn”, a); else printf(”%dn”, a--); } A.0 B.1 C.2 D.3 19.当 a=1,b=2,c=4,d=3 时,执行完下面一段程序后 x 的值是()。 if (a if (c else if (a if (b else x=3; else x=4; else x=5; A.1 B.2 C.3 D.4 20.执行以下程序段后,变量 x,y,z 的值分别为()。 int a=1,b=0, x, y, z; x=(--a==b++)?--a:++b; y=a++; z=b; A.x=0,y=0,z=0 B.x= -1,y= -1,z= 1 C.x=0,y=1,z=0 D.x= -1,y= 2, z= 1 21. 若 a、b、c、d、w 均为 int 类型变量,则执行下面语句后的 w 值是()。 a=1;b=2;c=3;d=4; w=(a A.1 B.2 C.3 D.4 22. 以下程序的输出结果是()。 ·· #include ”stdio.h” main() { int a=5, b=4, c=6, d; printf(”%dn”, d=a>b? a>c?a:c :b); } A.5 B.4 C.6 D.不确定23.若 a、b、c1、c2、x、y 均为整型变量,正确的 switch 语句是()。 A.switch (a+b); B.switch a { case 1: y=a+b; break; { case c1: y=a-b; break; case 0: y=a-b; case c2: x=a*d; break; break; default: x=a+b; } } C.switch (a*a+b*b) D.switch(a-b) { case 3: { default: y=a*b; break; case 1: y=a+b; break; case 3: x=a+b; break; case 3: y=b-a; break; case 10: case 11: y=a-b; break; } } 24. 执行下列程序,输入为 3 的数出结果是()。 #include ”stdio.h” main() { int k; scanf(”%d”, &k); switch(k) { case 1: printf(”%dn”, k++); case 2: printf(”%dn”, k++); case 3: printf(”%dn”, k++); case 4: printf(”%dn”, k++); break; default: printf(”Full!n”); } } A.3 B.4 C.3 D.4 5 4 25. 假定等级和分数有以下对应关系: 等级:A 分数:85——100 等级:B 分数:60——84 等级:C 分数:60 以下 对于等级 grade 输出相应的分数区间,能够完成该功能的程序段是()。 A.switch (grade) { case ’A’ :printf(”85——100n”); case ’B’ :printf(”60——84n”); case ’C’ :printf(”<60n”); default: printf(”grade is error!n”); } B. switch (grade) { case ’A’ :printf(”85——100n”); break; case ’B’ :printf(”60——84n”); case ’C’ :printf(”<60n”); default: printf(”grade is error!n”); } C. switch (grade) { case ’A’ :printf(”85——100n”); break; case ’B’ :printf(”60——84n”); break; case ’C’ :printf(”<60n”); default: printf(”grade is error!n”); } D. switch (grade) { case ’C’ :printf(”<60n”); break; case ’B’ :printf(”60——84n”); break; default: printf(”grade is error!n”); break; case ’A’ :printf(”85——100n”); } 26. 有如下程序,写出该执行结果()。 #include ”stdio.h” main() { float x=2.0, y; if (x<0.0) y=0.0; else if (x<10.0) y=1.0/x; else y=1.0; printf(”%fn”,y); } A.0.000000 B.0.250000 C.0.500000 27. 以下程序的运行结果是()。 #include ”stdio.h” main() { int a=2,b= -1,c=2; if (a if (b<0) c=0; else c++; printf(”%dn”,c); } A.0 B.1 C.2 28.运行以下程序后,如从键盘上输入 china#,则输出为()。#include ”stdio.h” ·· D.1.000000 D.3 main() { int v1=0,v2=0; char ch; while ( (ch=getchar()) != ’# ’) switch (ch) { case ’a’: case ’h’: default: v1++; case ’o’: v2++; } printf(”%d,%dn”, v1,v2); } A.2,0 B.5,0 C.5,5 29. 有以下程序,若输入为字符 s,则程序运行结果为()。#include ”stdio.h” main() { char ch; ch=getchar(); switch (ch) { case ’a’: printf(”a=%cn”,ch); default: printf(”end!n”); case ’b’: printf(”b=%cn”,ch); case ’c’: printf(”c=%cn”,ch); } } A.end! B.end! C.有语法错误 b=s c=s 30.有以下程序,程序运行后的输出结果是()。 #include ”stdio.h” main() { int a=15, b=21, m=0; switch (a%3) { case 0: m++; break; case 1: m++; switch (b%2) { default: m++; case 0: m++; break; } } printf(”%dn”,m); } A.1 B.2 C.3 D.2,5 D.a=s end! ·· D.4 ·· 2 填空题 1. 若从键盘输入 58,则输出结果是 。 #include ”stdio.h” main() { int a; scanf(”%d”, &a); if (a>50) printf(”%d”, a); if (a>40) printf(”%d”,a); if (a>30) printf(”%d”,a); } 2. 设 int x=9,y=8;表达式 x==y+1 的结果是 。 3. 定义 int x,y;执行 y=(x=1,++x,x+2);后, y 的值是 。 4. 定义 int x=10,y,z; 执行 y=z=x; x=y==z;后, x 的结果是 5. 设 int a=1,b=2,c,d,e; 执行 c=(-a++)+(++b); d=(b--)+(++a)-a; e=(a/(++b))-(a/(--a)); 请问 a,b,c,d,e 的结果是: 。 6. 设 int a=2,b=3,c,d,e,f; 执行c=(a++>= --b); d=(a==++b); e=(a--!=b); f=(++a>b--); 请问 a,b,c,d,e,f 的结果是: 。 7. 以下程序的运行结果是 。 #include ”stdio.h” main() { int a,b,c,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); } 8. 以下程序的运行结果是 。 #include ”stdio.h” main() { int a,b,c,d,e; a=c=1; 。 ·· b=20; d=100; if (!a) d=d++; else if (!b) if (d) d= --d; else d= d--; printf(”%dnn”, d); } 9. 以下程序的运行结果是 。 #include ”stdio.h” main() { int a, b= 250, c; if ((c=b)<0) a=4; else if (b=0) a=5; else a=6; printf(”t%dt%dn”,a,c); if (c=(b==0)) a=5; printf(”t%dt%dn”,a,c); if (a=c=b) a=4; printf(”t%dt%dn”,a,c); } 10. 下面程序根据以下函数关系,对输入的每个 x 值,计算出 y 值。请在【】内填空。 x y 2 -1 x<=-1 x-1 #include ”stdio.h” main() { int x,y; scanf(”%d”, &x); if (【1】) y=x*(x+2); else if (【2】) y=1/x; else if (x<=-1) y=x-1; else 【3】; if (y!= -1) printf(”%d”,y); else printf(”error”); } 11. 以下程序的功能是计算一元二次方程 ax2+bx+c=0 的根。请在【】内填入正确内容。#include ”stdio.h” #include ”math.h” main() { float a,b,c,t,disc,w,term1,term2; printf(”enter a,b,c:”); scanf(%f%f%f”,&a,&b,&c); if (【1】) ·· if (【2】) printf(”no answer due to input errorn”); else printf(”the single root is %fn”, - c/b); else { disc=b*b-4*a*c; w=2*a; term1= -b/w; t=abs(disc); term2=sqrt(t)/w; if (【3】) printf(”complex rootn real part=%f imag part =%fn”, term1,term2); else printf(”real rootsn root1=%f root2=%fn”, term1+term2,term1-term2); } } 12. 以下程序根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型。请在【】内填入正确内容。 #include ”math.h” #include ”stdio.h” main() { float a,b,c,s,area; printf(”please input three edges of a triangle:”); scanf(”%f%f%f”,&a,&b,&c); if (【1】) { s=(a+b+c)/2; area=sqrt(s*(s-A*(s-B*(s-c)); printf(”nthe area of the triangle is: %f”,area); if ((a==b)&&(b==c)) printf(”等边三角形”); else if (【2】) printf(”等腰三角形”): else if (【3】) printf(”直角三角形”): else printf(”一般三角形”): } else printf(”不能组成三角形”); } 13. 以下程序的功能是判断输入的年份是否是闰年。请在【】内填入正确内容。#include ”stdio.h” main() { int year, flag; printf(”please input the year to jude whether it is a leap year:”); scanf(”%d”,&year); if (year%400==0) flag=1; else if (【1】) flag=1; else 【2】; if (flag) printf(”%d is a leap yearn”,year); ·· else printf(”%d is not a leap year!n”,year); } 14. 以下程序是对用户输入的字母进行大小写转换。请在【】内填入正确内容。#include ”stdio.h” main() { char ch; printf(”please input a letter:”); scanf(”%c”,&ch); if (【1】) ch=ch+32; else if (ch>=’a’ && ch<=’z’) 【2】; printf(” the converted letter is: %cn”,ch); } 15. 以下程序是对从键盘输入的任何三个整数,求出其中的最小值。请在【】内填入正确内容。 #include ”stdio.h” main() { int a,b,c,min; printf(”please input three numbers:”); scanf(”%d%d%d”,&a,&b,&c); if (【1】) min=b; else min=a; if (min>c) 【 2 】 ; printf(”min=%dn”,min); } 16. 以下程序实现这样的功能:商店卖西瓜,10 斤以上的每斤 0.15 元,8 斤以上的每斤 0.3 元,6斤以上的每斤 0.4 元,4 斤以上的每斤 0.6 元,4 斤以下的每斤 0.8 元,从键盘输入西瓜的重量和顾客所付钱数,则输出应付款和应找钱数。请在【】内填入正确内容。#include ”stdio.h” main() { float weight, money, rate; printf(”the paid money of the client is:”); scanf(”%f”,&money); printf(”the weight of the watermelon is:”); scanf(”%f”,&weight); if (【1】) rate=0.15; else if (weight>8) rate=0.3; else if (weight>6) 【 2 】 ; else if (weight>4) rate=0.6; 【3】 ·· rate=0.8; printf(”the account payable of the watermelon is %fn”, weight*rate); printf(”the change for client is %fn”,money-weight*rate); } 17. 以下程序段的运行结果是 。#include ”stdio.h” main() { char ch1=’a’,ch2=’A’; switch (ch1) { case ’a’: switch (ch2) {case ’A’: printf(”good!n”); break; case ’B’: printf(”bad!n”); break; } case ’b’: printf(”joken”); } } 18. 根据以下函数关系,对输入的每个 x 值,计算出相应的 y 值。请在【】内填入正确内容。 x y x<0 0 0<=x<10 x 10<=x<20 10 20<=x<40 -0.5x+20 #include ”stdio.h” main() { int x, rate; float y; printf(”please input the value of x:”); scanf(”%d”,&x); if (【1】) rate= -1; else rate=【2】; switch(rate) { case –1: y=0; break; case 0: y=x; break; case 1: y=10; break; case 2: case 3: y=-0.5*x+20; break; default: y= -2; } if (【3】) printf(”y=%fn”,y); else printf(”the value of x is invalid!n”); } 19. 以下程序实现的功能是:从键盘输入某年某月,输出该年份该月的天数。请在【】内填入正确内容。 #include ”stdio.h” main() { ·· int year, month, days, leap; printf(”please input both year and month:”); scanf(”%4d/%2d”,&year,&month); switch (【1】) { case 1: case 3: case 5; case 7: case 8: case 10: case 12: days=31; 【2】 case 4: case 6: case 9: case 11: days=30; break; case 2: if (year%400==0) leap=1; else if (year%4==0 && year%100!=0) leap=1; else 【3】; if (leap) days=29; else days=28; } printf(”%d 年%d 月的天数为%dn”, year, month, days); } 20. 以下程序完成两个数的四则运算。请在【】内填入正确内容。#include ”stdio.h” main() { float x,y; char operator; printf(”please input the expression:”); scanf(”%f%c%f”,&x,&operator,&y); switch (【1】) { case ’+’: printf(”%g%c%g=%gn”, x, operator, y, x+y); 【2】; case ’-’: printf(”%g%c%g=%gn”, x, operator, y, x-y); break; case ’*’: printf(”%g%c%g=%gn”, x, operator, y, x*y); break; case ’/’: if (y==0.0) printf(”除零错误!n”); else printf(”%g%c%g=%gn”, x, operator, y, x/y); break; 【3】: printf(”表达式存在错误!n”); } ·· } 21. 以下程序运行后的输出结果是 #include ”stdio.h” main() { int x=10, y=20, t=0; if (x==y) t=x; x=y; y=t; printf(”%d,%dn”,x,y); } 22. 执行以下语句后,x、y 和 z 的值分别为 int x,y,z; x=y=z=0; ++x || ++y && ++z; 。。 3 答案及部分解析 一.选择题答案 1. D 2. B 3. D 4.C 5.D 6.C 7. C 8. A 9. C 10.C 11.C 12.C 13.B 14.C 15.A 16.B 17.C 18.C 19.B 20.B 21.A 22.C 23.D 24.C 25.D 26.C 27.C 28.C 29.A 30.A 2. 解析:当条件 1:m=a>b 的值为假时, 便已经确定整个表达式的值为假,所以不必再继续判断第二个表达式的逻辑值。由于没有执行第二个表达式 n=c>d,所以 n 的值仍为 2。 17.解析:if 的条件表达式 x=y+z 为赋值语句,x=5 为非零值,即为 if (1) printf(”***n”); 23.解析:A.的错误在于 switch(a+b);其后有一个“;”,B 的错误在于 switch a 的条件表达式 a 没有括号,应该为 switch(a),C 的错误在于有两个 case 具有相同的入口值。 28.解析:当输入 c 时,switch 语句执行情况为: {case ’a’: 从 此处向下执行 case ’h’: default: v1++; case ’0’: v2++; switch(ch) 因为没有 break 语句 当继续输入 h 时,switch 语句的执行情况为: switch(ch) 因为没有 break 语句 {case ’a’: 从 此处向下执行 case ’h’: default: v1++; case ’0’: v2++; } v1 v1 1 2 v2 v2 1 2 重复上述过程,输入 5 个有效字符,则 v1 和 v2 执行 5 次自加操作,所以: v1=5, v2=5 二.填空题答案 ·· 1.答案:585858 解析:虽然三个 if 语句按照嵌套方式书写,但是程序仍然是依顺序运行的,会分别对每一个 if 的条件表达式进行判断,若其条件表达式为真,就执行其后的语句,否则,不执行。 2.答案:1 解析:注意该表达式是关系表达式的双等号,所以其结果只能为 1 或 0。3.答案:4 4. 答案:1 5. 答案:在 Turbo C 编译系统下,结果为 a=2,b=3,c=2,d=3,e=-1;若在 Visual C++下, 结果为 a=2,b=3,c=2,d=3,e=-0。 解析:①在 Turbo C 编译系统下,解题过程如下: 第一个赋值语句“c=(-a++)+(++b);”可分解为如下的几个语句: b b 1 c a b b 2 1 3, c 1 3 2, a 1 1 2 a a 1 此时 a=2,b=3,c=2。 第二个赋值语句“d=(b--)+(++a)-a;”可分解为如下的几个语句: a a 1 d b a a a 2 1 3, d 3 3 3 3, b 3 1 2 b b 1 此时 a=3,b=2,c=2,d=3。 第三个赋值语句“e=(a/(++b))-(a/(--a));”中由于自加、自减运算符的优先级高于其它运算符,故先运算++和--,令 a=2,b=3,然后该等式中 a 的值都取 2 参与运算,故该等式等价与:“e=2/3-2/2;”,因此 e 的值等于 0。 此时 a=2,b=3,c=2,d=3,e=0 ②在 Visual C++编译系统下,解题过程如下: 前两条赋值语句“c=(-a++)+(++b);”、“d=(b--)+(++a)-a;”的运算过程和在 Turbo C 编译系统一样,第三个赋值语句“e=(a/(++b))-(a/(--a));”可按步骤分解为如下的几个语句 e a / b a /(a 1) b 2 1 3, e 3 / 3 3 / 2 0, a 2 a a 1 因此,其结果为 a=2,b=3,c=2,d=3,e=-0 6.答案:a=3,b=2,c=1,d=1,e=0,f=0 解析:第一个赋值语句 c=(a++>= --b);可以分解为如下的语句: b b 1 b b 1 c (a b) b 3 1 2, c (2 2) 1, a 2 1 3 a a 1 b b 1 b 2 1 3, d (3 3) 1 d (a b)第二个赋值语句 d=(a==++b);可以分解为如下的语句: 第三个赋值语句 e=(a--!=b);可以分解为如下的语句: ·· e (a! b) e (3! 3) 0, a 3 1 2 a a 1 第四个赋值语句 f=(++a>b--);可以分解为如下的语句: a a 1 f (a b) a a 1 3, f (3 3) 0, b 3 1 2 b b 1 由以上各步,可以得到:a=3,b=2,c=1,d=1,e=0,f=0 7.答案:2 0 0 解析:参看如下的注释语句。 if (c>0) s=a+b; /* c=3>0 为真,所以执行 s=a+b 语句;即:s=2*/ if (a<=0) /*由于 a= -1, 故 a<=0 为真,所以执行其后的大括号内的语句*/ { if (b>0) /*由于 b=3, 故 b>0 为真,可以继续下面的语句*/ if (c<=0) w=a-b; /*由于 c=3,c<=0 为假,其后 w=a-b 不会执行*/ } else if (c>0) w=a-b;/*这一对 if-else 因 a<=0 为真,所以没有机会执行到*/ else t=c; 8.答案:100 9.答案: 6 250 5 1 0 0 10.答案:【1】x>2 && x<=10 【2】x>-1 && x<=2 【3】y= -1 11.答案:【1】a==0 【2】b==0 【3】disc<0 12.答案:【1】(a+b>c) && (b+c>a) &&(a+c>b) 【2】 (a==b) || (b==c) || (a==c) 【3】 (a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a) 13.答案:【1】(year%4==0)&&(year%100!=0) 【2】flag=0 14.答案:【1】ch>=’A’ && ch<=’Z’ 【2】ch=ch-32 15.答案:【1】a>b 【2】min=c; 16.答案:【1】weight>10 【2】rate=0.4 【3】else 17.答案:good! joke 18.答案:【1】x<0 【2】x/10 【3】y!= -2 19.答案:【1】month 【2】break; 【3】leap=0; 20.答案:【1】operator 【2】break 【3】default 21.答案:20,0 22.答案:1,0,0 第 5 章 循环结构习题 1 选择题 1. 以下程序的输出结果是( )。main() { int n=4; while (n--) printf(〞%d〞,--n); } A.20 B.31 2. 以下程序的输出结果是( )。main() {int x=10,y=10,i; for(i=0;x>8;y=++i) printf("%d%d",x--,y); } A.10192 B.9876 3. 当执行以下程序段时。 x=-1; do {x=x*x;} while (!x); A. 循环体将执行一次 C.循环体将执行无数多次 4. 执行以下程序后输出的结果是( main() { int y=10; do{y--;}while(--y); printf("%dn",y--);} A.-1 B.1 5. 下面程序的输出结果是( )。 main() { int x=3,y=6,a=0; while (x++!=(y-=1)) {a+=1; if (y } printf("x=%d,y=%d,a=%dn",x,y,a); } ·26· C.321 D.210 C.10990 D.101091 B.循环体将执行两次 D.系统将提示有语法错误。 C.8 D.0 ) ·27· A.x=4,y=4,a=1 B.x=5,y=5,a=1 C.x=5,y=4,a=3 D.x=5,y=4,a=1 6. 若 i,j 已定义为 int 类型,则以下程序段中内循环的总的执行次数是 ( )。 for (i=5;i;i--) for (j=0;j<4;j++) {…} A.20 B.24 7. 请 读 程 序 : #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; } printf("a=%d,b=%dn",a,b); } 上面程序的输出结果是( )。 A.a=2,b=1 B.a=1,b=1 8. 若有以下程序段,w 和 k 都是整型变量w=k; LB: if(w==0) goto LE; w--; printf(〞*〞); goto LB; LE: 则不能与上面程序段等价的循环语句是(A. for(w=k;w!=0;w--) print(〞*〞); B. w=k; while(w--!=0) printf(〞*〞); w++; C. w=k; do {w--;printf(〞*〞);} while (w!=0); D. for (w=k;w;--w) printf(〞*〞); 9. 下面程序的输出是( )。 C.25 C.a=1,b=0 )。 D.30 D.a=2,b=2 ·28· main() { char *s=〞12134211〞; int k,v1=0,v2=0,v3=0,v4=0; for (k=0;s[k];k++) switch(s[k]) { default:v4++; case 1:v1++; case 2:v2++; csse 3:v3++; } printf(〞v1=%d,v2=%d,v3=%d,v4=%dn〞,v1,v2,v3,v4); } A.v1=4,v2=2,v3=1,v4=1 C.v1=5,v2=8,v3=6,v4=1 10. 有以下程序#include〞stdio.h〞int abc(int u,int v ); main() { int c,a=24,b=16; c=abc(a,b); printf(〞%dn〞,c); } int abc (int u,int v) { int w; while (v) {w=u%v; u=v; v=w;} return u; } 输出结果是( )。 A.6 B.7 C.8 11.在下列选项中,没有构成死循环的程序段是( )。 A. B.v1=4,v2=9,v3=3,v4=1 D.v1=8,v2=8,v3=8,v4=8 D.9 int i=100; while (1) { i=i%100+1; if(i>100) break; } B. for ( ; ;); C. int k=1000; do {++k;}while (k>=10000); D. int s=36; while (s) ; --s; 12. 若输入 B,以下程序的运行结果为( )。 main() {char grade;scanf("%c",&grade); switch(grade) {case'A':printf(">=85."); case'B': case'C':printf(">=60."); case'D':printf("<60."); default:printf("error."); } } A.>=85. B.>=60. C.>=60.<. 13. 列程序运行的情况是( )。 main() { int i=1,sum=0; while(i<10)sum=sum+1;i++; printf("i=%d,sum=%d",i,sum); } A.i=10,sum=9 B.i=9,sum=9 C.i=2,sum=1 14.有以下语句: i=1; for(;i<=100;i++) sum+=i; 与以上语句序列不等价的有( )。 A. for(i=1; ;i++) {sum+=i;if(i==100)break;} B. for(i=1;i<=100;){sum+=i;i++;} C. i=1;for(;i<=100;)sum+=i; D. i=1;for(; ;){sum+=i;if(i==100)break;i++;} 15.下面程序的运行结果为( )。 main() { int n; for(n=1;n<=10;n++) { if(n%3==0)continue; printf("%d",n); } } A.12457810 B.369 C.12 ·29· . D.运行出现错误D. ·30· 16. 下面程序的运行结果是( )。 main() {int x,y,z; x=0;y=z=-1; x+=-z---y; printf("x=%dn",x); } A.x=4 B.x=0 C.x=2 17. 标有/**/的语句的执行次数是( )。 int y,i; for(i=0;i<20;i++) {if(i%2==0)continue; y+=i;/**/ } A.20 B.19 C.10 A.只能用逻辑表达式 C.只能用逻辑表达式或关系表达式 D.x=3 D.9 B.只能用关系表达式D.可用任意表达式 18. 在 C 语言中,if 语句后的一对圆括号中,用以决定分支的流程的表达式。 19. 在以下给出的表达式中,与 do-while(E)语句中的(E)不等价的表达式是( )。 A.(!E==0) B.(E>0||E<0) C.(E==0) D.(E!=0) 20. 假定所有变量均已正确定义,下列程序段运行后 x 的值为( )。 k1=1;k2=2; k3=3; x=15; if(!k1)x--;else if(k2) if(k3)x=4;else x=3; A.14 B.4 C.15 D.3 21.执行下面语句的输出为( )。 int i=-1; if(i<=0)printf(“* * * *n”); else printf(“% % % % n”); A.* * * * B.% % % % C.% % % % c 22.下列程序的输出是( )。 #include main() { int i;char c; for(i=0;i<=5;i++) {c=getchar();putchar(c); } } D.有错,执行不正确 程序执行时从第一列开始输入以下数据, u w xsta B.u C.u D.u w w w x xs xsta 23. 下列程序的输出为( )。 ·31· #include"stdio.h" main() { int i,j,x=0; for(i=0;i<2;i++) {x++; for(j-0;j<=3;j++) {if(j%2)continue;x++; } x++; } printf("x=%dn",x); } A.x=4 B.x=8 24. 下列程序的输出为( )。 #include main() {int i,j,k=0,m=0; for(i=0;i<2;i++) { for(j=0;j<3;j++)k++;k-=j;} m=i+j; printf("k=%d,m=%dn",k,m); } A.k=0,m=3 B.k=0,m=5 C.x=6 D.x=12 C.k=1,m=3 D.k=1,m=5 25. 在 C 语言中,为了结束 while 语句构成的循环,while 后一对圆括号中表达式的值应该为 ( )。 A.0 B.1 D.非 0 26. 在 C 语言中,为了结束由 do-while 语句构成的循环,while 后一对圆括号中表达式的值应为( )。 A.0 B.1 D.非 0 27.下列程序的输出为( )。 #include main() { int k=0;char c='A'; do {switch(c++) { case'A':k++;break; case'B':k--; case'C':k+=2;break; case'D':k=k%2;continue; case'E':k=k*10;break; default:k=k/3; } k++; } while(c<'G'); ·32· printf("%dn",k); } A.k=3 B.k=4 C.k=2 28.C 语言的 if 语句嵌套时,if 与 else 的配对关系是( A. 每个 else 总是与它上面的最近的 if 配对 B. 每个 else 总是与最外的 if 配对 C. 每个 else 与 if 的配对是任意的 D. 每个 else 总是与它上面的 if 配对29.下列程序的输出为( )。 #include main() {int i=0,j=0,a=6; if((++i>0)||(++j>0))a++; printf("i=%d,j=%d,a=%dn",i,j,a); } A.i=0,j=0,a=6 B.i=1,j=1,a=7 30.下列程序段的输出结果为( )。 main() {int x=3; do { printf("%3d",x-=2);} while(!(--x));} A.1 B.3 0 D.k=0 )。 C.i=1,j=0,a=7 D.i=0,j=1,a=7 C.1 -2 D.死循环 2 填空题: 1. 当输入 19,2,21 时下列程序运行的结果是 。main() {int a,b,c,max; printf("please scan three number a,b,c:n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if(max if(max printf("max is:%d",max); } 2. 若输入字母 C,程序输出结果为【1】;若输入字符*,程序将【2】。#include main() {char c1,c2; c1=getchar(); while(c1<97||c1>122)c1=getchar(); c2=c1-32; printf("%c,%cn",c1,c2); ·33· } 3. 以下程序运行的结果为 。 main() { int a,b,c,x,y,z; a=10;b=2; c=!(a%b);x=!(a/b); y=(a=0); z=(a=0); printf("%d,%d,%d,%dn",c,x,y,z); } 4. 若输入 4,程序运行结果为【 1 】,若输入-4,运行结果为【 2 】,若输入 10,运行结果为【3 】. main() { int x,y; scanf("%d",&x); if(x<1) { y=x; printf("x=%d,y=x=%dn",x,y); } else if(x<10) { y=2*x-1; printf("x=%d,y=2*x-1=%dn",x,y); } else { y=3*x-11; printf("x=%d,y=3*x-11=%dn",x,y); } } 5. 以下程序运行的结果 。main() {int i=1,sum=0; loop:if(i<=10) {sum+=i; i++; goto loop; } printf("sum=%dn",sum); } 6. 以下程序运行的结果 。main() { int x=2,y,z; x*=3+1; printf("%d,",x++); x+=y=z=5; ·34· printf("%d,",x); x=y==z; printf("%dn",x); } 7. 以下程序运行的结果 。#include #include main() {int i,k,m,n=0; for(m=1;m<=10;m+=2) { if(n%10==0)printf("n"); k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0)break; if(i>k) {printf("%2d",m); n++; } } } 8.如果输入‘1’,‘2’,‘3’,‘4’,程序运行输出的是 。 #include main() {char c; int i,k; k=0; for(i=0;i<4;i++) {while(1) { c=getchar();if(c>='0'&&c<='9')break;} k=k*10+c-'0'; } printf("k=%dn",k); } 9. 运行以下程序后,如果从键盘上输入 china#<回车>,则输出结果为 #include main() {int v1=0,v2=0; char ch; while ((ch=getchar())!='#') switch(ch) {case 'a': case 'h': default: v1++; case '0':v2++; 。 ·35· } printf("%d,%dn",v1,v2); } 10. 程序运行结果是 。#include main() {int i; for(i=1;i+1;i++) { if(i>4){printf("%dt",i++);break;} printf("%dt",i++); } } 11. 以下程序运行的结果是 #include main() { int a,b; for(a=1,b=1;a<=100;a++) { if(b>=20)break; if(b%3==1) { b+=3; continue; } b-=5; } printf("%dn",a); } 。。 12. 以下程序运行的结果是 main() {int i=1; while(i<10) if(++i%3!=1)continue; else printf("%d",i); } 13. 程序运行的结果是 。main() {int n=0; while(n++<=1) printf("%dt",n); printf("%dn",n); } 14. 此程序运行时,输入 qwert?程序的运行结果是 #include main() {char c; 。 ·36· while((c=getchar())!='?')putchar(++c); } 15. 对以下程序: 当输入 65 14 时,其运行结果是【 1 】。当输入 14 63 时,其运行结果是【 2 】。当输入 25 125 时,其运行结果时【 3 】。#include main() {int m,n; scanf("%d%d",&m,&n); while(m!=n) { while(m>n)m-=n; while(n>m)n-=m; } printf("m=%dn",m); } 16. 在执行以下程序时,为了使输出结果为 t=4,则给a 和b 输入的值应满足的条件是 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(〞t=%dn〞,t); } 17. 求出 1000 以内的“完全数”。(提示:如果一个数恰好等于它的因子之和(因子包括 1, 不包括数本身),则称该数为“完全数”。如:6 的因子是 1,2,3 而 6=1+2+3,则 6 是个“完数”)。 main() {int i,a,m; for(i=1;i<1000;i++) {for(m=0,a=1;a<=i/2;a++) if(!(i%a)) 【1 】; if【2】)printf("%4d",i); } } 18. 鸡问题:100 元钱买 100 只鸡,公鸡一只 5 元钱,母鸡一只 3 元钱,小鸡一元钱三只, 。求 100 元钱能买公鸡、母鸡、小鸡各多少只? #include main() {int cocks,hens,chicks; cocks=0; ·37· while(cocks<=19) { hens=0; while(hens<=33) { chicks=100.0-cocks-hens; if(5.0*cocks+3.0*hens+chicks/3.0==100.0) printf("%d,%d,%dn",cocks,hens,chicks); 【1】; } 【2】; } } 19. 爱因斯坦的阶梯问题:设有一阶梯,每步跨 2 阶,最后余 1 阶;每步跨 3 阶,最后余 2 阶;每步跨 5 阶,最后余 4 阶;每步跨 6 阶,最后余 5 阶;只有每步跨 7 阶时,正好到阶梯顶。问共有多少阶梯。 main() {int ladders=7; while(【 1 】)ladders+=14; printf("%dn",ladders); } 20. 下列程序计算平均成绩并统计 90 分及以上人数。main() {int n,m; float grade,average; average=n=m=【1】; while(【2】) { scanf("%f",&grade); if(grade<0)break; n++; average+=grade; if(grade<90)【3】; m++; } if(n)printf("%.2f%dn",average/n,m); } 21. 下列程序计算 Fibonacci 数列:1,1,2,3,5,8,13……的前 40 项。main() {int I;long f1,f2; 【 1 】 ; for(I=0;I<20;I++) { printf("%12ld%12ld",f1,f2); if(I%2)printf("n"); f1+=f2; 【2】; } ·38· } 22. 下列程序判断一个数是否为素数。#include #include main() {int I,k,m; scanf("%d",&m); k=sqrt(【1】); for(I=2;I<=k;I++) if(m%I==0)【2】; if(【3】)printf("%dyesn",m); else printf("%dnon",m); } 23. 求 100~499 之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。main() {int I,j,k,m,n; for(I=1;【1】;I++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) {【2】; n=I*I*I+j*j*j+k*k*k; if( 【 3 】 ) printf("%d",m); } } 24. 从键盘上输入两个整数 m 和 n,求其最大公约数。main() {int a,b,num1,num2,temp; scanf("%d,%d",&num1,&num2); if(【1】) { temp=num1; num1=num2; num2=temp; } a=num1;b=num2; while(b!=0) { temp=【2】; a=b; b=temp; } printf("%d,%d",a,num1*num2/a); } ·39· 3 答案及部分解题分析 一.选择题答案 1.A 2.D 7.A 8.C 13.D 14C 19.C 20.B 25.A 26.A 1. 答案:A 3.A 9.D 15.A 21.A 27.B 4.D 10.C 16.C 22.C 28.A 5.D 11.C 17.C 23.B 29.C 6.A 12.C 18.D 24.B 30.C 解析:此题中判断 while 后面的条件时,先使用 n 的值再 n--,而打印时打印的是 n 减 1 后的值。所以第一次循环,n=4,执行完后 n=2,打印出 2;第二次循环,n=2, 经过 n—和— n,n 变成了 0,打印出 0;第三次循环时 while 后面的条件不成立(n=0),所以循环结束。故输出为 20。 2. 答案:D 解析:第一次循环时打印的 x 和 y 的值都是 10,然后 x 通过 x—后变成 9,因此第二次循环时 x=9, 而“y=++i”执行完后,y 变成 1,所以第二次循环时打印的 x 和 y 的值是 9 和 1 ,然后 x—变成 8; 第三次循环时,x>8 条件不成立,循环结束。故 D 为正确答案。 3. 答案:A 解析:对于一个不为 0 的数,!x 即为 0,故对于 x=-1,while 后条件不成立,但是 do 循环体是先执行的,故等判断条件时,循环体已执行了一次。 4. 答案:D 解析:此题是一个 do-while 循环,当 y 值为 1 时,while 后的条件--y 变成 0,从而循环结束,这时打印出 0,然后 y--变成-1。故 D 为正确答案。 5. 答案:D 解析:此题中循环进行了 1 次,但判断了 2 次,第一次 x 加 1 变成 4,y 减 1 变成 5,a 加 1 变成 1;第 2 次 while 后面的条件不成立,因为!=的左边先使用 x 的值 4 来判断, 右边表达式的值为 4,即 y 由 5 变成 4,判断结束后 4 变成 5,循环结束。故 D 为正确答案。 6. 答案:A 解析:此题中外层 for 要进行 5 次,内层 for 循环要进行 4 次,所以共进行 4*5=20 次循环。 二.填空题答案 1. 答案:21 2. 答案:【1】c C 3. 答案:1,0,0,1 4. 答案:【1】x=4,y=2*x-1=7 5. 答案:55 6. 答案:8,14,1 7. 答案:1 3 5 7 8. 答案:1234 【2】等待继续输入,直到输入小写字母。 【2】x=-4,y=x=-4 【3】x=10,y=3*x-11=19 ·40· 9. 答案:5,5 10.答案:1 3 5 11.答案:8 12.答案:4 7 10 13.答案:1 2 3 14.答案:rxfsu 15. 答案:【1】m=1 16.
版权声明:本文标题:(完整版)C语言基础练习题(含答案)(可编辑修改word版) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1702836821h432732.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论