(49)-第3章选择结构程序设计-明辨是非的选择_第1页
(49)-第3章选择结构程序设计-明辨是非的选择_第2页
(49)-第3章选择结构程序设计-明辨是非的选择_第3页
(49)-第3章选择结构程序设计-明辨是非的选择_第4页
(49)-第3章选择结构程序设计-明辨是非的选择_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章选择结构程序设计第3章选择结构程序设计3.1条件选择结构3.2switch选择结构3.3选择结构程序举例

C语言程序设计(第4版)ISBN9787302496014清华大学出版社张磊编著3.1条件选择结构3.1.1选择结构程序示例3.1.2关系表达式3.1.3逻辑表达式3.1.4if命令3.1.5条件运算关系表达式选择结构3.1.1选择结构程序示例#include<stdio.h>intmain(){ints1,s2,ave;printf("输入两门课的成绩:");scanf("%d,%d",&s1,&s2);ave=(s1+s2)/2;if(ave>=90)printf("优等生!\n");elseprintf("加油!\n");return0;}ave>=90成立ave>=90不成立例3-1输入一个学生的两门课的成绩,若平均成绩不低于90,则显示“优等生”,否则显示“加油!”。3.1.2关系表达式关系表达式:由关系运算符连接其他表达式构成的式子。选择结构的条件部分,通常使用关系表达式表示。1.关系运算符关系运算符含义实例>大于ave>90>=大于等于ave>=90<小于ave<90<=小于等于ave<=90==等于ave==90!=不等于ave!=903.1.2关系表达式2.关系表达式的值关系表达式只有两个取值,或者是1,或者是0。所表示的“关系”成立时,其值为1;否则,其值为0。ave=92,ave>=90成立,值为1ave=81,ave>=90不成立,值为0关系表达式求值ave>=903.1.2关系表达式3.关系运算的优先级(1)关系运算“>”、“>=”、“<”以及“<=”的优先级相同,关系运算“==”和“!=”的优先级相同,前面一组运算符的优先级高于后面一组运算符的优先级。(2)关系运算符的优先级低于算术运算的优先级。(3)关系运算符的优先级高于赋值运算的优先级。4.关系运算的结合性所有6种关系运算都是左结合的3.1.3逻辑表达式逻辑表达式:由逻辑运算符连接其他表达式构成表达式,它在程序中常用于表示复杂条件。逻辑运算符功能逻辑表达式实例“与”&&两个条件都要满足时,用“&&”运算s1>=90&&s2>=90“或”||两个条件只需要满足其一时,用“||”运算s1>=90||s2>=90“非”!要否第一个条件时,用“!”运算!(s1<90)(等价s1>=90)1.逻辑运算符3.1.3逻辑表达式2.逻辑表达式的值逻辑表达式只有1和0两个取值。当逻辑表达式成立(逻辑表达式为真)时,其值为1;否则(逻辑表达式为假),其值为0。

ab!aa&&ba||b1(真)1(真)0(假)1(真)1(真)1(真)0(假)0(假)0(假)1(真)0(假)1(真)1(真)0(假)1(真)0(假)0(假)1(真)0(假)0(假)3.1.3逻辑表达式例3-2将数学关系式20<x≤100用逻辑表达式表示,并计算当x=50时该逻辑表达式的值。数学关系式20<x≤100逻辑表达式逻辑表达式求值x=50描述变量x的取值范围x>20,而且x≤100因此使用逻辑与运算&&描述x的取值关系(x>20)&&(x<=100)或x>20&&x<=100x>20

真x<=100

真x>20&&x<=100

真逻辑表达式值:13.1.3逻辑表达式3.逻辑运算符的优先级和结合性

⑴!高于&&,&&高于||。⑵!高于算术运算符,&&、||低于关系运算符。⑶&&、||是左结合的,!是右结合的。3.1.4if命令双分支if命令单分支if命令if命令的嵌套结构if-elseif结构3.1.4if命令结构

if(表达式){语句组1}else{语句组2}执行过程先计算“表达式”的值,若非0,则执行“语句组1”,然后执行紧接“语句组2”之后的语句;否则,跳过{语句组1}而执行{语句组2},然后继续向下执行。1.双分支if命令3.1.4if命令例3-3

计算分段函数的值。(关系表达式作选择条件)#include<stdio.h>intmain(){intx,y;printf("X=");scanf("%d",&x);

if(x>0)y=x+25;

elsey=x-25;printf("Y=%d\n",y);return0;}关系表达式作选择条件3.1.4if命令例3-4

输入一个学生的两门课的成绩,若每门课的成绩都不低于90,则显示“优等生”,否则显示“加油!”。(逻辑表达式作选择条件)

