理学选择结构程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1 选择结构和条件判断
• C语言有两种选择语句:
(1)if语句,实现两个分支的选择结构 (2)switch语句,实现多分支的选择结构
4.1 选择结构和条件判断
例4.1 在例3.5的基础上对程序进行改进。题目要求是求
ax2 bx c 0 方程的根。
由键盘输入a,b,c。假设a,b,c的值任意,并不保 证 b2 4ac 0 。需要在程序中进行判别,如果b2 4ac 0 ,就 计算并输出方程的两个实根,否则就输出“方程无实根”的 信息。
default: printf("enter data error!\n"); }
4.8选择结构程序综合举例
例4.8 写一程序,判断某一年是否闰年。 • 解题思路:在前面已介绍过判别闰年的方法 • 本例用不同的方法编写程序
4.8选择结构程序综合举例
• 用变量leap代表是否闰年的信息。若闰年,令 leap=1;非闰年,leap=0。最后判断leap是否为 1(真),若是,则输出“闰年”信息
4.3关系运算符和关系表达式
4.3.1关系运算符及其优先次序 4.3.2 关系表达式
4.4 逻辑运算符和逻辑表达式
4.4.1 逻辑运算符及其优先次序 4.4.2 逻辑表达式
4.5 条件运算符和条件表达式
三、条件运算符:三目运算符
• 一般形式: expr1 ? expr2 : expr3
• 执行过程 • 功例例能例 求(p((i:eafxxrl=(>%siapan=相p=e+2>rtb0rif|=bin()b)n当“=??)t|taf1’xf(Y+()“:于“?-’|%:xb%1’N|d:条=d0’”%”,,a件bd));\n;语”,b句>0?,a+但b:a不p-rb非i)n能;0tf(取“%e代xdp”r,一a1>b般?a=i:f0b语); 句
default : 语句n+1
}
scanf("%c",&grade); printf("Your score:"); switch(grade) { case 'A': printf("85~100\n");break; case 'B': printf("70~84\n");break; case 'C': printf("60~69\n");break; case 'D': printf("<60\n");break;
(c>=‘a’ && c<=‘z’)?c-’a’+’A’:c
• 条件运算符可嵌套
取expr2值
取expr3值
如 x>0?1:(x<0?-1:0)
• 优先级: 13 • 结合方向:自右向左
如 a>b?a:c>d?c:d a>b?a:(c>d?c:d)
4.5 条件运算符和条件表达式
例4.4 输入一个字符,判别它是否大写字母,如 果是,将它转换成小写字母;如果不是,不转 换。然后输出最后得到的字符。
scanf("%否d则",&x); if (x>=0) 若 x = 0, 则y = 0
if (x>0) 否y=则1; y = 1 else 输y=出0;x和y else y=-1; printf("x=%d,y=%d\n",x,y);
4.7 用switch语句实现多分支选择结构
• switch语句用来实现多分支选择结构 – 学生成绩分类 85分以上为’A’等 70~84分为’B’等 60~69分为’C’等 …… – 人口统计分类 按年龄分为老、中、青、少、儿童
– 由于y的可能值不是两个而是三个,因此不 可能只用一个简单的(无内嵌if)的if语句来实 现
scanf("%d",&x);
if(x<0) y = -1;
4.6 选择结构i的f(x=嵌=0套) y = 0;
• 解(1题) 先思后路用:3方ip个fr(法xi独n>t10立f()"的xy=if%=语1d句;,y=处%理d:\n",x,y); 输入x 若 x < 0, 则y =-1 若 x = 0, 则y = 0 若 x > 0, 则y = 1 输出x和y
int main()
{int year,leap;
printf("enter year:"); scanf("%d",&year);
if (year%4==0)
if(year%100==0)
if(year%400==0) leap=1;
else leap=0; else leap=1;
采取锯齿形式
else leap=0;
非0else else
if if
(salary>10=0) (esxaplar3ry>50)
cost=0.075; cost=0.05;
else 非0
cost=0;
statemnt statemnt statemnt
2
3
n
说明: 1、if 语句后面的表达式,一般为逻辑表达式或关系表达式,但
也可是任意的类型。 2、else 不能作为单独的语句使用,必须和if 配对使用。 3、在 if 和 else只能控制其后的一条语句,如果是多条语 句,应 该用{ }括起来成为一个复合语句。 4、if 语句中又包含一个或多个 if 语句。从最内层开始,else 总 是与它上面最近的未曾配对的 if 配对。 5、为避免错用,最好使 if 和 else 数目相同,也可用{ }来确定。
• 参见教材图4.13
#include <stdio.h> int main()
{int year,leap; 标志变量
printf("enter year:"); scanf("%d",&year); if (year%4==0)
if(year%100==0) if(year%400==0) leap=1; else leap=0;
为了使程序清晰、易读,写程序时对选择和循环结构应 采用锯齿形的缩进形式。
4.6 选择结构的嵌套
例4.5有一函数:
1 (x 0)
y
0
(x 0)
1 (x 0)
编一程序,输入一个x值,要求输出相应的y值。
4.6 选择结构的嵌套
• 解题思路: – 用if语句检查x的值,根据x的值决定赋予y的 值
if ( 表达式1 ) else if (表达式2 ) else if (表达式3 )
语句1 语句2 语句3
执行过程:
…... [ else
语句n ]
expr1 非0
statemnt 1
=0
例:if (num=b0er>500)
cost=0.15;
exeplrs2e if (salary>300) cost=0.10;
scanf("%d",&x); if(x<0) y=-1;
4.6 选择结构的嵌套else if(x==0) y=0; • 解题思路:方法2 else y=1; (2) 用一个嵌套的ipf语rin句tf处("理x=:%d,y=%d\n",x,y); 输入x 若x < 0, 则y = -1 否则
若 x = 0, 则y = 0 否则 y = 1 输出x和y
• 解题思路:用条件表达式来处理,当字母是大 写时,转换成小写字母,否则不转换
大写转小写: ch=(ch>='A' && ch<='Z‘)?(ch+32):ch
4.6 选择结构的嵌套
• 在if语句中又包含一个或多个if语句称为if语句 的嵌套
• 一般形式: if( ) if( ) 语句1
else总是与它上面最 近的未配对的if配对
else 语句2
else if( ) 语句3
内嵌if
else 语句4
4.6 选择结构的嵌套
• 在if语句中又包含一个或多个if语句称为if语句 的嵌套
if () {
if () 语句1 } else语句2
内嵌if { }限定了内嵌if范围
例:请分析下列if~else的配对情况
if () if () 语句1
else if () 语句2 else 语句3
if ()
if () {if () 语句1} else 语句2 else语句2
规范书写后一目了然:
if () if () 语句1
else if () 语句2 else 语句3
if () if () {if () 语句1} else 语句2
else 语句2
default: printf("enter data error!\n"); }
scanf("%c",&grade); printf("Your score:"); switch(grade) { case 'A': printf("85~100\n");break; case 'B': printf("70~84\n");break; case 'C': printf("60~69\n");break; case 'D': printf("<60\n");break;
else leap=1; else leap=0; if (leap) printf("%d is ",year);
else printf("%d is not ",year); 与if (leap!=0)含义相同
printf("a leap year.\n"); return 0; }
#include <stdio.h>
例4.3 输入3个数a,b,c,要求按由小到大的顺 序输出。
• 解题思路: S1: if a>b,a和b对换 S2: if a>c,a和c对换 S3: if b>c,b和c对换 S4: 顺序输出a,b,c
(a是a、b中的小者) (a是三者中最小者) (b是三者中次小者)
§4.2.2 if 语句
if语句的三种形式
if (leap) printf("%d is ",year);
else printf("%d is not ",year);
printf("a leap year.\n");
return 0;
}
#include <stdio.h> int main() {int year,leap; printf("enter year:"); scanf("%d",&year); if (year%4==0)
表达式 =0
• 形式一:
– 格式:if (表达式)
非0 语句
语句
– 执行过程:d”,x);
形式二: 格式:if (表达式) 语句1
else
非0 语句1
语句2
执行过程: 例:if (x>y) max=x;
else max=y;
表达式
=0 语句2
形式三: »格式:
• 解题思路:
真 计算x1,x2 输出x1,x2
输入a,b,c
计算disc
disc<0
假 输出无实根
4.2 用if语句实现选择结构
4.2.1 用if语句处理选择结构举例
例4.2 输入两个实数,按代数值由小到大的顺 序输出这两个数。
• 解题思路: S1: 输入a,b S2: 如果 a>b,交换a , b ,否则不交换 S3: 顺序输出a,b
4.7 用switch语句实现多分支选择结构
例4.6 要求按照考试成绩的等级输出百分制分 数段,A等为85分以上,B等为70~84分,C等为 60~69分 ,D等为 60分以下 。成绩的等级由键盘输 入。
4.7 用switch语句实现多分支选择结构
• 解题思路: – 判断出这是一个多分支选择问题 – 根据百分制分数将学生成绩分为4个等级 – 如果用if语句,至少要用3层嵌套的if,进行3 次检查判断 – 用switch语句进行一次检查即可得到结果
• switch语句的作用是根据表达式的值,使流程跳转 到不同的语句
• switch语句的一般形式: 整型或字符型常量、变量或表
switch(表达式)
达式
{ case 常量1 :语句1 case 常量2 :语句2 ┇┇ ┇
必须为简单整型或字符型的常 量,不能是变量或表达式;各 常量必须互不相同。
case 常量n :语句n
default: printf("enter data error!\n"); }
scanf("%c",&grade); printf("Your score:"); switch(grade) { case 'A‘: case 'B‘: case 'C': printf("60~69\n");break; case 'D': printf("<60\n");break;
scanf("%d",&x);
if(x<0) y=-1;
4.6 选择结构el的se 嵌套 提倡内嵌if放在else中
• 解题思路:方if法(x2==0) y=0; (2) 用一个嵌e套ls的e yif=语1;句处理: 输入x printf("x=%d,y=%d\n",x,y);
若x < 0, 则y = -1
相关文档
最新文档