C语言基础 四 选择结构程序设计Word下载.docx

上传人:b****6 文档编号:8327143 上传时间:2023-05-11 格式:DOCX 页数:29 大小:65.57KB
下载 相关 举报
C语言基础 四 选择结构程序设计Word下载.docx_第1页
第1页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第2页
第2页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第3页
第3页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第4页
第4页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第5页
第5页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第6页
第6页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第7页
第7页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第8页
第8页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第9页
第9页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第10页
第10页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第11页
第11页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第12页
第12页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第13页
第13页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第14页
第14页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第15页
第15页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第16页
第16页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第17页
第17页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第18页
第18页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第19页
第19页 / 共29页
C语言基础 四 选择结构程序设计Word下载.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言基础 四 选择结构程序设计Word下载.docx

《C语言基础 四 选择结构程序设计Word下载.docx》由会员分享,可在线阅读,更多相关《C语言基础 四 选择结构程序设计Word下载.docx(29页珍藏版)》请在冰点文库上搜索。

C语言基础 四 选择结构程序设计Word下载.docx

当关系运算符的两边的类型不一致时,系统自动会进行类型转换。

1.已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是()[2008年4月第17题]

A.kk>

='

A'

kk<

Z'

B.!

(kk>

‖kk<

C.(kk+32)>

a'

(kk+32)<

z'

D.isalpha(kk)&

(kk<

91)

答案A和C都是利用关系运算符来判断是否是大小写,B中如果满足了kk>

就不会判断后面的kk<

(短路),所以不能判断,D利用函数。

逻辑运算符及其优先

C语言提供三种逻辑运算符:

(1)&

逻辑与(相当日常生活中:

而且,并且,只在两条件同时成立时为“真”)

(2)||逻辑或(相当日常生活中:

或,两个条件只要有一个成立时即为“真”)

(3)!

逻辑非(条件为真,运算后为假,条件为假,运算后为真)

a

b

a&

a||b

“&

”,“||”是双目运算符,“!

”是单目运算符。

(1)!

(非)-&

(与)-||(或),“!

”为三者中最高。

(2)逻辑运算符中的&

和||低于关系运算符,!

高于算术运算符。

(3)结合性是自左向右。

1.当变量c的值不为2、4、6时,值也为“真”的表达式是()[2008年4月第18题]

A.(c==2)‖(c==4)‖(c==6)B.(c>

=2&

=6)‖(c!

=3)‖(c!

=5)

C.(c>

=6)&

!

(c%2)D.(c>

(c%2!

=1)

逻辑与&

所有的表达式都为真,才为真。

,逻辑或||只要有一个为真值即为真。

逻辑表达式

用逻辑运算符(逻辑与、逻辑或、逻辑非)将关系表达式或逻辑量连接起来构成逻辑表达式。

逻辑表达式的值是一个逻辑值“真”或“假”。

逻辑运算结果,以1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”(即认为一个非0的数值是“真”)。

在数学中关系式

是可以使用的,但是在C语言中不可以用,必须用

由&

和||组成的逻辑表达式,在某种情况下可以发生“短路现象”:

(1)

,只有当x为真时,才需要判别y的值,只有x和y都为真时,才要判别z的值;

只要x为假,y和z不必判别,整个表达式的值就为0。

(2)

,只要x的值为真,就不必判别y和z的值,整个表达式的值为1,只有x的值为假,才需要判别y的值,只有x和y的值同时为假,才需要判别z的值。

charc=’‘;

inta=1,b;

(此处c的初值为空格字符),执行b=!

c&

a;

后b的值为。

[2008年4月填空第6题]

空格的ASCII码值为32,!

c为假,故整个表达式的值为0.答案为0。

2.执行以下程序段后,w的值为()[2008年9月第18题]

intw=’A’,x=14,y=15;

w=((x||y)&

(w<

’a’));

A.-1B.NULLC.1D.0

(x||y)的值为真,’A’<

’a’为真,答案为真,答案为C。

3.已定义charch=”$”;

inti=1,j;

执行j=!

ch&

i++以后,i的值为。

1[2007年4月填空第11题]

此题考的是逻辑运算符的短路原理。

由于!

ch已经是假,故第二个表达式没有判别到,故没有执行,i没有自增,故答案为1。

if语句的几种形式

if语句用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

if语句三种形式:

1、if(表达式)语句。

例如:

if(x>

y)printf(“%d”,x);

2、if(表达式)语句1else语句2。

elseprintf(“%d”,y);

3、if(表达式1)语句1

elseif(表达式2)语句2

elseif(表达式3)语句3

elseif(表达式m)语句m

else语句m+1

(实际是else子句中嵌套if语句)。

(1)三种形式的if语句中的“表达式”一般为关系表达式或逻辑表达式,但不限于这两种表达式。

C语言中需要逻辑值的地方,只有0代表“假”,非0(其它)均代表“真”。

(2)else子句不能单独使用,必须是if语句的一部分,与if配对使用。

(3)在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句构成的语句块(复合语句)。

语句块用{}括起来,语句块后面不要“;

”号。

1.设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是()[2007年4月第20题]

A.if(x++);

 

B.if(x>

y&

y!

=0);

C.if(x>

y)x-- 

D.if(y<

0){;

}

elsey++;

elsex++;

在if和else后面可以只含一个语句,但是语句必须有分号作为结束标志。

答案选C。

2.若变量已正确定义,有以下程序段

inta=3,b=5,c=7;

if(a>

b)a=b;

c=a;

if(c!

=a)c=b;

printf("

%d,%d,%d\n"

a,b,c);

其输出结果是()。

[2008年4月第19题]

A.程序段有语法错B.3,5,3C.3,5,5D.3,5,7

在if和else后面可以只含一个内嵌的操作语句,如果有多个操作语句,则必须用用{}括起来构成复合语句。

题目中没有用{},所以只有a=b;

是a>

b真是执行的;

c=a;

a>

b是真还是假都要执行。

3.有以下程序段

inta,b,c;

a=10;

b=50;

c=30;

b)a=b;

b=c;

printf(“a=%db=%dc=%d\n”,a,b,c);

程序输出结果是()[2008年9月第20题]

A.a=10b=50c=10B.a=10b=50c=30

C.a=10b=30c=10D.a=50b=30c=50

同上。

if语句的嵌套

if语句的嵌套:

if语句的if块或else块中,由包含一个if语句。

一般形式:

if(…)

if(…)语句1;

else语句2;

else

if(…)语句3;

else语句4;

应当注意if与else的配对关系。

else总是与它上面的最近的未配对的if配对。

特别是if/else子句数目不一样时(if子句数量只会大于或等于else子句数量)。

可以用下面两种方法解决匹配问题:

(1)利用“空语句”,使if子句数量与else子句数量相同。

(2)利用{}确定配对关系。

将没有else子句的if语句用{}括起来。

1.有以下程序

#include<

stdio.h>

main()

{intx=1,y=2,z=3;

y)

if(y<

z)printf(“%d”,++z);

elseprintf(“%d”,++y);

printf(“%d”,x++);

程序结果是()[2008年9月28题]

A.331B.41C.2D.1

条件运算符构成的选择结构

在if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值时,可以使用简单的条件运算符来处理。

例如:

b)max=a;