#include<stdio.h>intmain(void){ints1,s2;printf("输入课程成绩:");scanf("%d,%d",&s1,&s2);

if(s1>=90&&s2>=90)printf("优等生!\n");elseprintf("加油!\n");return0;}逻辑表达式作选择条件3.1.4if命令双分支if命令例3-5从键盘输入一个字符,若其为大写英文字母,则输出它的小写形式;否则,原样输出该字符。Aaaa##怎样判断大写字母?ch为大写字母:ch>='A'&&ch<='Z‘ch为大写字母,其小写字母ASCII码值:ch+32算法设计⑴输入字符存储到ch中。⑵判断逻辑表达式ch>='A'&&ch<='Z',若其成立,则以“%c”格式输出ch+32;否则,输出ch。3.1.4if命令实现程序#include<stdio.h>intmain(void){ charch; printf("Input:"); ch=getchar(); printf("Output:");

if(ch>='A'&&ch<='Z') printf("%c\n",ch+32); else printf("%c\n",ch);return0;}逻辑表达式表示复杂条件双分支if结构大写变小写原样输出3.1.4if命令

结构

if(表达式)

{语句组}

执行过程先计算“表达式”的值,若非0,则执行{语句组},然后继续执行if命令的下一个语句;否则,不执行{语句组},而直接执行{语句组}之下的语句。2.单分支if命令该if命令的功能是根据条件(表达式的值),决定是否执行{语句组}。

3.1.3if命令—单分支if命令例3-6

输入一个学生两门课的成绩,若平均成绩不低于90,则显示“优等生”。⑵程序实现#include<stdio.h>intmain(){inta1,a2,ave;printf(“输入成绩,数据之间用“,”分隔:");scanf("%d,%d",&a1,&a2);ave=(a1+a2)/2;

if(ave>=90)

printf("优等生!\n");return0;}⑴算法设计

3.1.4if命令当一个if命令的{语句组}内又使用了if命令时,就形成了if命令的嵌套结构。3.if命令的嵌套结构3.1.3if命令--if命令的嵌套结构例3-7

输入一个学生两门课的成绩,若平均成绩小于0,则显示“数据错误!”;否则,若平均成绩不低于90,则显示“优等生”,否则显示“加油!”。

算法设计根据平均成绩的计算结果,将有两个大的分支:分支一:平均成绩小于0,显示“数据错误!”;分支二:平均成绩不小于0,进一步进行小分支处理。

3.1.3if命令--if命令的嵌套结构#include<stdio.h>intmain(){ inta1,a2,ave; printf("输入两门课的成绩:"); scanf("%d,%d",&a1,&a2); ave=(a1+a2)/2;

if(ave<0)printf("数据错误!\n");

else

if(ave>=90)

printf("优等生!\n");

elseprintf("要加油啊!\n");return0;}

嵌套的if结构外层if结构3.1.4if命令一般结构if(表达式1)

{语句组1}elseif(表达式2)

{语句组2}elseif(表达式3){语句组3}

.

.

.elseif(表达式n){语句组n}else{语句组n+1}

执行过程从上到下逐个对条件进行判断,一旦发现条件满足就执行与它有关的语句组,其下的所有条件都不再判断,当然它们的语句组也不被执行;当任何一个条件都不满足时,执行{语句组n+1}。4.if-elseif结构表达式1表达式2表达式2语句组2语句组4语句组3语句组1ifelseifelseelseif非0非0非00003.1.4if命令--if-elseif结构例3-8用if-elseif结构改写例3-7的程序。#include<stdio.h>intmain(){ inta1,a2,ave; printf("输入两门课的成绩:"); scanf("%d,%d",&a1,&a2); ave=(a1+a2)/2;if(ave<0)printf("数据错误!\n");elseif(ave>=90)

printf("优等生!\n");

else

printf("要加油啊!\n");return0;}

3.1.4if命令--if-elseif结构ave<0ave>=90优等生!加油!数据错误ifelseifelse非000非0ave<0ave>=90优等生!加油!数据错误ifelseifelse非000非0ave<0ave>=90优等生!加油!数据错误ifelseifelse非000非0ave<0ave>=90优等生!加油!数据错误ifelseifelse非000非0这是第1个分支这是第2个分支这是第3个分支if-elseif演示例3-83.1.5条件运算if(x>0)y=x+25;elsey=x-25;条件运算是干什么的?讨论条件运算表达式

y=x>0?(x+25):(x-25)等价3.1.5条件运算

