C语言是结构化的程序设计语言,什么叫做结构化呢?解释一下。
C语言中有3种结构:
1.顺序结构
2.选择结构
3.循环结构
顾名思义,顺序结构就是按照顺序执行代码,选择语句就是分支语句,会让我们进行选择,而循环语句就是重复做同一件事知道满足某个条件,跳出循环,否则一直进行。
分支语句(选择语句)
if语句
单分支语句
单分支语句表示只有一个分支,看个例子:
#include <stdio.h>
int main()
{
int age = 20;
if (age >= 18)
{
printf("成年\n");
}
}
这段代码就是单分支语句,只有一个条件(age>=18),需要注意的是,判断条件是否为真(非0),如果为真(非0),则执行语句;否则不执行。
双分支语句
双分支有两个分支,还是这个例子:
#include <stdio.h>
int main()
{
int age = 20;
if (age >= 18)
{
printf("成年\n");
}
else
{
printf("未成年\n");
}
return 0;
}
满足if条件语句时,则执行if条件语句的内容,否则执行else语句中的内容,二者只能选择其一。
多分支语句——if
在遇到不知一到两种情况时,就会发生多种情况,这是就需要用到多分支语句,类似的例子:
#include <stdio.h>
int main()
{
int age = 10;
if (age < 18)
{
printf("青少年\n");
}
else if (age >= 18 && age < 30)
{
printf("青年\n");
}
else if (age >= 30 && age < 50)
{
printf("中年\n");
}
else
{
printf("老年\n");
}
return 0;
}
这就是多分支语句,用来处理有许多选择,需注意的时else if中的if是不能去掉的,而最后一个的else不需要加上if。可以这样理解if后面需要加上条件,而else不需要加条件。
我们在看一个悬空else的问题,简单来说就是else匹配的问题,看例子:
#include <stdio.h>
//悬空else
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
在这段代码中,会如何执行呢?
有的同学可能会说打印haha,有的同学会说什么也不打印,结果是什么呢?其实是不会打印任何东西的,打印haha的同学会认为else会跟第一个if匹配,而a=0所以跳转到else上打印haha,其实并不是,else会跟离自己最近的if进行匹配,那么我们如何像那些同学以为的那样打印haha呢?加上大括号就可以了,至于如何加,加在哪里,同学们可以自己试试。
多分支语句——switch
在大量的分支时用if语句写代码往往会很繁琐,这是我们可以用switch语句解决。举个例子:输入1—7分别输出星期一—星期日。我们用if语句完成:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
if (1 == day)
{
printf("星期一\n");
}
else if (2 == day)
{
printf("星期二\n");
}
else if (3 == day)
{
printf("星期三\n");
}
else if (4 == day)
{
printf("星期四\n");
}
else if (5 == day)
{
printf("星期五\n");
}
else if (6 == day)
{
printf("星期六\n");
}
else if (7 == day)
{
printf("星期七\n");
}
return 0;
}
如果我们用switch语句解决:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
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;
default:
printf("输入有误!\n");
break;
}
return 0;
}
虽然看起来没有太大的区别,但是给人的感觉是不太一样的,switch有几点需要注意:1、switch语句中“day”必须是整型,也就是说定义day时不能定义为float类型。2、case后面跟着的“数字”必须是整型常量,变量是不可以的。3、break是跳出的意思,当我们输入为4时,是以case 4为入口,一直往下,如果没有break,就会打印星期四,星期五,星期六,星期日。有了break,也就会在case 4中跳出switch语句,从而实现只打印星期四。4、default 用法如果没有入口进入,那么执行default语句。
循环语句
while循环
while循环是最简单的循环语句,看个例子:
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}
在这个例子中,先判断i≤10,满足条件,则执行代码块中的语句(i++是用来调整的),在进行循环直到不满足条件,跳出循环。有时我们还会遇到break和continue。我们来看看这两者的区别。
还是这个例子:
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (5 == i)
{
break;
}
printf("%d ", i);
i++;
}
return 0;
}
在这段代码中,打印1,2,3,4没有问题,当i=5时,进行判断,此时i=5满足条件,永久跳出循环,所以结果为只打印1,2,3,4。我们再看看continue。
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (5 == i)
{
continue;
}
printf("%d ", i);
i++;
}
return 0;
}
这段代码的运行结果是什么呢?有的同学会说打印1—10没有5,结果是不是呢?并不是,结果是打印1,2,3,4然后进入死循环,为什么呢?我们看,continue的作用是跳过本次循环,也就是说满足条件时,执行continue,则后面语句不执行,直接进行判断,所以在遇到i=5时,并没有i++,所以此时i仍然等于5,然后一直进行死循环。那么如何打印同学们说的1—10没有5呢?其实这就要调整语句的位置。同学们可以课后试一试。
for循环
for循环的语法是:
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式1是初始化部分,表达式2是条件判断部分,表达式3是调整部分。我们可以看到相对于while循环,for循环的优势就是将这三个表达式写在一起相对好修改和调整。看个例子:
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ",i);
}
return 0;
}
在这段代码中,还是打印1—10,相比较while循环,将三个部分都用for语句整合,对于后期维护更改有很大帮助。
do……while循环
do……while循环相对于while循环来说没有什么区别,不同点就在于do……while是先执行语句,在进行判断,判断成立继续执行,看个例子:
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
}while (i <= 10);
return 0;
}
在这段代码中,目的还是一样,打印1—10,我们可以看到,是先进行循环语句,在进行while判断。所以调整部分还是需要再循环语句中写出才可以,否则不是执行一次,就是死循环。
好了,这就是一些常见的分支和循环语句的分享,希望能给大家一些启发和帮助,感谢大家认真看完。