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

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

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

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

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

C语言基础四选择结构程序设计

四、选择结构程序设计

本章概述:

本章主要考查选择结构设计方法,其中包括关系运算符、逻辑运算符、条件运算符以及最常见的if条件判断语句。

选择结构程序属于3种基本的程序设计方法之一。

通过对历年试卷内容的分析,本章考核内容约占6%,属于一般考查内容。

年份

2007.4

2007.9

2008.4

2008.9

分值

7

2

6

7

大纲要求:

1.用if语句实现选择结构。

  2.用switch语句实现多分支选择结构。

  3.选择结构的嵌套。

重点难点:

1.逻辑运算符的短路原理

2.if语句的嵌套

3.switch语句的使用

考点分析:

关系运算符及其优先次序

关系运算是逻辑运算中比较简单的一种,“关系运算”就是“比较运算”。

将两个值进行比较,判断是否符合或满足给定的条件。

如果符合或满足给定的条件,则称关系运算的结果为“真”;如果不符合或不满足给定的条件,则称关系运算的结果为“假”。

C语言提供6种关系运算符:

【特别提醒】:

关系运算符是双目运算符,由两个字符组成的关系运算符之间不能有空格。

关于优先次序和结合性:

(1)前4种关系运算符的优先级别相同,后两种也相同。

前4种高于后两种。

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

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

●试题解析

1.已有定义:

charc;,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是()[2007年9月第23题]

A.isupper(c)                     B.’A’<=c<=’Z’

C.’A’<=c&&c<=’Z’               D.c<=(‘2’-32)&&(‘a’-32)<=c

解析:

答案A是利用库函数,C和D分别用关系运算符来判断是否是大小写,B不能判

断,应为’A’<=c的结果只能是0或1,永远小于’Z’,答案永远为真,不能判断是否为大小写。

答案为B。

关系表达式

用关系运算符将两个表达式(算术、关系、逻辑、赋值表达式等)连接起来所构成的表达式,称为关系表达式。

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

C语言没有逻辑型数据,以1代表“真”,以0代表“假”。

【特别提醒】:

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

●试题解析

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

A.kk>='A'&&kk<='Z'B.!

(kk>='A'‖kk<='Z')

C.(kk+32)>='a'&&(kk+32)<='z'D.isalpha(kk)&&(kk<91)

解析:

答案A和C都是利用关系运算符来判断是否是大小写,B中如果满足了kk>='A'就不会判断后面的kk<='Z'(短路),所以不能判断,D利用函数。

答案为B。

逻辑运算符及其优先

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

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

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

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

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

(3)!

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

a

b

a&&b

a||b

a

a

 

【特别提醒】:

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

”是单目运算符。

关于优先次序和结合性:

(1)!

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

”为三者中最高。

(2)逻辑运算符中的&&和||低于关系运算符,!

高于算术运算符。

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

●试题解析

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

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)

解析:

逻辑与&&所有的表达式都为真,才为真。

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

答案为B。

逻辑表达式

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

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

逻辑运算结果,以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的值。

●试题解析

1.已有定义:

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。

例如:

if(x>y)printf(“%d”,x);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是真还是假都要执行。

答案为B。

3.有以下程序段

inta,b,c;

a=10;b=50;c=30;

if(a>b)a=b;b=c;c=a;

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

解析:

同上。

答案选C。

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

main()

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

if(x>y)

if(y

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

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

}

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

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

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

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

例如:

if(a>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);

C.if(x>=0)y=sqrt(x);                       D.y=sqrt(x>=0?

x:

-x);

if(x<0)y=sqrt(-x);

解析:

A和C比较简单是正确的,D使用的条件表达式也是正确的,B当x<0时,先计算再判断是错误的。

答案为B。

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中的语句继续执行。

●试题解析

1.有以下程序

  main()

  {intk=5,n=0;

do

{switch(k)

{case1:

case3:

n+=1;break;

  default;n=0;k--;

  case2:

case4:

n+=2;k--;break;

  }

  printf(“%d”,n);

  }while(k>0&&n<5);

  }

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

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

解析:

第一次循环,k为5,执行default;n=0;k--;n=0,k=4;后面没有break故继续执行n+=2;k--;break;,n=2,k=3,排除B和C;第二次循环k为3,执行n+=1;break;n=3,后面有break,故输出3;第三次循环k还是为3,n变成4,第三次循环k还是3,n变成5,此时循环条件结束。

答案选A。

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

[2007年4月填空第9题]

main()

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

switch(a>0)

  {case1:

switch(b<0)

{case1:

switch(“@”);break;

case2:

printf(“!

”);break;

  }

  case0:

switch(c==5)

{case0:

printf(“*”);break;

case1:

printf(“#”);break;

case2:

printf(“$”);break;

}

default:

printf(“&”);

}

printf(“\n”);

}

解析:

a>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)

{case0:

a++;break;

case1:

b++;break;

}

case2:

a++;b++;break;

case3:

a++;b++;

}

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.设有定义:

int a=2,b=3,c=4;,则以下选项中值为0的表达式是

 A.(!

a==1)&&(!

b==0)    B.(a

c||1

 C.a&&b      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.有以下程序

main()

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

    if(i++==1&&(++j==3||k++==3))

       printf("%d %d %d\n",i,j,k);

}

程序运行后的输出结果是 

  A.1 2 3   B.2 3 4    C.2 2 3   D.2 3 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)>10   D.(x-y)*(x-y)<100

7.有以下程序

main()

{

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

 if(a>b)

  if(b>c)

   printf("%d",d+++1);

 else

   printf("%d",++d+1);

 printf("%d\n",d);

}

程序运行后的输出结果是

A.2   B.3   C.43   D.44

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

A.if(a)printf("%d\n",x);elseprintf("%d\n",y);

B.if(a==0)printf("%d\n",y);elseprintf("%d\n",x);

C.if(a!

=0)printf("%d\n",x);elseprintf("%d\n",y);

D.if(a==0)printf("%d\n",x);elseprintf("%d\n",y);

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?

(b>c?

1:

0):

0;功能等价的是

   A.if((a>B)&&(b>C))k=1;   B.if((a>B)||(b>C)) k=1

      else k=0;

   C.if(a<=B)  k=0;          D.if(a>B)  k=1;

      elseif(b<=C)  k=1;           elseif(b>C)  k=1;

                                          elsek=0;

11.有以下程序

main()

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

k=(n=b>a)||(m=a

printf("%d,%d\n",k,m);

}

程序运行后的输出结果是

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

12.有定义语句:

int a=1,b=2,c=3,x; 则以下选项中各程序段执行后,x的值不为3的是

A.if(c

  elseif(b

   elsex=3;                  elsex=1;

C.if(a<3)x=3;         D.if (a

  if(a<2)x=2;            if (b

  if(a<1)x=1;            if (c

13.有以下程序

main()

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

 if((j++‖k++)&&i++)printf("%d,%d,%d\n",i,j,k);

}

执行后输出结果是

   A.1,1,2   B.2,2,1  C.2,2,2   D.2,2,3

14.有以下程序

main()

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

 if(a>b>c)

printf("%d\n",d);

 elseif((c-1>=d)==1)

printf("%d\n",d+1);

 else

printf("%d\n",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;     if(x>0)y=1;

      elsey=-1;         elseif(x<0)y=-1;

   C.y=0;       D.if(x>=0)

    if(x>=0);      if(x>0)y=1;

    if(x>0)y=1 ;    elsey=0;

     elsey=-1;      elsey=-1;

17.有以下程序

ma

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

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

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

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