程序的三种基本结构
内嵌if
else
if(expr3) else
statement3 statement4
内嵌if
例 输入两数并判断其大小关系
/*ch4_4.c*/
#include <stdio.h>
main()
{ int x,y;
运行:Enter integer x,y:12,23
printf("Enter integer x,y:");
计分类(按年龄分为老、中、青、少、儿童);工资统计分类;银行存 款分类;……等。当然这些都可以用嵌套的if语句或多分支来处理,但
如果分支较多,则嵌套的if语句层数多,程序冗长而且可读性降低。C 语言提供switch语句直接处理多分支选择,它的一般形式如下:
• switch (表达式)
• { case 常量表达式1:语句1
}
}
返回
内嵌if
if (expr1) if (expr2) statement1
else statement3
内嵌if
if (expr1) statement1
else if(expr3) statement3 else statement4
内嵌if
if (expr1)
if (expr2) else
statement1 statement2
X<Y
scanf("%d,%d",&x,&y); if(x!=y)
Enter integer x,y:12,6 X>Y Enter integer x,y:12,12
if(x>y) printf("X>Y\n");
X==Y
else printf("X<Y\n");
else
printf("X==Y\n");
( 3 )使用判断——交换法: 1.若a>b,则交换a和b,交换后a<b 2.若a>c,则交换a和c,交换后a<c 3.若b>c,则交换b和c,交换后b<c
[例5.2」输入三个数,按由小到大顺序输出。 •main( ) •{int a,b,c,temp; •printf("Input a,b,c:\n"); •scanf("%d,%d,%d",&a,&b,&c); •if(a>b) • {temp=a;a=b;b=temp;} •if(a>c) • {temp=a;a=c;c=temp;} •if(b>c) • {temp=b;b=c;c=temp;} •printf("%d,%d,%d",a,b,c); •}
main()
{ int x,y;
scanf(“%d,%d”,&x,&y);
if(x>y)
x=y; y=x; else
Compile Error!
x++; y++;
printf(“%d,%d\n”,x,y);
}
5.1.2 if语句嵌套
一般形式:
if (expr1) if (expr2) statement1 else statement2
语句可以是复合语句 如:if(ifx()a==b&if(&xx!==0=)y) printf(“a=b,x=y”);
if(if!(x3)) priinf(tfx(=“=O0K)”);
例 考i虑f(‘下a’)面p程ri序ntf的(“%输d出”,结’a’果); :
#include <stdio.h>
注意
❖ 语句中的表达式可以是整型或字符型、枚举型。常量表达 式 i 必须与表达式类型一致(整型与字符型通用)。 i 仅 起语句标号作用,不做求值判断。
❖ 语句结构中各个case后常量表达式的值必须互不相同;否 则执行时将出现矛盾。
❖ 各个case的出现次序不影响执行结果。例如,可以先出现 case‘D’:…,然后是case‘A’:……
{case 10:
case 9: printf("%d: A\n", score);break;
case 8:
case 7: printf("%d: B\n", score);break;
case 6: printf("%d: C\n", score);break;
default: printf("%d: D\n", score);
下一页
看下面的例子
switch ( i )
{case 1:printf(″A\n″);
case 2: printf (″ B\n ″);
case 3:printf( ″C\n″);
case 4:printf(″D\n″);
default:printf(″E\n″);
}
假设i=3时,则会从i=3 时做起始语句。运行结 果见右图。如果给每条 语句加上break这样就 只执行一条语句。
printf(“a!=b”);
正
确 配
修改: if (a==b)
对 方
{ if(b==c)
法
printf(“a==b==c”);
}
else
printf(“a!=b”);
实现if ~ else 正确配对方法:加{ }
•
5.2 switch语句
• switch语句是多分支选择语句。if语句只有两个分支可供选择, 而实际问题中常常需要用到多分支的选择。例如,学生成绩分类(90分 以为‘A’等,80~89分为‘B’等,70~79分为‘c’ 等,……);人口统
• case 常量表达式2:语句2
• case 常量表达式i:语句n
• default
:语句n+1
•}
功能
首先计算表达式的值,然后依次与常量表达式 i(i=1,2,……,n)比较。 ①若表达式的值与某一个常量表达式, 如 j (1 ≤j ≤ n)相等,则执行语句 j。 ② 若表达式的值与所有的常量表达式 i(i=1,2,……,n)均不 相等,则执行defau1t后结构
k k=k1
k=k2
A1
A2 ...
k=kn k=ki
Ai ... An
循环结构 当型循环结构
假 P
真
A
当P为真 A
直到型循环结构
A
假 P 真
A 直到P为真
注:A,B,A1….An可以是一个简单语句,也可以是一个基本结构
第5章 选择语句
• 5.1 if 条件语句 • 5.2 switch多分支选择语句 • 5.3 程序举例
10, 9 7,8 6
default
因此,可以用 score /10的值
来确定分支
score和 score /10 有如下对应关系:
下一页
#include <stdio.h>
程序
main( ) /*用switch 语句评级 */
{ int score;
scanf("%d" ,&score);
switch (score /10)
}
if ~ else 配对原则:
– 缺省{ }时,else总是和它上面离它最近的未配 对的if配对
if(……) if(……) if(……) else…... else…...
else…...
if ~ else
例: if (a==b)
if(b==c)
实 现
printf(“a==b==c”);
else
1. 输入一个分数score
2 .score<60
输出 E
3 .60<=score <70 输出 D
4. 70<=score <80 输出 C
5 .80<=score <90 输出 B
6 .90<=score
输出 A
#include<stdio.h>
main( )
{ int score;
程序
scanf(“%d”, &score);
}
假 表达式
语句2
输入两个数, 比较其大小, 将较大的数输出。
流程分析: (1) 输入两个数据a,b ; (2) 如果a>b 则输出a ;否则,输出b。
#include <stdio.h> main( ) {
float a, b; scanf(“%f, %f”,&a, &b); if (a>b) printf (“%f”, a ); else printf (“%f”, b ); }
0(N) 表达式
1(Y)
if (x < 0) y = 3 - x ;
语句
printf(“y= %6.2f”, y );
}
任给a,b,c三个数,按从小到大的顺序输出。
分析: (1)对于a,b任意两个数:
若a<b,则输出 a , b ; 否则输出 b , a ;
( 2 ) 对于三个数,有6种可能: a<b<c a<c<b b<a<c b<c<a c<a<b c<b<a
返回
5.1 if条件语句
•if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定 执行给出的两种操作之一。
5.1.1 if语句的三种形式
•1.单分支选择语句的形式: if(表达式) 语句
•
main( )
这种if语句的执行过程见图: