c语言是结构化的程序设计语言,结构是指顺序结构/循环结构/选择结构,我们可以使用if,switch 来实现分支结构,使用for,while,do while来实现循环结构

if语句

1.if

if(表达式)
    语句
  • 在C语言中,0为假,非0为真,也就是表达式的结果是0则语句不执行,反之如果表达式结果不为0,则语句执行

例子:输入一个整数,判断是否为偶数

#include<stdio.h>
int main() {
	int n;
	scanf("请输入一个整数:%d", &n);
	if (n % 2 == 1) {
		printf("这个数是偶数");
	}
	return 0;
}

2.else

  • 如果一个数不是偶数那就是奇数了,这个时候我们就可以用if...else...的语句表示了
if(表达式)
    语句1
else
    语句2
  • 那我们就接着上个例子继续完善它吧
#include<stdio.h>
int main() {
	int n;
	scanf("请输入一个整数:%d", &n);
	if (n % 2 == 1) {
		printf("这个数是偶数");
	}
	else {
		printf("这个数为奇数");
	}
	return 0;
}

3.分支中包含多条语句

默认在if和else语句中,都只控制一条语句,例如:

#include<stdio.h>
int main() {
	int money = 0;
	scanf("%d", &money);
	if (money >= 10)
		printf("有钱啦\n");
		printf("可以出门消费了\n");
	return 0;
}

  

通过上面的代码,你会发现无论输入>=10还是<10,都会在屏幕上打印"可以出门消费了"

这是因为if语句只能控制一条语句,就是上述的"有钱啦\n",如果条件为真就会打印"有钱啦",如果条件为假则不会打印; 但是对于"可以出门消费了这句话\n"是独立存在的,通过上面的例子我们也能得知无论条件为真还是为假都会打印"可以出门消费了"这句话   

  • 那我们想用if语句同时控制两条语句就需要{ }将代码括起来,else后也可以跟上{ }
#include<stdio.h>
int main() {
	int money = 0;
	scanf("%d", &money);
	if (money >= 10) {
		printf("有钱啦\n");
		printf("可以出门消费了\n");
	}
	return 0;
}
#include<stdio.h>
int main() {
	int money = 0;
	scanf("%d", &money);
	if (money >= 10) {
		printf("有钱啦\n");
		printf("可以出门消费了\n");
	}
	else {
		printf("钱还不够");
		printf("还不能出门消费");
	}
	return 0;
}

4.嵌套if

  • 在if else语句中,else 可以与另一个 if语句连用,构成多重判断

比如说,输入一个整数判断它是为正数,负数还是0

#include<stdio.h>
int main() {
	int n = 0;
	scanf("%d", &n);
	if (n > 0) {
		printf("这个数是正数");
	}
	else if (n == 0) { //这里的if相当于是嵌套在else语句中,形成了嵌套结构
		printf("这个数为0");
	}
	else printf("这个数为负数");
	return 0;
}

switch 语句

  • c语言中的switch语句也是实现分支结构
  • switch 语句是一种特殊形式的if....else结构, 用于判断多种结果的情况
switch(expression){
    case value1 : statement
    case value2 : statement
    ...
    default : statement

}
  • 上面的代码中,根据表达式expression 不同的值,来执行相应的case 分支, 如果找不到对应的值,就执行 default的分支

举个例子吧:输入一个整数,计算它除以3之后的余数

用if 语句完成如下:

int main() {
	int n = 0;
	scanf("%d", &n);
	if (n % 3 == 0) {
		printf("余数为0\n");
	}
	else if (n % 3 == 1) {
		printf("余数为1\n");
	}
	else printf("余数为2\n");
	return 0;
}

用switch语句完成如下:

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这个语句

如果不加上break的情况就如下:

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;
}

3是整除3的,余数为0,我们就会发现多打了后两行代码

  • 这是因为switch语句也是具有分支结构的. 如果在某一个case语句的后面没有break语句,代码就会往下执行,直到遇到break语句或者switch语句结束
  • 所以在switch语句中break是很重要的,但也不是每个case语句都需要break,这个需要结合实际情况来考虑

switch语句中的default

我们在使用switch语句的时候,也会出现不匹配代码中的case的情况 ,这个时候可以不做处理,也可以加入default子句

例子:输入星期,判断是休息日还是工作日

int main() {
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 0:
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("这是工作日");
		break;
	case 6:
	case 7:
		printf("这是休息日");
	default:
		printf("输入错误,请输入1-7内的数字");
		break;
	}
	return 0;
}

在switch语句中case 和 default是没有顺序要求的,满足需求即可,一般是把default放在最后

while 循环

while是c语言的循环结构中的一种 ,而且while的语法结构与if语句相似

比较:

if(表达式)
    语句



while(表达式)
    语句 //如果循环体有更多语句,需要加大括号

