
《第3章 分支结构(第二版)》由会员分享,可在线阅读,更多相关《第3章 分支结构(第二版)(52页珍藏版)》请在文档大全上搜索。
1、单分支if语句单分支if语句的形式为:if (表达式) 语句执行过程如图所示首先判断表达式的值是否为真,若表达式的值非0,则执行其后的语句;否则不执行该语句。在if语句中,if关键字后的表达式必须用括号括起来,且之后不加分号。表达式语句真(非0) 假(0)【例】输入两个整数,按从大到小的顺序输出这两个数。 #include int main() int a,b,t; printf(enter one number: ); scanf(%d ,&a,); printf(enter the other number: ); scanf(%d ,&b,); if (ay) printf(“%d”,x
2、); else printf(“%d”,y); 表达式表达式 语句语句1 语句语句2非非00双分支if语句 #include #include int main()float a,b,c,deta,x1,x2,p,q;printf(“input a,b,c:”);scanf(“%f,%f,%f”, &a, &b, &c); deta=b*b-4*a*c; if (fabs(deta)1e-6) /*求出两个不相等的实根*/ x1=(-b+sqrt(deta)/(2*a); x2=(-b-sqrt(deta)/(2*a); printf(x1=%7.2f,x2=%7.2fn, x1, x2);
3、else /*求出两个共轭复根*/ p=-b/(2*a); q=sqrt(fabs(deta)/(2*a); printf(“x1=%7.2f + %7.2f in“, p, q);/*输出两个共轭复根*/ printf(”x2=%7.2f - %7.2f in“, p, q); return 0; 【例例1】求一元二次方程ax2+bx+c=0的解(a0)1/x+1/a 1/x+1/a 当当x0,a0 x0,a0时时 10000 10000 其它其它aba&ba|b!a真真真真假真假假真假假真假真真假假假假真运算符类型优先级运算符基本1() . : .* * &(引用)单目2* & new d
4、elete ! + - sizeof + 算术3* / %4+ 移位5 关系6 =7= !=位逻辑8&910|逻辑11&12|条件13? :赋值14= += = *= /= %= | = = &= = =逗号15,【例例】由年份判断某一年是否闰年。分析:闰年的条件:1)年份能被4整除,但不能被100整除,是闰年;2)年份能被100整除,又能被400整除,是闰年。不满足这两个条件的不是闰年。以变量leap代表是否闰年的信息。若闰年,令leap=1;非闰年,leap=0。#includeint main()int year,leap=0;printf(“input year:”);scanf(“%
5、d”,&year);if ( year % 4 = 0 & year % 100 != 0 ) | (year % 100 = 0 & year%400 = 0) leap=1;else leap=0;if (leap) printf(%d is a leap year.n ,year);elseprintf(%d is not a leap year.n ,year); return 0;a a, ,A A, , 1 1abcabc、“a a”字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法 一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去
6、,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。注意: 一个字符数据既可以以字符形式输出,也可以以整数形式输出。以“”为例来说明,它相当于使进行一次自加()的操作。即先使加,再赋给。语言规定可以使用种复合赋值运算符:语言规定可以使用种复合赋值运算符:,* *,| | 3.4 多分支多分支if语句语句 if(表达式1)语句1 else if(表达式2)语句2 else if(表达式n)语句n else 语句n+1如果分支太多,if语句嵌套的层次数太多,势必会造成程序的冗长,可读性差。 C语言提供了switch语句直接处理多分支选择。switch语句一般
7、与break 语句配合使用。其一般形式为:switch(表达式) case常量表达式1: 语句1; break; case常量表达式2: 语句2; break; case常量表达式n: 语句n; break; default : 语句n+1; 3.5 switch语句switch语句的执行过程即:switch语句计算表达式的值,将其逐个同case关键字后的常量表达式进行比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后跳出switch语句。如果表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句,然后跳出switch语句。【例例】成绩等级与分数范围有
8、如下对应关系:等级A,对应分数范围80100;等级B,对应分数范围7079;等级C,对应分数范围6069,等级D,对应分数范围059,根据成绩等级输出分数范围。程序段: scanf(“%c”,&grade); switch(grade) case A:printf( score:80100n);break; case B:printf(score:7079n); break; case C:printf(score:6069n); break; case D:printf(score:059n); break; default:printf(score:data error!n); switc
9、h语句#include int main()int month,days;printf(input the month number: );scanf(%d,&month);switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12:days=31;break; case 4: case 6: case 9: case 11:days=30;break; case 2:days=28;break; default:days=-1; if(days=-1) printf(input error! );else pr
10、intf(2005 years %d month has %d daysn,month,days); 【例例1】温度转换。如果输入一个华氏温度,把它转换成摄氏温度;如果输入一个摄氏温度,把它转换成华氏温度。#include int main() char tempType; float temp, fahren, celsius; printf(Enter the temperature to be converted: ); scanf(%f,&temp); printf(Enter an f if the temperature is in Fahrenheit); printf(n or
11、 a c if the temperature is in Celsius: ); /*利用两个printf实现一句较长英文的换行输出*/ scanf(n%c, &tempType); if (tempType = f) /*输入字符f则代表输入的是华氏温度*/ celsius = (5.0 / 9.0) * (temp - 32.0); /*根据数学公式进行温度转换*/ printf(nThe equivalent Celsius temperature is %6.2fc.n, celsius); else fahren = (9.0 / 5.0) * temp + 32.0; /*根据数
12、学公式进行温度转换*/ printf(nThe equivalent Fahrenheit temperature is %6.2fF.n, fahren); return 0; 【例例4-12】 x*x+2x-5(x0且 x!=-3)f(x)= x*x-3x+6(0=x20且x!=5及x!8) x*x-3x-10(x为其它值)#include #include int main() 实现上述分段函数,要求自变量与函数值均为双精度类型 double x,y; int k=0;printf(input value x:);scanf(%lf,&x); if(x1e-6) y=x*(x+2)-5;
13、else if(x=0&x1e-6&fabs(x-8)1e-6) y=x*(x-3)+6; else y=x*(x-3)-10;printf(%fn,y); return 0; 常见错误解1 if-else语句与空语句的连用。例如:if(NULL != p) ;fun(); 2复合语句丢失花括号,例如: int a=3,b=5,c=4,t; 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,%dn,a,b,c);3switch语句中缺失break语句,例如: int i=1; switch(i) case 1:printf(one,i);case 2:printf(two,i);case 3:printf(three,i); default:printf(%d,i);程序运行结果:onetwothree1良好的源程序书写风格良好的源程序书写风格注释注释