目录
一、常见的三大结构。
1、顺序结构
很简单,即就是程序从上至下顺序执行,如果我们没有采用其它结构的话,就是顺序结构
2、选择(分支)结构
当程序出现需要选择的时候,就会产生分支,满足一种条件运行一个分支,满足另外的条件运行另外的分支,当然不同分支往往运行的结果不同。
3、循环结构
有时候,我们需要把一个事情重复的做上很多次才能达到我们想要的结果,比如我们要计算从1加2加3一直加到99的总和,我们就可以采用循环结构,来逐个相加,最后计算出整体的总和
而我们今天的主人公就是选择结构。我们将对分支语句进行研究。
二、分支语句
分支语句的分支思想就如这张图所示:
2.1 if语句
语法结构:
1.
if(表达式)
语句;
//例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age < 18) {
printf("你还是未成年\n");
}
return 0;
}
2.
if(表达式)
语句1;
else
语句2;
//例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age < 18) {
printf("你还是未成年\n");
}
else
{
printf("你已经成年了\n");
}
return 0;
}
3.多分支:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3
//例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age < 18)
{
printf("少年\n");
}
else if (age >= 18 && age < 30)
{
printf("青年\n");
}
else if (age >= 30 && age < 50)
{
printf("中年\n");
}
else if (age >= 50 && age < 80)
{
printf("老年\n");
}
return 0;
}
解释一下: 如果表达式的结果为真,则语句执行。0表示假,非0表示真。
4.If.....else 结构还可以嵌套 if....else结构:
#include <stdio.h>
int main()
{
int a = 11, b = 9;
if(a > 10)
{
if(b < 10)
printf("you are right !");
else
printf("you are wrong !");
}
else
printf("you are wrong !");
return 0;
}
悬空else
接下来学习一个注意点—>悬空else
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
我们注意到这段代码里的if语句没有用“ { } ”表示出来,这样特别没有条理性,是代码的识别度降低。
所以说:代码风格很重要;我们在写代码的时候要适当的使用{}可以使代码的逻辑更加清楚。
2.2 switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。但是如果我们写成 if...else if ...else if 的
形式太复杂,那我们就得有不一样的语法形式。 这就是switch 语句。
switch(整型表达式)
{
语句项; //是一些case语句:
//case 整形常量表达式:
// 语句;
break;
}
//例:
#include <stdio.h>
int main()
{
int day = 0;
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
如果我们去掉了语句中的“break”,代码会变成什么样子???
1.我门去掉“case 1:语句中的break”
我们可以发现,出了输入“1”时,出现了问题,其它情况正常。
我们可以自己在进想多次的实验。
结论:break语句的实际效果是把语句列表划分为不同的部分。
default子句
如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句
都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。但是,如
果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签default:写在任何一个case标签可以出现
的位置。
当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。所
以,每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语
句流会像贯穿一个case标签一样贯穿default子句。
编程好习惯
1.在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现在以前的最
后一个 case 语句后面忘了添加 break语句)。
2.在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break
#include<stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;//3
case 2:
n++;//2
case 3:
switch (n)
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;//4
n++;//3
break;
}
case 4:
m++;//5
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);//5 3
return 0;
}
结果:
这道题可以让我们充分体会到在使用switch语句写程序break的关键。