作业1讲评很多学生的写法 Include<stdio h> void main(方法2* 如果分支中只有一条语句,吾可以省 int a,bcr 略,一般将复杂的分支放入eSe里 printf("Please input v y scanf(%d %d %d", &/ ) if (ab&&a>c) printf( The Max is /dIn", a) else if (b>a&&b>c) printf( The Max is %dIn", b else printf( The Max is %dIn" c) getchar
作业1讲评-很多学生的写法 #include<stdio.h> void main()/*方法2*/ { int a,b,c; printf("Please input 3 integers:"); scanf("%d %d %d",&a,&b,&c); if (a>b&&a>c) printf("The Max is :%d\n",a); else if (b>a&&b>c) printf("The Max is :%d\n",b); else printf("The Max is :%d\n",c); getchar(); } 如果分支中只有一条语句,{}可以省 略,一般将复杂的分支放入else里
作业 无论输入什么,输出都是“ is a letter 原因是:两个<=的优先级相等,而它 include <stdio. h 们的结合性又是自左向右,因此先算 void maino 左边,无论输入什么字符,左边的判 char c: 断结果不是0(不成立),就是1(成立), 总之,总是小于2z的ASC码122, printf( please inpl c=getchar(; 所以第二次判断的结果永远是成立, 因此执行的分支。 if(a <=c<=Z printf("%c is a letter!",c) else printf("%C is not a letter!,c);
作业1讲评-验证题 #include <stdio.h> void main() { char c; printf(“please input a character:”); c=getchar(); if( ’a’ <=c<=‘z’ ) { printf(“%c is a letter!”,c); } else { printf(“%c is not a letter!”,c); } } •无论输入什么,输出都是“is a letter” •原因是:两个<=的优先级相等,而它 们的结合性又是自左向右,因此先算 左边,无论输入什么字符,左边的判 断结果不是0(不成立),就是1(成立), 总之,总是小于‘z’的ASCII码122, 所以第二次判断的结果永远是成立, 因此执行if的分支
选做题算法 输入a.b,c NO yES a=0? △<0? yES NO 排二次方 无解 求解并输出 结束
选做题算法 输入a,b,c 输出 计算 结束 怎么求? NO a=0? 非二次方程 YES △<0? 求解并输出 NO 无解 YES
Include <math.h> include <stdio.h> 忠告:为避免出错,尽量将每个分支中的 maino 语句用0括起来。 float a, b, C, delta, x1, x2, p, g: printf(" Please enter the coefficients a, b, C: ) scanf(“%f%f%P,&a,&b,&c);/输入三个多 if(a==0) 若不括会怎样呢? i printf(not a quadratic! ):3 ·答:不括的话, else deta=b*b-4*a*c;/计算判别式 只有紧挨在后边的 句才是e|se的分 if(delta<0 printf("No root;/y“无解 支,其它语句不再 else 属于e|se分支 IO=-b/(2a) q=sqrt(delta)/(2*ay X1=p+q;x2=p-q;/求实根x1,x2 printf(x1=%74,x2=%74n,x1,x2);P输出x和xz
#include <math.h> #include <stdio.h> 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*/ } } } 选做题答案 忠告:为避免出错,尽量将每个分支中的 语句用{}括起来。 •若不括会怎样呢? •答:不括的话, 只有紧挨在后边的 一句才是else的分 支,其它语句不再 属于else分支
例3:计算分段函数的值 当每个分支彼此能 ex( x>0) 够分得很楚,可以 计算分段函数y={0(x=0)的值X的值由钱眉多个单分支解决 e(x<0) /程序1 #include<st/ A> #include<y th. h> 算法1 void maid 1.输入x 2若x<0则y=ex float,y 3.若x=0则y=0 scanf(“%P2x); 4若x0则y=e if(X<0)y=exp(-x) f(x==0)y=0; 5输出y if(x>0)y=exp(x) printf("y=f(%f)=%fn",x,y
例3:计算分段函数的值 e x (x > 0) 计算分段函数 y= 0 (x = 0) 的值,x的值由键盘输入。 e -x (x < 0) 算法1: 1. 输入x 2. 若x<0,则y= e -x 3. 若x=0,则y= 0 4. 若x>0,则y= e x 5. 输出y /*程序1*/ #include<stdio.h> #include<math.h> void main() { float x,y; scanf(“%f”,&x); if(x<0) y=exp(-x); if(x==0) y=0; if(x>0) y=exp(x); printf(“y=f(%f)=%f\n”,x,y); } 当每个分支彼此能 够分得很楚,可以 用多个单分支解决 问题