当前位置:文档之家› 第四章 选择结构

第四章 选择结构

第四章 选择结构
第四章 选择结构

第四章选择结构程序设计

教学要求:通过本章的教学,读者必须掌握选择结构程序设计的两种语句:if语句和switch语句的结构及其控制程序的过程;掌握选择结构程序设计的方法,能运用选择结构的两种语句熟练进行选择结构程序设计。

教学提示:C语言中使用if语句设计选择结构程序运用最多,有缺省else子句的单分支选择结构,也有带else子句的多(双)分支选择结构。还有嵌套的if语句和switch语句多用于设计多分支选择结构的程序。

教学内容:选择结构是C语言的三种基本结构之一,前面已经对顺序结构进行了介绍,接下来,本章将介绍选择结构及其选择结构程序设计的相关知识,内容主要包括:实现选择结构的两种语句(if语句和switch语句)的语法格式、结构特点、功能,以及使用它们进行选择结构程序设计的方法。

第一节if语句

日常生活中经常遇到根据某种条件进行判断,当条件满足时完成某种工作;而当条件不满足时就做另一项工作。本节将介绍的if选择结构就是为了解决这类问题的。它根据给定的条件进行判断,以决定执行某个分支程序段。

if语句的一般形式

if(表达式)

{语句组1;}

else

{语句组2;}

其中:当执行if语句时,如果表达式的值为“真”则执行语句组1,否则执行语句组2。

if语句的执行过程:

(1)缺省else 子句时: 当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,否

图4.1(a ) 图4.1(b )

(2)指定else 子句时:当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,然后转向下一条语句;否则,执行语句组2。如图4.1(b)所示。 提醒:

(1)if 语句中的“表达式”必须用“(”和“)”括起来。其中“表达式”通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if (a=5)语句;if(b)语句;都是允许的。只要表达式的值为非0,即为"真"。如在if(a=5)…;中表达式的值永远为非0,所以其后的语句总是要执行的,当然,这种情况由于并未起到判断的作用,在程序中一般不会出现,但在语法上却是合法的。

(2)if (表达式)的圆括号后不要跟分号“;”。而语句组中的语句必须以分号“;”结束。如:if(x>y); 从语法上讲也没错,但它表示语句组1由一条空语句组成,什么也不做,因而没有任何实际意义。 (3)else 子句是if 语句的一部分,必须与if 配对使用,有else 子句就必须有与之配对的if 语句,不能单独使用。但if 语句不一定都有else 子句,省略else 子句即为通常所说的单分支程序。 例4.1输入两整数求其最大数 方法一:不带else 子句的if 语句 流程图:

图4.2(a)

程序如下:

main()