计算“表达式1”的值;当”表达式”1的值非0时,取”表达式2”的值为条件运算表达式的值;否则,取”表达式3”的值为条件运算表达式的值。表达式1?表达式2:表达式3一般形式求值规则?表达式值为155?19+6:213.1.5条件运算例3-9用条件运算计算分段函数的值。#include<stdio.h>intmain(){intx,y;printf("X=");scanf("%d",&x);y=(x>0)?(x+25):(x-25);

printf("Y=%d\n",y);return0;}条件运算表达式执行过程首先计算switch后面表达式的值,然后与第一个case的“常量”进行比较,若不相等,则跳过其下的语句组,再与下一个case的“常量”进行比较;若与某一个case的“常量”相等,则从其下的语句组开始,依次向下执行各语句组的语句,直至遇到一个强制中断语句break或执行完最后一个语句组语句为止。当所有case都不符合要求时,执行default下的语句组语句。一般格式中的“default:”及其语句组允许缺省。3.2switch选择结构

switch语句格式switch(表达式){

case

常量1:

语句组1

case常量2:

语句组2┇

case

常量n:

语句组n

default:

语句组n+1}3.2switch选择结构执行过程3.2switch选择结构例3-10switch执行过程示例程序。#include<stdio.h>intmain()

{inti;scanf("%d",&i);

switch(i)

{case0:printf("zero");case1:printf("one");break;case2:printf("two");case3:printf("three");case4:printf("four");break;default:printf("other");

}printf("\n");return0;}程序中的“break”为中断命令,功能是终止switch语句,使程序立即执行switch语句的后续语句,即“printf("\n");”。

3.2switch选择结构例3-11

缺省case语句组的程序举例。#include<stdio.h>intmain(){ charresult; scanf("%c",&result); switch(result) {

case'A': case'B':

case'C': printf("Good!\n");break;

case'D':

case'E':

printf("Bad!\n");break;

default:

printf("Error!\n"); }

return0;}任何一个case的语句组允许为空。

switch表达式通常为整型值或字符型值,case中常量的类型应与之相应。case中的“常量”位置允许是常数表达式,但不允许是变量表达式。3.3选择结构程序举例闰年问题求解一元二次方程学生成绩分等显示3.3选择结构程序举例例3-12编写一个程序,根据公历历法的闰年规律,判定某个年份是否为闰年。满足闰年条件的逻辑表达式,year表示年份⑴year是400的整倍数year%400==0⑵year是4的整倍数、但不是100的整倍数year%4==0&&year%100!=0⑶对于year,满足上述任何一个条件均为闰年

year%400==0||year%4==0&&year%100!=0闰年小百科地球绕太阳运行周期约为365.24219天,即一回归年。公历的平年只有365天,比回归年短约0.24219

天,每四年累积约一天,把这一天加于2月末,使当年延长为366天,这一年就为闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,经过四百年就会多出大约3天来,因此,每四百年中要减少三个闰年。所以规定公历年份是整百数的,必须是400的倍数才是闰年,不是400的倍数的就是平年。3.3选择结构程序举例算法流程图3.3选择结构程序举例实现程序#include<stdio.h>intmain(){ intyear; printf("Inputyear:"); scanf("%d",&year); if(year%400==0||year%4==0&&year%100!=0) printf("%disaleapyear.\n",year); else printf("%disnotaleapyear.\n",year);return0;}3.3选择结构程序举例例3-13

设计求解一元二次方程(a≠0)的通用程序问题分析与算法设计⑴若有实根,则计算并输出实根⑵程序的输入量为方程的系数a、b、c。。⑶程序中要使用数学函数sqrt(),要注意打开math.h文件。3.3选择结构程序举例3.3选择结构程序举例#include<stdio.h>#include<math.h>intmain(){floata,b,c,floatx1,x2,d;printf("Inputa,b,c:");scanf("%f,%f,%f",&a,&b,&c);d=b*b-4*a*c;

if(d>=0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf("x1=%f,x2=%f\n",x1,x2);}

elseprintf("norealroot.\n");return0;}3.3选择结构程序举例例3-14某班学生有数学、英语两门课程,按百分制成绩进行考核。要求输入各门课程成绩,然后按平均成绩分等显示考核结果。考核结果的等级标准如下:优秀(excellence):平均成绩≥90;良好(allright):80≤平均成绩<90;中等(middling):70≤平均成绩<80;及格(pass):60≤平均成绩<70;不及格(fail):平均成绩<60。3.3选择结构程序举例1.问题分析与算法设计实现学生成绩分等级显示的基本处理过程,可以分成两个阶段。⑴输入成绩并计算平均成绩。⑵分等级显示。成绩分为五个等级,每个等级对应不同的条件。可用if-else

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论