C语言程序设计-选择结构程序设计
if语句
switch语句
选择结构程序设计举例
if语句[三种形式]
1、单分支选择if语句
语句形式:
if(表达式) 语句;
语句执行流程:如果语句返回值为真,就执行语句,否则路过语句;
example:
从键盘输入两个整数a和b,如果a大于b则交换两个数,最后输出两个数。
#include
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):
}
注意:
<1>if语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号{}将需要执行的多个语句括起,形成一个复合语句。
<2>if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。
2、双分支选择if语句
语句形式:
if(表达式) 语句1;
else 语句2;
语句执行流程:
判断表达式返回值,若为真,则执行语句1,若为假,则执行语句2;
example:
输入两个整数,输出其中大的数。
#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);
}
注意:if和else语句之间只能一个语句,当if~else之间的语句不只一句时,应用一对{}将语句括起。
if(a>b){a++;b++;}
else{a=0;b=10}
3、多分支选择if语句
语句形式:
if(表达式1) 语句1;
else if(表达式2) 语句2;
.....
else if(表达N) 语句N;
else 语句 N+1;
提示:
<1>当if语句中出现多个if与else的时候,要特别注意它们之间的匹配关系,否则就可能导致程序逻辑错误。else与if的匹配原则:就近一致原则;即else总是与前面的最近的if相匹配。
<2>if语句中条件的写法应尽量简单。
4、if语句的嵌套
语句含义:当if语句中又包含若干个if语句时,则构成了if语句嵌套的情况。
语句形式:
A、if(表达式1)
if(表达式2)
语句1;
B、if(表达式1)
if(表达式2)
语句1;
clse
语句2;
语句执行流程:else与if配对原则:就近一致原则;else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对。
switch语句
1、语句形式:
switch (表达式) //不能接分号,根据表达式的不同值,选择不同程序分支,又称开关语句;数量型或字符型;
{
case 常量1:语句1;
case 常量2:语句2;
case 常量3:语句3;
....
case 常量n:语句n;
default:语句n+1; }
2、执行流程:
example:
假设用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("Wednesay\n");
case 4:printf("Thursday\n");
case 5:printf("Friday\n");
case 6:printf("Saturday\n");
default:printf("ERROR");
}
}
在switch语句中,case常量表达式只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完后自动跳出整个switch语句,因此会继续执行所有后面语句的情况。为此,C语言提供了一种break语句,其功能可以帮助跳出它据的switch语句。
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("Wednesay\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
default :printf("ERROR");
}
}
3、说明
多个case语句可以共用一组执行语句。
switch(grade)
{
case 'A':
case 'B':
case 'c':printf("grade>=60\n");break;
default :printf("grade<60");
}
各case和default子句的先后顺序可以变动,不影响运行结果。
default语句可以省略不用。
case和default与其后面的常量表达式间至少有一个空格。
switch语句可以嵌套,break语句只跳出安所在的switch语句。
example:
企业发放的资金根据利润来提成,从键盘输入当月利润,求尖发放的资金总数?
#include
void main()
{
float x,y;
int n;
scanf("%f",&x);
n=(int)x/10;
if((int)x==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 7:case 7:y=x*0.18;break;
default :y=x*0.2;
}
printf("y=%.2f\n",y);
}
example:
将任意三个数按从大到小的顺序输出。
#include "stdio.h"
void main()
{
int x,y,z,t;
scanf("%d,%d,%d",&x,&y,&z);
if(x
if(y
if(x
printf("%d,%d,%d\n",x,y,z);
}
example:
从键盘输入一个年份,判断是否是闰年。
#include
void main()
{
int year;
scanf("%d",&year);
if(year@0==0||(year%4==0&&yera0!=0))
printf("%d is a leap year\n",year);
else
printf("%d is not a leap year\n",year);
}