{

int a,b,max;

printf("\n please input two numbers a,b: "); scanf("%d,%d",&a,&b);

max=a;

if (max

max=b;

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

}

运行结果为:

please input two numbers a,b: 22,8↙

max=22

方法二、带else的if语句

流程图:

图4.2(b)

程序如下:

main()

{

int a, b,max;

printf("\n please input two numbers a,b: "); scanf("%d,%d",&a,&b);

if(a>b)

max=a;

else

max=b;

printf("max=%d\n",max); /*输出最大数*/

}

运行结果为:

please input two numbers a,b: 22,8↙

max=22

(4)语句组1和语句组2可以是一个语句也可以是多个语句,由一条语句构成时,不需用{ }括起来,但使用多个语句时要用{ }括起来的复合语句形式。例如:我们以常遇到的当条件成立时要进行交换,而交换通常用下面三条语句来完成:temp=a;a=b;b=temp;那么,我们在编写程序时应将三条语句用{ }括起来。即{ temp=a;a=b;b=temp;}的方式。

例4.2解方程ax+b=0,a和b从键盘输入.

流程图:

图4.3

程序如下:

main( )

{

float a,b,x;

printf("\n please input two number a,b: ");

scanf("%f,%f",&a,&b);

if(a==0.0)

printf("error input data.\n"); /当a=0时,一元一次方程不成立,输入错误*/

else

{

x=-b/a; /*计算一元一次方程的根*/

printf("x=%f\n",x); /*输出一元一次方程的根*/

}

}

运行结果为:

please input two number a,b:2,3↙

x=-1.500000

(5)if语句允许嵌套。所谓if语句的嵌套是指,在“语句组1”或(和)“语句组2”中,又包含有if语句的情况。也就是我们通常所说的多分支选择结构。但要注意在一个程序中可能有多个if –else 形式的语句,而不一定都是嵌套结构,只有在if—else各语句组中再次包含if—else形式才是嵌套,否则为并列结构的if—else。

强调:if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。

为明确匹配关系,避免匹配错误,强烈建议:将内嵌的if语句,一律用花括号括起来。

例4.3输入两数判断其大小关系

流程图:

图4.4

程序如下:

main()

{

int a,b;

printf("please input two number a,b: ");

scanf("%d,%d",&a,&b);

if(a!=b)

if(a>b) printf("a>b\n");

else printf("a

else printf("a=b\n");

}

运行结果为:

please input two number a,b:5,6 ↙

a

说明:本例中用了if语句的嵌套结构。采用嵌套结构实质上是为了进行多分支选择,例中实际上有三种选择即A>B、A

程序修改如下:

main()

{

……

{

if(a>b) printf("a>b\n");

else printf("a

}

……

}

例4.4输入任意三个整数a、b、c,求三个数中的最大值。

分析:先将两数进行比较,求出两者中的较大数,再将这两数中的较大数与第三数进行比较。得出三个数中的最大数。

流程图:

图4.5

程序如下:

main()

{

int a,b,c,max;

printf("Please input three numbers a,b,c:");

scanf("%d,%d,%d",&a,&b,&c);

if (a>b)

max=a;

else

max=b;

if (c>max)

max=c;

printf("The three numbers are:%d,%d,%d\n",a,b,c);

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

}

运行结果为:

Please input three numbers a,b,c:10,22,8↙

The three numbers are:10,22,8

max=22

说明:在本例中出现了两个if和一个else,其中:从程序中可看出第一个if与紧接着的else是配对的,表示当条件a>b成立时,a=max;b=max。而下一个if语句与是当第一次比较完成后进行第二次比较。因此第二个没带else的子句与第一个if--else语句的关系是并列的而不是嵌套关系。其中第一个if语句,也可变为不带else子句的形式,请读者思考如何修改?

第二节switch语句

多分支选择的问题可以使用嵌套的if语句解决,但从前面的例题我们不难发现嵌套的if—else 结构使程序在阅读理解上不很清晰,因此在某些情况下,使用switch 语句可能更为方便。特别是当我们的问题需要按照不同的条件进行多路分支时,使用switch 语句就更能体现出其优越性了。

switch语句的一般形式:

switch(表达式)

{

case 常量表达式1:语句组1;break;

case 常量表达式2:语句组2;break;

......

case 常量表达式n:语句组n;break;

[default:语句组n+1;[break; ]]

}

switch语句的执行过程为:

(1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case 后面的语句(组);当执行到break语句时,跳出switch语句,转向执行s witc h语句的下一条;(2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default 后面的语句(组)。然后,再执行switch语句的下一条语句。

说明:

(1)switc h是C语言的关键字,它表示switch语句的开始。

(2)switch后面的“表达式”,可以是int、char和枚举型数据或者整型表达式,但不允许是变量,可允许是与switch后面表达式类型一致的常量。表达式两边的圆括号不能省略。

(3)case也是C语言的关键字,它与其后面的“常量表达式”合称case标号。每个case后面“常量表达式”的值的类型必须与switch后面表达式的数据类型一致,各个case标号的值必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。

(4)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,而不再进行标号判断。注意:case和“常量表达式”之间要有空格,并且常量表达式后面是冒号“:”,而不是分号“;”。

(5)switch语句中的break语句作用是非常重要的,它保证语句序列执行结束后跳出switch语句,所以case语句序列后必须加上break语句,以便结束switch语句。否则程序继续往下执行下一个case语句。当然最后一个语句后的break语句可以省略。

例4.5阅读下面程序,分析程序运行结果:

main()

{

int a;

printf("please input integer number: ");

scanf("%d",&a); /*输入一个整型数*/

switch(a)

{

case 1:printf("Monday\n"); /*输出Monday */

case 2:printf("Tuesday\n"); /*输出Tuesday */

case 3:printf("Wednesday\n"); /*输出Wednesday */

case 4:printf("Thursday\n"); /*输出Thursday*/

case 5:printf("Friday\n"); /*输出Friday*/

case 6:printf("Saturday\n"); /*输出Saturday */

case 7:printf("Sunday\n"); /*输出Sunday */

default:printf("error\n"); /*输出错误*/

}

}

本程序是要求输入一个整型数字,然后输出一个表示星期的英文单词。但是当输入一个数之后,却执行了相应case以及以后的所有语句,如:输入数字3,将输出星期三(Wednesday)及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,"case常量表达式"只相当于一个语句标号,而并未根据case后的常量表达式的值进行判断。表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,而是继续执行下一个case语句。所以出现了继续执行所有后面case语句的情况。这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况,C语言还提供了一种brea k 语句,专门用于跳出switc h语句,break语句只有关键字break,没有参数。用于结束程序段的执行。所以要正确输出结果应将程序修改为在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。

请大家将上例中的每个case语句之后增加break语句后再调试运行程序并比较两次程序运行结果的不同。

(6)各case及default子句的先后次序,不影响程序执行结果。其中的default也是C语言的关键字,也起语句标号的作用,它代表除case标号之外的其它标号,一般把default子句放在所有case子句后面,

并且default子句可以省略。

(7)多个case子句,可共用同一语句(组)。

例如:

case ‘A’:

case ’B’:

case ‘C’:printf(?>60\n?);break;

其含义为:当表达式的值为‘A’,‘B’,‘C’时都执行printf语句,并跳出switch语句。

(8)用switch语句实现的多分支结构程序,也完全可以用if语句或if语句的嵌套来实现。

例4.6用户输入两个运算数和一个四则运算符,再输出相应计算结果。

分析:根据输入的字符c为‘+’、‘-’、‘*’、‘/’时分别计算,因此可以采用switch语句。

流程图:

图4.6

用switch语句程序如下:

main()

{

float a,b,s;

char c;

printf(?please input expression: a+(-,*,/)b \n");

scanf("%f,%c,%f",&a,&c,&b); /*输入操作数和运算符*/

switch(c)

{

case '+': printf("%.2f+%.2f=%.2f\n",a,b,a+b);break; /*输入运算符为?+?时,输出两数之和*/ case '-': printf("%.2f-%.2f=%.2f\n",a,b,a-b);break; /*输入运算符为?-?时,输出两数之差*/ case '*': printf("%.2f*%.2f=%.2f\n",a,b,a*b);break; /*输入运算符为?*?时,输出两数之积*/ case '/': printf("%.2f/%.2f=%.2f\n",a,b,a/b);break; /*输入运算符为?/?时,输出两数之商*/ default: printf("input error\n"); /*输入其它符号时,输出错误信息。*/

}

}

运行结果为:

please input expression: a+(-,*,/)b:5,*,4 ↙

5.00*4.00=20.00

本例还可用if语句完成,请大家自己自己修改程序

提醒:if语句和switch语句均可以构成选择结构。设计多分支选择结构的程序时一般用嵌套的if或switch语句。一般情况下:在使用if语句或switch语句时,通常是如果需要计算多个表达式的值,再根据计算的结果选择执行某个操作时一般使用嵌套的if语句;如果只需要计算一个表达式,再根据表达式的多种结果选择执行某个操作,则使用switch语句。

第三节选择结构程序设计举例

例4.7输入任意三个数并按从大到小的顺序排序输出。

分析:先将两数比较,大的排前,小的排后;然后将第三数分别与大数和小数再进行比较。为简化程序设计常利用中间变量temp实现交换方式将大数放入a变量,中间数放入b变量,小数放入c变量。流程图:

图4.7

程序如下:

main( )

{

int a,b,c,temp;

printf("Please input three numbers a,b,c:");

scanf("%d,%d,%d",&a,&b,&c);

if (a

if (a

if (b

printf("Three numbers after sorted: %d,%d,%d\n",a,b,c);

}

程序运行情况如下:

Please input three numbers a,b,c:10,22,8↙

Three numbers after sorted: 22,10,8

例4.8从键盘上输入任一年份year(4位十进制数),判断其是否闰年。(判断其是闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。)

分析:

(1)如果X能被Y整除,则余数为0,即如果X%Y的值等于0,则表示X能被Y整除!

(2)由于条件表达式较长,我们可用leap作为是否闰年的标志。首先将是否闰年的标志leap预置为0(非闰年),这样仅当year为闰年时将leap置为1即可。这种处理两种状态值的方法,对优化算法和提高程序可读性非常有效。

(3)用year % 4==0且year % 100 != 0或year%400==0作为条件进行判断是否为闰年。

流程图:

图4.8

程序如下:

main()

{

int year,leap=0; /* leap=0表示预置为非闰年*/

printf("Please input the year:");

scanf("%d",&year);

leap=(year%4==0&&year%100!=0)||(year%400==0) /*计算表达式的值,用于判断是否为闰年。*/

if (leap==1)

printf("%d is a leap year.\n",year); /*输出该年是闰年*/

else

printf("%d is not a leap year.\n",year); /*输出该年不是闰年*/

}

运行结果为:

Please input the year:2004

2004 is a leap year.

例4.9输入某年某月,输出该月的天数.

分析:在每一年中的1、3、5、7、8、10、12月的天数为31天,4、6、9、11月的天数为30天,而2月的天数根据这一年是否为闰年来决定是29天还是28天。

程序如下:

main( )

{

int year,month,days,flag;

printf("please input year,month:\n");

scanf("%d,%d",&year,&month);

flag=1; /*标志变量*/

switch(month)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:days=31;break; /*月份为1、3、5、7、8、10、12时,该月天数为31天*/

case 4:

case 6:

case 11:days=30;break; /*月份为4、6、9、11时,该月天数为30天*/

case 2: if(year%4==0&&year%100!=0||year%400==0) /*月份为2月时,判断该年是否闰年*/ days=29;

else

days=28;

break;

default:flag=0; /*输入月份不符合1 —12范围时,标志变量的值为0,表示月份输入错误。*/ }

if(!flag)

printf("error input data\n");

else

printf("%d year %d month is %d days.\n",year,month,days);

}

运行结果为下:

please input year,month:2004,2↙

2004 year 2 month is 29 days.

例4.10编写程序,根据输入的成绩分数,输出成绩的等级。(成绩与等级之间的对应关系是:成绩大于或等于90分,等级为A;成绩大于或等于80分,等级为B;成绩大于或等于70分,等级为C;成绩大于或等于60分,等级为D;成绩小于60分,等级为E。)

分析:在这个问题中,首先要输入学生成绩,其次要根据输入的成绩选择显示不同的等级。由于等级的分界点为整10,所以用10去除。

流程图:

图4.9

程序如下:

{ int score, grade;

printf(" please Input a score(0--100): ");

scanf("%d", &score);

grade = score/10; /*将成绩整除以10,转化成switch语句中的case标号*/

switch (grade)

{ case 10:

case 9: printf("grade=A\n"); break; /*标号10和9,都执行本行的2条语句*/

case 8: printf("grade=B\n"); break;

case 7: printf("grade=C\n"); break;

case 6: printf("grade=D\n"); break;

case 5:

case 4:

case 3:

case 2:

case 1:

case 0: printf("grade=E\n"); break; /*标号5、4、3、2、1和0,都执行本行的2条语句*/

default: printf("The score is out of range!\n"); /*成绩超出范围时,提示出错*/

}

}

运行结果为:

please input a score(0—100):85↙

grade=B

第四节实训

一、实训概要

实训目的:

1、理解if语句和switch语句的执行过程。

2、掌握用两种选择结构语句实现选择结构程序设计的方法。

3、能熟练地在程序设计中用选择语句实现一些常用算法。

4、进一步练习程序的跟踪调试技术。

二、实训内容

问题描述:

实训一.求一元二次方程ax2+bx+c=0的根,其中a,b,c由键盘输入。

实训二.已知某商场营业员的保底薪水为450,其工资按当月完成销售额的利润profit(整数)提成+保底工资计算。其销售额的利润与利润提成的关系如下(计量单位:元):profit≤1000 没有提成;

1000<profit≤2000 提成10%;

2000<profit≤5000 提成15%;

5000<profit≤10000 提成20%;

10000<profit 提成25%。

基本要求:

利用选择结构实现题目要求,同时要对输出进行格式控制。

三、实训过程

实训一

1、实训分析:对系数a,b,c的值应考虑以下情形

1)若a=0:

(1) b≠0,则x=-c/b ;

(2) b=0, 则:① c=0, 则x无定根;

② c!=0,则x无解。

2)若a≠0;

① b2-4ac>0,有两个不等的实根;

② b2-4ac=0,有两个相等的实根;

③ b2-4ac<0,有两个共轭复根。

可用if语句完成。

2、实训步骤:

下面给出完整的源程序:

程序如下:

#include "math.h"

main()

{

float a,b,c,s,x1,x2,p,q;

double t;

printf(" please input a,b,c:");

scanf("%f,%f,%f",&a,&b,&c);/*输入一元二次方程的三个系数*/ if (a==0.0)

if(b!=0.0)

printf("the root is :%f\n",-c/b); /*输出一个根*/

else if (c==0.0)

printf("x is inexactive. \n "); /*输出无定根*/

else

printf("no root!\n");

else

{

s=b*b-4*a*c; /*计算b2-4ac的值*/

if(s>=0.0)

if(s>0.0)

{

t=sqrt(s); /*计算b2-4ac的平方根值*/

x1=-0.5*(b+t)/a;

x2=-0.5*(b-t)/a; /*求两不等实根*/

printf("There are two differet roots:%f and%f\n",x1,x2);

/*输出两不等的实根*/

}

else

printf("There are two equal roots:%f\n",-0.5*b/a);

/*输出两相等的实根*/

else

{

t=sqrt(-s); /*计算b2-4ac绝对值的平方根值*/

p=-0.5*b/a; /*求实部*/

q=0.5*t/a; /*求虚部*/

printf("There are two virtual roots:"); /*有两个复根*/

printf("x1=%f+ %f i \t\t x2=%f- %f i \n",p,q,p,q ); /*输出两个共轭复根*/

}

}

实训二

1、实训分析:

要计算工资必须将利润profit与提成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、……),如果将利润profit整除1000,则有:

profit≤1000 对应0、1

1000<profit≤2000 对应1、2

2000<profit≤5000 对应2、3、4、5

5000<profit≤10000 对应5、6、7、8、9、10

10000<profit 对应10、11、12、……

为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可:

profit≤1000 对应0

1000<profit≤2000 对应1

2000<profit≤5000 对应2、3、4

5000<profit≤10000 对应5、6、7、8、9

10000<profit 对应10、11、12、……

2、实训步骤:

下面给出完整的源程序:

main()

{long profit;

int grade;

float salary=450;

printf("input profit: ");

scanf("%ld", &profit);

grade= (profit – 1) / 1000;/*将利润-1、再整除1000,转化成switch语句中的case标号*/ switch(grade)

{ case 0: break; /*profit≤1000 */

case 1: salary += profit*0.1; break; /*1000<profit≤2000 */

case 2:

case 3:

case 4: salary += profit*0.15; break; /*2000<profit≤5000 */

case 5:

case 6:

case 7:

case 8:

case 9: salary += profit*0.2; break; /*5000<profit≤10000 */

default: salary += profit*0.25; /*10000<profit */

}

printf("salary=%.2f\n", salary);

}

四、实训总结

通过实训,我们进一步看到了选择结构在程序设计的运用,因为生活中的各种问题总是存在一定的分支选择。选择结构语句包括if、switch语句。在if语句中有多种不同的使用方法,有缺省else 子句的单分支程序设计,更多的是条件相对复杂需用带else子句来完成的双分支或多分支结构。同

时当我们在使用条件进行判断时,当只需计算一个表达式并由这个表达式的值的不同来决定作何操作时常用switch语句来完成。

习题

一、填空题

1、若从键盘输入58,则以下程序的输出结果是。

main()

{ int a;

scanf(―%d‖,&a);

if(a>50) printf(―%d‖,a-50);

if(a>40) printf(―%d‖,a);

if(a>30) printf(―%d‖,a+50);

}

2、程序运行的输出结果是。

main()

{

int a=3,b=4,c;

if(a

c=b;

else

c=a;

printf(―%d\n‖,c);

}

二、单项选择题

1、如果不加括号表示else与if的配对关系,则else与if的匹配方法是()

A、else与它上面最远的if配对

B、else与它上面最近的if配对

C、else与离它最近的if配对

D、else与它上面最近的且没有和其它else配对的if配对。

2、下列叙述错误的是()

A、if语句允许用户选择是否执行某个操作。

B、if else语句允许用户选择执行两个操作中的某个操作。

C、switch语句允许用户选择执行多个操作中的某个操作。

D、多分支选择结构只能使用switch语句实现。

3、以下关于switch语句和break语句的描述中,正确的有()

A、在switch语句中必须使用brea k语句

B、break语句只能用于switch语句

C、在switch语句中,可以根据需要使用或不使用break语句。

D、break语句是switch语句的一部分。

三、判断题

c语言第五章 选择结构程序设计(习题册答案)

第五章选择结构程序设计 基础练习(A) 一、填空题 1、关系表达式的运算结果是逻辑值。C语言没有逻辑型数据,以1代表“真”,以0代表“假”。 2、逻辑运算符!是单目运算符,其结合性是由右结合性。 3、C语言提供的三种逻辑运算符是&&、|| 、!。其中优先级最高的为!,优先级最低的为| | 。 4、逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是任何类型的数据。系统最终以0 和非0 来判定它们属于“真”或“假”。 5、设y为int型变量,请写出描述“y是偶数”的表达式(y%2==0)。 6、设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式x2&&x<3。 8、判断char型变量ch是否为大写字母的正确表达式是(ch>=‘A’)&&(ch<=‘Z’)。 9、当a=3,b=2,c=1时,表达式f=a>b>c的值是0。 10、当a=5,b=4,c=2时,表达式a>b!=c的值是1。 11、已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||AB的值是0。 12、若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是1。 13、有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为1。 14、有int x,y,z;且x=3,y=-4,z=5,则以下表达式的值为1。 !(x>y)+(y!=z)||(x+y)&&(y-z) 15、有int a=3,b=4,c=5,x,y;,则以下表达式的值为0。 !(x=a)&&(y=b)&&0 16、if (!k) a=3;语句中的!k可以改写为k= =0,使其功能不变。 二、选择题 1、逻辑运算符两侧运算对象的数据类型(D)。 A)只能是0或1 B)只能是0或非0正数 C)只能是整型或字符型数据 D)可以是任何类型的数据 2、以下关于运算符优先顺序的描述中正确的是(C)。 A)关系运算符<算术运算符<赋值运算符<逻辑与运算符 B)逻辑与运算符<关系运算符<算术运算符<赋值运算符 C)赋值运算符<逻辑与运算符<关系运算符<算术运算符 D)算术运算符<关系运算符<赋值运算符<逻辑与运算符 3、下列运算符中优先级最高的是(B)。 A)< B)+ C)&& D)!= 4、为判断字符变量c的值不是数字也不是字母时,应采用下述表达式(D)。 A)c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122 B)!(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122) C)c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122 D)!(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122) 5、能正确表示“当x的取值在[1,100]和[200,300]范围内为真,否则为假”的表 达式是(C)。 A) (x>=1)&&(x<=100)&&(x>=200)&&(x<=300) B) (x>=1)||(x<=100)||(x>=200)||(x<=300) C) (x>=1)&&(x<=100)||(x>=200)&&(x<=300)

第4章 选择结构

第4章流程控制语句_选择结构 一、指出下列语句中的错误 1. If @x ≥ @y Print @x 2. If 10<@x<20 Set @x=@x+20 二、使用IF 语句编程 1. 计算分段函数 假设自变量x 的值为5,要求:用Set 语句或Select 语句给自变量x 赋值,请编写程序。 2. 使用Set 语句输入一个整数X ,判断X 是否能被2整除。判断结果使用Print 语句输出。 3. 使用Set 语句输入一个整数N ,判断其能否同时被3和5整除。判断结果使用Print 语句输出。 4. 火车站托运行李,按规定当行李重量不超过50公斤时,每公斤运费0.25元,超过50公斤后,超过部分按每公斤0.40元收费。输入行李重量W 公斤,计算出应付多少运费。 注意:先使用Set 语句或Select 语句给变量赋初值。 5. 任意输入一个年份,判断该年是否为闰年,输出结果。 注意:先使用Set 语句或Select 语句给变量赋初值。 6. 用Set 或Select 语句输入3个数据,判断这3个数据是否可以组成三角形,如果能够组成三角形,计算并在窗体上输出三角形的面积。构成三角形的条件是:任意两边之和大于第三边。面积公式为area= ))()((C S B S A S S ---, 其中S=(A+B+C)/2,A 、B 、C 为三条 边的长度。 7. 公用电话收费标准如下:通话时间在3分钟之内(包括3分钟),收费0.5元;3分钟以上,则每超过1分钟加收0.15元。编写一段程序,计算某人通话S 分钟,应缴多少电话费。 三、使用Case 函数编程

第四章选择习题集.doc

第四章选择结构程序设计 一、选择题 1.下列运算符中优先级最高的是。(0级) A)> B)+ C)&& D)!= 2.以下关于运算符优先级的描述中,正确的是。(0级) A)!(逻辑非)>算术运算>关系运算>&&(逻辑与)>||(逻辑或)>赋值运算 B)&&(逻辑与)>算术运算>关系运算>赋值运算 C)关系运算>算术运算>&&(逻辑与)>||(逻辑或)>赋值运算 D)赋值运算>算术运算>关系运算>&&(逻辑与)>||(逻辑或) 3.逻辑运算符的运算对象的数据类型。(0级) A)只能是0或1 B)只能是.T.或.F. C)只能是整型或字符型D)任何类型的数据4.能正确表示x的取值范围在[0,100]和[-10,-5]内的表达式是。(1级) A)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100) B)(x>=-10)&&(x<=-5)||(x>=0)&&(x<=100) C)(x>=-10)&&(x<=-5)&&(x>=0)&&(x<=100) D)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100) 5.以下程序的运行结果是。(1级) main( ) { int c,x,y; x=1; y=1; c=0; c=x++||y++; printf(“\n%d%d%d\n”,x,y,c); } A)110 B)211 C)011 D)001 6.以下程序的运行结果是。(1级) main( ) { int c,x,y; x=0; y=0; c=0; c=x++&&y++; printf(“\n%d%d%d\n”,x,y,c); } A)100 B)211 C)011 D)001 7.判断字符型变量ch为大写字母的表达式是。(1级) A)’A’<=ch<=’Z’B)(ch>=’A’)&(ch<=’Z’)

c语言第五章-选择结构程序设计(习题册答案)资料讲解

c语言第五章-选择结构程序设计(习题册答 案)

第五章选择结构程序设计 基础练习(A) 一、填空题 1、关系表达式的运算结果是逻辑值。C语言没有逻辑型数据,以1代表“真”,以0代表“假”。 2、逻辑运算符!是单目运算符,其结合性是由右结合性。 3、C语言提供的三种逻辑运算符是&&、|| 、 !。其中优先级最高的为! ,优先级最低的为| | 。 4、逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是任何类型的数据。系统最终以 0 和非0 来判定它们属于“真”或“假”。 5、设y为int型变量,请写出描述“y是偶数”的表达式(y%2==0)。 6、设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式 x2&&x<3。 8、判断char型变量ch是否为大写字母的正确表达式是(ch>=‘A’)&&(ch<=‘Z’)。 9、当a=3,b=2,c=1时,表达式f=a>b>c的值是0。 10、当a=5,b=4,c=2时,表达式a>b!=c的值是1。 11、已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||AB的值是0。 12、若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是 1。 13、有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为1。 14、有int x,y,z;且x=3,y=-4,z=5,则以下表达式的值为1。 !(x>y)+(y!=z)||(x+y)&&(y-z) 15、有int a=3,b=4,c=5,x,y;,则以下表达式的值为0。 !(x=a)&&(y=b)&&0 16、if (!k) a=3;语句中的!k可以改写为 k= =0,使其功能不变。 二、选择题 1、逻辑运算符两侧运算对象的数据类型(D)。 A)只能是0或1 B)只能是0或非0正数 C)只能是整型或字符型数据 D)可以是任何类型的数据 2、以下关于运算符优先顺序的描述中正确的是(C)。 A)关系运算符<算术运算符<赋值运算符<逻辑与运算符 B)逻辑与运算符<关系运算符<算术运算符<赋值运算符 C)赋值运算符<逻辑与运算符<关系运算符<算术运算符 D)算术运算符<关系运算符<赋值运算符<逻辑与运算符 3、下列运算符中优先级最高的是(B)。

八年级信息技术教案第四章 择路而行---选择结构程序设计

八年级信息技术教案第四章择路而行---选择结构程序设计 第四择路而行---选择结构程序设计 第一节路口诀择----条语句 一、教学目标 1、掌握选择结构程序中常用的Qbasi语句。 2、掌握选择结构程序设计方法。 3、能利用选择结构程序设计解决简单的实际问题。 二、教学重点: 1.选择结构的语句及功能 2.选择结构中程序设计方法。 三、教学方法:讲授法,对比法,分组讨论法。 四、教学时间:2时 五、教学教程: (一)引入新:前面我们学习了顺序结构程序设计,利用顺序结构只能设计一些较简单的程序,如果要处理复杂的问题,就需要采用另外两种基本结构:选择结构和循环结构。选择结构,是一种常用的主要基本结构,是计算机科学用描述自然界和社会生活中分支现象的重要手段。其特性是:无论分支多寡,必择其一;纵然分支众多,仅选其一。 (二)讲述新

l 单行条选择语句IF 1、单行结构条语句IF…THEN…ELSE 格式:IF <条> THEN <语句1> [ELSE <语句2>] 功能:最简单的条选择语句,用进行条判断,使语句有条的执行。说明: 1)当<条>为真(非零数)时,则执行<语句1>。 2)ELSE语句可以省略。 3)当<条>为假(零)时,而且语句中有ELSE语句则执行<语句2>。 4)IF、THEN、ELSE必须在同一行上。 2、示例A、输入x的值,计算的值。 RE 程序名为:eg1bas INPUT “请输入x的值:”,x IF x>=0 THEN =1+X ELSE =1-2*X PRINT “=“; END 例:求一元二次方程Ax2+Bx+=0(A<>0)的实数根。 分析:写写出程序的流程图,参考流程图写程序。 程序清单如下: INPUT A,B, D=B*B-4*A* IF D<0 THEN then

第5章 选择结构程序设计

第5章选择结构程序设计 第一讲选择结构简介、单分支选择结构、多分支选择 结构 教学目标 1. 了解选择结构。 2. 理解掌握单分支选择结构和多分支选择结构的使用。 教学过程 预备知识 5.1 选择结构程序的设计 所谓选择结构就是由特定的条件决定执行哪条语句的程序结构。 在C#中,提供两种选择语句实现流程的改变: if语句,用于判断特定的条件能否满足,用于单分支选择,也可以通过嵌套实现多分支选择。 switch语句,用于多分支选择。 5.2 单分支选择结构(if语句) if语句是程序设计中基本的选择语句,它根据条件表达式的值选择要执行的后面的内嵌语句序列。一般用于简单选择,即选择项中有一个或两个分支,语句执行的过程中根据不同的情况进行选择其中一个分支执行。 5.2.1if 语句 格式: if(布尔条件表达式) 语句序列; 功能:根据布尔条件表达式的值进行判断: 当该值为真时执行if后的语句序列;

当该值为假时什么都不执行。 5.2.2if …else语句 格式为: if (布尔条件表达式) 内嵌语句序列1; else 内嵌语句序列2; 根据布尔条件表达式的值进行判断,当该值为真时执行if语句后的语句序列,当为假时,执行else语句后的语句序列。该结构一般用于两种分支的选择。 下面结合实例介绍if…else语句的使用方法。

【例5-1】某商店为了吸引顾客,采取以下优惠活动:所购商品在1000元以下的,打9折优惠;所购商品多于1000元的,打8折优惠。试采用if语句实现该优惠。 分析:该问题属于数学分段函数问题,当所购商品总额<1000元时,打折后的商品总额为(所购商品总额*0.9);当所购商品总额>1000时,打折后的商品总额为(所购商品总额*0.8)。 (1) 建立项目 在Visual https://www.doczj.com/doc/e513908961.html,中, 打开“文件”菜单, 依次选择“新建→项目”命令, 打开“新建项目”对话框, 选择“Visual C#项目”, 选择“Windows应用程序”输入项目的名称和存放位置。 (2) 设计窗体 单击工作区左侧的“工具箱”或单击工具栏上工具箱图标,工具箱将显示在工作区左侧。添加相应的控件。 (3) 编辑代码 选中按钮控件,单击鼠标右键,在弹出的菜单中选择“查看代码”命令,或通过“视图”菜单中的“代码”命令,切换到代码视图。也可以双击控件直接在事件中添加代码。代码为: private void button1_Click(object sender, System.EventArgs e)

第4章 选择结构程序设计 练习题

