nullnull第五章 选择结构程序设计null§5.1 关系运算符和关系表达式关系运算:比较运算,比较两个操作数,看是否满足给定的关系。1、关系运算符<:小于 ,5<3, 3<5<=:小于等于,5<=3,3<=5,与数学上(≤)不同>:大于,5>3,3>5>=:大于等于,5 >=3,3 >=5 ,与数学上(≥)不同==:等于,5==3 ,与数学上(=)不同!=:不等于,5!=3 ,与数学上(≠)不同null2、关系表达式用关系运算符将表达式连接起来的式子优先级< <=
> >=高 低==
!=结合方向自左向右表达式的值关系成立,即为真,结果为1;关系不成立,即为假,结果为0;算术
运算符高 低C语言中,真:非0值,假:0值 null§5.2、逻辑运算符和逻辑表达式1、逻辑运算符!:逻辑非,一元运算符运算规则:取反,真假,假真&&:逻辑与 。又称逻辑乘。运算规则:两个操作数均为真,结果为真。||:逻辑或 。又称逻辑加。运算规则:只要两个操作数有一个为真,结果为真。null2、逻辑量或逻辑表达式的值非0 值:真0值:假整型
实型
字符型
指针类型0
0.0
\0
NULLnull3、逻辑表达式用逻辑运算符将表达式连接起来的式子。优先级关系
运算符高 低&&
逻辑与算术
运算符高 低!
逻辑非高 低高 低||
逻辑或结合性!:自右向左&&、||:自左向右null例:int a=5; float b=3.5;!a0!b0a&&b1a||b1 !a&&!b 0null4、注意在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。null例2-7:a=0; b=1; c=2; d=a++&&b++&&- -c;d=(a++)&&(b++)&&(- -c);运算结果: d=0,a=1,b=1,c=2(1)a && b && c求解方法:只有a为真(非0),才需要判断b的值,只有a和b都为真,才需要判断c的值。只要a为假,就不必判断b和c,运算立即中止。null(2)a || b || c求解方法:只要a为真(非0),就不必判断b和c;只有a 为假,才判断b;a和b都为假,才判断c。例2-8:a=0; b=1; c=2; d=a++||b++||- -c; d=(a++)||(b++)||(- -c); 运算结果: d=1,a=1,b=2,c=2 null实例:计算分段函数: y=3-x x≤02/x x>0 C语言用来设计条件选择结构程序的选择语句有两种: if语句、switch语句。 null§5.3 if语句 1、单分支选择if语句if语句有三种形式:单分支选择if语句、双分支面具选择if语句、多分支选择if语句。 语句形式: if (表达式) 语句; 语句执行
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
: if语句的三种形式:null例:从键盘输入两个整数a和b,如果a大于b则交换两数,最后输出两个数。 #include
输入a,ba>b交换a、b输出结束真假 void main()
{int a,b,t;
scanf("%d,%d",&a,&b); if(a>b) {t=a;a=b;b=t;} printf("a=%d,b=%d\n",a,b);
}null注意: (1)if语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号{}将需要执行的多个语句括起,形成一个复合语句。 (2)if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。 null2、双分支选择if语句语句形式:if (表达式) 语句1;
else 语句2 ; 语句执行流程: 表达式语句1真(非0)假(0)语句2null例输入两个整数,输出其中较大的数。 #include
#include void main()
{int x,y,max;
scanf("%d,%d",&x,&y); if(x>y) max=x;
else max=y; printf("max=%d\n",max);
}输入x,yx>ymax=x输出最大值结束真假max=ynull注意if和else语句之间只能有一个语句,当if~else之间的语句不只一句时,应用一对{}将语句括起。 if(a>b) {a++;b++;}
else { a=0;b=10;} null3、多分支选择if语句语句形式:if (表达式1) 语句1;
else if (表达式2)语句2;
… …
else if (表达式n)语句n;
else 语句n+1;
null语句执行流程: 表达式1语句1真(非0)假(0)null例4-3:计算分段函数。null#include void main()
{float x,y;
printf("enter x:");
scanf(" %f ",&x); else {if (x<=1) y=x+5;
else if (x<10) y=2*x;
else y=3/(x-10); printf("x=%.2f,y=%.2f\n",x,y);
}计算分段函数程序if(x==10) printf("not define x.\n"); }null提示(1)当if语句中出现多个“if”与“else”的时候,要特别注意它们之间的匹配关系,否则就可能导致程序逻辑错误。“else”与“if”的匹配原则是“就近一致原则”,即“else”总是与它前面最近的“if”相匹配。(2)if语句中条件的写法应尽量简单。 null语句含义:语句形式: 当if语句中又包含若干个if语句时,则构成了if 语句嵌套的情形。if语句的嵌套:if ( 表达式1)
if ( 表达式2)
语句1;
if ( 表达式1)
if ( 表达式2)
语句1;
else
语句2;null 语句执行流程: else与if的配对原则: 就近一致原则: else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对。null§5.4 switch语句1、语句形式: switch (表达式)
{
case 常量1: 语句1;
case 常量2: 语句2;
case 常量3: 语句3;
.......
case 常量n: 语句n;
default : 语句n+1;
}根据表达式的不同值,选择不同的程序分支,又称开关语句。
数值型
或
字符型
常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。null2、语句执行流程:指语句的最后一条是否为break简单语句或复合语句case语句出
现的次序并
不影响执行
结果。null例4-4:假设用0、1、2......6分别表示星期日、星期一......星期六。现输入一个数字,输出对应的星期几的英文单词。如果输入3,输出“Wednesday”。 #include "stdio.h"
void main()
{int n;
scanf("%d",&n);
switch(n)
{case 0: printf("Sunday\n");
case 1: printf("Monday\n");
case 2: printf("Tuesday\n");
case 3: printf("Wednesday\n");
case 4: printf("Thursday\n");
case 5: printf("Friday\n");
case 6: printf("Saturday\n");
default: printf("Error");
}
}程序运行情况如下:
3↙
Wednesday
Thursday
Friday
Saturday
errornull在“switch”语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,因此会继续执行所有后面语句的情况。 为此,C语言提供了一种break语句,其功能是可以跳出它所在的switch语句。null将上面的例4-4修改如下:#include "stdio.h"
void main()
{int n;
scanf("%d",&n);
switch(n)
{case 0: printf("Sunday\n"); break;
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
default: printf("Error");
}
}程序运行情况如下:
3↙
Wednesday null3、说明多个case语句可以共用一组执行语句。 switch(grade)
{ case 'A':
case 'B':
case 'C':printf("grade>=60\n");break;
default:printf("grade<60");
}各case和default子句的先后顺序可以变动,而不会影响程序执行结果。 nulldefault语句可以省略不用。case和default与其后面的常量表达式间至少有一个空格。switch语句可以嵌套,break语句只跳出它所在的switch语句。 null例4-5 企业发放的奖金根据利润提成。从键盘输入当月利润,求应发放奖金总数? null利润x
x<=10
10
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
的关键,通过分析找到表达式,将问题分成几种情况。null#include "stdio.h"
void main()
{float x,y;
int n;
scanf("%f",&x);
n=(int)x/10;
if((int)x%10==0) n--;
switch(n)
{case 0:y=x*0.1;break;
case 1:y=x*0.12;break;
case 2:case 3:y=x*0.14;break;
case 4:case 5:y=x*0.16;break;
case 6:case 7:case 8:case 9:y=x*0.18;break;
default:y=x*0.2;
}
printf("y=%.2f\n",y);
} 程序如下:null5.5 选择结构程序设计举例 例1: 将任意三个整数按从大到小的顺序输出。 #include "stdio.h"
void main()
{int x,y,z,t;
scanf("%d,%d,%d",&x,&y,&z);
if(xc&&a+c>b&&b+c>a)
{if(a==b&&b==c)
printf("equalateral triangle.\n");
else if(a==b||a==c||b==c)
printf("isoscelestriangle.\n");
else printf("other triangle.\n");
}
else printf("can not\n");
}null例4: 从键盘输入一个年份,判断是否是闰年。#include "stdio.h"
void main()
{int year;
scanf("%d",&year);
if(year%400==0||(year%4==0&&year%100!=0))
printf("%d is a leap year\n",year);
else printf("%d is not a leap year\n",year);
}null1.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);
} 结果:
a=2,b=1课堂练习null2.程序填空: 以下程序判断输入的整数能否被3或7整除.
main()
{int x,f=0;
scanf( “%d”,&x );
if( 1 )
( 2 )
if(f==1) printf(“YES\n”);
else printf(“NO\n”);
}