elsemax=b;

可以使用条件运算符来处理:

max=a>

b?

a:

b;

(注:

a>

b关系运算有没有()都一样)。

它这样执行,a>

b为“真”吗?

如果为“真”,条件表达式为a,否则为b。

条件表达式的一般形式:

表达式1?

表达式2:

表达式3

(1)条件运算符的执行顺序:

先求解表达式1,若为非0(真)则求解表达式2,表达式2的值就是整个条件表达式的值。

若表达式1的值为0(假),则求解表达式3,此时表达式3的值就是整个条件表达式的值。

(2)条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。

(3)条件运算符的结合性“自右向左”。

(4)表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式,函数表达式。

(5)表达式1,表达式2,表达式3的类型都可以不同。

条件表达式值的类型是表达式2,表达式3中类型较高的类型。

1.有以下计算公式

若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是()。

[2007年9月第20题]

A.if(x>

=0)y=sqrt(x);

B.y=sqrt(x)

elsey=sqrt(-x);

if(x<

0)y=sqrt(-x);

=0)y=sqrt(x);

D.y=sqrt(x>

=0?

x:

-x);

if(x<

0)y=sqrt(-x);

A和C比较简单是正确的,D使用的条件表达式也是正确的,B当x<

0时,先计算再判断是错误的。

