if语句的嵌套

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

思考: else 一句不要可否?
5.5 switch (多分支选择)语句
• 条件多时,若用if,嵌套多,易出错,可用switch.
一.形式:
switch (表达式 ) {case 常量1:语句1 case 常量2:语句2 : : case 常量n :语句n default :语句n+1 } 注意大括号
• #include “math.h” main( ) {float a,b,c,d,x1,x2,p,q; printf ( “input a,b,c(a!=0):”); scanf(“%f,%f,%f”,&a,&b,&c); d=b*b-4*a*c; d是实数,若用d==0可能会 if (d>=1e-6) 使本来是0的数,由于误差 {x1= (-b+sqrt(d))/(2*a) ; 而判别不是零,出错。 x2=(-b-sqrt(d))/(2*a) ; printf(“x1=%8.4f,x2=%8.4f”,x1,x2);} else { p=-b/(2*a); q=sqrt(-d)/(2*a); i\n”,p,q); printf (“x1=%8.2f+%8.2f ________________________ -%8.2f i\n”,p,q); • printf (“x2=%8.2f ________________________} } 思考:若将d=0的情况列出,应怎样作?
void main( ) {float x,y; printf(“\n input x:”); scanf(“%f”,&x); if (x<=10) y=x*x-10; else if ( x<=100) y=x*x+10; else if (x<=200) y=x-100; else y=x+100; printf(“y=%f”,y); }
y=
-1 (x<0) 0 (x=0) 1 (x>0)
void main( ) {float x,y; printf(“\n input x:”); scanf(“%f”,&x); if (x<0) y=-1; else if (x=0) y=0; else y=1; else if (x==0) y=0; printf(“y=%f”,y); } 思考:程序是否有问题?
• void main( ) • { char grade; printf(“输入级别:”); scanf (“%c”,&grade); switch (grade) {case ‟A‟ : printf (“成绩为:优\n”); case ‟B‟ : printf (“成绩为:良\n”); case ‟C‟ : printf (“成绩为:中\n”); case ‟D‟ : printf (“成绩为:及格\n”); case ‟E‟ : printf (“成绩为:不及格\n”); default : printf (“输错,请重输\n”); } } 思考:若grade为‘C’,如何执行和输出
if (ch>='0' && ch<='9') /*ch>=48 && ch<=57*/ printf(“%c is a number“,ch); else if(ch>='a'&& ch<='z' || ch>='A'&& ch<='Z') printf(“%c is a charact“,ch); else if (ch==' ')
运行: • 请输入一个字母ch:d↙ • ch=„d‟,ch-32=100-32=68,输出: 大写为:D,其ASCⅡ码值为:68 • 思考:将上题条件表达式如何换成IF语句? ch=(ch>=‟a‟ && ch<=„z‟)? (ch-32): ch;
• 可
if (ch>=„a‟&& ch<=„z‟) ch=ch-32; else ch=ch; \*取原值不变*\
三、条件表达式
1。条件表达式的一般形式: 表达式1?表达式2:表达式3 2。功能:先判断表达式1的值,为真(非0) 执行表达式2,为假(0)执行表达式3。 3。框图:
真(非0) 假(0)
表达式 1
表达式2值
表达式3值
例如: min=(x<y)? x : y ; 若x<y,取x的值赋给min(把小数赋给min) 若x≥y,取y的值赋给min(把小数赋给min) 相当于: 练习:编程求y的值。 if (x<y) min=x; x2+1 (x>=0) else min=y; y= 2 x -1 (x<0)
例2:写出程序的运行结果
• void main( ) {int x,y=1, z; if (y!=0) x=5; printf(“%d\n”,x) if (z= y<0) x=4; else if (y==0) x=5; else x=6; printf(“%d\n%d\n”,x,z); if (z=!(y ==0)) x=5; 运行: 5 6 x=4 ; printf(“%d,%d\n”,x,z); 0 } 4, 1
用逻辑运算符关系表达式和逻辑值连起来 NOT—!,and(与)—&&,or(或)—|| 结果:逻辑值(1,0)。 (1)if(表达式)语句, (2)if(表达式)语句1 else 语句2 (3)if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 ┊ ┊ else if (表达式n) 语句n else 语句 n+1 多用于有多个条件需要判断得出不同 值的情况。
注意: ’A’ ,‘B’等是 字符常量Biblioteka Baidu不需定义
执行:先判断 grade的值,如:grade=’C’; 当第一个case不满足,则执行第二个,…… 满足输出 常量只起语句标号作用,进入该入口。
运行结果为: 成绩为中 成绩为及格 成绩为不及格 输错,请重输 若:不想让下面的内容都输出,应在每个语句 后加break语句。
作业问题:1。注意复合语句的使用; 2。多条件时应用“if … else if...”,不应用多个if; 3。不能用:5<=x<10,应: x>=5 && x<10; 4. if (表达式)后无“;”号。
作业:实验四: 5
#include "stdio.h" void main() { char ch; printf("\ninput a charact:") ; ch=getchar(); /*scanf(“%c”,&ch);
可不加break
每执行一个case则跳出switch结构。 一次只能执行一个case后面的语句。
例4(P103 5.7) 编程计算运费f。运输公 司计算运费的标准如下: s<250 km 没有折扣 250<= s <500 2%的折扣 500<= s <1000 5%的折扣 1000<= s <2000 8%的折扣 2000<= s <3000 10%的折扣 3000<= s 15%的折扣
case 8: case 9: case 10: case 11: d=10; break; case 12: d=15 ; break; } f = p*w*s*(1-d /100.0); printf(“ f=%15.4f ”,f); }
d定义为 单精度数, 可用d/100
注:题中多个case可以共用一组语句: 如:2、3, 4、5、6、7等
例1(5.3): 编一程序输入整数x的值,求y。(用嵌套)
= -1 (x<0) 分析:如果:x<=0 y = 0 (x=0) 如果:x=0 = 1 (x>0) 否则: void main( ) 否则: {int x,y; printf ( “Input x:”); scanf (%d”,&x); if (x<=0) if ________ if (x==0) y=0; if ___________ else y= -1; else ________ else y=1; else _______ printf(“x=%d,y=%d”,x,y); }
y=(x>=0)? x*x+1 :x*x-1 ;
• 条件表达式也是一个选择结构,但更简练.
(m>n) ? printf(“%d”,m) : printf(“%d”,n);
if (m>n) printf(“%d”,m) ; else printf(“%d”,n);
例3(例5.4) 输入一个字符,判断它是否为小 写。是小写则转换成大写,并输出其ASCⅡ码 值。 ( a→97,A→65) 条件表达式?条件:ch在‘a’~’z’间;真:变大写 void main( ) 假:不变 {char ch; printf(“请输入一个字母ch:”) ch=getchar( ); \*或scanf(“%c”,&ch);*\ ch=(ch>=’a’ && ch<=‘z’)? (ch-32): ch; printf(“大写为%c,其ASCⅡ码值为 %d”,ch,ch); }
break: 中止语句 • 功能:中止下面的语句,跳出switch结 构,往下执行。 • 修改:switch (grate);
{ case’A’ case’B’ case’C’ case’D’ case’E’ default : : : : : :
•}
printf (“成绩为:优\n”) ;break ; printf(“成绩为:良\n”) ;break ; printf(“成绩为:中\n”) ;break ; printf(“成绩为:及格\n”);break ; printf(“成绩为不及格\n”);break ; printf(“输错,请重输\n”);
16 14
d=10
d=8 d=5 d=2
d=15
12
10 8
d 6
4
2 0
0 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000
s
C 0
1
2
3
4
5
6
7
8
9 10 11 12
• void main( ) { int c,s ; float p,w,d,f ; scanf(“%f,%f,%d”,&p,&w,&s); if (s<=3000) c=s/250; else c=3000/250; switch(c) 根据c对应的常量确 {case 0 : d=0 ;break ; 定入口和d的值 case 1: d=2; break; case 2: d=5; break ; case 3:___________ case 4: case 5: case 6: d=8; break ; case 7:____________
复习提问:
1. 何谓逻辑表达式?其逻辑运算符有几 个?逻辑值为何?优先级? 2.如何表示逻辑值?如何判断逻辑值? 3.if语句的三种形式及其功能是什么? 4.求:y x2-10 (x<=10) y= x2+10 (10<x<=100) x-100 (100< x<=200) x+100 ( x>200)
二、功能:
先依次判断case中的常 量是否与表达式的值相等 。如相等,则从其后的语 句往下执行。若没有一个 常量与表达式的值相等, 则执行default后的语句
说明:“表达式”可是任何类型,一般为整形 或字符型;常量仅是起标号作用,表达式与哪 个常量相匹配,就从此标号开始往下执行。
例4: 阅读以下程序
例5(例5.6):编一求解一元二次方程 ax2+bx+c=0 (a≠0)的程序。
• 分析: • ①给a、b、c 赋值。 ②计算△→d=b2-4ac d≥0? →实根: x1= (-b+√ b2 -4ac)/(2*a) x2=( -b-√ b2 -4ac)/(2*a) d<0 → 虚根 p=-b/(2*a), q=√-d / (2*a) x1=p+qi ; x2=p-qi 用到求平方根函数要用预处math.h函数库 ,
二、if语句的嵌套
嵌套:if语句包含if语句。 注意: if ( ) else总是和它上 if ( ) 语句1 else 语句2 面最近的if配对 else if ( ) 语句3 else 语句4 if( ) if ( ) 语句1 else { if ( ) 语句1} if ( ) 语句2 else 语句3 如上:希望与第一个if配对使用,实际上在执行 过程当中是与最近的配对。解决办法:是将 if() 语句1用大括号括起来。{ if ( ) 语句1}
分析:
设:基本运费为p,货物重为w,距离为s, 折扣为d.
• 计算公式:f=p*w*s*(1-d/100) • 随s 不同,d不同。用switch作. 折扣的变化点是250的倍数: • c=s/250,c=1,d=2;c=2和3,d=5;…c=12 表达式: c, • 常量c: 1~12 , 各语句计算 d, • 输入:p,w,s
相关文档
最新文档