C程序设计基础练习

本篇是C程序设计基础练习题,内容包括C程序设计基础知识、基本数据类型、数据
运算、程序流程控制、数组和字符串、指针、函数、复合结构类型、文件和编译预处理。本篇
共10 章,每章包括单选题和填空题两种基础题型,每道题都紧扣教学要求的重点和难点; 
针对每章每节的知识点,经过精心设计和选择,每道题构成基本的C程序基本模块,均经
过上机调试,对读者深入掌握“C语言程序设计”课程的教学内容,巩固所学C程序设计的
知识点提供有益的帮助。此外,本篇练习题对准备参加“C语言程序设计”等级考试的应
试者也具有极大使用价值。

练习
1 
简单的C程序设计

一、单选题

1. 一个C程序由() 组成。
A. 主程序B. 子程序C. 函数D. 过程
2. 一个C语言程序总是从() 开始执行。
A. 主程序B. 子程序C. 主函数D. 函数
3. 以下叙述正确的是( )。
A. 在C程序中,main() 函数必须位于程序的最前面
B.C程序的每一行只能写一条语句
C. 对一个C程序进行编译过程中,可以发现注释中的拼写错误
D.C语言本身没有输入输出语句
4. 以下说法正确的是( )。
A. 在C程序运行时,总是从第一个定义的函数开始执行
B. 在C程序运行时,总是从main() 函数开始执行
C.C源程序中的main() 函数必须放在程序的开始部分
D. 一个C函数中只允许一对大括号
·38·

5. 在一个C程序文件中,main() 函数的位置( )。
A. 必须在开始B. 必须在最后
C. 必须在库函数之后D. 可以任意
6. 下面4项叙述中,错误的是( )。
A.C语言的标识符必须全部由字母组成
B.C语言不提供输入输出语句
C.C语言的注释可以出现在任何位置
D.C语言的关键字必须小写
7. 下列标识符,不合法的用户标识符是( )。
A.Pad B.a10 C._123 D.a#b 
8. 下列标识符,合法的用户识符是( )。
A.long B.3ab C.enum D.day 标(_) 
9. 下列标识符,错误的一组是( )。
A.Name,chr,_bAB raCnt,ypdfn
aac,-B.ed,oste,eie
C.icue,neeDulsotnD.b_xUSA,rn


nlditgr,obe,hrit acd,6y,pit 

10. 下列单词, 
A.include B.ENUM C.define D.union 属于关键字的是()。(_) 
11. 下列单词,属于关键字的是( )。
A.Float B.integer C.Char D.signed 
12. 下面属于C语句的是( )。
A.print("%d\n) B./*Thisisastatement*/
C.#inldtih> xx+1 ,a(") 
cue<sdo.D.=

13. 下面单词属于C语言保留字的是( )。
A.Int B.typedef C.ENUM D.unien 
14. 下列标识符中,正确的一组是( )。
A.name char abc A$ 
B.abC)c 5bytes -SA 54321 
C.print const type efine 
D.include integer Double short_int U(_) d(_) 
15. 以下叙述正确的是( )。
A.C语言规定只有主函数可以调用其他函数
B. 一个C语言的函数中只允许有一对大括号
C.C语言中的标识符可以用大写字母书写
D. 在对程序进行编译的过程中,可发现注释中的拼写错误
二、填空题

1.C语言源程序文件名的后缀是*.c,经过编译后,生成的文件名后缀是【1】。
2.C语言源的用户标识符可由3种字符组成,它们是字母、数字或下画线,并且第一
·48·

