C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。
我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。
一、if语句
我们可以先稍微了解一下if语句是怎么使用的:表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是 不是0,则语句执⾏。
我们用代码来看一下
大家可以看到,输入的值为1是大于零时,就会输出这一句"%d是一个正数\n"。当输入的值为-1时,第一个条件不成立,就不会执行。程序就结束了。
二、else语句
else语句主要是和if语句一起使用,在判断完第一个条件不成立后,就可以直接去执行另外一种情况了。
#include <stdio.h>
int main (){int num = 0 ;scanf ( "%d" , &num);if (num % 2 == 1 )printf ( "%d 是奇数 \n" , num);elseprintf ( "%d 是偶数 \n" , num);return 0 ;}
看,在这里面判断完余数不等于1后,直接可以输出偶数了。
三、if语句和else语句嵌套使用
1.两种语句嵌套使用的形式
#include <stdio.h>
int main (){int num = 0 ;scanf ( "%d" , &num);if (num == 0 )printf ( " 输⼊的数字是 0\n" );else if (num > 0 ) // 这⾥的 if 相当于嵌套在 els 语句中,形成了嵌套结构printf ( " 输⼊的数字是正数 \n" );elseprintf ( " 输⼊的数字是负数 \n" );return 0 ;}
这个代码的三个运行结果是
2.悬空else语句
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
我们直接通过代码来展示一下
# include <stdio.h>int main (){int a = 0 ;int b = 2 ;if (a == 1 )if (b == 2 )printf ( "hehe\n" );elseprintf ( "haha\n" );return 0 ;}
这看起来必须会输出一个"hehe"或者"haha"吧,其实他什么都不会输出。

那就是因为else语句只会和最近的if语句相匹配。而这里最近的if应该是 if(b == 2),但是因为 if(a == 1)本来就为假,不会进入下一步判断。
四、switch语句
1.switch语句得用法
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。
对于if-else语句,switch语句更适合⽤于判断条件有多个结果的情况。
就对于上面一个对2求余的程序,就只有两种情况0和1.。但是如果是3或者更高的求余呢?那就有点多情况了,而switch语句就很好的解决了这个问题。
# 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 ;}
2.break的用法
switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。
而switch语句中,我们还可以利用这个break去进行一个操作。 就拿分别一周里面的工作日和休息日。
这样子一对比,很明显的看出这样写的代码更加简便。
3.switch语句中的default
这个default感觉就像if语句中的else语句。
就像这样子
4.switch语句中的case和default的顺序问题
在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
五、while循环
while 语句的语法结构和 if 语句⾮常相似。那我们就先从while和if的区别讲起吧。
1.if和while的对比
可以看到if语句就只输出了一句"hehe",而while语句输出了无穷句。那是因为while语句是一个循环语句,它需要有条件跳出循环。那让我们来了解一下while语句的基本原理吧!
2.while语句的工作原理
这就是while语句的基本工作原理。上面举例子的while语句就是因为没有条件能够让循环判断这个过程判断语句为假,然后结束。
那我们要怎么添加条件呢?
3.while语句怎么实现有限制的打印
看,在a的限制下,while循环只输出了10条语句就跳出循环了。
4.在循环中的break和continue
4.1break语句
所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。
那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。
但是break语句只能跳出一层循环。
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);
i = i + 1;
}
return 0;
}
而这个代码的运行的结果是
4.2continue语句
continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏
下⼀次循环的判断。
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);
i = i + 1;
}
return 0;
}
他的结果依然是1 2 3 4
但与上面的break语句不同的是这里陷入了死循环。因为continue语句,后面i=i+1这条语句一直被跳过,而我们的i也一直为4不能跳出循环。也造成了死循环。
int main()
{
int i = 1;
while (i <= 10)
{
i = i + 1;if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
把i=i+1调到前面去就可以解决这个问题。
但这个最终输出的结果就会变成这样。
六、do-while循环
从语句上看我们就可以发现do-while语句和while语句的形式上非常接近。实际上他们就只有一个微小的差别就是do-while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式。表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。他无论如何都会先执行一次循环体。
我们看看具体的例子:
七、for循环
1.for循环的基本用法
我觉得for循环就像前面几种循环的集合。感觉上会更加简单一点。
for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:
它有三组表达式:
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整
2.for循环的工作原理
3.for循环中的break和continue
3.1break语句
其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需
要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。
#include<stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
结果为
3.1continue语句
把以上的break换成continue后的结果是什么样的呢?
直接输出结果
就只是非常简单的跳过了5,输出了5以后的数字。
4.计算1~100之间3的倍数的数字之和
八、goto语句
C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数
内跳转到设置好的标号处。
而且在多层循环的代码中,如果想快速跳出 使⽤ goto 就⾮常的⽅便了。
感谢大家的认真观看,麻烦大家指出我的不足,我会努力改进