4.选择结构null第四章 选择结构程序设计一、 C语句的概念
二、回顾条件判断
三、 if语句的三种形式
四、 switch语句第四章 选择结构程序设计主要内容:null一、 C语句概述
C语句:以“;”作分隔符,编译后产生机器指令.
C语句分类
函数调用语句:printf(),max()
表达式语句:表达式加分号构成。空语句: ;程序控制语句(9种):复合语句:用 {…}括起来的一组语句
为什么要用? 分支语句是控制程序执行选择结构的语句
是程序实现逻辑判断的唯一形式如果你在家,我去拜访你;
如果考试不及格,要补考;自然语言:...
null第四章 选择结构程序设计一、 C语句的概念
二、回顾条件判断
三、 if语句的三种形式
四、 switch语句第四章 选择结构程序设计主要
:null一、 C语句概述
C语句:以“;”作分隔符,编译后产生机器指令.
C语句分类
函数调用语句:printf(),max()
达式语句:表达式加分号构成。空语句: ;程序控制语句(9种):复合语句:用 {…}括起来的一组语句
为什么要用? 分支语句是控制程序执行选择结构的语句
是程序实现逻辑判断的唯一形式如果你在家,我去拜访你;
如果考试不及格,要补考;自然语言:如果… 那么…
否则…
C语言: if语句为什么要用?if语句(条件选择语句)二、回顾条件判断二、回顾条件判断1.关系运算符及其优先次序
C语言提供6种关系运算符:
< <= > >= == !=
关于优先次序:
前4种关系运算符的优先级别相同,后两种也相同。前4种高于后2种。
2.逻辑运算符及其优先次序2.逻辑运算符及其优先次序C语言提供三种逻辑运算符:
(1)&&逻辑与
(2)||逻辑或
(3)!逻辑非逻辑运算的“真值表”逻辑运算的“真值表”例:a=5>3&&2||8<4-!0例:a=5>3&&2||8<4-!0 3.四种运算符优先级比较
结果为1null例:要判别用year表示的某一年是否闰年,闰年的条件应符合下面二者之一:
(1) 能被4整除,又能被400整除,如2000年。
(2)能被4整除,但不能被100整除,如2008年;
判断闰年的逻辑表达式:
year%400==0||(year%4==0&&year%100!=0)
判断非闰年的逻辑表达式:
!(year%400==0||(year%4==0&&year%100!=0))
三、 if语句三、 if语句 if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if语句的3种形式if语句的3种形式C语言提供了3种形式的if语句。
1、if (表达式) 语句 (语句也可以是复合语句)
例如:if (x>y) printf(“%d”, x);#include
void main()
{
float a,b,t;
scanf(″%f,%f″,&a,&b);
if(a>b)
{t=a;
a=b;
b=t;}
printf(″%5.2f,%5.2f\n″,a,b);
}
#include
void main()
{
float a,b,t;
scanf(″%f,%f″,&a,&b);
if(a>b)
{t=a;
a=b;
b=t;}
printf(″%5.2f,%5.2f\n″,a,b);
}
例:输入两个实数,按代数值由小到大的顺序输出这两个数(4-5.c)例:输入三个数a,b,c,要求按由小到大的顺序输出。例:输入三个数a,b,c,要求按由小到大的顺序输出。If a>b 将a和b对换
If a>c 将a和c对换
If b>c 将b和c对换#include
void main ( )
{
float a,b,c,t; scanf(″%f,%f,%f″,&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;} printf("%5.2f,%5.2f,%5.2f\n",a,b,c);
}#include
void main ( )
{
float a,b,c,t; scanf(″%f,%f,%f″,&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;} printf("%5.2f,%5.2f,%5.2f\n",a,b,c);
}例:输入三个数a,b,c,要求按由小到大的顺序输出。null2、if (表达式) 语句1 else 语句2
例如:
if (x>y)
printf(“%d”, x);
else
printf(“%d”, y);null#include
#include
main()
{ double a,b,c,s,area;
scanf("%lf,%lf,%lf",&a,&b,&c);
s= (a+b+c) /2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.2f\narea=%7.2f\n",a,b,c,area);
}例 输入三角形边长,求面积输入:9.89,12.65,8.76
输出:a= 9.89, b= 12.65, c= 8.76
area= 43.17null#include
#include
main()
{ double a,b,c,s,area;
scanf("%lf,%lf,%lf",&a,&b,&c);
if(a+b>c&&b+c>a&&c+a>b)
{
s= (a+b+c) /2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%7.2f\n",area);
}
else
printf(“It is not a trilateral.\n”);
}输入:2,3,4
输出:area= 2.90
输入:2,3,6
输出: It is not a trilateral.构成三角形的必要条件是两边之和大于第三边,因此在计算
三角形面积之前应当进行该条件的判断。(4-1.c)null3、使用嵌套的if语句实现多层判断
if (表达式1) 语句1
else if (表达式2) 语句2
else if (表达式3) 语句3
……
else if (表达式m) 语句m
else 语句n有的选择结构中又包含一个或多个选择结构,
称为选择结构的嵌套。nullnull例 将百分制成绩S1转换为5分制成绩S2.(4-6.c)#include
main()
{ int s1,s2;
printf("Enter s1:");
scanf("%f",&s1);
if(s1<60)
s2=1;
else if(s1<70)
s2=2;
else if(s1<80)
s2=3;
else if(s1<90)
s2=4;
else
s2=5;
printf(“s2=%d\n”,s2);}运行:Enter s1:86
s2=4
运行:Enter s1:68
s2=2假设把前三个else去掉,会有什么情况出现?
运行:Enter s1:68
s2=4 (错误结果)
假设把四个else都去掉,会有什么情况出现?
运行:Enter s1:68
s2=5 (错误结果)
null if语句嵌套:
一般形式:null说明:
if ~ else 配对原则:缺省{ }时,else总是和它上面离它最近的未配对的if配对null例: if (a>b)
if(bb)
{ if(b
main()
{ int x,y;
printf("Enter integer x,y:");
scanf("%d,%d",&x,&y);
if(x!=y)
if(x>y) printf("X>Y\n");
else printf("XY
Enter integer x,y:12,12
X==Y
null如:if(a==b&&x==y) printf(“a=b,x=y”);
if(3) printf(“OK”);总结:
a)if后面的表达式类型任意,一般为逻辑表达式或关系表达式。b)条件后面不加分号, 语句之后有分号
c)else不是语句,不能单独使用必须与if配对使用。
d)当if后有多个执行语句时,必须用{ }将多个语句括
起来,构成一个复合语句,而{ }之外不必有分号。
例 考虑下面程序的输出结果:
#include
void main()
{ int a,b;
if(a>b)
{t=a;
a=b;
b=t;}
printf(“%d,%d\n”,a,b); }null#include
void main()
{ int x,y;
printf(“enter x:");
scanf("%d",&x);
y=x;
if(y<0)
y= -y;
printf(“x=%d,y=%d\n",x,y);
}例 求一个数的绝对值 (if的第一种形式)(4-2.c)运行:Enter an integer:-12
x=-12, y=12null#include
void main()
{ int a,b;
printf("Enter a:");
scanf("%d",&a);
printf("Enter b:");
scanf("%d",&b);
if(a==b)
printf("a==b\n");
else
printf("a!=b\n");
}例 输入两个数并判断两数相等否 (if的第二种形式)(4-3.c)运行:Enter a:12
Enter b:12
a==b 运行:Enter a:12
Enter b:9
a!=b null x+1 x<0
y= x+2 0<=x<10
x+3 10<=x<20
x+4 x>=20
#include “stdio.h”
void main()
{ int x,y;
printf(“input x:”);
scanf(“%d”,&x);
if(x<0)
y=x+1;
else if(x<10)
y=x+2;
else if(x<20)
y=x+3;
else y=x+4;
printf(“y=%d\n”,y);}例 分段函数(if的第三种形式)(4-4.c)运行:input x: 21
y=25运行:input x: -2
y=-1(if语句)练习题(if语句)练习题1.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是( )
#include “stdio.h”
void main()
{int x;
scanf(“%d”,&x);
if(x++>5) printf(“%d”,x);
else printf(“%d\n”,x--);
}
(A) 7和5 (B) 6和3 (C) 7和4 (D) 6和4A(if语句)练习题(if语句)练习题2.以下程序的输出结果是( )
#include “stdio.h”
void main()
{int a=2,b=-1,c=2;
if(a
void main()
{ char ch;
ch=getchar();
switch(ch)
{ case ‘A’: printf(“成绩优秀:90-100\n"); break;
case ‘B’: printf(“成绩良好:80-90\n"); break;
case ‘C’: printf(“成绩中等:70-79\n"); break;
case ‘D’: printf(“成绩及格:60-69\n"); break;
case ‘E’: printf(“成绩不及格:0-59\n"); break;
default : printf(“输入非法字符\n"); break;
}
}例 输入考试成绩等级,输出百份制分数段(switch语句)练习题(switch语句)练习题1.以下程序的运行结果为——
#include “stdio.h”
void main()
{int x=1,a=0,b=0;
switch(x)
{case 0: b++;
case 1:a++;
case 2: a++;b++;}
printf(“a=%d,b=%d\n”,a,b);
}a=2,b=1null2.以下程序的运行结果为——
#include “stdio.h”
void 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;
}
printf(“a=%d,b=%d\n”,a,b);
}
a=2,b=1null程序综合举例例:写程序,判断某一年是否为闰年。
闰年的条件应符合下面二者之一:
(1)能被4整除,但不能被100整除,如2008年;
(2)能被4整除,又能被400整除,如2000年。null例:写程序,判断某一年是否为闰年。(4-9(1).c)
闰年的条件应符合下面二者之一:
(1)能被4整除,但不能被100整除,如2008年;
(2)能被4整除,又能被400整除,如2000年。
#include
void main()
{ int year,leap;
printf(“please enter a year:”);
scanf(“%d”,&year);
if(year%4!=0) leap=0;
else if(year%100!=0) leap=1;
else if(year%400!=0) leap=0;
else leap=1;
if(leap)
printf(“%d is a leap year.\n”,year);
else
printf(“%d is not a leap year.\n”,year); }程序综合举例null例:写程序,判断某一年是否为闰年。(4-9(2).c)
闰年的条件应符合下面二者之一:
(1)能被4整除,但不能被100整除,如2008年;
(2)能被4整除,又能被400整除,如2000年。
#include
void main()
{ int year,leap;
printf(“please enter a year:”);
scanf(“%d”,&year);
if(year%400==0||(year%4==0&&year%100!=0))
leap=1;
else
leap=0;
if(leap)
printf(“%d is a leap year.\n”,year);
else
printf(“%d is not a leap year.\n”,year); }程序综合举例null例:运输公司对用户计算运费。运输距离(以s表示,单位为千米)越远,单位运费(以每吨·千米为单位)越低。
计算如下:
s< 250 没有折扣
250≤s<500 2%折扣
500≤s<1000 5%折扣
1000≤s<2000 8%折扣
2000≤s<3000 10%折扣
3000≤s 15%折扣
设每吨千米货物的运费为p(price的缩写),货物重为w(weight的缩写),距离为s,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公式为
f=p*w*s*(1-d)
解题思路:§107页程序综合举例null例:运输公司对用户计算运费。
#include
void main()
{ int c,s;
double p,w,d,f;
printf(“请输入单价、重量和距离:”);
scanf(“%lf,%lf,%d”,&p,&w,&s);
if(s>=3000) c=12;
else c=s/250;
switch(c)
{ case 0: d=0; break;
case 1: d=2; break;
case 2:
case 3: d=5; break;
case 4: case 5:
case 6:
case 7: d=8; break;
case 8:
case 9:
case 10:
case 11:d=10; break;
case 12:d=15; break;
}
f=p*w*s*(1-d/100.0);
printf(“运费: %10.2f元\n”,f);
}程序综合举例(4-10.c)运行结果:
请输入单价、重量和距离:15,145.6,346.9
运费:740550.72元
本文档为【4.选择结构】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。