第4章选择结构程序设计 注:选择结构的考点,最重要的有两个,一个是逻辑表达式的值,另一个是分支界限。弄明白这两个知识点,就能够以不变应万变了。 一、单项选择题 1. 在C语言中,能代表逻辑值"真"的是。 A) true B)大于0的数C)非0整数D)非0的数 2. 表示关系x<=y<=z的c语言表达式为。 A) (x<=y)&&(y<=z) B) (x<=y)AND(y<=z) C) (x<=y<=z) D) (x<=y)&(y<=z) 3. 能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是。 A) a>=10 or a<=0 B) a>=0|a<=10 C) a>=10 &&a<=0 D) a>=10‖a<=0 4、判断char型变量c1是否为大写字母的表达式为。 A)?A?<=c1<=?Z? B)(c1>=?A?) & (c1<=?Z?)C)(?A?<=c1)AND (…Z?>=c1) D)(c1>=?A?)&& (c1<=??Z?) 5. 有定义char c; c=getchar(); 判断字符变量c为大写字母的正确表达式为。 A) …A?==…A?&& c<=?Z C)A==A && c<=Z 6. 设有语句“int a=4;b=3,c=-2,d=2;”,则逻辑表达式“a>0&&b&&c<0&&d>0”的值是。 A)1B)0 C)-1 D)出错 7. 设a为整型变量,则不能正确表达数学关系10<a<15的C语言表达式是。 A)1010&&a<15 D)!(a<=10)&&!(a>=15) 8. 为表示逻辑表达式7979 )&&( X<90 ) B) ( X>79 )!=( X<90 ) C) 7979 )||( X<90 ) 9. 在下面的条件语句中(其中s1和s2表示是C语言的语句),只有一个在功能上与其它三个语句不等价,它是。 A)if (a) s1 ; else s2;B)if (a= =0) s2; else s1; C)if (a!=0) s1; else s2; D)if (a= =0) s1; else s2; 10. 假定所有变量均已正确定义,则下列程序段运行后y的值是。 int a=0,y=10; if(a=0) y--; else if(a>0) y++; else y+=y; A)20 B)11C)9 D)0 解析:此类题目可以自行编写下述测试程序进行调试验证。 #include void main(){ ...... printf("y=%d\n",y) ;

c语言第4章 选择结构程序设计习题答案

第4章选择结构程序设计 习题(P111) 4.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 答:C语言中用1表示真,0表示假;系统按照“非0为真,0为假”判断一个逻辑量的真假。 4.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1)a+b>c&&b==c (2)a||b+c&&b-c (3)!(a>b)&&!c||1 (4)!(x=a)&&(y=b)&&0 (5)!(a+b)+c-1&&b+c/2 解:该题在求解过程中注意: 一、优先级。逻辑运算符(&&和||)低于算术运算符和关系运算符而高于赋值运算符,在逻辑运算符中,逻辑非最高,逻辑与其次,逻辑或最低; 二、逻辑表达式的求值规则。(P94) 所以得以上表达式的值分别为:(1)0 (2)1 (3)1 (4)0 (5)1 4.4有3个整数a、b、c,由键盘输入,输出其中最大的数。 分析:这是一个规模较小的求最值的算法,习题1.6用函数的方法实现。该题不用函数调用实现,但方法是最值,再依次和第二、第三个数比较得结果。其中都要用到单分支或双分支选择结构语句。 参考程序如下: main() { int a,b,c,max; /*定义4个整型变量,其中a,b,c存原始数据,max存最值*/ printf("\ninput the value of a,b,c:"); /*提示输入*/ scanf("%d%d%d",&a,&b,&c); /*格式符之间无分隔符,输入时可以以空格、回车、跳格分隔*/ if(a>b) max=a; else max=b; if(max

第四章 选择结构课后编程题答案

石家庄市求实电脑职业培训学校全国计算机等级考试 二级C语言程序设计 统编教程课后编程题参考答案 第四章选择结构 全国统编教程第49页

石家庄市求实电脑职业培训学校 4.21 若a 的值小于100,请将以下选择结构改写成由switch 语句构成的 选择结构。 if(a<30) m=1; else if(a<40) m=2;else if(a<50) m=3;else if(a<60) m=4;else m=5; 30 40 50 60 100 m=1m=2m=3m=4m=5 switch(a/10) { case 3:m=2;break;case 4:m=3;break;case 5;m=4;break;case 6:case 7: case 8:case 9:m=5;break;default:m=1;} 此类试题需要绘制一个数轴,进行分析并写出程序。

石家庄市求实电脑职业培训学校 4.22 编写程序,输入一位学生的生日(年:y0、月:m0、日:d0),并 输入当前的日期(年:y1、月:m1、日:d1 ),输出该省的实际年龄。 # include main() { int y0,m0,d0;int y1,m1,d1;int age; printf(“请输入出生年月日:”); scanf(“%d,%d,%d”,&y0,&m0,&d0);printf(“\n 请输入当前年月日:”); scanf(“%d,%d,%d”,&y1,&m1,&d1);if(y1m1) age=y1-y0-1;else if(d0<=d1) age=y1-y0;else if(d0>d1) age=y1-y0-1; printf(“\n 该生年龄为:%d \n”,age);}

第4章选择结构程序设计

第4章选择结构程序设计 通过本章实验作业应达目标 1.练习并熟练掌握if、switch语句使用,实现二路与多路选择结构; 本章必须上交作业 程序4_2.c、4_3.c、4_4.c、4_5.c上传至http://121.251.227.27:8080/c 实验一大小写转换 【实验目的】 熟悉关系与逻辑运算,了解if-else的顺序与嵌套层次关系。 【实验内容】 下面程序希望完成大小写字母转换功能。若输入一个大写字母,则转化为小写输出;若输入小写字母则转化为大写输出;对其他字母则原样不变输出。程序以4_1.c命名,运行程序,分别输入一次大写、一次小写字母、一次‘#’进行验证。如果程序有错,请改正。 #include void main() {char ch; ch=getchar(); if('a'<=ch<='z') ch-=32; if('A'<=ch<='Z') ch+=32; putchar(ch);putchar('\n'); } 实验二算术运算 【实验目的】 学习if~else、switch语句的使用。 【实验内容】 键盘输入一个算术的运算式子,输出运算结果。这里我们规定可以接收五个算术运算的符号:+、-、*、/、^(乘方)。输入这五个符号以外的运算符号则提醒出错。程序以4_2.c命名并上交。 下图是输入输出的示意图: 输入一个加法的算术式: 输入一个除法的算术式: 输入一个乘方的算术式:

求3的平方根: 【实验提示】 本程序需要从键盘接收一个表达式,根据表达式中的运算符号实现相应的运算并将结果保存下来并输出。 C语言本身是没有乘方运算符的,可以调用数学函数pow(x,y)求x的y次方。注意一定要包含。【思考】 输入的表达式实质是按多个不同类型的数据来获取数据的。程序中需要定义多个变量来接收表达式中包含的数据与运算符,并设计相应的输入/输出函数实现。 实验三金额计算 【实验目的】 学习分析与解决实际问题的能力,综合嵌套使用if~else或switch语句。 【实验内容】 某服装店经营套服。以50套为限,若购买数量不少于50套,每套80元;不足50套时每套90元;只买上衣每件60元;只买裤子每条45元。编写程序实现:读入所买上衣c和裤子t的数量,计算应付款总量。程序以4_3.c命名并上交。 实验四成绩转换 【实验目的】 使用if~else、switch语句的嵌套完成程序。 【实验内容】 【实验提示】 本程序需要从键盘接收两个字符,先判断第一个字符,再判断第二个字符以确定其对应的百分制数。例如:输入4+,第一个字符等于'4',则应再判断第二个字符,如果是'+'则输出80,如果是回车符则输出75,如果是'-'则输出70。 【思考】 对于5+、4-这类输入的数据,程序中应采用什么数据类型与数据结构接收保存? 实验五判断天数 【实验目的】 熟练使用switch语句,并设计精巧程序。 【实验内容】

第4章 选择结构

第4章选择结构 1、以下选项中,当x为大于1的奇数时,值为0的表达式是 A) x%2==0 B) x/2 C) x%2!=0 D) x%2==1 参考答案:A 【解析】算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0?B选项的值为不定值,但绝对不是0?C选项的值为真,即1?D选项的值为真,即1? 2、当变量c的值不为2、4、6时,值为"真"的表达式是 A) (c>=2 && c<=6)&&(c%2!=1) B) (c==2)||(c==4)||(c==6) C) (c>=2 && c<=6)&& !(c%2) D) (c>=2 && c<=6) || (c!=3) || (c!=5) 参考答案:D 【解析】逻辑或表达式中有一个值不为0,结果即为真,逻辑与表达式中只有两个运算对象均非零,结果才为真?所以只有选项D满足要求? 3、以下叙述中正确的是 A) 在C语言中,逻辑真值和假值分别对应1和0 B) 关系运算符两边的运算对象可以是C语言中任意合法的表达式 C) 对于浮点变量x和y,表达式:x==y 是非法的,会出编译错误 D) 分支结构是根据算术表达式的结果来判断流程走向的 参考答案:B 【解析】A选项中,在C语言中,逻辑真值对应非0; C选项中,表达式:x==y 是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。因此B选项正确。 4、下列关系表达式中,结果为"假"的是 A) 3 <= 4 B) (3 < 4) == 1 C) (3 + 4) > 6 D) (3 != 4) > 2 参考答案:D 【解析】B选项中,关系表达式(3<4)==1即1==1,结果为真; C选项中,(3+4)>6即7>6,结果为真;A选项中,3<=4结果为真。D选项中,(3!=4)>2即1>2,结果为假。因此D选项正确。 5、以下叙述中正确的是 A) 对于逻辑表达式:a++ || b++,设a的值为1,则求解表达式的值后,b的值会发生改变 B) 对于逻辑表达式:a++ && b++,设a的值为0,则求解表达式的值后,b的值会发生改变 C) else不是一条独立的语句,它只是if语句的一部分 D) 关系运算符的结果有三种:0,1,-1 参考答案:C 【解析】B选项和A选项中,对于逻辑表达式,其中b的值不会因为表达式的结果发生改变;D选项中,关系运算符的结果有"真"和"假"两种。因此C选项正确。

