第5讲程序的控制结构 多分支(选择)结构程序设计 循环结构程序设计 请大家及时到我的个人主页htp:/les. cqupt. edu.cn./ xieji 或公共邮箱http://stu.cqupt.edu.cn中查看作业回复及下载 课件自学
第5讲 程序的控制结构 多分支(选择)结构程序设计 循环结构程序设计 请大家及时到我的个人主页http://cs.cqupt.edu.cn/xiejb 或公共邮箱http://stu.cqupt.edu.cn中查看作业回复及下载 课件自学
include o) 写程序时,一般在else中嵌套。 printf"od is if() else if(m "∠glse ese f() printf(% else void odd_or_even(int m)/ i(m%2==0)/是否为 【 printf(% d is even Se ●读程序时按默认配对原则:从最内层 〔 printf% d is odd\、开始,else总与离它上面最近且未曾配 void maino 对的订配对,与书写的缩进无关 [int m: scanf( %d",&m): /输入一个整数*/ pos_or_neg(m) odd or even(m)
2 ▪ 习题4.1:求分段函数 ▪ 编程题: #include void main() { int m; scanf("%d", &m); /*输入一个整数*/ if (m > 0) /*是否为正数*/ { printf("%d is positive\n", m); } else { if(m void pos_or_neg(int m); void odd_or_even(int m); void pos_or_neg(int m) /*判断整数m是正、负或0*/ { if (m > 0) /*是否为正数*/ { printf("%d is positive\n", m); } else { if(m < 0) /*是否为负数*/ { printf("%d is negative\n", m);} else /*是 0*/ { printf("%d is 0 \n", m);} } } void odd_or_even(int m) /*判断整数m是奇数还是偶数*/ { if (m % 2 == 0) /*是否为偶数*/ { printf("%d is even\n", m); } /*是偶数*/ else { printf("%d is odd\n", m); } /*是奇数*/ } void main() {int m; scanf("%d", &m); /*输入一个整数*/ pos_or_neg(m); odd_or_even(m); } 写成多函数: •多分支结构 •if-else中又有if-else称为“嵌套” •写程序时,一般在else中嵌套。 if( ) { …… } else {if( ) {……} else {……} } •读程序时按默认配对原则:从最内层 开始,else总与离它上面最近且未曾配 对的if配对,与书写的缩进无关
P95例4-12: 求一元二次方程的根 输入三个系数ab,c NO a==0? VES 计算de|ta delta>=0 NO 输出“不是一元二次方程 yES 求x1x2并输出输出“无解” 结束
3 输入三个系数a,b,c 输出 计算 结束 P95例4-12: 求一元二次方程的根 怎么求? 求解 a==0? 输出“不是一元二次方程” NO YES delta>=0 YES NO 求x1,x2并输出 输出“无解” 计算delta
include #include 忠告:为避免出错,尽量将每个分支中的 mat 0 语句用0括起来。 float a, b, c, delta, x1, x2, P, q: printf( Please enter the coefficients a, b, c scanf(“%6%6%&a,b,&e);/^输入彐若不括会怎 if(a==0) 样呢? printf(not a quadratic! ) ese delta=b*b-4*a*c:/计算判别式*/ if(delta< ° printf( No root!):}/输出“无解”*/ Ise p=-b/(2*a):q= sqrt(delta)/(2a) x2=p-q:求实根×1,x2 prnf(“×1=‰7.4f,x2=%7.4fn”,x1,x2):/输出x1和x2*
4 #include #include main() { float a, b, c, delta, x1, x2, p, q; printf("Please enter the coefficients a,b,c:"); scanf(“%f,%f,%f”, &a, &b, &c); /*输入三个系数*/ if(a==0) { printf(“ not a quadratic!”);} else { delta = b * b - 4 * a * c; /*计算判别式*/ if(delta<0) { printf(“No root!”); } /*输出 “无解” */ else { p = - b / (2 * a); q = sqrt(delta) / (2 * a); x1 = p + q; x2 = p - q; /*求实根x1,x2 */ printf(“x1=%7.4f, x2=%7.4f\n”, x1, x2); /*输出x1和x2*/ } } } 忠告:为避免出错,尽量将每个分支中的 语句用{}括起来。 若不括会怎 样呢?
P99例4-15 根据输入的百分制成绩 score,分段转换 成相应的等级并打印输出。 分析: 输入 score 转换并输出(五个分支)
5 P99 例4-15 ▪ 根据输入的百分制成绩score,分段转换 成相应的等级并打印输出。 ▪ 分析: ▪ 输入score ▪ 转换并输出(五个分支)
Include maino int score; 方法一程序 printf(" Please enter score: ) scanf( %d",&score); if( score100)/对输入数据的合法性进行检查* printf(Input error!\ni 在else分支嵌套 else if tscore > 90) 没有ee会怎样? printf( %d--excellent\n", score): else if (score >=80) rinf("yod--good \n", score); else if (score >=70 printf( %od-fit exactly\n", score) else if( score》60) printf( %d--passn", score) Ise printf( yod--fail \n", score)
6 #include main() { int score; printf("Please enter score:"); scanf("%d", &score); if (score 100) /*对输入数据的合法性进行检查*/ printf("Input error!\n"); else if (score >= 90) printf("%d--excellent\n", score); else if (score >= 80) printf("%d--good\n", score); else if (score >= 70) printf("%d—fit exactly\n", score); else if (score >= 60) printf("%d--pass\n", score); else printf("%d--fail\n", score); } 方法一程序 • 在else分支嵌套 • 没有else会怎样?
用于判断分支 方法二 的表达式 Score/10有1种情况 表达式的所有 可能结果列举 在case后 10 switch(score/10) [case 10 case 9: m ntf(%d----excellent\n, score): break 当上面的情况与下边 18: printf("%d----good\n",score): break: 的情况相同,后边的ase7; printf(%d- fit eve-ry \n"score) break 分支语句可省略 case 6: printfrsoz----pass \n" score): break 当遇到 break时,程 序转到 switch语句的 的》后边 default:prnt(“%d-- fail\n” score) break defau表示除上述 情况以外的所有情况
7 方法二 输出A Score/10有11种情况 10 9 输出A 0 输出E … switch(score/10) {case 10: case 9: printf(“%d----excellent\n”,score);break; case 8: printf(“%d----good\n”,score);break; case 7: printf(“%d----fit exactly\n”,score);break; case 6: printf(“%d----pass\n”,score);break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“%d----fail\n”,score);break; } default: printf(“%d----fail\n”,score);break; • 用于判断分支 的表达式 • 表达式的所有 可能结果列举 在case后 • 当上面的情况与下边 的情况相同,后边的 分支语句可省略 • default表示除上述 情况以外的所有情况。 • 当遇到break时,程 序转到switch语句的 的}后边
include VO d maIn 0 int score; 方法二程序 printf("Please enter score scan &score) if(score100) 执行过 printf(“ nput error!\n) ese 程?? switch(score/10) case 10: case 9: printf("%d----excellent \n", score); break; case8:prnf(“%d---godn”, score): break case 7: printf("%d----fit exactly \n", score): break case 6: printf("%d----passin",, score); break default: printf("%d----fail\n", score) break
8 #include void main() { int score; printf("Please enter score:"); scanf("%d", &score); if(score100) printf(“Input error!\n”); else { switch(score/10) { case 10: case 9: printf(“%d----excellent\n”,score);break; case 8: printf(“%d----good\n”,score);break; case 7: printf(“%d----fit exactly\n”,score);break; case 6: printf(“%d----pass\n”,score);break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“%d----fail\n”,score);break; } } } 方法二程序 default: printf(“%d----fail\n”,score);break; 执行过 程??
涉及到的语法知识 - switch语句 般用于菜单等多分支的情况 般结果为多个离散 switch(表达式) 值的情况 ease常数1:语句序列1; ease常数2:语句序列2 defau1t:语句序列n; 更详细的语法知识请 查阅P96-97
9 涉及到的语法知识 -switch语句 ▪ 一般用于菜单等多分支的情况 switch (表达式) { case 常数1:语句序列1; case 常数2:语句序列2; ………… default:语句序列n; } 一般结果为多个离散 值的情况 更详细的语法知识请 查阅P96-97
练习 maino [int a=l,b=0 switch(a) [case 1: switchb) Icase O: putchar ('o); break case 1: putchar (1); break reak, case 2: printf(a=2 ); break; 读程序时一定注意有没有 break, 并正确分析 break后转到了哪儿? 10
10 练习 main() { int a=1,b=0; switch(a) {case 1:switch(b) {case 0:putchar(‘0’); break; case 1: putchar(‘1’); break; } break; case 2:printf(“a=2”);break; } } !!!读程序时一定注意有没有break, 并正确分析break后转到了哪儿?