第3章 分支结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if语句原形结构
if (逻辑关系表达式) “真” { 复合语句 1 } else { 复合语句 2 } if~else 的执行过程
if(逻辑关系表达式)
2*x (x>=0) 例:求 y= T F 真否? 2 x (x<0) #include<stdio.h> 复合语句1 复合语句2 main() { float y,x; scanf(“%f”,&x); if(x>=0) {y=2*x; printf(“y=%f”,y);} 执行复合语句后的语句 else {y=x*x; printf(“y=%f”,y); } }
#include<stdio.h> main() { float y,x; scanf(“%f”,&x); if(x>=0) { y=2*x; printf(“y=%f”,y);} else { y=x*x; printf(“y=%f”,y);} }
#include<stdio.h> main() { float y,x; 简化为: scanf(“%f”,&x); if(x>=0) y=2*x; else y=x*x; printf(“y=%f”,y); }
方法二 条件运算符 #include<stdio.h> main(){ char ch; scanf(“%c”,&ch); ch=(ch>=„A‟ && ch<=„Z‟)?(ch+32):ch; printf(“%c”,ch);}
此处使用了条件运算符
例3.3 若是就显示yes,若不是就显示no。
2
#include <math.h> main(){ 判别条件 float a,b,d,c,x1,x2,p,q; printf( “输入方程系数:” ); 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); } else {p=-b/(2*a); q=sqrt(-d)/(2*a); printf( “x1=%f+i%f,x2=%f-i%f\n”,p,q,p,q); } }
第三章 分支结构程序设计
问题:
1.从键盘输入一个数,如果为正打印,否则不打印.
2.将考试成绩不及格的学生名单打印出来. 3.解一元二次方程,求出相应的实根或复根。 对于上述或类似问题,需要进行某种判断, 并根据不同情况进行不同的处理,怎样进行程 序设计?
第三章 分支结构程序设计
1 2 3 4 5 有几种分支结构语句? if语句原型的执行流程? if的变形有哪几种? switch语句的执行流程? 多分支 if与switch 的区别?
#include<stdio.h> main() { int a; scanf(“%d”,&a); if(a>60) printf(“%d”,a); if(a>40) printf(“%d”,a); if(a>48) printf(“%d”,a);} #include<stdio.h> main() { int a; scanf(“%d”,&a); if(a>60) printf(“%d”,a); else if(a>40) printf(“%d”,a); else (a>48) printf(“%d”,a); } A)5858 B)58 C)5858 D)58 A)58 B)60 C)5858 D)58 58 58
#include<stdio.h> main(){ int a,b,s; printf(“please input a and b”); scanf(“%d,%d”,&a,&b); s=(a*a+b*b>100)?(( a*a+b*b)/100):(a+b); printf(“s=%d”,s); }
#include<stdio.h> main() { float m,d,t; printf(“请输入购物金额: ”); scanf(“%f”,&m); if ( m<250) d=0; if (m>=250 && m<500) d=0.05; if (m>=500 && m<1000) d=0.075; if (m>=1000 && m<2000) d=0.1; if (m>=2000) d=0.15; t=m*(1-d); printf( “实际应付款:%f”,t); }
if语句两种变形 第一种变形:省略else语句 if (逻辑关系表达式) “真” { 复合语句 1 } 例:从键盘输入一个整数,若为 正,则输出该数的平方,否则 T 不输出。即:y=x2(x>0) #include<stdio.h> main() {int x,y; scanf(“%d”,&x); if(x>0) { y=x*x; printf(“x2=%d”,y);} }
源程序2
#include<stdio.h> main() { int y,x; scanf(“%d”,&x); if(x>0) y=2*x; else if (x= =0) y=0; else if (x%2= =0) y=100; else y=x*x; printf(“y=%d”,y);}
以下程序若从键盘输入58,则结果是:
例 3.2 商店售货,按购买货物款的多少分别给予不同的 优惠折扣,编程计算实际应付货款。 购货不足250元,没有折扣; 购货250元(含250元),不足500元,减价5%; 购货500元,不足1000元,减价7.5%; 购货1000元,不足2000元,减价10%; 购货2000元及以上,减价15%; 变量说明: 设购物款为m,折扣率为d,实际付款为t. 则d可表示为: d=0 (m<250) d=0.05 (250 ≦m<500) d=0.075 (500 ≦m<1000) d=0.1 (1000 ≦m<2000) d=0.15 (2000≦m)
假 表达式2 真 表达式3 真 语句2 语句3 语句4 假
#include<stdio.h> main() { int y,x; y= 0 (x=0) scanf(“%d”,&x); 100(x为2的倍数) if (x>0) x2 (x<0) { y=2*x; printf(“y=%d”,y);} else if (x= =0) {y=0; printf(“y=%d”,y);} else if (x%2= =0) { y=100; printf(“y=%d”,y);} else { y=x*x; printf(“y=%d”,y);} } 例 :求 2*x (x>0)
输入购物款: 249 实际应付款:249 输入购物款: 500 实际应付款:462.5
例 3.3 用else if购物折扣程序的另一个写法 #include<stdio.h> main(){ float m,d,t; print(“请输入购物金额: ”); scanf (“%f”,&m); if(m<250) d=0; else if (m>=250 && m<500) d=0.05; else if (m>=500 && m<1000) d=0.075; else if (m>=1000 && m<2000) d=0.1; else 改写后,程序更清晰, d=0.15; 执行时间更省。 t=m*(1-d); printf( “实际应付款:%f”,t); }
ຫໍສະໝຸດ Baidu
说明: (1)if是C语言的关键字,其后一般不加分号。
(2)逻辑关系表达式两侧的圆括号不能省。 (3)复合语句中如若只有一条语句可省略花括号。 (4)if(逻辑关系表达式)的值要么是真(1),要么是假(0)。
例 3.1 求一元二次方程
#include<stdio.h>
ax bx c 0的根
注:闰年的条年为 (1)能被4整除, 但不能被100整除 (2)能被4整除,且又能被400整除
#include<stdio.h> main() { int b; printf(“please input years:\n”); scanf(“%d”,&b); if((b%4= =0&&b%100!=0)|| (b%400= =0)) printf(“ yes\n”); else printf(“no\n”); }
p68习题1.编写程序:从键盘输入整数a与b,如果a2+b2大于 100,则输出百位以上的数字,否则输出两位数之和。
分析:要输出百位以上的数,对100取整即可 #include<stdio.h> main() { int a,b,s; printf(“please input two data”); scanf(“%d,%d”,&a,&b); if(a*a+b*b>100) s=(a*a+b*b)/100; else s=a+b; printf(“s=%d”,s); }
例 3.2 编程实现:将输入的字母转化为小写字母。 方法一 此处可用ch=getchar()
#include<stdio.h> main() if (ch>=65 && ch<=90) { char ch; scanf(“%c”,&ch); if (ch>=„A‟ && ch<=„Z‟) {ch=ch+32; printf(“%c”,ch);} else printf(“%c”,ch); }
if语句的两种变形
第二种变形:增加else if语句
if~else if 的执行过程
假
语法: if 逻辑表达式1“真” 表达式1 { 语句体 1} else if 逻辑表达式2“真” 真 {语句体 2} else if 逻辑表达式3 “真” . {语句体 3} ………. else 语句1 { 语句体 N }
复合语句1
if 的执行过程
if(逻辑表达式) 真否? F
执行复合语句1后的语句
从键盘输入一个数,求y的值 #include<stdio.h> main() 2*x (x>0) { float y,x; y= 0 (x=0) 100(x为2的倍数) scanf(“%d”,&x); x2 (x<0) if(x>0) 当条件较多时,可用多个省 { y=2*x; printf(“y=%d”,y);} if(x= =0) 略了else的if语句。 {y=0; printf(“y=%d”,y);} if (逻辑表达式1) “真” if(x%2= =0) { 复合语句 1 } if (逻辑表达式2) “真” { y=100; printf(“y=%d”,y);} { 复合语句 2 } if(x<0) ………. { y=x*x; printf(“y=%d”,y);} if (逻辑表达式n) “真” { 复合语句n } }
if语句原形结构
if~else 的执行过程 if (逻辑关系表达式) “真” { 复合语句 1 } else { 复合语句 2 }
if(逻辑关系表达式) T 复合语句1 真否? F 复合语句2
执行复合语句后的语句
if语句两种变形 第一种变形:省略else语句 if (逻辑表达式) “真” { 复合语句 1 } 当条件较多时,可用多个省略 T 了else的if语句。 if (逻辑表达式1) “真” { 复合语句 1 } if (逻辑表达式2) “真” { 复合语句 2 } . if (逻辑表达式n) “真” { 复合语句n }
例3.6 小写字母转盘,用户输入一个小写字母,如输入a, 则显示b,输入b则显c,以此类推,输入z则显示a。(P43) #include<stdio.h> main() { char c; scanf(“%c”,&c); if(c>=‟a‟&&c<=„y‟) c=c+1; else c=„a‟; 此处可用c=c-25 printf(“%c\n”,c); } #include<stdio.h> main() { char c; scanf(“%c”,&c); c=(c-‟a‟+1)%26+‟a‟; printf(“%c\n”,c);}