第5章第4节 §54 switch语句 多分支选择结构,即“多选一”,常用于设计菜单 switch语句的形式 switch(表达式) {case常量表达式1:语句1; case常量表达式2:语句2; case常量表达式n:语句n; default:语句n+1 二 switch语句的执行过程 成立,则执行语句,然后执行下一个 case语句中和语句计+1,继续向下 判该 case,…,:行 defaul:中的语句n1,结 计算 switch)中值?ca中人束 表达式的值常量表达式 i>的值 不成立,执行 defaul:中的语句n+1, 结束
第5章 第4节 §5.4 switch 语 句 多分支选择结构,即“多选一”,常用于设计菜单 一. switch语句的形式 switch(表达式) {case 常量表达式1:语句1; case 常量表达式2:语句2; ..... case 常量表达式n:语句n; default : 语句n+1 } 二. switch语句的执行过程 计算switch()中 表达式的值 判该 值?=case 中的值 成立,则执行语句i, 然后执行下一个 case 语句中和语句i+1 ,继续向下一个 case, .....执行defaul : 中的语句n+1,结 束。 不成立,执行defaul : 中的语句n+1, 结束
第5章第4节 解决办法:语句后面加 break语句 switch(表达式) {case常量表达式1:语句1; break; case常量表达式2:语句2; break; case常量表达式n:语句n; break; default:语句n+1 例:输入一个考试分数,输出成绩等级(优、良、中等、及格、不及格) 解法一:用 ifa. else if语句实现 main float score prin(“输入分数”); scanf(“%r”,& rscore); if( score>=90.0) printf(“成绩为:优n”); else if( score>=80.0) printf(“成绩为:良好\n) else if( score>=70.0) printf(“成绩为:中等n”) else if( score>=60.0) printf(“成绩为:及格Ⅶn”); else printf(“成绩为:不及格Ⅷ”);
解决办法:语句i后面加break语句 第5章 第4节 switch(表达式) {case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; ..... case 常量表达式n:语句n;break; default : 语句n+1 } 例: 输入一个考试分数,输出成绩等级(优、良、中等、及格、不及格) 解法一:用if... else if 语句实现 main() {float score; printf(“输入分数:”); scanf(“%f”,&score); if (score>=90.0) printf(“成绩为:优\n”); else if (score>=80.0) printf(“成绩为:良好\n”); else if (score>=70.0) printf(“成绩为:中等\n”); else if (score>=60.0) printf(“成绩为:及格\n”); else printf(“成绩为:不及格\n”); }
第5章第4节 解法二:用if语句实现 main Float score printf(“输入分数:”); scanf(“%r”,& rscore); if( score>=90.0) print(“成绩为:优m”); if( score>=80.0&& score=70.0&& score=60.0&& score<70.0) printf(“成绩为:及格\n”); if( score<60.0) printf(“成绩为:不及格n”);} 想一想if…和i. else if语句在这 个例子中有什么异同???
第5章 第4节 main() {float score; printf(“输入分数:”); scanf(“%f”,&score); if (score>=90.0) printf(“成绩为:优\n”); if (score>=80.0 &&score=70.0&&score=60.0&&score<70.0) printf(“成绩为:及格\n”); if (score<60.0) printf(“成绩为:不及格\n”);} 解法二: 用if... 语句实现 想一想if ....和if...else if 语句在这 个例子中有什么异同???
第5章第4节 解法三:用 switch语句实现 mainO Float score; int print“输入分数:”); scanf(“%r”,& score); i=(int)(score/10.0) switch (i Case 10:; case9: printf(“成绩为:优Ⅷ”); break; case8: printf“成绩为:良好m”); break; case7: printf(“成绩为:中等m”); break; case6: printf(“成绩为:及格Ⅶn”); break; default: printf(“成绩为:不及格in”);}
main() {float score; int i; printf(“输入分数:”); scanf(“%f”,&score); i= (int)(score/10.0); switch(i) {case 10: ; case 9: printf(“成绩为:优\n”); break; case 8: printf(“成绩为:良好\n”); break; case 7: printf(“成绩为:中等\n”); break; case 6: printf(“成绩为:及格\n”); break; default: printf(“成绩为:不及格\n”); } } 解法三: 用switch 语句实现 第5章 第4节
第5章第4节 有关说明 1) switch(表达式 任何类型(ANSI新标准) 常用:整型表达式 1字符型表达式 2)可以多个cae共用一组语句枚举型 switch(i) icase 10: case9: printf(“成绩为:优m”); break; case8: printf(“成绩为:良好n”; break; case7: printf(“成绩为:中等n”); break; case6: printf、成绩为:及格”); break; default: printi(“成绩为:不及格”);} 3)加入 break语句后,各个case及deau的次序不影响结果 switch(i) { default: printf(“成绩为:不及格n”; break; case 10: case9: printf(“成绩为:优ln”); break; case8: printf“成绩为:良好Ⅷm”; break; case7: printf“成绩为:中等m”; break; case6: printf(“成绩为:及格”; break;}
第5章 第4节 三 . 有关说明 1). switch (表达式) 任何类型(ANSI新标准) 常用:整型表达式 字符型表达式 枚举型 2). 可以多个case共用一组语句 switch(i) {case 10: case 9: printf(“成绩为:优\n”); break; case 8: printf(“成绩为:良好\n”); break; case 7: printf(“成绩为:中等\n”); break; case 6: printf(“成绩为:及格\n”); break; default: printf(“成绩为:不及格\n”); } 3)加入break语句后,各个case及default的次序不影响结果 switch(i) {default: printf(“成绩为:不及格\n”); break; case 10: ; case 9: printf(“成绩为:优\n”); break; case 8: printf(“成绩为:良好\n”); break; case 7: printf(“成绩为:中等\n”); break; case 6: printf(“成绩为:及格\n”); break;}
第5章第5节 §55程序举列 P10557给一个不多于5位的正整数,要求:1)求出它是几位数,2)分别 打印出每一位数字,3)按逆序打印了各位数字,例如原数为123,应输出321 思考:1)根据数值大小来判断其位数2)必须分离各位数上的数字 程序:法 main( dlong a; int b, i, j, k, l, m; printf(“ input a data:"”); scanf(“old”,&a); if(a<10)b=1; else if (a<100)b=2 else if (a<1000)b=3 else if (a<10000)b=4; else b=5 a%10;a=a/10; =a%10;a=a/10; k=a%10;a=a/10: l=a%10;a=a/10; m=a%10;a=a/10; printf(“%d,%d,%d,%d,%d,%dn”,b,ii,k】,m)
§5.5 程序举列 第5章 第5节 P105 5.7 给一个不多于5位的正整数,要求:1)求出它是几位数, 2)分别 打印出每一位数字,3)按逆序打印了各位数字,例如原数为123,应输出321。 思考:1)根据数值大小来判断其位数 2)必须分离各位数上的数字。 程序:法一: main() {long a; int b,i,j,k,l,m; printf(“input a data: ”); scanf(“%ld”,&a); if (a<10) b=1; else if (a<100) b=2; else if (a<1000) b=3; else if (a<10000) b=4; else b=5; i=a%10; a=a/10; j=a%10; a=a/10; k=a%10; a=a/10; l=a%10; a=a/10; m=a%10; a=a/10; printf(“%d,%d,%d,%d,%d,%d\n”,b,i,j,k,l,m) }
第5章第5节 程序:法二: maino flong a; int b, i,j, k, l, m printf(“ input a data:"”); scanf(“%ld”,&a); if(a<10)b=1; else if (a<100)b=2 else if (a<1000)b=3; else if(a≤1000)b=4; else b=5: m=a/100007 l=(a-m*10000y1000 k=(am*10000421000)/100; (a-m21000011000-k*100)/10; i=a-m21000011000kx100-10; printi(“%d,%d,%d,%d,%d,%dn”,b,ii,kl,m)
程序:法二: main() {long a; int b,i,j,k,l,m; printf(“input a data: ”); scanf(“%ld”,&a); if (a<10) b=1; else if (a<100) b=2; else if (a<1000) b=3; else if(a<1000) b=4; else b=5; m=a/10000; l=(a-m*10000)/1000; k=(a-m*10000-l*1000)/100; j=(a-m*10000-l*1000-k*100)/10; i=a-m*10000-l*1000-k*100-j*10; printf(“%d,%d,%d,%d,%d,%d\n”,b,i,j,k,l,m) } 第5章 第5节
第5章第5节 P1055,10 思考:凡落入圆中的点,则 z10.0,否则z=0.0。 程序: 0 maint Float x, y,z; int a,bcd: printf((“ inputx,y=“); scanf(“%f,%f,&x,<y) a=(x-2)*(x-2)+(y-2)*(y-2)<=1): b=(x-2)*(x-2)+(y+2)*(y+2)<=1); c=(X+2)*(x+2)+(y+2)*(y+2)<=1); d=(x+2)(x+2)+(y-2)*(y-2)<=1); if(ablc)F10: else z0.0: print(“x,y,z%10.3f,%10.3f,%10.3fn”,x2y,z);
第5章 第5节 P105 5.10 -2 2 -2 2 思考:凡落入圆中的点,则 z=10.0,否则z=0.0。 程序: main() {float x,y,z; int a,b,c,d; printf(“input x,y=“); scanf(“%f,%f”,&x,&y); a=((x-2)*(x-2)+(y-2)*(y-2)<=1); b=((x-2)*(x-2)+(y+2)*(y+2)<=1); c=((x+2)*(x+2)+(y+2)*(y+2)<=1); d=((x+2)*(x+2)+(y-2)*(y-2)<=1); if(a||b||c||d) z=10; else z=0.0; printf(“x,y,z=%10.3f,%10.3f,%10.3f\n”,x,y,z); }
第5章第5节 例如图所示,在xy直角坐标系中有一个 锥体,锥底在xoy平面上,底部半径为5, 圆心位于座标系0点,锥高10,输入任意x, y坐标值后,要求输出对应的道值。即, (xy)对应的点在锥体以外时,输出z0 (x,y)对应的点在锥体以内时,则输出锥面 上对应的z值。 解:若:√x2+y225 在圆锥外,故z=0 若:√x2+y2<5 由10=5得: z-105P1020=10-2Vx2+y
第5章 第5节 例. 如图所示,在xyz直角坐标系中有一个 锥体,锥底在xoy平面上,底部半径为5, 圆心位于座标系0点,锥高10,输入任意x, y坐标值后,要求输出对应的z值。即, (x,y)对应的点在锥体以外时,输出z=0; (x,y)对应的点在锥体以内时,则输出锥面 上对应的z值。 x y z 10 5 o 解: ρ 5 2 2 若: x +y 在圆锥外,故z=0 若: 5 2 2 x +y z 5 5 10 − = z 5 由 得: 2 2 10 2 10 2 5 5 z 10 = − = − x +y − =
第5章第5节 程序 # include” math. h” main 0 floata,y, z,p; printf“ inputx,y=“); scanf(“%of,%r”,&x,&y); p=sqrt(x*x+y*y); if(p>=50)z0.0 else z10 0-2* print(“x,y,z%10.3,%10.3f,%10.3fn”,x,yz)
第5章 第5节 程序: #include”math.h” main() {float x,y,z,p; printf(“input x,y=“); scanf(“%f,%f”,&x,&y); p=sqrt(x*x+y*y); if (p>=5.0) z=0.0 else z=10.0-2*p printf(“x,y,z=%10.3f,%10.3f,%10.3f\n”,x,y,z); }