资源描述
上六个月全国计算机等级考试
二级C语言考前复习资料(笔试)
思维导图1:C语言程序设计知识结构
第一课 C语言程序设计基础
思维导图2:第一课 C语言程序设计基础
本课重要知识点:
1.知识点:C程序基础
C语言是一个结构化程序设计语言。三种基本结构:次序、选择、循环。
例1:(-09-11)如下有关结构化程序设计的论述中正确的是(C)
A) 一个结构化程序必须同时由次序、分支、循环三种结构组成
B) 结构化程序使用goto语句会很便捷
在C语言中,程序的模块化是利用函数实现的
C) 由三种基本结构组成的程序只能处理小规模的问题
例2:(-03-26)计算机高级语言程序的运行措施有编译执行和解释执行两种,如下论述中正确的是(A)
A)C语言程序仅能够编译执行
B)C语言程序仅能够解释执行
C)C语言程序既能够编译执行又能够解释执行
D)以上说法都不对
【解析】计算机不能直接了解高级语言,只能直接了解机器语言,因此必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。 翻译的方式有两种,一个是编译,一个是解释。C语言程序仅能够编译。
例3:(-03-26)如下论述中错误的是( D)
A)C语言的可执行程序是由一系列机器指令组成的
B)用C语言编写的源程序不能直接在计算机上运行
C)通过编译得到的二进制目标程序需要连接才能够运行
D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文献
【解析】C程序开发过程:编辑—>(.c)编译—>(.obj)链接—>可执行文献(.exe)
2.知识点:C语言程序的组成
l C程序是由函数组成的,一个C程序有且仅有一个main函数。一个函数由两部分组成:函数的首部和函数体。函数体包括申明部分和执行部分。一个C程序总是从main函数开始执行(即程序的入口),由main函数结束,(即程序的出口)。
例1:(-03-12)如下论述正确的是(B)
A) C语言程序是由过程和函数组成的
B) C语言函数能够嵌套调用,例如:fun(fun(x))
C) C语言函数不能够单独编译
D) C语言中除了main函数,其他函数不可作为单独文献形式存在
例2:(-09-11)如下论述中错误的是 (C)
A.C语言编写的函数源程序,其文献名后缀能够是C
B.C语言编写的函数都能够作为一个独立的源程序文献
C.C语言编写的每个函数都能够进行独立的编译并执行
D.一个C语言程序只能有一个主函数
3.知识点:标识符
l 命名规则:
①标识符中只能包括字母 (a-z,A-Z),数字(0-9),下划线(_)。
②第一个字符必须是字母或下划线。
类型阐明符:int,float,double等
语句定义符:if,for,while等
l 分类
都是小写
①核心字(32个)
(有固定含义,不可变化)
库函数的名字:printf , scanf 等
编译预处理命令名:include等
②预定义标识符
(有特殊含义,能够变化)
③用户自定义的标识符 ⅰ格式合法,ⅱ不能使用核心字,ⅲ见名知意
例1:(-03-13)如下C语言用户标识符中,不合法的是(D)
A)_1 B)AaBc C)a_b D)a-b
4.知识点:数据类型
例1:(-03-16)如下有关C语言数据类型使用的论述中错误的是(D)
A)若要准确无误差的表示自然数,应使用整数类型
B)若要保存带有多位小数的数据,应使用双精度类型
C)若要处理如“人员信息”等含有不一样类型的有关数据,应自定义结构体类型
D)若只处理“真”和“假”两种逻辑值,应使用逻辑类型
【解析】结构数据类型是依照已定义的一个或多个数据类型用结构的措施来定义的,一个结构类型的值能够分解成若干个“组员”或“元素”,每个“组员”都是一个基本数据类型或又是一个结构类型,C项正确。C语言没有逻辑类型,故D项错误。
例2:(-03-26)定义无符号整数类为UInt,下面能够作为类UInt实例化值的是(B)
A)-369 B)369 C)0.369 D)整数集合{1,2,3,4,5}
【解析】无符号整数类型为只有正整数和0,所有选择B。
5.知识点:常量
l 整型常量
十进制整常数:没有前缀,其数码为0-9。例如65535,-568
八进制整常数:以0开头,其数码为0-7。例如015
十六进制整常数:以0X或0x开头,其数码为0-9,A-F或a-f。例如0x2A
长整型数:整型常数后缀为L或l。例如358000L
无符号数:整型常数后缀为U或u。例如158u
l 实型常量的形式
小数形式:必须有小数点,小数点前后不能同时没有数字。
指数形式:aEn(其中a表示十进制数,E阶码标志,n阶码)。E前E后必须有数字,E后必为整数,能够带符号。例如2.1E-3、5E8
例1:(-09-13)如下选项中有关C语言常量的论述错误的是:(D)
A.所谓常量,是指在程序运行过程中,其值不能被变化的量
B.常量分为整型常量、实型常量、字符常量和字符串常量
C.常量可分为数值型常量和非数值型常量
D.常常被使用的变量可定义成常量
【解析】依照常量的基本概念,则不难判断A、B、C均正确。
例1:(-04-13)如下选项中,能用作数据常量的是(D)
A)o115 B)0118 C)1.5e1.5 D)115L
【解析】八进制整常数以0开头,A项错误;八进制整常数的数码味0-7,B项错误;实型常量的指数形式E后必为整数,故C项错误;长整型数后缀为L或l,故D项正确。
例2:(-03-26)如下选项中可用作C程序合法实数的是( A)
A).1e0 B)3.0e0.2 C)E9 D)9.12E
【解析】实型指数表示方式“E前E后比有数,E后必须是整数”,故选A
l 字符常量:用单引号‘’括起来的一个字符。包括一般字符常量和转义字符。
一般字符常量:如‘a’、‘A’、‘1’。
转义字符:由一对单引号引起来的以\开头的若干字符的组合。如‘\n’表示回车换行、‘\\’表示反斜线符、‘\’’表示单引号符、‘\”’表示双引号、‘\ddd’表示八进制数、‘\xhh’表示十六进制数。
例3:(-09-15)如下选项中能表示合法常量的是(C)
A)整数:1,200 B)实数:1.5E2.0 C)字符斜杠:‘\\’ D)字符串:“\007”
【解析】表示整常量不能用逗号分隔,A项错误;实型常量的指数形式E后必为整数,故B项错误;’\007’是转义字符,只能用单引号括起来,不能用双引号或其他括号,故D项错误。例4:(-03-26)如下选项中不能用作C程序合法常量的是( B)
A)1,234 B)'\123' C)123 D)"\x7G"
【解析】A中的‘,’在编译时会犯错的,直接写成1234即可,B是一个三位八进制数代表的字符,C是一个数字常量,D是一个字符串,其中\x7是一个一位十六进制数代表的字符,也即D中的字符串是两个字符,假如sizeof的话是3,假如strlen的话是2。
6.知识点:变量
l 整型变量和实型变量
以考试标准Viusal c++6.0为例,阐明各类型变量所占的位数。
类型
所占
位数
所占
字节数
类型
所占
位数
所占
字节数
short
16
2
unsigned int
32
4
int
32
4
unsigned long
32
4
long
32
4
float
32
4
unsigned short
16
2
double
64
8
例1:(-09-38)有如下程序
#include <stdio.h>
main(0)
{int s,t,A=100;double B=6;
s=sizeof(A); t=sizeof(B);
printf(“%d,%d\n”,s,t);
}
在VC6平台上编译运行,程序运行后的输出成果是(C)
A)2,4 B)4,4 C)4,8 D)10,6
【解析】在VC6平台上,int型占4个字节,double型占8个字节,故答案是C。
l 字符变量:一个字符变量只能存储一个字符。字符串不能存储在字符变量中,只能用字符数组或指针存储字符串。
例1:(-09-22)有如下定义语句,编译时会出现编译错误的是(C)
A)char a=’a’; B)char a=‘\n’; C)char a=‘aa’; D)char a=‘\x2d’;
【解析】一个字符变量只能存储一个字符,A项字符变量存储的是一般字符常量;B、D项字符变量存储的转义字符;字符常量只能是单个字符,不能是字符串,’aa’不是单个字符,故C项错误。
7.知识点:ASCII码
‘0’的ASCII码值为48;‘A’的ASCII码值为65;‘a’的ASCII码值为97。
大写字母与小写字母的ASCII码值相差32。
例1:(-09-23)有如下程序
#include <stdio.h>
main()
{char c1,c2;
c1=’A’+’8’-‘4’;
c2=’A’+’8’-‘5’;
printf(“%c,%d\n”,c1,c2);
}
已知字母A的ASCII码为65,程序运行后的输出成果是(A)
A)E,68 B)D,69 C)E,D D)输出无定值
【解析】’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.知识点:进制转换
l 十进制转换成二进制、八进制、十六进制:将十进制的数字除以2(8、16),得到的商数继续除以2,直到商为0,然后将各次相除所得的余数从后往前排列。
l 二进制、八进制、十六进制转换成十进制:将二(八、十六)进制数的每一位数从高位到低位乘以2的n-1次幂,n为该位所在的位数。
l 二进制与八进制之间的转换:每个八进制数字转换成3位二进制数字。
l 二进制与十六进制之间的转换:每个十六进制数字转换成4位二进制数字。
例1:(-09)如下程序运行后的输出成果是 。
#include <stdio.h>
main()
{int a=200,b=010;
printf(“%d%d\n”,a,b);
}
【解析】八进制数010转换成十进制数为8,按“%d%d”格式分别输出a、b,即。
9.知识点:运算符的优先级
级别由大到小:(逻辑)非 >算(术运算符) >关(系运算符) >(逻辑)与 >(逻辑)或 >条(件运算符) >赋(值运算符)
10.知识点:强制类型转换运算符
一般形式:(类型阐明符)(体现式)
l 功效:把体现式的运算成果强制转换成类型阐明符所示的类型
例1:(-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("%d\n",a);
}
答案:3
【解析】(3/2)=1,(double)(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:(-09-14)若有定义语句:int a=10;double b=3.14;,则体现式‘A’+a+b值得类型是 (C)
A.char B.int C.double D.float
【解析】各种类型数据混合运算时,最后止果的类型可依据如下转换规律:
char -> short -> int -> long -> float -> double
例1:(-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:(-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
【解析】参加%运算的左右操作数均为整型,故A项正确,C项错误。B项是赋值语句,不是体现式。赋值运算符左边必须是变量,而不是体现式,而D项中x+y=x,错误。
12.知识点:逗号体现式
l 一般形式:体现式1,体现式2……体现式n
l 求值过程:自左向右依次求解,最后一个体现式的值为整个逗号体现式的值。
例1:(-04-14)设有定义:int x=2;如下体现式中,值不为6的是(D)
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项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:(-09-06)若有定义语句:int a=5;则体现式:a++的值是 5 。
【解析】体现式a++的值是a未加1之前的值,即5。.
l 当++或—与printf语句结合时,若++/--x的形式,则先自增/自减,然后输出;若x++/--的形式,则先输出x原值,在进行自增/自减操作。
例2:(-03-26)有如下程序
#include
main()
{ int x=011;
printf("%d\n",++x);
}
程序运行后的输出成果是(C)
A)12 B)11 C)10 D)9
【解析】011是一个八进制的数,转为十进制则为1*8+1=9;++x是x先自增1再参加其他运算,因此先x自增1为10再输出即为10,故选C。
14.知识点:赋值体现式
l 一般形式:变量名=体现式
l 赋值运算符左边必须是变量,而不是体现式。
例1:(-03-14)若有定义:double a=22;int i=0,k=18;则不符合C语言要求的赋值语句是( C)
A)a=a++,i++; B)i=(a+k)<=(i+k); C)i=a%11; D)i=!a;
【解析】a为double型,参加%运算的操作数均为整型,故C项错误。
例2:(-03-26)若有定义语句:int a=3,b=2,c=1;,如下选项中错误的赋值体现式是(A)
A)a=(b=4)=3; B)a=b=c+1; C)a=(b=4)+c; D)a=1+(b=c=4);
【解析】赋值体现式的左边必须是变量不能是体现式。而答案A中,(b=4)是一个赋值体现式。
l 复合赋值运算符和体现式
+=、—=、*=、/=、%=、<<=、>>=、 &=、 ^=、 |=
例2:(-09-16)体现式a+=a-=a=9的值是(D)
A)9 B)-9 C)18 D)0
【解析】赋值运算符的结合性是从右到左,a=9→a=a-9=0→a=a+0=0+0=0。故答案是D。
15.知识点:位运算
l 按位与运算&
规则:0&0=0 0&1=0 1&0=0 1&1=1
l 按位或运算|
规则:0|0=0 0|1=1 1|0=1 1|1=1
l 按位异或运算∧
规则:0∧0=0 0∧1=1 1∧0=1 1∧1=0
l 求反运算~
规则:~0=1 ~1=0
l 左移运算<<
规则:把<<左边的运算数的各二进位所有左移若干位,高位丢弃,低位补0。左移一位相称于该数乘以2。左移n位相称于该数乘以2n。
例1:(-09-40)有如下程序
#include <stdio.h>
main()
{short c=124;
c=c____D____;
printf(“%d\n”,c);
}
若要使程序的运行成果为248,应在下划线处填入的是
A)>>2 B)|248 C)&0248 D)<<1
【解析】左移一位相称于该数乘以2,124>>1相称于124乘以2,等于248。故答案是D。
例2:(-04-39)有如下程序
#include <stdio.h>
main()
{int a=5,b=1,t;
t=(a<<2)|b;
printf(“%d\n”,t);
}
程序运行后的输出成果是(A)
A)21 B)11 C)6 D)1
【解析】左移2位相称于该数乘以22。5<<2相称于5乘以4等于20。20|1=21。故答案是A。
l 右移运算>>
把>>左边的运算数的各二进位所有右移若干位。高位补0,低位丢弃。右移一位相称于该数除以2。右移n位相称于除以2n。
例3:(-09-39)若有如下程序段
int r=8;
printf(“%d\n”,r>>1);
输出成果是(C)
A)16 B)8 C)4 D)2
【解析】右移一位相称于该数除以2。8>>1相称于除以2,等于4,故答案是C。
16.知识点:关系运算符和体现式
例1:(-09-08)在C语言中,当体现式值为0时表示逻辑值“假”,当体现式值为
非0 时表示逻辑值“真”。
例2:(-03-06)设x为int型变量,请写出一个关系体现式 (x%3==0)&&(x%7==0) ,用以判断x同时为3和7的倍数时,关系体现式的值为真。
17.知识点:逻辑运算符和体现式
逻辑运算符优先级从高到低:!、&&、||
l 逻辑运算的真值表
a
b
a&&b
a||b
!a
真
真
真
真
假
真
假
假
真
假
假
真
假
真
真
假
假
假
假
真
l 进行逻辑运算时,若&&左边的值为0,则不再对右边的运算对象进行运算,整个体现式的值为0。
例1:(-09-17)若有定义语句:int k1=10,k2=20;,执行体现式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分别为 (B)
A. 0和1 B.0和20 C.10和1 D. 10和20
【解析】k1>k2为假,因此k1= k1>k2成果0,逻辑与左边体现式为假,右边体现式不再处理,因此k1成果为0,k2不变,仍为20
例2:int a=2;则体现式(!a==1)&&(a++==2)的值为0,a的值为2。
【解析】!a为0,!a==1的值为0,&&左边的值为0,则不再对右边的运算对象进行运算,因此a的值为2。
若||左边的运算对象的值为1,则不再对右边的运算对象进行运算,整个体现式的值为1。
例2:(-03-17)若a是数值类型,则逻辑体现式(a==1)||(a!=1)的值是(A)
A)1 B)0 C)2 D)不懂得a的值,不能确定
【解析】a的值有两种情况:a等于1或a不等于1。故逻辑体现式(a==1)||(a!=1)的值为1。
18.知识点:格式输入函数printf()
(1)一般形式:printf(“格式控制字符串”,输出列表);
(2)遇到控制字符,按照控制字符的要求输出,遇到非格式字符串按原样输出。
例1:(-04-07)若变量x,y已定义为int类型且x的值为99,y的值为9,请将输出语句printf(“ x/y=%d ”,x/y);补充完整,使其输出的计算成果形式为:x/y=11。
例2:(-04-15)程序段:int x=12;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()
(1)一般形式:scanf(“格式控制字符串”,地址列表);
(2)若格式控制字符串中有非格式字符串,则按原样输入。若格式控制字符串中没有非格式字符作输入数据之间的间隔,则可用空格、Tab、回车作间隔。
例1:(-09-16)若有定义:int a,b;,通过语句scanf(“%d;%d”,&a,&b);,能把整数3赋给变量a,5付给变量b的输入数据是
A.3 5 B.3,5 C.3;5 D.35
【解析】scanf格式字符串中两个%d之间带有非格式字符分号,运行时应原样输入。
例1:(-04-19)有如下程序
main()
{int m,n,p;
scanf(“m=%dn=%dp=%d”,&m,&n,&p);
printf(“%d%d%d\n”,m,n,p);
}若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是(A)
A)m=123n=456p=789 B)m=123 n=456 p=789
C)m=123,n=456,p=789 D)123 456 789
【解析】scanf(“m=%dn=%dp=%d”,&m,&n,&p); 格式控制字符串中有非格式字符串,则按原样输入,故答案是A。
例2:(-03-26)有如下程序段
char name[20];
int num;
scanf("name=%s num=%d",name;&num);
当执行上述程序,并从键盘输入:name=Lili num=1001<回车>后,name的值(A)
A)Lili B)name=Lili C)Lili num= D)name=Lili num=1001
【解析】scanf中格式字符串的非格式字符串原样输入,如其中的‘name=’和‘num=’,因此接收到的name值是背面的Lili,num值为1001。故选A。
(3)在输入字符数据时,若格式控制字符串中无非格式字符,则以为所有输入的字符均为有效字符。空格会被当作字符赋值给变量。
例3:(-04-23)有如下程序
#include <stdio.h>
main()
{int a1,a2; char c1,c2;
scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);
printf(“%d,%c,%d,%c”,a1,c1,a2,c2);
}若想通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,程序输出成果是:12,a,34,b则正确的输入格式是(如下_代表空格,<CR>代表回车)
A)12a34b<CR> B)12_a_34_b<CR> C)12,a,34,b<CR> D)12_a34_b<CR>
【解析】空格会被当作字符赋值给变量,故B、D错误;C项中逗号会被当作字符赋值给变量,故C项错误。
(4)格式字符串
l 一般形式:%[*][输入数据宽度][长度]类型
l *表示该输入项,读入后不赋予对应的变量。
l 输入数据宽度:用十进制数指定输入的字符数。
例4:(-09-07)有如下程序
#include <stdio.h>
main()
{int x,y;
scanf(“%2d%ld”,&x,&y); printf(“%d\n”x+y);
}程序运行时输入:1234567程序的运行成果是 34579 。
【解析】%2d输入的数据宽度为2,x的值为12,y的值为34567,x+y=34579。
例5:(-04-16)若有定义语句:double x,y,*px,*py;执行了px=&x;py=&y;之后,正确的输入语句是(C)
A) scanf(“%f%f”,x,y); B)scanf(“%f%f”,&x,&y);
C)scanf(“%lf%le”,px,py); D)scanf(“%lf%lf”,x,y);
【解析】A、D项地址列表,应为&x,&y;x、y为double型,格式控制字符串不是%f%f,故B项错误。
l 当定义的变量类型和scanf中“格式符”类型不一致时(这里只限定在字符型和整型两种类型,其他数据类型不能够。)整型和字符型之间通过ASCALL能够相互转化。
例6:(-03-12)有如下程序 (阐明:字符0的ASCII码值为48)
main()
{ char c1,c2;
scanf("%d",&c1);
c2=c1+9;
printf("%c%c\n",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:(-03-15)有如下程序
#include <stdio.h>
main()
{char a,b,c,d;
scanf(“%c%c”,&a,&b);
c=getchar(); d=getchar();
printf(“%c%c%c%c\n”,a,b,c,d);
}当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符)
12<CR>
34<CR>
则输出成果是(B)
A)1234 B)12 C)12 D)12
3 34
【解析】以%c格式读取一个字符,以getchar()形式也是读取一个字符。空格会被当作字符赋值给变量。因此,a=’1’,b=’2‘,c=’\n’,d=’3‘。
l getchar常常作为while循环条件,判断输入哪一个字符时,循环结束。例如,输入字符串,直到输入‘0’,程序结束,则可写成while( getchar()!='0')
例2:(-03-26)有如下程序段
main()
{ …
while( getchar()!='\n');
…
}如下论述中正确的是(C)
A)此while语句将无限循环
B) getchar()不能够出目前while语句的条件体现式中
C)当执行此while语句时,只有按回车键程序才能继续执行
D)当执行此while语句时,按任意键程序就能继续执行
【解析】while条件体现式getchar()!='\n'只要输入的字符不是回车,就一直执行循环,而循环内是一个空语句,因此按回车键程序才能继续执行,选择C。
第二课 选择结构与循环结构
本课重要知识点:
1.知识点:if语句
l if(体现式),其中体现式能够是任意合法的C语言体现式。
例1:(-09-19)下列条件语句中输出成果与其他语句不一样的是(D)
A.if(a) printf(“%d\n”,x); else printf(“%d\n”,y);
B.if(a==0) printf(“%d\n”,y); else printf(“%d\n”,x);
C.if(a!=0) printf(“%d\n”,x); else printf(“%d\n”,y);
D.if(a==0) printf(“%d\n”,x); else printf(“%d\n”,y);
【解析】作为if语句的条件,a等价于a!=0,因此 A和C是等价的。
例2:(-03-26)if语句的基本形式是:if(体现式)语句,如下有关“体现式”值的论述中正确的是(D)
A)必须是逻辑值 B)必须是整数值 C)必须是正数 D)能够是任意合法的数值
【解析】体现式不限于关系体现式、逻辑体现式,也能够是任意的数值类型,其中非0为真,0为假。故选D。
l 对于单个if语句,其后跟随的受if控制的只能是1个语句或者是1个复合语句。
例1:(-09-17)设有定义:int a=1,b=2,c=3;如下语句中执行效果与其他三个不一样的是(C)
A)if(a>b) c=a,a=b,b=c; B)if(a>b){ c=a,a=b,b=c;}
C)if(a>b) c=a;a=b;b=c; D)if(a>b){ c=a;a=b;b=c;}
【解析】对于单个if语句,其后跟随的受if控制的只能是1个语句或者是1个复合语句。故C项,if(a>b)条件成立时,语句c=a;才被执行,而无论if(a>b)条件成立是否,语句a=b;b=c;都会被执行。A、B、D项,只有if(a>b)条件成立时,语句c=a; a=b;b=c; 才被执行。
例2:(-03-26)如下程序运行后的输出成果是 200
main()
{ int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf("%d %d\n",x,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;}区分。
l 当多个if(体现式)单分支形式并行出现时,其执行次序是:先判断第一if单分支的条件,假如为真,执行其背面的语句,执行完后,继续向下执行。判断第二个if单分支语句,依次类推。假如第一个if体现式的值为假,则不执行其后的语句,而去判断第二个if单分支条件。
例1:(-03-26)有如下程序
main()
{ int x;
scanf("%d",&x);
if(x>15) printf("%d",x-5);
if(x>10) printf("%d",x);
if(x>5) printf("%d\n",x+5);
}若程序运行时从键盘输入12<回车>,则输出成果为 1217
【解析】输入12,比较小于15因此不执行if(x>15)内的语句;不小于10执行printf("%d",x);输出12;不小于5执行printf("%d",x+5);输出17。
2.知识点:if语句的嵌套
l 内嵌结构中,else总是与前面最近的且未曾配正确if语句配对,组成一对if-else语句。
例2:(-09-18)有如下程序
#include <stdio.h>
main()
{int a=1,b=0;
if(!a) b++;
else if(a==0) if(a) b+=2;
else b+=3;
printf(“%d\n”,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(“%d\n”,b);,输出成果为0。
3.知识点:条件体现式
l 一般形式:体现式1?体现式2:体现式3
l 执行过程:体现式1的值为真,条件体现式取体现式2的值;体现式1的值为假,条件体现式取体现式3的值。
例1:(-09-19)如下程序段中,与语句:k=a>b?(b>c?1:0):0;功效相同的是(A)
A)if((a>b)&&(b>c)) k=1; B) if((a>b)||(b>c)) k=1;
else k=0; else k=0;
C) if(a<=b) k=0; D) if(a>b) k=1;
else if(b<=c) k=1; else if(b>c) k=1;
else k=0;
【解析】条件运算符的结合性是从右至左。当b>c时,b>c?1:0的值为1,k=a>b?1:0,同时当a>b时,a>b?1:0的值为1,此时k=1。否则k=0。故答案为A。
4.知识点:switch语句
l switch语句的圆括号中的体现式的值必须是整型或字符型,不能为实型。
l case后的体现式能够是求得整型和字符型的常量体现式,但不能含有变量。
l default的位置对程序的执行没有影响。
例1:(-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; cas
展开阅读全文