第4章 选择结构程序设计

第4章选择结构程序设计 1.单项选择题 (1)选择结构程序设计的特点是 B 。 A. 自上向下逐个执行 B. 根据判断条件,选择其中一个分支执行 C. 反复执行某些程序代码 D. 以上都是 (2) 假定所有变量均已正确定义,下列程序段运行后x 的值是A。 a=b=c=0,x=35; if(!a) x--; else if(b); if(c) x=3; else x=4; A. 34 B. 4 C. 35 D. 3 (3)下列各语句序列中,能够且仅输出整型变量a、b 中最大值的是C。 A. if(a>b) printf("%d\n",a); printf("%d\n",b); B.printf("%d\n",b); if(a>b) printf("%d\n",a); C.if(a>b) printf("%d\n",a); else printf("%d\n",b); D.if(a0) y=1; else if(x==0) y=0; else y= -1; printf("%d",y); A.- 1 B. 1 C. 0 D. 2 (5)程序段int x=5,y=8,max; max=(x>y)?x:y; printf("%d",max);的输出

结果是 B 。 A. 5 B. 8 C. 3 D. 13 (6)程序段 int x=3, a=1; switch(x) { case 4: a++; case 3: a++; case 2: a++; case 1: a++; } printf ("%d",a);的输出结果是D。 A. 1 B. 2 C. 3 D. 4 (7)下列语句应将小写字母转换为大写字母,其中正确的是 B 。 A.if(ch>='a'&ch<='z') ch=ch-32; B.if(ch>='a'&&ch<='z')ch=ch-32; C.ch=(ch>='a'&&ch<='z')?ch-32:’’; D.ch=(ch>'a'&&ch<'z')?ch-32:ch; (8)以下程序片段D。 intmain ( ) { int x=0,y=0,z=0; if (x=y+z) printf(“***”); else printf(“###”); return 0; } A.有语法错误,不能通过编译 B.输出:***

C语言第五章选择结构复习题

选择结构程序设计复习题 一.选择题 1.已有定义语句:int x=3,y=4,z=5;,则值为0的表达式是:()a) x>y++ b) x<=++y c) x !=y+z>y-z d) y%z>=y-z 2.已有定义语句:int x=3,y=0,z=0;,则值为0的表达式是:() a) x&&y b) x||z c) x ||z+2&&y-z d) !((x

main() { int i=0; if(i==0) printf(“**”); else printf(“$”); printf(“*\n”); } a) * b) $* c) ** d) *** 8. 若变量a,b,c都为整型,且a=1、b=15、c=0,则表达式a==b>c的值是() a) 0 b) 非零c) “真”d) 1 9. a为0时,值为“真”的表达式是() a) a b) !(++a) c) a=0 d) a==0 10. 若有定义和语句:int a=4,b=5,c=0d; d=!a&&!b||!c;,则d 的值是() a) 0 b) 1 c) -1 d) 非0的数 11. 以下选项不能正确判断a为偶数的表达式是() a) a%2==0 b) !a%2!=0 c) a/2*2-a==0 d) !(a%2) 12. 有以下程序: main() { int a=2,b=1,c=2; if(b

第四章分子结构习题及答案

第四章分子结构习题 1.是非判断题 1-1化学键是相邻原子与原子(或离子与离子)之间的强烈相互作用。 1-2 50Sn2+是18+2电子构型,50Sn4+是18电子构型。 1-3 Al3+,Ba2+,Si(IV)的电子构型都属于8电子构型。 1-4具有未成对电子的两个原子相互接近时可以形成稳定的共价键。 1-5原子形成共价键的数目等于基态原子的未成对电子数。 1-6σ键的特点是原子轨道沿键轴方向重叠,重叠部分沿键轴呈圆柱形对称。 1-7一般来说,σ键的键能比π键键能小。 1-8 s电子与s电子配对形成的键一定是σ键,p电子与p电子配对形成的键一定为π键。 1-9两个σ键组成一个双键。 1-10键的强度与键长无关。 1-11所有非金属元素之间形成的化合物都不是离子化合物。 1-12μ=0的分子,其化学键一定是非极性键。 1-13共价键具有饱和性的原因在于每个原子提供一定数目的自旋方向相反的未成对电子。 1-14原子核外有几个未成对电子,就能形成几个共价键。 1-15共价键类型可以分为σ键和π键,π键的键能小于σ键的键能,因此π键的稳定性弱于σ键。1-16烷烃分子中C-H键的键能为413 KJ·mol-1,因此提供413KJ·mol-1的能量能使甲烷和乙烷分子中C-H键断裂。 1-17沿键轴方向的s轨道和p轨道进行重叠可形成π键。 1-18原子轨道相互重叠应满足最大重叠原理,所以沿键轴以“头碰头”方式才能成键。 1-19原子轨道之所以要发生杂化是因为能增大成键能力。 1-20 sp3杂化是,s轨道的主量子数和p轨道的主量子数可以是不同的,也可以是相同的。 1-21 1个s轨道和3个p轨道,形成1个sp3杂化轨道。 1-22在sp,sp2,sp3杂化中,杂化轨道的成键能力随s轨道成分增多而增强。 1-23发生轨道杂化的原子轨道可以具有成对电子。 1-24原子轨道发生杂化,若轨道上有孤对电子存在,这类杂化是不等性的。 1-25 NH3和H2O分子中的中心原子都是发生sp3杂化,但氧原子的2对孤对电子占据2 个杂化轨道而产生更大的斥力,使O-H键键角大于氨分之中N-H键键角。 1-26色散力仅存在与非极性分子之间。 1-27取向力仅存在于极性分子之间。 1-28 CO2分子与SO2分子之间存在着色散力,诱导力和取向力。

第4章 选择结构程序设计

第4章选择结构程序设计 4.1 if语句 【学习目标】 (1)掌握if语句的语句格式与应用 (2)掌握复合if语句的语句格式与应用 (3)掌握条件运算符的用法 实例13 if语句——根据条件确定公司是否已经为司机投保 【实例任务】 如果司机满足下列条件之一,公司则为他们投保。这三个条件是:(1)司机已婚。(2)司机为30岁以上的未婚男性。(3)司机为25岁以上的未婚女性。如果以上条件一个也不满足,则公司不为司机投保。请编写一个程序,根据用户输入司机的婚姻状态、性别和年龄,判断该司机是否已投保。运行结果如图4-1所示。 图4-1运行结果

【相关知识】 1.选择结构程序设计 选择结构又称分支结构,有二分支或多分支结构。这种结构根据条件判断结果,选择执行不同的程序分支。选择结构是程序的基本结构之一,几乎所有程序都包含选择结构。C语言中可以用两种控制语句来实现程序的分支控制,即if语句和switch语句。用它们均可构成选择结构。 2.单分支选择if语句 单分支选择if语句的形式为: if(表达式)语句; 执行过程,先判断表达式的值,如果成立,则行后面的语句。否则什么也不执行。3.双分支选择if语句 双分支选择if语句的形式为: if(表达式)语句l;else 语句2; 这个条件语句的执行过程,先判断表达式的值,如果成立,执行语句1,如果不成立,执行语句2。 4.多分支选择if语句 多分支选择if语句的形式为: if(表达式1)语句1; else if(表达式2)语句2; else if(表达式3)语句3; ……… else if(表达式n)语句n; else 语句n+1; 其语句是,依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n+1。然后继续执行后续程序。 实际上第三种if语句是第二种语句的嵌套形式。我们可以把第一个判断的else部分看成是一个内嵌语句,它本身是一个语句,而且可以依次类推,即可写成: if(表达式1)语句1; else{if(表达式2)语句2; else{if (表达式3)语句3; ……… else{if (表达式n)语句n; else 语句n+1;}…}}

第四章顺序结构练习题

第四章顺序结构练习题 一、单项选择题: 2、有如下程序段: int a1,a2; char c1,c2; scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2); 若要求a1,a2,c1,c2的值分别为10,20,A,B,正确的数据输入是( A )。 A、10A 20B B、10 A 20 B C、10 A20B D、10A20 B 3、有如下程序,若要求a1,a2,c1,c2的值分别为10、20、A、B,正确的数据输入是(D )。main() { int a1,a2; char c1,c2; scanf(“%d%d”,&a1,&a2); scanf(“%c%c”,&c1,&c2); } A、1020AB B、10 20 AB C、10 20 ABC D、10 20AB 4、有如下程序,输入数据:12345m678后,x的值是(B ),y的值是( A )。#include main() { int x; float y; scanf(“%3d%f”,&x,&y); } (1)A、12345 B、123 C、45 D、345 (2)A、45.000000 B、45678.000000 C、678.000000 D、123.000 5、有如下程序,输入数据:12m345后,x的值是(A ),y的值是( D )。 #include main() { int x; float y; scanf(“%3d%f”,&x,&y); } A、12 B、123 C、12345 D、0

第四章 选择结构

第四章选择结构程序设计 教学要求:通过本章的教学,读者必须掌握选择结构程序设计的两种语句:if语句和switch语句的结构及其控制程序的过程;掌握选择结构程序设计的方法,能运用选择结构的两种语句熟练进行选择结构程序设计。 教学提示:C语言中使用if语句设计选择结构程序运用最多,有缺省else子句的单分支选择结构,也有带else子句的多(双)分支选择结构。还有嵌套的if语句和switch语句多用于设计多分支选择结构的程序。 教学内容:选择结构是C语言的三种基本结构之一,前面已经对顺序结构进行了介绍,接下来,本章将介绍选择结构及其选择结构程序设计的相关知识,内容主要包括:实现选择结构的两种语句(if语句和switch语句)的语法格式、结构特点、功能,以及使用它们进行选择结构程序设计的方法。 第一节if语句 日常生活中经常遇到根据某种条件进行判断,当条件满足时完成某种工作;而当条件不满足时就做另一项工作。本节将介绍的if选择结构就是为了解决这类问题的。它根据给定的条件进行判断,以决定执行某个分支程序段。 if语句的一般形式 if(表达式) {语句组1;} else {语句组2;} 其中:当执行if语句时,如果表达式的值为“真”则执行语句组1,否则执行语句组2。 if语句的执行过程:

(1)缺省else 子句时: 当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,否 图4.1(a ) 图4.1(b ) (2)指定else 子句时:当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,然后转向下一条语句;否则,执行语句组2。如图4.1(b)所示。 提醒: (1)if 语句中的“表达式”必须用“(”和“)”括起来。其中“表达式”通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if (a=5)语句;if(b)语句;都是允许的。只要表达式的值为非0,即为"真"。如在if(a=5)…;中表达式的值永远为非0,所以其后的语句总是要执行的,当然,这种情况由于并未起到判断的作用,在程序中一般不会出现,但在语法上却是合法的。 (2)if (表达式)的圆括号后不要跟分号“;”。而语句组中的语句必须以分号“;”结束。如:if(x>y); 从语法上讲也没错,但它表示语句组1由一条空语句组成,什么也不做,因而没有任何实际意义。 (3)else 子句是if 语句的一部分,必须与if 配对使用,有else 子句就必须有与之配对的if 语句,不能单独使用。但if 语句不一定都有else 子句,省略else 子句即为通常所说的单分支程序。 例4.1输入两整数求其最大数 方法一:不带else 子句的if 语句 流程图: 图4.2(a)

相关主题
文本预览
相关文档 最新文档