while语句的执行流程

  • 首先是执行判断表达式, 如果表达式为0则直接循环结束. 如果表达式的值为1,则执行循环语句,语句执行完之后在继续判断,是否进行下一次循环

例子:用while打出1-10的代码

int main() {
	int i = 1;
	while (i < 11) {
		printf("%d ", i);
		i++;
	}
	return 0;
}

for 循环

  • for循环是三种循环中使用最多的,for循环的语法格式如下:
for(表达式1;表达式2;表达式3)
    语句;

表达式1:用于循环变量的初始化

表达式2:用于循环条件结束的判断

表达式3:用于循环变量的调整

首先执行表达式1初始化循环变量, 接下来执行表达式2 的判断成分, 表达式2如果==0则循环结束; 表达式2 的结果如果!=0则执行循环语句, 循环语句执行完之,后,再去执行表达式3, 调整循环变量,然后再去执行表达式2 的判断 ,表达式2的结果是否为0, 决定循环是否继续

在整个循环过程中, 表达式1初始化部分只执行1次,剩下的表达式2,循环语句,表达式3在循环过程中

例子:打印1-10的值

int main() {
	for (int i = 1;i < 11;i++) {
		printf("%d ", i);
	}
	return 0;
}

do-while 循环

  • 在循环中do-while循环用的最少,它的语法如下:
do
    语句;
while(表达式)

while和for这两种循环都是先判断条件,条件满足则进入循环,执行循环语句,不满足则跳出循环

而do-while循环则是先进入循环体,在执行循环语句,然后在执行while的表达式,表达式为真,就会进行下一次,表达式为假则不再继续循环

例子:在屏幕上打印1-10的值

int main() {
	int i = 1;
	do {
		printf("%d ", i);
		i++;
	} while (i < 11);
	return 0;
}

break和continue语句

  • 在循环语句执行的过程中, 如果某些状况发生的时候,需要提前终止循环

c语言提供了break和continue两个关键字就是运用到循环中的

  • break的作用是永久终止循环,只要break被执行,直接就会跳出循环,继续往后执行
  • continue的作用是跳出本次循环中continue后边的代码,在for和while循环中会有差异

while循环中的break和continue

break举例:

int main() {
	int i = 1;
	while (i < 11) {
		if (i == 5)
			break;
		printf("%d ", i);//当i执行到5时,就执行break,循环结束了
		i++;
	}
	return 0;
}

打印了1,2,3,4之后,当i=5的时候.循环就在break的地方终止,不在循环

所以break的作用就是终止循环,只要break进行,则break外一层的循环就停止了

continue举例

int main() {
	int i = 1;
	while (i < 11) {
		if (i == 5)
			continue; //当i=5后,执行continue,去循环判断的地方
		printf("%d ", i); //因为这里跳过了i++,所以i一直为5,程序进入死循环
		i++;
	}
	return 0;
}

我们可以从中看出来,continue可以帮助我们跳过某一次循环continue后面的代码,直接到循环的判断部分,进行下一次循环,如果循环的调整在continue后面的话则可能进入死循环

for循环的continue和break

break举例

int main() {
	for (int i = 1;i < 11;i++) {
		if (i == 5)
			break;
		printf("%d ", i);
	}
}

  • break的作用是终止循环,当我们在某个条件下不想继续循环时,就可以使用break来完成

continue举例

int main() {
	for (int i = 1;i < 11;i++) {
		if (i == 5)
			continue; //这里的continue跳过了打印部分,来到了i++
		printf("%d ", i);
	}

  • 所以在for循环中的continue是跳过本次循环continue后面的代码,直接去循环调整部分.

do while循环中的break和continue

do while循环中的break和continue是和while中的作用几乎一模一样的,我们来看代码

int main() {
	int i = 1;
	do {
		if (i == 5)
			break;
		printf("%d ", i);
		i++;
	} while (i < 11);
	return 0;
}
int main() {
	int i = 1;
	do {
		if (i == 5)
			continue;
		printf("%d ", i);
		i++;
	} while (i < 11);
	return 0;
}

goto语句

  • c语言提供了一种特别的语法,就是goto语句和跳转标号,goto语句可以实现在同一个函数内跳转到标志好的

来看个例子吧:

int main() {
	printf("hello\n");
	goto next;
	printf("hehe\n");
next:
	printf("nihao\n");
	return 0;
}

这里就是直接跳过了hehe的输出,直接来到了next然后到nihao的输出

如果说goto语句使用不当,会在函数内随意乱跳转,打乱程序的执行顺序,所以建议少去使用goto语句,但是goto语句不是毫无用处,比如在跳出多层循环使用goto就会很方便

for (...) {
	for (...) {
		for (...) {
			if (disater)
				goto error;
		}
	}
}
error:

结语

以上就是c语言的循环结构和分支结构,希望大家可以多多点赞支持,欢迎大佬来纠正~

谢谢大家啦

更多推荐