1、第 1 页 共 59 页全国计算机等级考试二级 C 语言考前复习资料(笔试)思维导图 1:C 语言程序设计知识结构第 2 页 共 59 页第一课 C 语言程序设计基础思维导图 2:第一课 C 语言程序设计基础第 3 页 共 59 页本课主要知识点:1.知识点:C 程序基础 C 语言是一种结构化程序设计语言。三种基本结构:顺序、选择、循环。例 1:(2010-09-11)以下关于结构化程序设计的叙述中正确的是( C)A) 一个结构化程序必须同时由顺序、分支、循环三种结构组成B) 结构化程序使用 goto 语句会很便捷C) 在 C 语言中,程序的模块化是利用函数实现的D) 由三种基本结构构成的程序
2、只能解决小规模的问题例 2:(2011-03-26)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是(A)A)C 语言程序仅可以编译执行B)C 语言程序仅可以解释执行C)C 语言程序既可以编译执行又可以解释执行D)以上说法都不对【解析】计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。 翻译的方式有两种,一个是编译,一个是解释。C 语言程序仅可以编译。例 3:(2011-03-26)以下叙述中错误的是( D)A)C 语言的可执行程序是由一系列机器指令构成的B)用 C 语言编写的源程序不能直接在计算机上
3、运行C)通过编译得到的二进制目标程序需要连接才可以运行D)在没有安装 C 语言集成开发环境的机器上不能运行 C 源程序生成的.exe 文件【解析】C 程序开发过程:编辑 (.c)编译(.obj )链接可执行文件(.exe)2.知识点:C 语言程序的构成 C 程序是由函数构成的,一个 C 程序有且仅有一个 main 函数。一个函数由两部分组成:函数的首部和函数体。函数体包括声明部分和执行部分。一个C 程序总是从 main 函数开始执行(即程序的入口) ,由 main 函数结束, (即程序的出口) 。例 1:(2010-03-12)以下叙述正确的是(B)A) C 语言程序是由过程和函数组成的B)
4、C 语言函数可以嵌套调用,例如:fun(fun(x)C) C 语言函数不可以单独编译D) C 语言中除了 main 函数,其他函数不可作为单独文件形式存在例 2:(2011-09-11)以下叙述中错误的是 (C ) A.C 语言编写的函数源程序,其文件名后缀可以是 CB.C 语言编写的函数都可以作为一个独立的源程序文件C.C 语言编写的每个函数都可以进行独立的编译并执行D.一个 C 语言程序只能有一个主函数3.知识点:标识符 命名规则: 标识符中只能包含字母 (a-z,A-Z),数字(0-9),下划线(_)。第一个字符必须是字母或下划线。 分类关键字(32 个)(有固定含义,不可改变)预定义标
5、识符(有特殊含义,可以改变)用户自定义的标识符 格式合法,不能使用关键字,见名知意例 1:(2010-03-13)以下 C 语言用户标识符中,不合法的是(D)A)_1 B)AaBc C)a_b D)a-b4.知识点:数据类型类型说明符:int,float,double 等语句定义符:if,for,while 等库函数的名字:printf , scanf 等编译预处理命令名:include 等都是小写第 4 页 共 59 页例 1:(2010-03-16)以下关于 C 语言数据类型使用的叙述中错误的是(D)A)若要准确无误差的表示自然数,应使用整数类型B)若要保存带有多位小数的数据,应使用双精度
6、类型C)若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D)若只处理 “真 ”和“假”两种逻辑值,应使用逻辑类型【解析】结构数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的,一个结构类型的值可以分解成若干个“成员”或“元素” ,每个“成员”都是一个基本数据类型或又是一个构造类型,C 项正确。C 语言没有逻辑类型,故 D项错误。例 2:(2011-03-26)定义无符号整数类为 UInt,下面可以作为类 UInt 实例化值的是(B)A)-369 B)369 C)0.369 D)整数集合1,2,3,4,5【解析】无符号整数类型为只有正整数和 0,所有选择 B。5.知识
7、点:常量 整型常量十进制整常数:没有前缀,其数码为 0-9。例如 65535,-568八进制整常数:以 0 开头,其数码为 0-7。例如 015十六进制整常数:以 0X 或 0x 开头,其数码为 0-9,A-F 或 a-f。例如 0x2A长整型数:整型常数后缀为 L 或 l。例如 358000L无符号数:整型常数后缀为 U 或 u。例如 158u 实型常量的形式小数形式:必须有小数点,小数点前后不能同时没有数字。指数形式:aEn(其中 a 表示十进制数, E 阶码标志,n 阶码) 。E 前 E 后必须有数字,E 后必为整数,可以带符号 。例如 2.1E-3、5E8例 1:(2011-09-13
8、)以下选项中关于 C 语言常量的叙述错误的是:(D)A.所谓常量,是指在程序运行过程中,其值不能被改变的量B.常量分为整型常量、实型常量、字符常量和字符串常量C.常量可分为数值型常量和非数值型常量D.经常被使用的变量可定义成常量【解析】根据常量的基本概念,则不难判断 A、B、C 均正确。例 1:(2009-04-13)以下选项中,能用作数据常量的是( D)A)o115 B)0118 C)1.5e1.5 D)115L【解析】八进制整常数以 0 开头,A 项错误;八进制整常数的数码味 0-7,B 项错误;实型常量的指数形式 E 后必为整数,故 C 项错误;长整型数后缀为 L 或 l,故 D 项正确
9、。例 2:(2010-03-26)以下选项中可用作 C 程序合法实数的是( A)A).1e0 B)3.0e0.2 C)E9 D)9.12E【解析】实型指数表示方式“E 前 E 后比有数,E 后必须是整数” ,故选 A 字符常量:用单引号括起来的一个字符。包括普通字符常量和转义字符。普通字符常量:如a 、 A、 1。转义字符:由一对单引号引起来的以开头的若干字符的组合。如n 表示回车换行、 表示反斜线符、 表示单引号符、 ”表示双引号、 ddd表示八进制数、 xhh表示十六进制数。例 3:(2010-09-15)以下选项中能表示合法常量的是( C)A)整数: 1,200 B)实数: 1.5E2.
10、0 C)字符斜杠: D)字符串:“007”【解析】表示整常量不能用逗号分隔,A 项错误;实型常量的指数形式 E 后必为第 5 页 共 59 页整数,故 B 项错误;007 是转义字符,只能用单引号括起来,不能用双引号或其他括号,故 D 项错误。例 4:(2010-03-26)以下选项中不能用作 C 程序合法常量的是( B)A)1,234 B)123 C)123 D)“x7G“【解析】A 中的, 在编译时会出错的,直接写成 1234 即可,B 是一个三位八进制数代表的字符,C 是一个数字常量, D 是一个字符串,其中x7 是一个一位十六进制数代表的字符,也即 D 中的字符串是两个字符,如果 si
11、zeof 的话是 3,如果 strlen 的话是 2。6.知识点:变量 整型变量和实型变量以考试标准 Viusal c+6.0 为例,说明各类型变量所占的位数。 类型所占位数所占字节数类型所占位数所占字节数short 16 2 unsigned int 32 4int 32 4 unsigned long 32 4long 32 4 float 32 4unsigned short 16 2 double 64 8例 1:(2010-09-38)有以下程序#include main(0)int s,t,A=100;double B=6;s=sizeof(A); t=sizeof(B);prin
12、tf(“%d,%dn”,s,t);在 VC6 平台上编译运行,程序运行后的输出结果是(C)A)2,4 B)4,4 C)4,8 D)10,6【解析】在 VC6 平台上,int 型占 4 个字节,double 型占 8 个字节,故答案是C。 字符变量:一个字符变量只能存放一个字符。字符串不能存放在字符变量中,只能用字符数组或指针存放字符串。例 1:(2009-09-22)有以下定义语句,编译时会出现编译错误的是 (C)A)char a=a; B)char a=n; C)char a=aa; D)char a=x2d;【解析】一个字符变量只能存放一个字符,A 项字符变量存放的是普通字符常量;B、D
13、项字符变量存放的转义字符;字符常量只能是单个字符,不能是字符串, aa不是单个字符,故 C 项错误。7.知识点:ASCII 码 0的 ASCII 码值为 48;A的 ASCII 码值为 65;a的 ASCII 码值为 97。 大写字母与小写字母的 ASCII 码值相差 32。例 1:(2009-09-23)有以下程序#include main()char c1,c2;c1=A+8-4;c2=A+8-5;printf(“%c,%dn”,c1,c2);第 6 页 共 59 页已知字母 A 的 ASCII 码为 65,程序运行后的输出结果是(A )A)E,68 B)D,69 C)E,D D)输出无定
14、值【解析】 A的 ASCII 码值为 65, 8的 ASCII 码值为 56, 4的 ASCII 码值为52,65+56-52=69,对应于字符E。 5的 ASCII 码值为 53,65+56-53=68,对应于字符D。字符变量 c1 以%c 格式输出,即E。字符变量 c2 以%d 格式输出,即68。故答案是 A。8.知识点:进制转换 十进制转换成二进制、八进制、十六进制:将十进制的数字除以 2(8、16) ,得到的商数继续除以 2,直到商为 0,然后将各次相除所得的余数从后往前排列。 二进制、八进制、十六进制转换成十进制:将二(八、十六)进制数的每一位数从高位到低位乘以 2 的 n-1 次幂
15、,n 为该位所在的位数。 二进制与八进制之间的转换:每个八进制数字转换成 3 位二进制数字。 二进制与十六进制之间的转换:每个十六进制数字转换成 4 位二进制数字。例 1:(2010-09)以下程序运行后的输出结果是 2008 。#include main()int a=200,b=010;printf(“%d%dn”,a,b) ;【解析】八进制数 010 转换成十进制数为 8,按“%d%d”格式分别输出 a、b,即 2008。9.知识点:运算符的优先级级别由大到小:( 逻辑)非 算(术运算符) 关( 系运算符) (逻辑)与 (逻辑)或 条(件运算符 ) 赋( 值运算符)10.知识点:强制类型
16、转换运算符 一般形式:(类型说明符) (表达式) 功能:把表达式的运算结果强制转换成类型说明符所表示的类型例 1:(2009-04-06)表达式(int)(double)(5/2)+2.5)的值是 4。【解析】(int)(double)(5/2)+2.5 )(int)(double)2)+2.5)(int)(2.000000+2.5)(int)(4.500000) 4。例 2:以下程序运行后的输出结果是 () 。main() int a;a=(int)(double)(3/2)+0.5+(int)1.99*2);printf(“%dn“,a);答案:3【解析】(3/2)=1,(double)(
17、3/2)+0.5=1.5,(int)1.99*2=2,所以(double)(3/2)+0.5+(int)1.99*2=3.5,故 a=3。11.知识点:算术运算符: +、*、/、%:参与运算的量均为整型。/:当除号左右两边都是整数的时候,商也要是整数,如果不是整数则舍弃小数部分。当参与运算量有一个为实型,则商为 double 型。例 1:(2011-09-14)若有定义语句:int a=10;double b=3.14;,则表达式A+a+b值得类型是 (C)A.char B.int C.double D.float【解析】各种类型数据混合运算时,最终结果的类型可依据以下转换规律:char -
18、short - int - long - float - double第 7 页 共 59 页例 1:(2011-09-15)如有定义语句:int x=12,y=8,z;,在其后执行语句 z=0.9+x/y,则 z 的值为 (B)A.1.9 B.1 C.2 D.2.4【解析】x,y,z 均为整型变量,因此 x/y 结果为 1,即 z=0.9+1=1.9,z 最终结果为1例 1:(2010-09-14)有以下定义:int a;long b;double x,y;则以下选项中正确的表达式是(A)A)a%(int)(x-y) B)a=x!=y; C) (a*y)%b D)y=x+y=x【解析】参与%
19、运算的左右操作数均为整型,故 A 项正确, C 项错误。B 项是赋值语句,不是表达式。赋值运算符左边必须是变量,而不是表达式,而 D 项中x+y=x,错误。12.知识点:逗号表达式 一般形式:表达式 1,表达式 2表达式 n 求值过程:自左向右依次求解,最后一个表达式的值为整个逗号表达式的值。例 1:(2009-04-14)设有定义:int x=2;以下表达式中,值不为 6 的是()A)x*=x+1 B)x+,2*x C)x*=(1+x) D)2*x,x+=2【解析】A 项 x=x*(x+1)=2*(2+1)=6;B 项 x+后,x 的值为 3,2*x 的值为 6,整个逗号表达式的值为 6;C
20、 项 x=x*(1+x)=2*3=6;D 项 x=x+2=2+2=4,整个逗号表达式的值为 4。故答案是 D。13.知识点:自增自减运算符+i i 自加 1 后再参与运算 i+ i 参与运算后再自加 1-i i 自减 1 后再参与运算 i- i 参与运算后再自减 1+和- -的运算对象只能为变量,不能是常量或表达式。例 1:(2009-09-06)若有定义语句:int a=5;则表达式:a+的值是 5 。【解析】表达式 a+的值是 a 未加 1 之前的值,即 5。. 当+ 或与 printf 语句结合时,若 +/-x 的形式,则先自增/ 自减,然后输出;若 x+/-的形式,则先输出 x 原值,
21、在进行自增/自减操作。例 2:(2011-03-26)有以下程序#include main() int x=011;printf(“%dn“,+x);程序运行后的输出结果是(C)A)12 B)11 C)10 D)9【解析】011 是一个八进制的数,转为十进制则为 1*8+1=9;+x 是 x 先自增 1 再参与其他运算,所以先 x 自增 1 为 10 再输出即为 10,故选 C。14.知识点:赋值表达式 一般形式:变量名=表达式 赋值运算符左边必须是变量,而不是表达式。例 1:(2010-03-14)若有定义:double a=22;int i=0,k=18;则不符合 C 语言规定的赋值语句是
22、( C)A)a=a+,i+; B)i=(a+k)=、 c=c_D_;printf(“%dn”,c);若要使程序的运行结果为 248,应在下划线处填入的是A)2 B)|248 C),执行表达式( k1=k1k2)double y=3.141593;printf(“%d%8.6f”,x,y);的输出结果是(A)A)123.141593 B)12 3.141593 C)12,3.141593 D)123.1415930【解析】以%8.6f 格式输出,即输出的总宽度为 8,小数的位数为 6。19.知识点:格式输入函数 scanf()第 10 页 共 59 页(1)一般形式:scanf(“ 格式控制字符
23、串”, 地址列表) ;(2)若格式控制字符串中有非格式字符串,则按原样输入。若格式控制字符串中没有非格式字符作输入数据之间的间隔,则可用空格、Tab、回车作间隔。例 1:(2011-09-16)若有定义:int a,b;,通过语句 scanf(“%d;%d”,能把整数 3 赋给变量 a,5 付给变量 b 的输入数据是 A.3 5 B.3,5 C.3; 5 D.35【解析】scanf 格式字符串中两个 %d 之间带有非格式字符分号,运行时应原样输入。例 1:(2005-04-19)有以下程序main()int m,n,p;scanf(“m=%dn=%dp=%d”,printf(“%d%d%dn”
24、,m,n,p);若想从键盘上输入数据,使变量 m 中的值为 123,n 中的值为 456,p 中的值为789,则正确的输入是(A)A)m=123n=456p=789 B)m=123 n=456 p=789C)m=123,n=456,p=789 D)123 456 789【解析】scanf(“m=%dn=%dp=%d”, 格式控制字符串中有非格式字符串,则按原样输入,故答案是 A。例 2:(2011-03-26)有以下程序段char name20;int num;scanf(“name=%s num=%d“,name;当执行上述程序,并从键盘输入:name=Lili num=1001后,name
25、 的值(A)A)Lili B)name=Lili C)Lili num= D)name=Lili num=1001【解析】scanf 中格式字符串的非格式字符串原样输入,如其中的name=和num=,所以接受到的 name 值是后面的 Lili,num 值为 1001。故选 A。(3)在输入字符数据时,若格式控制字符串中无非格式字符,则认为所有输入的字符均为有效字符。空格会被当作字符赋值给变量。例 3:(2009-04-23)有以下程序#include main()int a1,a2; char c1,c2;scanf(“%d%c%d%c”,printf(“%d,%c,%d,%c”,a1,c1
26、,a2,c2);若想通过键盘输入,使得 a1 的值为 12,a2 的值为 34,c1 的值为字符 a,c2 的值为字符 b,程序输出结果是:12,a,34,b 则正确的输入格式是(以下_代表空格,代表回车)A)12a34b B)12_a_34_b C)12,a,34,b D)12_a34_b【解析】空格会被当作字符赋值给变量,故 B、D 错误;C 项中逗号会被当作字符赋值给变量,故 C 项错误。(4)格式字符串 一般形式:%*输入数据宽度 长度类型 *表示该输入项,读入后不赋予相应的变量。 输入数据宽度:用十进制数指定输入的字符数。例 4:(2010-09-07)有以下程序#include m
27、ain()第 11 页 共 59 页int x,y;scanf(“%2d%ld”, printf(“%dn”x+y);程序运行时输入:1234567 程序的运行结果是 34579 。【解析】%2d 输入的数据宽度为 2,x 的值为 12,y 的值为 34567,x+y=34579。例 5:(2009-04-16)若有定义语句:double x,y,*px,*py;执行了px= B)scanf(“%f%f”,C)scanf(“%lf%le”,px,py); D)scanf(“%lf%lf”,x,y);【解析】A、D 项地址列表,应为scanf(“%d“,c2=c1+9;printf(“%c%cn
28、“,c1,c2);若程序运行时从键盘输入 48,则输出结果为 (09) 。【解析】输入 48,则 c1=48,c2=48+9,以字符输出 c1 和 c2,则为输出 ASCII 码为 48 和 57 对应的字符,分别为 0 和 9。20.知识点:字符输出函数 putchar()一般形式:putchar(a);putchar(101);21.知识点:字符输入函数 getchar()一般形式:getchar();或 ch=getchar();例 1:(2010-03-15)有以下程序#include main()char a,b,c,d;scanf(“%c%c”,c=getchar(); d=get
29、char();printf(“%c%c%c%cn”,a,b,c,d);当执行程序时,按下列方式输入数据(从第 1 列开始, 代表回车,注意:回车也是一个字符)1234则输出结果是(B)A)1234 B)12 C)12 D)123 34【解析】以%c 格式读取一个字符,以 getchar()形式也是读取一个字符。空格会被当作字符赋值给变量。所以,a=1,b=2,c=n,d=3。 getchar 经常作为 while 循环条件,判断输入哪一个字符时,循环结束。例如,输入字符串,直到输入0 ,程序结束,则可写成 while( getchar()!=0)例 2:(2011-03-26)有以下程序段ma
30、in() while( getchar()!=n);以下叙述中正确的是(C)第 12 页 共 59 页A)此 while 语句将无限循环B) getchar()不可以出现在 while 语句的条件表达式中C)当执行此 while 语句时,只有按回车键程序才能继续执行D)当执行此 while 语句时,按任意键程序就能继续执行【解析】while 条件表达式 getchar()!=n只要输入的字符不是回车,就一直执行循环,而循环内是一个空语句,所以按回车键程序才能继续执行,选择 C。第二课 选择结构与循环结构第 13 页 共 59 页本课重要知识点: 1.知识点:if 语句第 14 页 共 59 页
31、 if(表达式) ,其中表达式可以是任意合法的 C 语言表达式。例 1:(2011-09-19)下列条件语句中输出结果与其他语句不同的是( D)A.if(a) printf(“%dn”,x); else printf(“%dn”,y);B.if(a=0 ) printf(“%dn”,y); else printf(“%dn”,x);C.if(a!=0 ) printf(“%dn”,x); else printf(“%dn”,y);D.if(a=0) printf(“%dn”,x); else printf(“%dn”,y);【解析】作为 if 语句的条件,a 等价于 a!=0,因此 A 和 C
32、 是等价的。例 2:(2011-03-26)if 语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是(D)A)必须是逻辑值 B)必须是整数值 C)必须是正数 D)可以是任意合法的数值【解析】表达式不限于关系表达式、逻辑表达式,也可以是任意的数值类型,其中非 0 为真,0 为假。故选 D。 对于单个 if 语句,其后跟随的受 if 控制的只能是 1 个语句或者是 1 个复合语句。例 1:(2009-09-17)设有定义:int a=1,b=2,c=3;以下语句中执行效果与其它三个不同的是(C)A)if(ab) c=a,a=b,b=c; B)if(ab) c=a,a=b,b
33、=c;C)if(ab) c=a;a=b;b=c ; D)if(ab) c=a;a=b;b=c;【解析】对于单个 if 语句,其后跟随的受 if 控制的只能是 1 个语句或者是 1 个复合语句。故 C 项,if(ab)条件成立时,语句 c=a;才被执行,而无论 if(ab)条件成立与否,语句 a=b;b=c;都会被执行。A、B、D 项,只有 if(ab)条件成立时,语句c=a; a=b;b=c; 才被执行。例 2:(2011-03-26)以下程序运行后的输出结果是 200 main() int x=10,y=20,t=0;if(x=y)t=x;x=y;y=t;printf(“%d %dn“,x,
34、y);【解析】x=10,y=20,所以 x=y 为 false,t=x;不执行,直接执行 x=y;y=t;x 为20,y 为 0。注意和 if(x=y)t=x;x=y;y=t;区别。 当多个 if(表达式) 单分支形式并行出现时,其执行顺序是:先判断第一 if 单分支的条件,如果为真,执行其后面的语句,执行完后,继续向下执行。判断第二个 if 单分支语句,依次类推。如果第一个 if 表达式的值为假,则不执行其后的语句,而去判断第二个 if 单分支条件。例 1:(2011-03-26)有以下程序main() int x;scanf(“%d“,if(x15) printf(“%d“,x-5);if
35、(x10) printf(“%d“,x);if(x5) printf(“%dn“,x+5);若程序运行时从键盘输入 12,则输出结果为 1217 【解析】输入 12,比较不大于 15 所以不执行 if(x15)内的语句;大于 10 执行printf(“%d“,x);输出 12;大于 5 执行 printf(“%d“,x+5);输出 17。2.知识点:if 语句的嵌套 内嵌结构中,else 总是与前面最近的且未曾配对的 if 语句配对,组成一对 if-else 语句。例 2:(2010-09-18)有以下程序#include main()int a=1,b=0;if(!a) b+;第 15 页
36、共 59 页else if(a=0) if(a) b+=2;else b+=3;printf(“%dn”,b);程序运行后的输出结果是(A )A)0 B)1 C) 2 D)3【解析】else 总是与前面最近的且未曾配对的 if 语句配对,组成一对 if-else 语句。即 else b+=3;与 if(a) b+=2;配对。if(!a) 不成立,不执行 b+;else if(a=0)不成立,不执行 if(a) b+=2;else b+=3;故直接执行 printf(“%dn”,b);,输出结果为 0。3.知识点:条件表达式 一般形式:表达式 1?表达式 2:表达式 3 执行过程:表达式 1 的
37、值为真,条件表达式取表达式 2 的值;表达式 1 的值为假,条件表达式取表达式 3 的值。例 1:(2009-09-19)以下程序段中,与语句:k=ab?(bc?1:0):0;功能相同的是(A)A)if(ab) B) if(ab)|(bc) k=1;else k=0; else k=0;C) if(ab) k=1;else if(bc) k=1;else k=0;【解析】条件运算符的结合性是从右至左。当 bc 时,bc?1:0 的值为1,k=ab?1:0,同时当 ab 时,ab?1:0 的值为 1,此时 k=1。否则 k=0。故答案为 A。4.知识点:switch 语句 switch 语句的圆
38、括号中的表达式的值必须是整型或字符型,不能为实型。 case 后的表达式可以是求得整型和字符型的常量表达式 ,但不能含有变量。 default 的位置对程序的执行没有影响。例 1:(2010-09-19)若有定义语句 int a,b;double x;则下列选项中没有错误是(C)A)switch(x%2) B) switch(int)x%2.0)case 0:a+;break; case 0:a+;break;case 1:b+;break; case 1:b+;break;default:a+;b+; default:a+;b+; C)switch(int)x%2) D)switch(int
39、)(x)%2)case 0:a+;break; case 0.0:a+;break;case 1:b+;break; case 1.0:b+;break;default:a+;b+; default:a+;b+; 【解析】switch 语句的圆括号中的表达式的值必须是整型或字符型,不能为实型。x 是 double 型,x%2 不合法,A 项错误。(int)x%2.0 不合法,B 项错误。(int)x%2值为整型,故 C 项正确。case 后面的表达式可以是求得整型量和字符型量的常量表达式,故 D 项错误。例 2:(2009-09-18)有以下程序#include 第 16 页 共 59 页ma
40、in()int c=0,k;for(k=1;k0) switch(s) case1:printf(“%d“,s+5);case2:printf(“%d“,s+4); break;case3:printf(“%d“,s+3);default:printf(“%d“,s+1);break;scanf(“%d“, 运行时,若输入 1 2 3 4 5 0,则输出结果是(A)A)6566456 B)66656 C)66666 D)6666656【解析】while 循环 smain() int a=7;while(a-);printf(“%dn”,a);程序运行后的输出结果是 (B)A.- 1 B.0 C
41、.1 D.7【解析】此类题一定要注意标点符号的位置,while(a-);该行末尾的分号即为一条空语句,来作为 while 的循环体。第 17 页 共 59 页例 1:(2010-09-20)有以下程序#include main()int a=1,b=2;while(amain()int y=10;while(y-);printf(“y=%dn”,y);程序执行后的输出结果是(B)A)y=0 B)y=-1 C)y=1 D)while 构成无限循环【解析】while(y-) 后面的分号是一个空语句,当 y-不等于 0 时执行空语句,当 y等于 0 时,执行 printf 函数输出 y 值,当 y等
42、于 0 时退出循环,此时 y 值变成-1。 如果第一次判断表达式的值为 0,则循环一次也不执行。即 while 循环体最少执行 0 次。例 4:(2011-03)当执行下列程序时,输入 1234567890,则其中 while 循环体将执行 0 次。#include main()char ch;while(ch=getchar()=0) printf(#);【解析】ch=getchar(),ch 第一次读入的值为1,故 while(ch=getchar()=0)不成立,循环一次也不执行。 while 循环与 switch 结构例 5、 (2011-03)有以下程序main() int s;sc
43、anf(“%d“,while(s0) switch(s) case1:printf(“%d“,s+5);第 18 页 共 59 页case2:printf(“%d“,s+4); break;case3:printf(“%d“,s+3);default:printf(“%d“,s+1);break;scanf(“%d“, 运行时,若输入 1 2 3 4 5 0,则输出结果是(A)A)6566456 B)66656 C)66666 D)6666656【解析】:while 循环 smain()int a=1,b=7;dob=b/2; a+=b;while(b1);printf(“%dn”,a); d
44、o-while 循环体最少执行 1 次。例 2:(2007-09)若变量已正确定义,有以下程序段i=0;do printf(“%d,”,i); while(i+);printf(“%dn”,i); 其输出结果是 (B)A)0,0 B)0,1 C)1,1 D)程序进入无限循环【解析】执行 do-while 循环,输出 i 的值为 0,接着判断循环条件 i+,i+ 的值为 0,i 的值为 1,故答案是 B。7.知识点:for 语句例 1:(2011-03)有以下程序main() char b,c; int i;b=a; c=A;for(i=0;imain()第 19 页 共 59 页int a=1
45、,b=2;for(;amain()int a=2,3,5,4,i;for(i=0;i第 20 页 共 59 页main()int i,n=0,0,0,0,0;for(i=1;imain()int i,j,m=1;for(i=1;i0;j-)if(i*j3) break;m*=i*j;printf(“m=%dn”,m);程序运行后的输出结果是 ( A)A)m=6 B)m=2 C)m=4 D)m=5例 2:(2011-03)有以下程序main() int x=1,y=0;if(!x) y+;else if(x=0)if (x) y+=2;else y+=3;printf(“%dn“,y);程序运行
46、后的输出结果是 (D)A)3 B)2 C)1 D) 0【解析】:if-else 的嵌套,注意 else 总是与前面最近的且未配对的 if 语句配对组合。if(!x)中 x 为 1,!x 为 0 为 false,即 if(!x) 后的语句不执行, else if(x=0),x 为 1 也不等于 0,也不成立,故 else if 内的语句也不执行,而 if (x) y+=2;else y+=3;均为 else if 内的语句。所以直接输出 y 为 0,故选 D。9.知识点:break 语句 功能:跳出整个 switch 语句;跳出循环体,防止死循环。 break 语句只能出现在 switch、while、do-while 、for 循环中,不能出现在其他地方。 作用范围:所在循环体从属的最内层循环,而不是外层的某个循环。6.知识点:continue 语句第 21 页 共 59 页 功能:结束本次循环,接着判断是否继续下一次循环。 continue 语句只能出现在 while、do-while、for 循环中。 作用范围:所在循环体从属的最内层循环,而不是外层的某个循环。例 1:(2009-04-09)以下程序运行后的输出结果是 s=0 #include main()int k=1,s