C语言从0到1(07)——条件结构(02)
一、多重if结构
多重if就是指,选择超过两个以上的情况,比如现实生活中:
成绩在90~100的为A
成绩在70~89的为B
成绩在60~69的为C
成绩在60以下的为D
语法如下:
if (条件表达式1)
{
//执行的代码块1
}
else if(条件表达式2)
{
//执行的代码块2
}
else if(条件表达式n)
{
//执行的代码块n
}
else
{
//执行的代码块n+1
}
流程图:
- 例:学生成绩等级如下表示
成绩在90~100的为A
成绩在70~89的为B
成绩在60~69的为C
成绩在60~40的为D
其他情况为E
int score = 88;
if (score >= 90 && score <= 100)
{
printf("A");
}
else if (score >= 70)
{
printf("B");
}
else if (score >= 60)
{
printf("C");
}
else if (score >= 40)
{
printf("D");
}
else
{
printf("E");
}
上面示例输出结果为:B
二、嵌套if
用于多重判断。例如:
活动计划的安排,如果今天是工作日,则去上班,如果今天是周末,则外出游玩;同时,如果周末天气晴朗,则去室外游乐场游玩,否则去室内游乐场游玩。
语法如下:
if (条件表达式1)
{
if(条件表达式2)
{
//执行的代码块1
//if… 这里也可以嵌套if
}
else
{
//执行的代码块2
}
}
else
{
//if… 这里也可以嵌套if
//执行的代码块3
}
流程图:
- 例:给定三条边,判断是否能组成一个三角形以及是否是特殊三角形(等腰,等边)
#include <stdio.h>
int main()
{
int a = 0, b = 0, c = 0;
printf("请输入三条边(每条边以回车结束):");
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
//判断合法性,都为正数
if (a > 0 && b > 0 && c > 0)
{
//判断任意两条边之和大于第三边
if (a+b > c && a+c > b && b+c > a)
{
if (a == b && a == c)//等边三角形
{
printf("等边三角形");
}
else if (a == b || a == c || c == b)//等腰三角形
{
printf("等腰三角形");
}
}
else
{
printf("此三条边不能构成三角形\n");
}
}
else
{
printf("输入有误\n");
}
return 0;
}
注:scanf 在 高版本的Visual Studio 中,需修改为 scanf_s
三、switch case
语法:
switch(表达式){
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
…
case 常量表达式n:
语句n;
break;
default: 语句n+1;
}
其语义是:计算
表达式
的值。 并逐个与其后的常量表达式
值相比较,当表达式的值与某个常量表达式的值相等时,则执行该case后对应的语句
。如表达式的值与所有case后的常量表达式的值不匹配,则执行default后的语句
。
注:
1、表达式类型为,int、char、枚举
;不能是为条件表达式。
2、case匹配成功后,如果没有break语句
,则会不判断
而继续执行后面所有case语句后的代码
,直到遇到break跳出,default结束。
- 例:输入数字,输出对应的星期
int main()
{
int a;
printf("input integer number: ");
scanf("%d", &a);
switch (a) {
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;
case 7:
printf("Sunday\n");
break;
default:
printf("error\n");
}
return 0;
}
注:试着去掉break,看看效果。
四、随机数
程序设计中,难免会用到随机数,比如抽奖。
C语言中获取随机数需要导入两个头文件,一个是 stdlib.h
;一个是time.h
。
具体用到的函数有两个,一个是void srand(unsigned int seek)
函数;一个是int rand()
。
srand的作用是用于初始化随机种子,一个程序中只需要初始化一次。 rand用于获得随机数。
- 例:随机一个整数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));//初始化随机种子
int a = rand();//获取随机数
printf("%d\n", a);
}
- 例:随机一个1~7之间的数(比如,星期)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));//初始化随机种子
int a = rand()%7 + 1;//随机数模7会得到0~6,+1的操作后就会得到 1~7
printf("%d\n", a);
}
总结:多重if结构、嵌套if结构以及switch case结构都是非常重要的条件结构,在实际编程开发过程中使用频率特别高,希望童鞋们能多加练习,并熟练使用上述结构。
下一章节进入循环结构。
- 练习:
1.猴子去买桃,如果买3个以下,老板就不送桃,如果买3个到5个就再送一个桃,如果买5个以上就送2个桃,现在要求输入猴子的买桃数,最后输出到底买到了几个桃。
2.我想买车,买什么车决定于我在银行有多少存款。
如果我的存款超过500万,我就买凯迪拉克
否则,如果我的存款超过100万,我就买帕萨特
否则,如果我的存款超过50万,我就买依兰特
否则,如果我的存款超过10万,我就买奥托
否则,我买捷安特
3.综合练习,猜拳游戏:
人物:电脑、你;电脑随机出拳,你输入出拳(可以用数字表示石头剪刀布),最后判断胜负平。