第四章语句与程序控制结构(编辑修改稿)内容摘要:

case ’1’ : printf(“%d\n”, a+b)。 break。 case ’2’ : printf(“%d\n”, ab)。 break。 case ’3’ : printf(“%d\n”, a*b)。 break。 case ’4’ : printf(“%f\n”, (float)a/b)。 } } else printf(“Invalid selsction.”)。 } /*main*/ YS 38 switch语句 示例 main() { char s。 scanf(“%c”,amp。 s)。 switch(s) { case „A‟ : printf(“85~ 100\n”)。 case „B‟ : printf(“70~ 84\n”)。 case „C‟ : printf(“60~ 69\n”)。 case „D‟ : printf(“60\n”)。 default : printf(“错误输入 \n”)。 } } 输入 “ c”,求输出结果。 结果: 60~ 69 60 错误输入 ?! 39 switch语句 示例 解决方法 ——break语句: main() { char s。 scanf(“%c”,amp。 s)。 switch(s) { 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。 default : printf(“错误输入 \n”)。 } } 这才差不多 ! break! 运行结果: 60~ 69 40 switch语句 示例 解决方法 ——break语句: main() { char s。 scanf(“%c”,amp。 s)。 switch(s) { 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。 default : printf(“错误输入 \n”)。 } } 讨论 switch(s)语句中的 s实际上并非真正的条件选择,而只是一种跳转指示(与 if语句不同),表示下面应该跳转到什么位置继续执行。 而各 case实际上只是一个跳转处的标记。 当程序跳转到某个 case处时,并非只执行此 case行的程序组,而是从此处开始一直向下执行各条语句,直到整个switch开关体结束(“ }”)。 如果要使每个 case处相当于一种 if( s) else的效果,必须在其语句组最后加上break语句。 41 switch语句 示例 main() { int x=1,y=0,a=0,b=0。 switch(x) { case 1 : switch(y) { case 0 : a++。 break。 case 1 : b++。 break。 } case 2 : a++。 b++。 break。 case 3 : a++。 b++。 } printf(“a=%d,b=%d\n”,a,b)。 } 说明 每个 case常量表达式的值必须互不相同,否则会出现互相矛盾的结果。 允许多个 case共用一个执行语句。 求程序运行结果。 结果: a=2,b=1。 如果 x=2。 结果: a=1,b=1 如果 x=3。 结果: a=1,b=1 42 程序举例 例:从键盘输入四个整数,输出其中的最大数。 main( ) { int a, b, c, d, max。 printf(”Enter a, b, c, d:”)。 scanf(”%d,%d,%d,%d”, amp。 a, amp。 b, amp。 c, amp。 d)。 max=a。 /*取四者之一假定最大 */ if (bmax) max=b。 if (cmax) max=c。 if (dmax) max=d。 printf(”MAX=%d\n”, max)。 } 43 例:找出三个整数中的最大、最小数。 main( ) { int a, b, c, max, min。 printf(”Enter a, b, c:”)。 scanf(”%d,%d,%d”, amp。 a, amp。 b, amp。 c)。 max=ab? a: b。 max=cmax? c: max。 min=ab? a: b。 min=cmin? c: min。 printf(”MAX=%d\nMIN=%d\n”, max, min)。 } 44 例:输入三个整数,由大到小输出。 main( ) { int a, b, c。 scanf(“%d,%d,%d”,amp。 a,amp。 b,amp。 c)。 if(ab) {t=a。 a=b。 b=t。 } if(ac) {t=a。 a=c。 c=t。 } if(bc) {t=b。 b=c。 c=t。 } printf(”%d,%d,%d\n”, a, b, c)。 } 输入 abc ab? ab bc? ac? ac bc N N N Y Y Y 45 例:输入一个不多于 5位的正整数 要求: 1. 输出它是几位; 2. 输出该数; 3. 逆序、空格分隔输出各位数字; 如输入: 123,输出: 3 2 1 输入 a 求 a的位数 分离 a的各位数字 输出 a、位数、逆序数 字 46 main( ) { long a。 int w, p5,p4,p3,p2,p1。 /*p5高位 */ printf(”Enter a(199999):”)。 scanf(”%ld”, amp。 a)。 if (a=10000) w=5。 /*求解位数 */ else if(a=1000) w=4。 else if(a=100) w=3。 else if(a=10) w=2。 else w=1。 p5=a/10000。 /*分离各位 */ p4=(ap5*10000L)/1000。 /*L:防止溢出 */ p3=(ap5*10000Lp4*1000)/100。 ┇ 47 p2=(ap5*10000Lp4*1000p3*100)/10。 p1=ap5*10000Lp4*1000p3*100p2*10。 printf(“\t%ld,%d\n\t\t”, a, w)。 switch( w ) { case 5: printf(”%d\b\b\b”, p5)。 /*无须 break*/ case 4: printf(”%d\b\b\b”, p4)。 case 3: printf(”%d\b\b\b”, p3)。 case 2: printf(”%d\b\b\b”, p2)。 case 1: printf(”%d\b\b\b”, p1)。 } printf(“\n”)。 } YS 48 另一种输出方法: switch( w ) { case 5: printf(”%d %d %d %d %d”, p1, p2, p3, p4, p5)。 break。 case 4: printf(”%d %d %d %d”, p1, p2, p3, p4)。 break。 case 3: printf(”%d %d %d”, p1, p2, p3)。 break。 case 2: printf(”%d %d”, p1, p2)。 break。 case 1: printf(”%d”, p1)。 } 49 例:输入四个整数,升序排序并输出。 输入 a、 b、 c、 d T ab F ab 248。 T cd F cd 248。 T ac F ac 248。 T bc F bc 248。 T bd F bd 248。 T cd F cd 248。 输出 a、 b、 c、 d ba dc 得: a最小dc b与 c,d的关系未知 cb db B次小 dc 50 while语句 一般形式: while (表达式 ) 语句 其中: 表达式 表示了循环条件;形式:任何表达式。 内嵌语句 为循环体;形式:单条、复合、空语句。 执行流程: 首先求解表达式并对其值进行逻辑判断,为真 执行内嵌语句;之后再次求解表达式并判断,为真 再次执行内嵌语句;当表达式值为假时,退出 while 循环,执行后续语句。 51 循环类型: 当型,先判断后执行,循环体有可能一 次也不被执行。 例:求 main( ) { int i=1, sum=0。 while(i=100) { sum+=i。 i++。 } printf(”%d”, sum)。 } 1001nn52 使用说明: 1) 在 while的循环体中一定要有使循环趋于结束的 语句;否则将形成死循环; 2) 注意循环操作的范围、花括号、分号的使用; 3) 注意与循环有关的变量赋初值的位置及初值的 正确性; 如: i=0。 sum=1。 是错误的。 53 例:输入一个班某门课的成绩,统计 ≥80分的人数, 并计算出平均成绩,保留小数两位。 main( ) { int i, count, score, num, sum。 i=1, count=sum=0。 printf(”Enter number:”)。 scanf(”%d”, amp。 num)。 while(i=num) { printf(”Enter score”)。 scanf(”%d”, amp。 score)。 sum=sum+score。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。