switch语句

多分支可以使用嵌套的if语句处理,但如果分支较多,嵌套的if语句层数多,程序冗长,降低可读性。

C语言中switch语句是多分支选择语句。

其一般形式:

switch(表达式)

{

case常量表达式1:

语句1

case常量表达式2:

语句2

………

case常量表达式n:

语句n

[default:

语句n+1]

switch语句case中语句的终止可以使用break.

说明:

(1)switch括号后面的表达式,允许为任何类型。

(2)当“表达式”的值与某个case后面的常量表达式的值相等时,就执行此case后面的语句。

如果表达式的值与所有常量表达式都不匹配,就执行default后面的语句(如果没有default就执行跳出switch,执行switch语句后面的语句)。

(3)各个常量表达式的值必须互不相同,否则出现矛盾。

(4)各个case,default出现的顺序不影响执行结果。

(5)执行完一个case后面的语句后,流程控制转移到下一个case中的语句继续执行。

此时,“case常量表达式”只是起到语句标号的作用,并不在此处进行条件判断。

在执行一个分支后,可以使用break语句使流程跳出switch结构,即终止switch语句的执行(最后一个分支可以不用break语句)。

(6)case后面如果有多条语句,不必用{}括起来。

(7)多个case可以共用一组执行语句。

(注意break使用的位置)

常量表达式一般为整型常量或字符型常量(字符型常量别忘记用单引号括起来);

如果没有break,则执行完一个case后面的语句后,流程控制转移到下一个case中的语句继续执行。

  main()

  {intk=5,n=0;

do

{switch(k)

{case1:

case3:

n+=1;

break;

  default;

n=0;

k--;

  case2:

case4:

n+=2;

break;

  }

  printf(“%d”,n);

  }while(k>

0&

n<

5);

程序运行后的输出结果是()[2007年4月第23题]

  A.235B.0235C.02356D.2356

第一次循环,k为5,执行default;

n=0,k=4;

后面没有break故继续执行n+=2;

,n=2,k=3,排除B和C;

第二次循环k为3,执行n+=1;

n=3,后面有break,故输出3;

第三次循环k还是为3,n变成4,第三次循环k还是3,n变成5,此时循环条件结束。

答案选A。

2.以下程序的运行结果是。

[2007年4月填空第9题]

{inta=2,b=7,c=5;

switch(a>

0)

  {case1:

switch(b<

{case1:

switch(“@”);

case2:

printf(“!

”);

  case0:

switch(c==5)

{case0:

printf(“*”);

case1:

printf(“#”);

printf(“$”);

}

default:

printf(“&

printf(“\n”);

0为真,值取1,b<

0值为0,由于case1后没有break,转而执行下面的语句,

c==5为1,首先输出#,case0后面没有break,转而执行default输出&

结果为#&

3.有以下程序

#include<

main()

{intx=1,y=0,a=0,b=0;

switch(x)

{case1:

switch(y)

a++;

case1:

b++;

}

case2:

case3:

printf(“a=%d,b=%d\n”,a,b);

程序的运行结果是()[2008年4月第20题]

A.a=1,b=0B.a=2,b=2C.a=1,b=1D.a=2,b=1

如果case语句后面没有break是执行下一个语句,如果有break就跳出switch

语句。

答案为D。

相关习题

一、选择题

1.当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是

A.k%2 

B.k%2==1 

C.(k%2)!

=0 

D.!

k%2==1

2.设有定义:

int 

k=1,m=2;

float 

f=7;

,则以下选项中错误的表达式是

A.k=k>

=k 

B.-k++ 

C.k%int(f) 

D.k>

=f>

=m

3.设有定义:

a=2,b=3,c=4;

,则以下选项中值为0的表达式是

A.(!

a==1)&

(!

b==0) 

B.(a<

b)&

!

c||1

C.a&

D.a||(b+b)&

(c-a)

4.有以下程序

main()

int 

a,b,d=25;

a=d/10%9;

b=a&

(-1);

printf("

%d,%d\n"

a,b);

程序运行后的输出结果是 

   A.6,1   B.2,1   C.6,0   D.2,0

5.有以下程序

i=1,j=2,k=3;

if(i++==1&

(++j==3||k++==3))

%d 

%d 

%d\n"

i,j,k);

  A.1 

3   B.2 

4    C.2 

3   D.2 

3

6.若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<

10的是

A.abs(x-y)<

10 

B.x-y>

-10&

x-y<

10

C.@(x-y)<

-10||!

(y-x)>

D.(x-y)*(x-y)<

100

7.有以下程序

inta=3,b=4,c=5,d=2;

if(a>

b)

if(b>

c)

%d"

d+++1);

++d+1);

%d\n"

d);

程序运行后的输出结果是

A.2 

B.3 

C.43 

D.44

8.下列条件语句中,功能与其他语句不同的是

A.if(a)printf("

x);

elseprintf("

y);

B.if(a==0)printf("

C.if(a!

=0)printf("

D.if(a==0)printf("

9.以下4个选项中,不能看作一条语句的是

  A.{;

B.a=0,b=0,c=0;

C.if(a>

0);

D.if(b==0)m=1;

n=2;

10.以下程序段中与语句k=a>

(b>

c?

1:

0):

0;

功能等价的是

   A.if((a>

B)&

C))k=1;

B.if((a>

B)||(b>

C)) 

k=1

      else 

k=0;

   C.if(a<

=B) 

D.if(a>

B) 

k=1;

    elseif(b<

=C) 

elseif(b>

C) 

        elsek=0;

11.有以下程序

{int 

a=1,b=2,m=0,n=0,k;

k=(n=b>

a)||(m=a<

b);

k,m);

   A.0,0 

B.0,1 

C.1,0 

D.1,1

12.有定义语句:

a=1,b=2,c=3,x;

则以下选项中各程序段执行后,x的值不为3的是

A.if(c<

a)x=1;

B.if 

(a<

3)x=3;

  elseif(b<

a)x=2;

elseif(a<

2)x=2;

   elsex=3;

elsex=1;

C.if(a<

D.if 

b)x=b;

  if(a<

if 

(b<

c)x=c;

1)x=1;

(c<

a)x=a;

13.有以下程序

i=1,j=1,k=2;

if((j++‖k++)&

i++)printf("

执行后输出结果是

   A.1,1,2 

B.2,2,1 

C.2,2,2 

D.2,2,3

14.有以下程序

a=5,b=4,c=3,d=2;

b>

elseif((c-1>

=d)==1)

d+1);

else

d+2)

  A.2 

B.3 

C.4 

D.编译时有错,无结果

15.已有定义:

intx=3,y=4,z=5;

,则表达式!

(x+y)+z-1&

y+z/2的值是

   A.6 

B.0 

C.2 

D.1

16.有一函数, 

以下程序段中不能根据x值正确计算出y值的是

   A.if(x>

0)y=1;

   

B.y=0;

     elseif(x==0)y=0;

  

      elsey=-1;

    elseif(x<

0)y=-1;

   C.y=0;

D.if(x>

=0)

    if(x>

0)y=1 

;

elsey=0;

     elsey=-1;

elsey=-1;

17.有以下程序

ma

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2