目录
一、引言
写了几个C语言代码我发现C语言程序和我们做事一样,按照顺序做事,选择做某事或者重复做某事。那我们继续对C语言深入认知:
C语言是结构化的程序设计语言,这⾥的结构指的是顺序结构、选择结构、循环结构,C语言是能够实 现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种 结构的组合。
顺序结构:就如我们人做事一样一样的进行。
选择结构:就是对多个分支选择一个进行。用if、swich语句来实现。
循环语句:对同一件事反复进行。用for、while、do while语句来实现。
那接下来就让我们了解这些结构:
二、选择结构
*顺序结构大家已经耳熟能详了,C语言中也没有对顺序结构有特殊的语句所以不再做详细叙述。
1,if语句
1.1,if...else...语句
if语句的语法表达式如下:
cpp
if (//表达式)
{
//语句1
}
else
//语句2
*若语句只为一句,大括号可以不加。
这个代码执行的逻辑就是,表达式成立则执行语句1,反之则执行语句2。
那C语言怎么判断表达式成立的呢?
在C语言中有一个特别的数0,0则代表假,非0则代表真。
举一个例子方便大家理解:
输出a和b中大的数字
cpp
if (a>b)
{
printf("%d",a);
}
else
printf("%d",b);
正如代码上显示的表达式为a>b,若成立则而1即为真,则打印a;若不成立则为0,即为假。则打印b,
1.2,多分支语句
有细心的人就会发现只有if和else那只能分成两种情况啊,那如果多种情况我们该如何编写呢?其实大家不用担心,C语言在设计的时候已经考虑到了这个问题,那就是在if..else...语句中,else可以与另外一个if语句连用,构成多重判断。
举个例子:
判断整数的正负性
cpp
#include<srdio.h>
int main()
{
int num = 0;
scanf("%d",&num);
if(num > 0)
printf("你输入的数字为正数");
else if(num < 0)
printf("你输入的数字为负数")
else
printf("你输入的数字为0");
return 0;
}
这个例子中就很好的利用到了else if,最后再加上一个else把没有讨论到的0也加上去。
*else if的使用其实就是构成了嵌套的if语句。
*if语句也可以在if语句中使用也属于if语句的嵌套。
1.3悬空else的问题
在写代码中常常会遇到else写着写着位置跑丢了,不知道跟谁匹配了。那接下来姜糖就跟大家聊一聊这个问题。
大家如果遇到有多个if和else,可以记住这样的一条规则,else总是跟最接近的if匹配。那大家就来看看下面这个代码:
cpp
#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;
}
大家那想一想输出结果是什么呢?
输出结果为啥也没有输出,嘿嘿嘿,想到了吗?
没想到也没有问题,接下来我们一起来分析一下:
可能有些人会想else跟第一个if对齐的所以a=0不=1所以输出haha。但我上面不是跟大家说过吗,else总是跟最接近的if匹配所以else是和第二个if相匹配,而大家所认为的对齐和排版是不绝对这个的,大家可以试试你把代码放一行也是可以运行的。排版只是方便程序员的理解。
比如我改一下这个代码:
cpp
#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;
}
这样子,大家是不是更好理解了。
或许有的人希望让这个else与第一个if匹配那有什么办法了。 豁,还真有办法,数学中你想让什么在一起计算加括号就行了,那我这边也是不是可以加括号呢?是的,只不过加的是大括号。这样我们就可以这样修改这个代码:
cpp
#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;
}
只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。
2,switch语句
2.1,switch
在C语言中的选择结构中除了if语句外,C语言还提供了switch语句来实现分支结构。
switch 语句是⼀种特殊形式的if...else 结构,用于判断条件有多个结果的情况。它把多重 的 else if 改成更易用、可读性更好的形式。
代码定义如下:
cpp
switch(条件语句)
{
case 条件1: 语句1
case 条件2: 语句2
default: 语句3
}
switch语言中是根据条件语句中不同的值,执行相对应的case分支。如果没有对应的值则执行default分支。
注:
*switch中的条件语句必须是整形表达式
*case后的值,必须是整形常量表达式
那让我来用switch来举个例子:
输入一个整数输入➗3之后的余数
cpp
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
以上的代码有两点值得我们注意:
1,case和后面的数字之间必须有空格。
2,每一个case语句中的代码执行完之后,需加上break,才能跳出这个switch语句。
2.2,break
细心的人已经发现了我在每一个case语句中的代码执行完之后,加上了break,那如果不加会怎么样呢?
cpp
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
我们发现10/3余数为1,结构程序还多打印了一行余数为2。
这是为什么呢?
原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执行,有可能执行其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。就比如上面的代码就执行了 case 2 中的语句。 所以在 switch 语句中 break 语句是非常重要的,能实现真正的分支效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
2.3,default
在选择结构的多分支中我们常常不能把情况选完,但可以把他们全都归为一类,所以就诞生了else,和default。他们的用法是相同的,只不过放在不同的语句中。
接下来我就举一个例子让大家更深刻的了解他们(用default):
cpp
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
default:
printf("输⼊错误\n");
break;
}
}
在一个星期中只有七天,那输入的超过7呢,那就提醒他输入错误。
那default和case在switch语句中有顺序要求吗?答案是没有的,只不过我们通常喜欢把default放在最后方便理解。