例1.请分析下列程序的输出结果。 main() { int s,t,a,b;
sanf(“%d%d”,&a,&b); s=1;t=1;
if(a>0) s=s+1; if(a>b) t=s+1; else if(a==b) t=s; else t=2*s;
printf(“%d\\n”,t); }
若运行时输入5 10 回车,则程序的执行结果是?
main() { int s,t,a,b;
sanf(“%d%d”,&a,&b); s=1;t=1;
if(a>0) {s=s+1; if(a>b) t=s+1;} else if(a==b) t=s; else t=2*s;
printf(“%d\\n”,t); }
若运行时输入5 10 回车,则输出结果是?
例2.分析下列程序的输出结果 main()
{ int a=4,b=3,c=5,t=0; if(a
printf(“%d %d %d\\n”,a,b,c); }
main()
{ int a=4,b=3,c=5,t=0; if(a
printf(“%d %d %d\\n”,a,b,c); }
联想交换的思想:若要交换a和b的值,通常的做法是: {t=a;a=b;b=t;}
3.条件运算符和条件表达式
条件运算符:? :
是唯一一个三目运算符。优先级别高于赋值运算,结合方向自右向左。 格式:表达式1 ?表达式2 :表达式3
执行方式:先求“表达式1”的值,若其值为“真”,求出“表达式2”的值作为整个条件表达式的值;若其值为“假”,求出“表达式3”的值作为整个表达式的值。
例如:max=a>b?a:b; 相当于:if(a>b) max=a; else max=b;
a>b?a:c>d?c:d
相当于a>b?a:(c>d?c:d)
注意:表达式1、2、3的值不要求具有相同的类型,最后结果的类型为表达式2、3中较高类型的一种。如:(x=6)>(y=5)?1:1.5 表达式的值是 1.0而不是1。
4.switch语句
格式:
switch(表达式)
{ case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; …
case 常量表达式n:语句n;break; default :语句n+1;break; }
说明:
(1) switch、case、default、break都是关键字。花括号里面的语句叫做switch
语句体。Switch语句体中可以没有break语句和default部分。
(2) Switch语句的圆括号中表达式的值必须是整型或是字符型,不能为实型。
case后的表达式可以是求得整型量的常量表达式,但是常量表达式中不能含有变量。
(3) 执行Switch语句时,首先计算Switch后圆括号的表达式的值,然后将这
个值与语句体中case后的常量表达式的值相比较,如果某个常量表达式的值与之相等,则执行该case后的语句块;如果没有任何一个常量表达式的值与之相等,则执行default后的语句块。
(4) 在执行的时候如果遇到break语句,则跳出switch语句。如果执行完一
个case或者default语句块后没有遇到break,则继续顺序往下执行,知道遇到break语句或者语句体被执行完毕为止。
(5) default最多只能有一个,通常出现在switch语句的最后部分,但也可以
出现在case之间或所有的case之前。
四.试题分析
1.2008年4月试题分析:
(17)已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是
A)kk>='A'&&kk<='Z' B)!(kk>='A'||kk<='Z')
C)(kk+32)>='a'&&(kk+32)<='z' D)isalpha(kk)&&(kk<91) (18)当变量c的值不为2、4、6时,值也为“真”的表达式是 A)(c==2)||(c==4)||(c==6) B)(c>=2&&c<=6)||(c!=3)||(c!=5) C)(c>=2&&c<=6)&&!(c%2) D)(c>=2&&c<=6)&&(c%2!=1) (19)若变量已正确定义,有以下程序段 int a=3,b=5,c=7; if(a>b) a=b; c=a; if(c!=a) c=b;
printf(\ 其输出结果是
A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 (20)有以下程序 #include
{ 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; case 3: a++; b++; }
printf(“a=%d,b=%d\\n”,a,b); }
程序的运行结果是
A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1
2.2007年9月试题分析
(20)有以下计算公式
?xy????x(x?0)(x?0)
若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是 A) if(x>=0) y=sqrt(x); B) y=sqrt(x); else y=sqrt(-x); if(x<0) y=sqrt(-x); C) if(x>=0) y=sqrt(x); D) y=sqrt(x>=0?x :-x); if(x<0) y=sqrt(-x);
(21)设有条件表达式:(EXP)? i++ :j-- ,则以下表达式中与(EXP)完全等价的是
A)(EXP==0) B)(EXP!=0) C)(EXP==1) D)(EXP!=1) (23)已有定义:char c; ,程序前面已在命令行中包含ctype.h文件。不能用于判断c中的字符是否为大写字母的表达式是 A)isupper(c) B)'A'<=c<='Z' C)'A'<=c&& c <='Z' D)c <=('z'-32)&&('a'-32)<= c (7)以下程序的功能是:输出a、b、c三个变量中的最小值。请填空。 #include
{ int a,b,c,t1,t2;
scanf(\ t1= a
3.2007年4月试题分析
(20)设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是(C )
A)if(x++); B)if(x>y&&y!=0); C)if(x>y) x- - D)if(y<0) {;} else y++; else x++;
(21)以下选项中,当x为大于1的奇数时,值为0的表达式( ) A)x%2==1 B)x/2 C)x%2!=0 D)x%2==0 (22)以下叙述中正确的是(C )
A)break语句只能用于switch语句体中
B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环 C)break 语句只能用在循环体内和switch语句体内
D)在循环体内使用break语句和continue语句的作用相同 (23)有以下程序( ) main() {int k=5,n=0; do
{switch(k)
{case1: case3:n+=1; break; default;n=0;k--;