个字符必须是 【2】 和下画线。
3.C语言是一种编译型的程序设计语言,一个C程序的开发过程要经过编辑、编译、 
【3】 4个步骤才能得到运行结果,而且不能与关键字相同。
4.C语言源程序的基本单位是 【4】 。
5.关键字是C语言中有特定意义和用途、不得作为它用的字符序列,其中ANSIC标
准规定的关键字都必须 【5】 。
6. 【6】 用来表示变量名、数组名、函数名、指针名、结构名、联合名、用户定义的数
据类型名及语句标号等用途的字符序列。
7.下面的程序用scanf()函数从键盘接收一个字母,用printf()函数显示十进制代码
值,将程序填写完整。 
main() 
{ 【7】 ; 
scanf("%c", &ch); 
printf((" %c", ch); 
} 
8.下面的程序用scanf()函数从键盘接收一个整型数据,用printf()函数输出该整型
数据,将程序填写完整。 
main() 
{ int a; 
scanf("%d", 【8】 ); 
printf("%d", a); 
} 
9.下面的程序功能是从键盘输入一个小写字母,然后输出该字母的大写字母和十进
制ASCII码值,将程序填写完整。 
main() 
{ char c1,c2; 
scanf("%c", &c1); 
c2= 【9】 ; 
printf("%c %d", c2, c2); 
} 
10.C语句x=10;语句中,”=”的含义是 【10】 。
11.函数体由符号{开始,到符号}结束,函数体内的前面是 【11】 ,后面是语句
部分。
12.C语言中的标识符可分为3类,它们是 【12】 、用户标识符和预定义标识符。
13. 【13】 在整个程序文件中可以出现在任意位置,main()函数不一定出现在程
序的开始处,但是程序的运行必须总是从main()函数开始。
14. 【14】 是完成某种程序功能(如赋值、输入、输出等)的最小单位,所有的C语
句都以分号结尾。
·85·

15.将2.5赋值给浮点型变量s的语句格式是【15 】。
16.关键字是C语言中有特定意义和用途、不得作为它用的字符序列,其中ANSIC 
标准规定的关键字有【16 】。
17.一组C语句用大括号括住,就构成【17 】。
18.在函数名后面的一对括号,其中放置一个或多个形式参数,简称【18 】或
哑元。
19.C语句可分为表达式语句、复合语句和【19 】。
20.当使用系统提供的库函数时,只要在程序开始使用#include 【20 】或# 
include<标题文件>,就可以调用其中定义的库函数。
练习
2 
基本数据类型

一、单选题

1.C语言中允许的基本数据类型包括( )。
A.整型、实型、逻辑型B.整型、字符型、逻辑型
C.整型、实型、字符型D.整型、实型、逻辑型、字符型
2.C语言下列各组数据类型中,满足占用存储空间从小到大的排列是( )。
A.sotit,hr,fot,dulB.ncaladul
hrncalaobe it,hr,fot,obe 
C.int,unsignedchar,longint,float D.char,int,float,double 

3.C语言中不同数据类型占用存储空间的大小是( )。
A.C语言本身规定的B.任意的
C.与计算机机器字长有关D.由用户自己定义的
4.在C语言中,设st型占2B空间,下列不能正确存入it型变量的常量
是( )。
hortinn
A.10 B.036 C.65536 D.0xab 
5.C语言中整型常量包括( )。
A.十进制、八进制、十六进制B.十进制、八进制、二进制
C.十进制、二进制、十六进制D.二进制、八进制、十六进制
6.下面四组整型常数,错误的一组是( )
。
A.180,0xf,011,0L B.01,32768u,0671,0x153
C.xcde,017,0xe,123 D.0x48a,0205,0x0,-135
7.下面4组整型常数,合法的一组是( )
。
A.160,0xbf,011 B.0abc,0170a,-123
C.-01,986012,0668 D.0x48a,2e5,0x
8.下面4组常数中,均是正确的八进制或十六进制数的一组是( )
。
A.016,0xbf,018 B.0abc,0170xa
C.010,-0x11,0x16 D.0A12,7FF,-123
·68·

9.下面4个选项中,均是合法的浮点数的一组是( )。
A.-.60,12e-4,-8e5 B.1e+1,5e-9.4,03e2 
C.-e3,e-4,5.e-0 D.123e,1.2e-.4,+2e-1 
10.不正确的字符串常数是( )。
A."abc" B."121' 2" C."0" D."" 
11.下面属于C合法的字符常数是( )。
A.\' t' B.'\97' C."A" D."\0" 
12.下列变量定义中合法的是( )。
A.short_a=1-.1e-1; B.doubleb=1+5e2.5; 
C.longdo=0xfdaL; D.float2_and=1-e-3; 
13.下列定义变量的语句中错误的是( )。
A.int_int B.doubleint_ 
C.charFor D.floatUS$ 
14.下列转义字符中,均合法的一组是( )。
A.t' ',\' \',\' n' B.\' ',\' 017',\' x' 
C.'\f','\018',\' xab' D.\' \0','\101','f' 
15.以下叙述不正确的是( )。
A.空字符串它只1B的存储单元
B.字符型常量可以存放在字符变量中
C.字符型串常量可以存放在字符串变量中
D.字符常量可以整数混合运算,字符串常数不可以
16.当#definePI3.14定义后,下面叙述正确的是( )。
A.PI是一字符串B.语法错误
C.PI是整型变量D.PI是实型变量
17.以下选项中不属于C语言的类型名称是( )。
A.signedshortint B.unsignedlongint 
C.unsignedint D.longshort 
18.在C语言中,以下叙述不正确的是( )。
A.在C程序中,无论整数还是实数都能准确无误地表示
B.在C程序中,变量名代表存储器的一个位置
C.静态变量的生存周期与整个程序的运行期间相同
D.C程序中,变量必须先说明后引用
19.以下能正确定义变量a、b、c,并为它们全部赋值的语句是( )。
A.inta=b=c=5; B.inta,b,c=5; 
C.inta=5,b=5,c=5; D.a=5,b=5,c=5; 
20.已知字母' A '的ASCII码为十进制数65,以下程序的输出结果是( )。 
main() 
{ char c1, c2; 
·87·

c1='A'+'5'-'3'; 
c2='A'+'6'-'3'; 
printf("%d, %c \n", c1,c2); 
} 
A.67,D B.B,C C.C,D D.不定值
21.下面程序的输出结果是( )。 
main() 
{ char c1='B', c2='E'; 
printf("%d, %c \n", c2-c1, c2+'a'-'A'); 
} 
A.不确定B.2,M C.2,e D.3,e 
22.下面程序的输出结果是( )。 
main() 
{ int u=010, v=0x10, w=10; 
printf(" %d, %d,%d \n ", u, v, w); 
} 
A.10,10,10 B.8,8,10 C.8,10,10 D.8,16,10 
23.下面程序的输出结果是( )。 
main() 
{ int k=15; 
printf("k=%d, k=%o, k=%x \n", k, k, k); 
} 
A.k=15,k=15,k=15 B.k=11,k=17,k=17 
C.k=15,k=017,k=0xf D.k=15,k=17,k=f 
24.有定义floata,b,c;用scanf("%f%f%f",&a,&b,&c);语句输入数据,使a、
b、c的值分别为11.0、22.0、33.0,下面键盘输入错误的形式是( )。
A.11<CR>22<CR>33<CR> B.11.0,22.0,33.0<CR> 
C.11.0<CR>2233<CR> D.1122<CR>33<CR> 
25.定义floaty;intx;,用scanf("i=%d,f=%f%f",&x,&y);语句输入数据, 
使x,y的值分别为10,76.5,下面键盘正确的输入形式是( )。
A.1076.5<CR> B.i=10,f=76.5<CR> 
C.10<CR>76.5<CR> D.x=10,y=76.5<CR> 
26.以下对scanf()函数叙述中,正确的是( )。
A.输入项可以是一个实型常数,如scanf("%f",3.3) 
B.只有格式控制没有输入项,也能正确输入数据到内存,如scanf("a=%d") 
C.当输入一个实型数据时,可以规定小数点的位数,如scanf("%4.2f",&f) 
D.当输入数据时必须指明变量地址,如scanf("%f",&f) 
·88·

27.有以下程序,若从键盘输入10A20<CR>,则输出结果是( )。 
main() 
{ int m=0, n=0; char c='a'; 
scanf("%d%c%d", &m, &c, &n); 
printf("%d, %c, %d \n", m, c, n); 
} 
A.10,a,20 B.10,a,0 C.10,A,0 D.10,A,20 
28.函数putchar()可以向终端输出一个( )。
A.字符串B.字符或字符型变量的值
C.整型变量的值D.实型变量的值
29.x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句
是( )。
A.INPUT,x,y,z; B.scanf("%d%d%d",&x,&y,&z); 
C.scanf("%d%d%d",x,y,z); D.read("%d%d%d",&x,&y,&z); 
30.设有定义:inta;floatb;执行scanf("%2d%f",&a,&b);语句时若从键盘输入
876543.0<回车>,a和b的值分别是( )。
A.876和543.000000 B.87和6.000000 
C.87和543.000000 D.76和543.000000 
二、填空题
1.C语言允许使用的数据类型有3类,它们是 【1】 、构造类型和指针类型。
2.C语言提供的5种基本类型关键字是char、int、float、double和 【2】 。
3.C语言源程序的基本单位是 【3】 。
4.C语言定义的变量,代表内存中的一个 【4】 。
5.全局变量和static型局部变量的初始化是在编译阶段完成的,且初始化在整个程
序执行期间被执行 【5】 次。
6.在C 语言程序中,把a 定义成单精度实型变量,并赋值为1 的语句格式是 
【6】 。
7.定义变量inti=0,j=0,k=0;,用下面的语句进行输入时,从键盘输入123.4<CR>, 
(CR代表CR),则变量i、j、k的值为 【7】 。 
scanf("%d ", &i); 
scanf(" %d ", &j); 
scanf("%d\n ", &k); 
8.运行下面的程序,若要使a=5.0,b=4,c=2,则输入数据的形式为 【8】 。 
main() 
{ int b,c; 
float a; 
·89·

scanf("a=%f,%d,%d", &a,&b, &c); 
printf(" %f %d %d \n", a,b,c); 
} 
9.已知如下的定义和输入语句,若要求a1、a2、c1、c2的值分别为10、20、'A'、'B',则正
确的输入方式是 【9】 。 
int a1,a2,c1,c2; 
scanf(" %d,%d%c%c", &a1,&a2, &c1,&c2); 
10.已定义变量inti,j;,若从键盘输入i=1,j=2<CR>则使i,j的值分别1、2的输
入语句是 【10】 。
11.以下程序的输出结果是 【11】 。 
main() 
{ int a=200,b=010; 
printf("%d%d\n", a,b); 
} 
12.有以下程序,程序运行时输入1234567<CR>,程序的运行结果是 【12】 。 
main() 
{ int x,y; 
scanf("%2d%1d", &x,&y); 
printf("%d%\n",x+y); 
} 
13.若整型变量a和b中的值分别为7和9,要求按以下格式输出a和b的值: 
a=7 
b=9 
请完成输出语句printf(" 【13】 ",a,b);。
14.执行以下程序时输入1234567,则输出结果是 【14】 。 
main() 
{ int a=1,b; 
scanf("%2d%2d",&a&b); 
printf("%d %d\n",a,b); 
} 
15.写出以下程序的输出结果 【15】 。 
main() 
{ printf("%d\n",NULL); } 
16.写出以下程序的输出结果 【16】 。 
main() 
{ char a='\102',b='A'; 
·90·

printf("%d,%d, %c,%c\n",a,b,a,b); 
} 
17.设有说明语句:chara=\' 72';则变量a包含 【17】 个字符。
18.设有定义longx=123456L;,则以下能够正确输出变量x值的语句是 【18】 。
19.以下程序的运行结果是 【19】 。 
main() 
{ printf("*%f,%4.3f*\n",3.14,3.1415); } 
20.以下程序的运行结果是 【20】 。 
{ char c='A'; 
printf("%d,%o,%x,%c\n",c,c,c,c); 
} 
练习3 数据运算
一、单选题 
1.在C语言中,要求运算对象必须是整数的运算符是( )。
A./ B.++ C.% D.!= 
2.以下符合C语言语法的赋值表达式是( )。
A.d=9+e+f=d+9 B.d=9+e,f=d+9 
C.a+=a-=(a=4)*(b=2) D.x!=a+b 
3.以下变量均是整型,且n=s=7;,则执行表达式s=n++,s++,++n后s的
值是( )。
A.7 B.8 C.9 D.10 
4.若有定义inta=7;floatx=2.5,y=4.7;,则表达式x+a%3*(int)(x+y)%2/4 
的值是( )。
A.0.00000 B.2.500000 C.2.50000 D.3.500000 
5.若有定义intk=7,x=12;,则表达式的值为3的是( )。
A.x%=(k%=5) B.x%=(k-k%5) 
C.x%=k-k%5 D.(x%=k)-(k%=5) 
6.若x、i、j和k都是int变量,则执行表达式x=(i=4,j=16,k=32)后,x的值为是
( )。
A.4 B.16 C.52 D.32 
7.已知大写字母A 的ASCII值是65,小写a的ASCII值为97,则用八进制表示的字
符常量\' 101'是( )。
A.字符A B.字符a C.字符e D.非法常量
8.设a、b 均是double型变量,且a=5.5,b=2.5,则表达式(int)a+b/b 的值
·91·

是( )。
A.6 B.6.500000 C.5.500000 D.6.000000 
9.设有定义#defined2,inta=0;doubleb=1.25;charc= 'A';,则下面语句错误的
是( )。
A.a++ B.b++ C.c++ D.d++ 
10.有定义intx=13,y=5;,执行printf("%d\n",x%=(y/=2);,则程序输出结果
是( )。
A.3 B.2 C.1 D.0 
11.下列表达式中,值为0的是( )。
A.3%5 B.3/5 C.3/5.0 D.3<5 
12.表达式18/4*sqrt(4.0)/8的数据类型为( )。
A.int B.double C.float D.不确定
13.表达式(int)(3.0/2.0)的值为( )。
A.1.5 B.1 C.1.0 D.0 
14.设intx=10;执行x+=x-=x-x;语句后,x的值为( )。
A.30 B.20 C.40 D.10 
15.设下列变量均为整型,则不正确的赋值语句是( )。
A.++t; B.a=a+c=1; 
C.n1=(n2=(n3=0)); D.k=i==1; 
16.设floatm=4.0,n=4.0;,使m 为10的表达式为( )。
A.m-=n*25 B.m+=n+2 
C.m/=n+9 D.m*=n-6 
17.C语句x*=y+2;还可以写成( )。
A.x=2+y*x; B.x=x*(y+2); 
C.x=x*y+2; D.x=y+2*x; 
18.若变量已经正确定义,将a和b的数进行交换,下列不正确的语句组是( )。
A.a=a+b,b=a-b,a=a-b; B.a=t,t=b,b=a; 
C.t=a,a=b,b=t; D.t=b,b=a,a=t; 
19.若变量a和b为double型,则表达式x=1,y=x+3/2的值是( )。
A.1 B.2.0 C.2 D.2.5 
20.设m=7,n=8;,则语句printf(" %d,%d",(m+n,m),(n,m+n));输出
是( )。
A.7,15 B.8,15 C.出错D.15,7 
21.设a=3;,则表达式a<1&&--a>1的运算结果和a的值分别是( )。
A.0和3 B.0和2 C.1和2 D.1和3 
22.数学表达式为x≥y≥z,书写为C语言表达式为( )。
A.(x>=y)&&(y>=z) B.(x>=y)AND(y>=z) 
C.x>=y>=z D.(x>=y)&(y>=z) 
·92·

23.已知intx=43,y=0;charc= 'A ';,则表达式(x>=y&&c< 'B' &&!y)的值
是( )。
A.1 B.0 C.语法错D.-1 
24.表示变量a,b大于0,正确的C语言表达式是( )。
A.(a>0)&&(b>0) B.a&&b 
C.(a>0)|(b>0) D.(a>0)||(b>0) 
25.下面程序的输出结果是( )。 
main() 
{ int a=-1, b=4, k; 
K=(a++<=0)&&(!b--<=0); 
printf("%d %d %d", k, a, b,); 
} 
A.1 0 3 B.0 0 3 C.0 1 2 D.1 1 2 
26.有定义inta=3,b=4,c=5;,则以下表达式的值为0的是( )。
A.a<=b B.!(a<b)&&!c||1 
C.a&&b D.a||b+c&&b-c 
27.表达式5&2||5|2的值是( )。
A.1 B.0 C.2 D.3 
28.整型变量x和y的值相等且非0值,则以下选项中结果为0的表达式是( )。
A.x||y B.x|y C.x^y D.x&y 
29.设intb=2;,表达式(b<<2)/(b>>1)的值是( )。
A.8 B.4 C.2 D.0 
30.sizeof(double)是( )。
A.一个不合法的表达式B.一个函数调用
C.一个双精度表达式D.一个整型表达式
31.下面属于C语句的是( )。
A.printf("%d\n",a) B.#include<stdio.h> 
C.{a=b;b=c;c=a;} D./*thisisaprogram*/ 
32.下列选项中,不正确的语句是( )。
A.++t; B.n1=(n2=(n3=0)); 
C.k=i==j; D.a=b+c=1; 
33.已知ch是字符型变量,则下面正确的赋值语句是( )。
A.ch=1' 23'; B.ch=\' xff'; C.ch=\' 08'; D.ch="\"; 
34.设x和y均为int型变量,则执行以下语句的功能是( )。 
x+=y; y=x-y; x-=y; 
A.把x和y从大到小排列 B.把x和y从小到大排列
C.无确定结果 D.交换x和y的值
·93·

35.下面程序的输出为( )。 
main() 
{ int a; 
printf("%d\n",(a=3*5,a*4,a+5)); 
} 
A.65 B.20 C.15 D.10 
36.printf函数中用到格式符“%5s”,其中数字5表示输出的字符串占用5列,如果
字符串长度大于5,则输出方式是( )。
A.从左起输出该字符串,右补空格B.按原字符串长从左向右全部输出
C.右对齐输出该字符串,左补空格D.输出错误信息
37.已有定义intx;floaty;且执行语句scanf("%3d,%f",&x,&y);时,若从第一
列开始输入数据12345,678<CR>,则x的值为( )。
A.12345 B.123 C.45 D.345 
38.已有定义intx;floaty;且执行语句scanf("%3d,%f",&x,&y);时,若从第一
列开始输入数据12345,678<CR>,则y的值为( )。
A.45 B.不确定C.678 D.45678 
39.设有输入语句scanf("a=%d,b=%d,c=%d",&a,&b,&c);为使变量a的值
为1,b的值为3,c的值为2,则从键盘输入数据的正确形式是( )。
A.132<CR> B.1,3,2<CR> 
C.a=1b=3c=2<CR> D.a=1,b=3,c=2<CR> 
40.下面程序运行时,若从键盘输入的数据形式为251310<CR>,则正确的输出结
果是( )。 
main() 
{ int x, y, z; 
scanf("%d%d%d", &x, &y, &z); 
printf("x+y+z=%d\n", x+y+z); 
} 
A.x+y+z=48 B.x+y+z=35 
C.不确定值 D.x+z=35 
41.若t为double类型,则表达式t=1,t-5,t++的值是( )。
A.1 B.6.0 C.2.0 D.1.0 
42.设有intx=2;,以下表达式中,值不为6的是( )。
A.x*=x+1 B .x + +,2*x C.x*=(x+1) D.2*x,x+=2 
43.若有定义doublea=22;inti=0,k=18;,则不符合C 语言规定的赋值语句
是( )。
A.a=a++,i++; B.i=(a+k)<=(i+k); 
C.i=a%11; D.i=!a; 
·94·

44.若有定义语句intx=10;,则表达式x-=x+x的值是( )。
A.-20 B.-10 C.0 D.10 
45.表达式(int)((double)9/2)-9%2的值是( )。
A.0 B.3 C.4 D.5 
二、填空题
1.C语言中,当表达式的值为0时表示逻辑值“假”,当表达式值为 【1】 时表示逻
辑值“真”。
2.若x,y,均是double型变量,且x的初值为3.0,y的初值为2.0,则表达式pow(y, 
fabs(x))的值为 【2】 。
3.若a,b,c是整型变量,则执行表达式(a=b=4)+(c=2)后,a的值为 【3】 。
4.已知inta=3,b=5;则表达式a==b<0的值是 【4】 。
5.已知inta=3,b=5;则表达式a>=b&&b>1值是 【5】 。
6.已知inta=3,b=5;则表达式5%a+b值是 【6】 。
7.能正确表示数学公式0<x<9的C语言表达式是 【7】 。
8.写出以下程序的输出结果 【8】 。 
main() 
{ int a=3; 
a+=a-=a*a; 
printf("%d\n",a); 
} 
9.写出以下程序的输出结果 【9】 。 
main() 
{ int x=12,y; 
y=x++; 
printf("%d,%d,%d\n",x+y,x++,y++); 
} 
10.写出以下程序的输出结果 【10】 。 
main() 
{ int x=6; 
printf("%d\n",x+=x++,++x); 
} 
11.写出以下程序的输出结果 【11】 。 
main() 
{ int x=100; 
printf("%d\n",x>=100); 
} 
·95·

12.写出以下程序的输出结果 【12】 。 
main() 
{ int x=5,y; 
float a; 
y=2.75+x/2+(float)(x/2.0); 
a=2.75+x/2.0+(float)(x/2); 
printf("%d,%2.2f\n",y,a); 
} 
13.设x为int型变量,写出一个关系表达式 【13】 ,用以判断x同时为3和7的
倍数时,关系表达式的值为真。
14.写出以下程序的输出结果 【14】 。 
main() 
{ double x=17; 
int y; 
y=(int)(x/5)%2; 
printf("%d\n",y); 
} 
15.写出以下程序的输出结果 【15】 。 
main() 
{ int x=20; 
printf("%d,",0<x<20); 
printf("%d\n",0<x&&x<9); 
} 
16.已知字符A 的ASCII代码值为65,以下程序运行时若从键盘输入B33<CR>, 
则输出结果是 【16】 。 
main() 
{ char a,b; 
a=getchar(); 
scanf("%d",&b); 
a=a-'A'+'0'; 
b=b*2; 
printf("%c %c\n",a,b); 
} 
17.已知字母A 的ASCII码为65,以下程序运行后的输出结果是 【17】 。 
main() 
{ char a,b; 
a='A'+'5'-'3'; 
b=a+'6'-'2'; 
·96·

printf("%d %c\n",a,b); 
} 
18.以下程序运行后的输出结果是 【18】 。 
main() 
{ int a,b,c; 
a=25; b=025; c=0x25; 
printf("%d %d %d\n", a, b, c); 
} 
19.有以下程序,程序运行时输入12<CR>,执行后输出结果是 【19】 。 
main() 
{ char ch1,ch2; 
int n1,n2; 
ch1=getchar(); ch2=getchar(); 
n1=ch1-'0'; n2=n1*10+(ch2-'0'); 
printf("%d\n ",n2); 
} 
20.以下程序运行时若从键盘输入“100 200 300<CR>”。输出结果是 【20】 。 
main() 
{ int i=0,j=0,k=0; 
scanf("%d%*d%d",&i,&j,&k); 
printf("%d %d %d\n",i,j,k); 
} 
练习4 程序流程控制
一、单选题 
1.已知intx=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=30 
C.x=20,y=30,z=10 D.x=20,y=30,z=20 
2.执行下面程序的输出结果是( )。 
main() 
{ int a=5,b=0,c=0; 
if(a=a+b) printf("****\n"); 
else printf("####\n"); 
} 
·97·

A.有语法错误不能编译 B.能通过编译,但不能通过连接
C.输出**** D.输出#### 
3.为避免在嵌套的条件语句if…else中产生二义性,C语言规定else子句总是与( )。
A.编排位置相同的if配对 B.其前面最近的if配对
C.其后面最近的if配对 D.同一行上的if配对
4.以下不正确的if语句是( )。
A.if(x>y)printf("%d\n",x); 
B.if(x=y;)&&(x!=0)x+=y; 
C.if(x!=y)scanf("%d",&x);elsescanf("%d",&y); 
D.if(x<y){x++;y++;} 
5.若有条件表达式x?a++:b--,则以下表达式中能完全等价于表达式x的
是( )。
A.(x==0) B.(x!=0) C.(x==1) D.(x!=1) 
6.若运行下面程序时,给变量a输入15,则输出结果是( )。 
main() 
{ int a,b; 
scanf("%d", &a); 
b=a>15? a+10:a-10; 
printf("%d\n", b); 
} 
A.5 B.25 C.15 D.10 
7.以下选项中,两条条件语句语义等价的是( )。
A.if(a=2) printf("%d\n",a); B.if(a-2) printf("%d\n",a); 
if(a==2) printf("%d\n",a); if(a!=2) printf("%d\n",a); 
C.if(a) printf("%d\n",a); D.if(a-2) printf("%d\n",a); 
if(a==0) printf("%d\n",a); if(a==2) printf("%d\n",a); 
8.以下程序执行后的输出结果是( )。 
main() 
{ int x, y=1, z; 
if((z=y)<0) x=4; 
else if(y==0) x=5; 
else x=6; 
printf("%d,%d\n", x,y); 
} 
A.4,1 B.6,1 C.5,0 D.出错信息
9.以下程序的执行结果是( )。 
main() 
{ int x=0, y=1, z=0; 
·98·

if(x=z=y) x=3; 
printf("%d,%d\n", x,z); 
} 
A.3,0 B.0,0 C.0,1 D.3,1 
10.运行下面程序时,若从键盘输入3,4<CR>,则程序的输出结果是( )。 
main() 
{ int a, b, s; 
scanf("%d,%d", &a,&b); 
s=a; 
if(s<b) s=b; 
s=s*s; 
printf("%d\n", s); 
} 
A.14 B.16 C.18 D.20 
11.下面程序的运行结果是( )。 
main() 
{ int x=100, a=10, b=20, ok1=5, ok2=0; 
if(a<b) 
if(b!=15) 
if(!ok1) x=1; 
else 
if(ok2) x=10; 
x=-1; 
printf("%d\n",x); 
} 
A.-1 B.0 C.1 D.不确定的值
12.下面程序运行时,若从键盘输入5<CR>,则输出结果是( )。 
main() 
{ int a; 
scanf("%d", &a); 
if(a++>5) printf("%d\n", a); 
else printf("%d\n", a--); 
} 
A.7 B.6 C.5 D.4 
13.执行下面程序段后的输出结果是( )。 
int x=1, y=1, z=1; 
x+=y+=z; 
printf("%d\n", x<y?y:x); 
·99·

A.3 B.2 C.1 D.4 
14.运行下面程序时,从键盘输入字母H,则输出结果是( )。 
main() 
{ char ch; 
ch=getchar(); 
switch(ch) 
{ case'H': printf("Hello!\n "); 
case'G': printf("Good morning!\n"); 
defualt : printf("Bye_Bye!\n"); 
} 
} 
A.Hello! B.Hello! 
GoodMorning! 
C.Hello! D.Hello! 
Goodmorning! Bye_bye! 
Bye_Bye! 
15.运行下面程序时,从键盘输入12,34,9<CR>,则输出结果是( )。 
main() 
{ int x, y, z; 
scanf("%d,%d,%d", &x,&y,&z); 
if(x<y) 
if(y<z) printf("%d\n", z); 
else printf("%d\n", y); 
else if(x<z) printf("%d\n", z); 
else printf("%d\n", x); 
} 
A.34 B.12 C.9 D.不确定的值
16.下面程序的输出结果是( )。 
{ int x=2, y=-1, z=2; 
if(x<y) 
if(y<0) z=0; 
else z+=1; 
printf("%d\n",z); 
} 
A.3 B.1 C.2 D.0 
17.运行下面程序时,键盘输入2.0<CR> 则输出结果是( )。 
main() 
{ float a,b; 
scanf("%f",&a); 
·100·

if(a<0.0) b=0.0; 
else if((a<0.5)&&(a!=2.0)) b=1.0/(a+2.0); 
else if(a<10.0) b=1.0/2; 
else b=10.0; 
printf("%f\n", b); 
} 
A.0.000000 B.0.500000 C.1.000000 D.0.250000 
18.执行以下程序的输出结果是( )。 
main() 
{ int k=4, a=3, b=2, c=1; 
printf("%d\n", k<a?k:c<b?c:a); 
} 
A.4 B.3 C.2 D.1 
19.以下程序段运行结果是( )。 
int w=3, z=7, x=10; 
printf("%d\n", x>10 ? x+100 : x-10); 
printf("%d\n", w++||z++); 
printf("%d\n", w>z); 
printf("%d\n", w&&z); 
A.0 B.1 C.0 D.0 
1 1 1 1 
1 1 0 0 
1 1 1 0 
20.以下程序段的运行结果是( )。 
int x=-1, y=-1, z=-1; 
printf("%d,%d,%d,%d\n",(++x&&++y&&++z),x,y,z); 
A.0,0,-1,-1 B.0,0,0,0 
C.1,1,1,1 D.1,-1,-1,-1 
21.下面程序段的运行结果是( )。 
int x=1, y=1, z=1; 
x+=y+=z; 
printf("%d\n",x<y?y:x); 
A.3 B.2 C.4 D.不确定的值
22.运行下面程序的输出结果是( )。 
main() 
{ int a=5, b=60,c; 
if(a<b) { c=a*b; printf("%d*%d=%d\n",b,a,c); } 
·101·

else { c=b/a; printf("%d/%d=%d\n",b,a,c); } 
} 
A.60/5=12 B.300 C.60*5=300 D.12 
23.运行下面程序时,输入数据为2,13,5<CR>,则输出结果是( )。 
main() 
{ int a, b, c; 
scanf("%d,%d,%d",&a,&b,&c); 
switch (a) 
{ case 1: printf("%d\n",b+c); break; 
case 2: printf("%d\n",b-c); break; 
case 3: printf("%d\n",b*c); break; 
case 4: { if(c!=0) { printf("%d\n",b/c); break;} 
else { printf("error\n"); break; } 
} 
default: break; 
} 
} 
A.10 B.8 C.65 D.error 
24.运行下面程序时,若输入的数据为3,7,1<CR>,则输出结果是( )。 
main() 
{ float a,b,c,t; 
scanf("%f,%f,%f",&a,&b,&c); 
if(a>b) { t=a,a=b,b=t; } 
if(a>c) { t=a,a=c,c=t; } 
if(b>c) { t=b,b=c,c=t; } 
printf("%5.2f\n%5.2f\n%5.2f\n",a,b,c); 
} 
A.7.00 B.1.00 C.1 D.7 
3.00 3.00 3 3 
1.00 7.00 7 1 
25.运行下列程序时,若输入数据为123<CR>,则输出结果是( )。 
main() 
{ int num,i,j,k,place; 
scanf("%d",&num); 
if(num>99) place=3; 
else if(num>9) place=2; 
else place=1; 
i=num/100; 
j=(num-i*100)/10; 
k=(num-i*100-j*10); 
·102·