《修改过的2012年上半年全国计算机等级考试二级C语言考前复习资料(笔试+机试).docx》由会员分享,可在线阅读,更多相关《修改过的2012年上半年全国计算机等级考试二级C语言考前复习资料(笔试+机试).docx(108页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、(重庆虎贲教育)2012年上半年全国计算机等级考试二级C语言考前复习资料(笔试)文件define tpedef include 物趟旗鹦思维导图I: c语言程序设计知识结构第一课C语言程序设计基础int (2tt) 螂X亠,眦t用布翅曲曲昭司 、字郷 char(咻齟礒剧!畑!微斷凍爲卿头)型毅司前 動隱魚歯噺女)1.12/価可鱷21E5 JSM ;-A - |:普辭絡、/堇散镯;字縄1 /山 圭芹堂后、!-雌)+毎负婢眦)azeo!単目运算符.林丽,11 也寵騎,1/=关律鞠双職騎I ”飜離聯A,爲算得Yy _11嘀&蜩愛鮑真符:蹒綱。?:三鹿鞠、%Z F 二,雖嘱#J携:難 逗号磔符【視準迷
2、賦一,思维导图2:第一课C语言程序设计基础本课主要知识点:1.知识点:C程序基础 C语言是 种结构化程序设计语言。三种基本结构:顺序、选择、 例!: (2010-09-11)以下关于结构化程序设计的叙述中正确的是(C)sc椒蝴渊牺蝴,船/ 回. 丄:啖巒雕锹 飢&鼬銹册燜的臓 1(觥/ pitta禰整) 库酸!、曲网解)報11费学费,就喃群L涌一晩皿,前帽臟,魏対 宇綿無錢y瓯崎栅颔电、施用?件)抹度粧滿群歌即自淑鹹(靓鹹孰 循环。A) 个结构化程序必须同时由顺序、分支、循环三种结构组成B)结构化程序使用goto语句会很便捷在c语言中,程序的模块化是利用函数实现的D)由三种基本结构构成的程序只
3、能解决小规模的问题例2: (2011-03-26)计算机髙级语言程序的运行方法有编译执行和解释执行两种,以下叙述 中正确的是(A)A)C语言程序仅可以编译执行B)C语言程序仅可以解释执行C)C语言程序既可以编译执行又可以解释执行D)以上说法都不对【解析】计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻 译成机器语言,计算机才能执行高级语言编写的程序。翻译的方式有两种,个是编译, 一个是解释。C语言程序仅可以编译。例3: (2011-03-26)以下叙述中错误的是(D)A)C语言的可执行程序是由一系列机器指令构成的B)用C语言编写的源程序不能宜接在计算机上运行C)通过编译
4、得到的二进制目标程序需要连接可以运行D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件【解析】C程序开发过程:编辑(.c)编译(.obj)链接可执行文件(.exe)2.知识点:C语言程序的构成 C程序是由函数构成的,个C程序有且仅有一个main函数。个函数由两部分组成:函数的首部和函数体。函数体包括声明部分和执行部分。个C程序总是从main函 数开始执行(即程序的入口),由main函数结束,(即程序的出口).例1: (2010-03-12)以下叙述正确的是(B)A) C语言程序是由过程和函数组成的B) C语言函数可以嵌套调用,例如:fun(fun(x) C语言函数不可以
5、单独编译D) C语言中除了 main函数,其他函数不可作为单独文件形式存在例2: (2011-09-11)以下叙述中错误的是(C)A.C语言编写的函数源程序,其文件名后缀可以是CB.C语言编写的函数都可以作为个独立的源程序文件C.C语言编写的每个函数都可以进行独立的编译并执行D.个C语言程序只能有一个主函数3 .知识点:标识符 命名规则:标识符中只能包含字母(a-z,A-Z),数字(0-9),下划线0。 第一个字符必须是字母或下划线。 分类关键字(32个) 都 (有固定含义,不可改变) 联丿小类型说明符:int, float, double等语句定义符:if,for, while等库函数的名字
6、:printf , scanf等预定义标识符(有特殊含义,可以改变)编译预处理命令名:include等用户自定义的标识符i格式合法,覚不能使用关键字,出见名知意例1: (2010-03-13)以下C语言用户标识符中,不合法的是(D)A)_lB)AaBcC)a_bD)a-b4 .知识点:数据类型例1: (2010-03-16)以下关于C语言数据类型使用的叙述中错误的是(D)A)若要准确无误差的表示自然数,应使用整数类型B)若要保存带有多位小数的数据,应使用双精度类型C)若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D)若只处理“真”和“假”两种逻辑值,应使用逻辑类型【解析】结
7、构数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的,个结 构类型的值可以分解成若干个“成员”或“元素”,每个“成员”都是个基本数据类型或 又是一个构造类型,C项正确。C语言没有逻辑类型,故D项错误。例2: (2011-03-26)定义无符号整数类为Ulnt,下面可以作为类Ulnt实例化值的是(B)A)-369B)369C)0.369D)整数集合1,2,3,4,5【解析】无符号整数类型为只有正整数和。,所有选择B。5 .知识点:常量 整型常量十进制整常数:没有前缀,其数码为0-9。例如65535, -568进制整常数:以开头,其数码为0-7。例如015十六进制整常数:以0X或Ox开头
8、,其数码为0-9, A-F或a-f。例如Ox2A长整型数:整型常数后缀为L或1。例如358000L无符号数:整型常数后缀为U或u。例如158u 实型常量的形式小数形式:必须有小数点,小数点前后不能同时没有数字。指数形式:aEn (其中a表示十进制数,E阶码标志,n阶码)。E前E后必须有数字,E后 必为整数,可以带符号。例如2.1E-3、5E8例1: (2011-09-13)以下选项中关于C语言常量的叙述错误的是:(D)A.所谓常量,是指在程序运行过程中,其值不能被改变的量B.常量分为整型常量、实型常量、字符常量和字符串常量C.常量可分为数值型常量和非数值型常量D,经常被使用的变量可定义成常量【
9、解析】根据常量的基本概念,则不难判断A、B、C均正确。例1: (2009-04-13)以下选项中,能用作数据常量的是(D)A )ol 15B )0118C)1.5el.5D)115L【解析】进制整常数以开头,A项错误:进制整常数的数码味0-7, B项错误:实型 常量的指数形式E后必为整数,故C项错误;长整型数后缀为L或1,故D项正确。例2: (2010-03-26)以下选项中可用作C程序合法实数的是(A)A).leO B)3.0e0.2 C)E9D)9.12E【解析】实型指数表示方式“E前E后比有数,E后必须是整数”,故选A 字符常量:用单引号括起来的一个字符。包括普通字符常量和转义字符。普通
10、字符常量:如a、A、。转义字符:由一对单引号引起来的以、开头的若干字符的组合。如n表示回车换行、 表示反斜线符、表示单引号符、表示双引号、ddd表示八进制数、xhh表示 十六进制数。例3: (2010-09-15)以下选项中能表示合法常量的是(C)A)整数:1,200B)实数:1.5E2.0 C)字符斜杠: D)字符串:“007”【解析】表示整常量不能用逗号分隔,A项错误;实型常量的指数形式E后必为整数,故B 项错误;00是转义字符,只能用单引号括起来,不能用双引号或其他括号,故D项错误。 例4: (2010-03-26)以下选项中不能用作C程序合法常量的是(B)A) 1,234B) 123C
11、)123D)x7G【解析】A中的,在编译时会出错的,直接写成1234即可,B是个三位八进制数代表 的字符,C是个数字常量,D是个字符串,其中x7是个一位十六进制数代表的字符, 也即D中的字符串是两个字符,如果sizeof的话是3,如果strlen的话是2。6.知识点:变量 整型变量和实型变量以考试标准Viusal C+6.0为例,说明各类型变量所占的位数。类型所占 位数所占 字节数类型所3 位数所占 字节数short162unsigned int324int324unsigned long324long324float324unsigned short162double648例1: (2010
12、-09-38)有以下程序#include main(0)int s,t,A=100;double B=6;s=sizeof(A); t=sizeof(B);printf(*%d,%dn*s,t);在VC6平台上编译运行,程序运行后的输出结果是(C)A)2,4B)4,4C)4,8D)10,6【解析】在VC6平台上,int型占4个字节,double型占8个字节,故答案是C。 字符变量:个字符变量只能存放个字符。字符串不能存放在字符变量中,只能用字 符数组或指针存放字符串。例1: (2009-09-22)有以下定义语句,编译时会出现编译错误的是(A)chara=a; B)char a= n; C)
13、char a= aa; D) char a= x2d,;【解析】一个字符变量只能存放个字符,A项字符变量存放的是普通字符常量;B、D项 字符变量存放的转义字符;字符常量只能是单个字符,不能是字符串,aa不是单个字符, 故C项错误。7 .知识点:ASCII码 的ASCII码值为48; W的ASCII码值为65:匕,的ASCI!码值为97。 大写字母与小写字母的ASCII码值相差32。例1; (2009-09-23)有以下程序#include main()char cl,c2;cl二A+84;c2=A+85;printf(44%c,%dn,c 1 ,c2);已知字母A的ASCI!码为65,程序运行
14、后的输出结果是(A)A)E,68B)D,69 C)E,DD)输出无定值【解析】的ASCII码值为65, 8的ASCII码值为56, 4的ASCI!码值为52,65+56-52=69, 对应于字符E。5的ASCII码值为53,65+56-53=68,对应于字符,D、字符变量cl以c格 式输出,即,E字符变量c2以d格式输出,即68。故答案是A。8 .知识点:进制转换 十进制转换成二进制、八进制、十六进制:将十进制的数字除以2 (8、16),得到的商 数继续除以2,直到商为,然后将各次相除所得的余数从后往前排列。 二进制、八进制、十六进制转换成十进制:将二(、十六)进制数的每一位数从高位 到低位乘
15、以2的n-1次哥,n为该位所在的位数。 二进制与八进制之间的转换:每个进制数字转换成3位二进制数字。 二进制与十六进制之间的转换:每个十六进制数字转换成4位二进制数字。例1: (2010-09)以下程序运行后的输出结果是20080#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 +0.5+(int) 1.99*2);printf(%dn,a);)答案:3【解析】(3/2)= 1, (doub
17、le)。+0.5= 1.5, (int) 1.99*2=2,所以(double)(3/2)+0.5+(int) 1.99*2=3.5, 故 a=3oH.知识点:算术运算符:+、/、%:参与运算的量均为整型。/:当除号左右两边都是整数的时候,商也要是整数,如果不是整数则舍弃小数部分。当参 与运算量有一个为实型,则商为double型。例1: (2011-09-14)若有定义语句:inta=10;doubleb=3.14;,则表达式A +a+b值得类型是(C)A.charB.intC.doubleD.float【解析】各种类型数据混合运算时,最终结果的类型可依据以下转换规律:char - short
18、 - int - long - float - double例1:(2011-09-15)如有定义语句:int x=12,y=8,z;,在其后执行语句z=0.9+x/y,则z的值为(B)A.1.9B.1C.2D.2.4【解析】x,y,z均为整型变量,因此x/y结果为1,即z=0.9+l = 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)%bD)y=x+y=x【解析】参与运算的左右操作数均为整型,故A项正确,C项错误。B项是
19、赋值语句,不 是表达式。赋值运算符左边必须是变量,而不是表达式,而D项中x+y=x,错误。12 .知识点:逗号表达式 一般形式:表达式1,表达式2表达式n 求值过程:自左向右依次求解,最后一个表达式的值为整个逗号表达式的值。例1: (2009-04-14)设有定义:int x=2;以下表达式中,值不为6的是(D)A)x*=x+1B)x+, 2*xC)x*=(l+x)D)2*x, x+=2【解析】A项x=x*(x+l)=2*(2+l)=6; B项x+后,x的值为3,2*x的值为6,整个逗号表达 式的值为6; C项x=x*(l+x)=2*3=6; D项x=x+2=2+2=4,整个逗号表达式的值为4
20、。故答 案是D。13 .知识点:自增自减运算符+i i自加1后再参与运算i+i参与运算后再自加1-i i自减1后再参与运算1- i参与运算后再自减1+和一-的运算对象只能为变量,不能是常量或表达式。例1: (2009-09-06)若有定义语句:int a=5!则表达式:a+的值是5。【解析】表达式a+的值是a未加1之前的值,即5。.当+或一与printf语句结合时,若+/-X的形式,则先自增/自减,然输出;若X+/-的形式,则先输出x原值,在进行自增/自减操作。例2: (2011-03-26)有以下程序#include main() int x=011;printf(%dn,+x);程序运行后
21、的输出结果是(C)A)12B)llC)10D)9【解析】011是一个进制的数,转为十进制则为1 *8+1=9; +x是x先自增1再参与其他 运算,所以先x自增1为10再输出即为!0,故选C。14.知识点:赋值表达式 一般形式:变量名=表达式 赋值运算符左边必须是变量,而不是表达式。例1: (2010-03-14)若有定义:double a=22;int i=0, k=18;则不符合C语言规定的赋值 语句是(A)a=a+, i+; B)i= (a+k) =-. &=、A一1=例 2: (2010-09-16)表达式 a+=a-=a=9 的值是(D)A)9 B) -9018D)0【解析】赋值运算符
22、的结合性是从右到左,a=9fa=a-9=0-a=a+0=0+0=0。故答案是D。15.知识点:位运算 按位与运算& 规则:0&0=00&1=0 按位或运算 规则:0|0=00 1=1 按位异或运算 规则:0A0=0 OA1=1 求反运算、 规则:0=11=0 左移运算1&0=01&1=11|0=11|1=11AO=11A1=O规则:把左边的运算数的各二进位全部左移若干位,高位丢弃,低位补。左移一位相当 于该数乘以2。左移n位相当于该数乘以2例1: (2010-09-40)有以下程序 ftinclude main()short c=124;c=cD;printf( %dn , c);I若要使程序
23、的运行结果为248,应在下划线处填入的是A)2B) 1248O&0248D)l【解析】左移一位相当于该数乘以2, 1241相当于124乘以2,等于248。故答案是D。 例2: (2009-04-39)有以下程序#include main()int a=5,b=l,t;t=(a2)lb;printf(4t%dn,t);)程序运行后的输出结果是(A)A)21 B)ll C)6D)1【解析】左移2位相当于该数乘以2之。52相当于5乘以4等于20。20 1=21。故答案是A。 右移运算把左边的运算数的各二进位全部右移若干位。高位补,低位丢弃。右移一位相当于该数 除以2。右移n位相当于除以2例3: (2
24、009-09-39)若有以下程序段int r=8;printf(dn,rl);输出结果是(C)A)16B)8C)4D)2【解析】右移一位相当于该数除以2。81相当于除以2,等于4,故答案是C。16 .知识点:关系运算符和表达式例1: (2010-09-08)在C语言中,当表达式值为时表示逻辑值“假”,当表达式值为非时表示逻辑侑“真”。例2 : ( 2010-03-06 )设x为int型变量,请写出一个关系表达式(x%3=0)&(x%7=0),用以判断x同时为3和7的倍数时,关系表达式的值为真。17 .知识点:逻辑运算符和表达式 逻辑运算符优先级从高到低:!、&、II 逻辑运算的真值表aba&b
25、allb!a真真真真假真假假真假假真假真真假假假假真 进行逻辑运算时,若&左边的值为0,则不再对右边的运算对象进行运算,整个表达 式的值为例 1: (2011-09-17)若有定义语句:intkl=10,k2=20;,执行表达式(kl=klk2)&(k2=k2kl) 后,kl和k2的值分别为(B)A, 和 1B.0 和 20C.10 和 1D. 10 和 20【解析】klk2为假,因此kl=klk2结果0,逻辑与左边表达式为假,右边表达式不再处理,因此kl结果为0, k2不变,仍为20例2: int a=2;则表达式(!a=l)&(a+=2)的值为, a的值为2。【解析】! a为,! a=l的
26、值为0, &左边的值为,则不再对右边的运算对象进行运算, 所以a的值为2。 若II左边的运算对象的值为1.则不再对右边的运算对象进行运算,整个表达式的值为1。例2: (2010-03-17)若a是数值类型,则逻辑表达式(a=l)ll(a!=l)的值是(A)A)1B)0C)2D)不知道a的值,不能确定【解析】a的值有两种情况:a等于1或a不等于1。故逻辑表达式(a=l)ll(a!=l)的值为!,18 .知识点:格式输入函数printf()(1) 一般形式:printf(“格式控制字符串”,输出列表):(2)遇到控制字符,按照控制字符的规定输出,遇到非格式字符串按原样输出。例1: (2009-04
27、-07)若变量x,y已定义为int类型且x的值为99, y的值为9,请将输出语句 printfC x/y=%d二x/y):补充完整,使其输出的计算结果形式为:x/y=lk例 2: (2009-04-15)程序段:int x=12;doubley=3.141593;printf(%d%8.6F,x,y);的输出结果 是(A)A)123.141593B)123.141593C)12,3.141593D)123.1415930【解析】以8.6f格式输出,即输出的总宽度为8,小数的位数为6。19 .知识点:格式输入函数scanf()(1)一般形式:scanf(“格式控制字符串”,地址列表);(2)若格
28、式控制字符串中有非格式字符串,则按原样输入。若格式控制字符串中没有非格 式字符作输入数据之间的间隔,则可用空格、Tab、回车作间隔。例1: (2011-09-16)若有定义:int a,b;,通过语句scanf( %d;%d ,&a,&b);,能把整数3赋给变 量a,5付给变量b的输入数据是A.3 5 B.3,5C.3; 5 D.35【解析】scanf格式字符串中两个d之间带有非格式字符分号,运行时应原样输入。例1: (2005-04-19)有以下程序main()int m,n,p;scanf(“m=%dn=%dp=%d”,&m,&n,&p);printfC*%d%d%dn,m,n,p);若想
29、从键盘上输入数据,使变量m中的值为123, n中的值为456, p中的值为89,则正 确的输入是(A)A)m=123n=456p=789B)m=123 n=456 p=789C)m=123,n=456,p=789D)123 456 789【解析】scanf(m:dn=%dp=%d”,&m,&n,&p);格式控制字符串中有非格式字符串,则按原 样输入,故答案是A。例2: (20110326)有以下程序段char name20J;int num;scanf(name=%s num=%d,name;&num);当执行上述程序,并从键盘输入:name=Lili num=1001回车后,name的值(A
30、)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 al,a2; char c 1 ,c2;scanf(d%c%d%c”,&a 1 ,&c 1 ,&a2,&c2);printf(d,%c,%
31、d,%c”,a l,c I,a2,c2);若想通过键盘输入,使得al的值为12, a2的值为34, cl的值为字符a, c2的值为字符b, 程序输出结果是:12, a, 34, b则正确的输入格式是(以下一代表空格,代表回车) A) 12a34txeR B) 12_a_34_b C)12,a,34,bD)12_a34_b【解析】空格会被当作字符赋值给变量,故B、D错误;C项中逗号会被当作字符赋值给变 量,故C项错误。(4)格式字符串 一般形式:输入数据宽度长度类型 表示该输入项,读入后不赋予相应的变量。 输入数据宽度:用十进制数指定输入的字符数。例4: (2010-09-07)有以下程序#in
32、clude main()int x,y;scan如%ld”,&x,&y); printf(dnx+y);程序运行时输入:1234567程序的运行结果是345790【解析】2d输入的数据宽度为2, x的值为12, y的值为34567, x+y=34579。例 5: (2009-04-16)若有定义语句:double x,y,*px,*py;执行了 px=&x; py=&y;之后,正 确的输入语句是(C)A) scanf(4t%f%f;x,y);B)scanf(t4%f%f;&x,&y);C)scanf(tt%lf%le,px,py);D)scanf(4t%lf%lfx,y);【解析】A、D项地址
33、列表,应为&x,&y; x、y为double型,格式控制字符串不是f%f, 故B项错误。 当定义的变量类型和scanf中“格式符”类型不一致时(这里只限定在字符型和整型两 种类型,其他数据类型不可以。)整型和字符型之间通过ASCALL可以相互转化。例6: (2011-03-12)有以下程序(说明:字符的ASCH码值为48)main() char c l,c2;scanf(d”,&cl);c2=cl+9;printf(%c%cn,c l,c2);若程序运行时从键盘输入48V回车,则输出结果为(09)。【解析】输入48,则cl=48, c2=48+9,以字符输出cl和c2,则为输出ASCI!码为4
34、8和 57对应的字符,分别为0和9。20 .知识点:字符输出函数putchar。一般形式:putchar(a); putcharCMOT);21 .知识点:字符输入函数getchar。一般形式:getchar();或 ch二getchar。;例1: (2010-03-15)有以下程序#include main()char a,b,c,d;scanf(4%c%c”,&a,&b);c=getchar(); d=getchar();printf(44%c%c%c%cn”,a,b,c,d);当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是 个字符)1234则输出结果是(B)A)
35、 1234C)12D)12B)12334【解析】以c格式读取个字符,以gelchar。形式也是读取个字符。空格会被当作字符赋值给变量。所以,a=,lb=,2c=,nd=,3to getchar经常作为while循环条件,判断输入哪个字符时,循环结束。例如,输入字符 串,直到输入,程序结束,则可写成wh配(getchar()!=)例2: (2011.0326)有以下程序段main() while( getchar()!=,n,);以下叙述中正确的是(C)A)此while语句将无限循环B) getchar。不可以出现在while语句的条件表达式中C)当执行此while语句时,只有按回车键程序才能继
36、续执行D)当执行此while语句时,按任意键程序就能继续执行【解析】while条件表达式getchar()!=只要输入的字符不是回车,就一直执行循环,而循 环内是个空语句,所以按回车键程序才能继续执行,选择C。第二课选择结构与循环结构疝喇煦楣歸 mcase镀嬾!帯菰硼;default W+1;制else if(爾)駒2; elseif|O)駒3;else 融;mm暇脚.w做)駒I;else 駒2:else_的3;四施林 xmi 防醱 則僦澱、伽駢;港姆過幽break駒扯師庫眄林co而刷帳冊腓-HT-低懸檻解嘅蟻股龈應嚴本课重要知识点:1.知识点:if语句 if (表达式),其中表达式可以是任意
37、合法的C语言表达式。例1:(2011-09-19)列条件语句中输出结果与其他语句不同的是(D)A.if (a) printf( %dn ,x); elseprintf( a%dnw ,y);B.if (a=0) printf( a%dnM ,y); else printf( u%dnw ,x);C.if (a!=0) printf( %dn ,x); elseprintf( %dn ,y);D.if (a=0) printf( %dn ,x); else printf( K%dn ,y);【解析】作为if语句的条件,a等价于a!=0,因此A和C是等价的。例2: (2011-03-26) if语
38、句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中 正确的是(D)A)必须是逻辑值B)必须是整数值C)必须是正数D)可以是任意合法的数值【解析】表达式不限于关系表达式、逻辑表达式,也可以是任意的数值类型,其中非为真, 为假。故选D。 对于单个if语句,其后跟随的受if控制的只能是1个语句或者是1个复合语句。例1: (2009-09-17)设有定义:inta=l,b=2,c=3;以下语句中执行效果与其它三个不同的是(C)A)if(ab) c=a, a=b, b=c;B)if(ab) c=a, a=b, b=c; C)if(ab) c=a; a=b; b=c;D)if(ab) c=a
39、; 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)以下程序运行后的输出结果是200main() int x=10,y=20,t=0;if(x=y)t=x;x=y;y=t;printf(H%d %dn;x,y);)【解析】x=10,y=20,所以x=y为false, t=x;不执行,直接执行x=y;y=t;x为20
40、, y为。注 意和 if(x=y)t=x;x=y;y=t;区别。 当多个if(表达式)单分支形式并行出现时,其执行顺序是:先判断第一 if单分支的条件, 如果为真,执行其后面的语句,执行完后,继续向下执行。判断第二个if单分支语句, 依次类推。如果第一个if表达式的值为假,则不执行其后的语句,而去判断第二个if 单分支条件。例!: (2011-03-26)有以下程序main() int x;scanf(,%d,&x);if(x15) printf(H%dH,x-5);if(x10) printf(%d,x);if(x5) printf(%dn”,x+5);若程序运行时从键盘输入12V回车,则输
41、出结果为【解析】输入12,比较不大于15所以不执行if(x15)内的语句;大于10执行printf(”d”,x);输出12;大于5执行printf(d”,x+5);输出172 .知识点:if语句的嵌套内嵌结构中,else总是与前面最近的且未曾配对的if语句配对,组成一对ifelse语句。例2: (2010-09-18)有以下程序#include main()int a= I ,b=0;if(!a) b+;else if(a=0) if(a) b+=2;else b+=3;printf(dn”,b);程序运行后的输出结果是(A)A)0B)1C)2D)3【解析!else总是与前面最近的且未曾配对的
42、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);,输出结果为。3 .知识点:条件表达式 一般形式:表达式1?表达式2:表达式3 执行过程:表达式1的值为真,条件表达式取表达式2的值;表达式1的值为假,条件 表达式取表达式3的值。例1: (2009-09-19)以下程序段中,与语句:k=ab?(bc?l:O):O!功能相同的是(A)A)if(ab)&(bc) k=l;B) if(ab)ll(bc) k=l;else k=0;else k=0;C) if(ab) k=l;else if(bc) k=l;else k=0;【解析】条件运算符的结合性是从右至左。当bc时,b?l:O的值为1, k=ab?l:O,同时 当ab时,ab?l:O的值为1,此时k=l。否则k=0。故答案为A。4 .知识点:switch语句 switch语句的圆括号中的表