Hello C语言 —— 分支语句和循环语句

目录

一、什么是语句?

二、分支语句

1. if 语句

1. 语法和流程图

2. 悬空 else

3. if 书写形式的对比

2. switch 语句

1. 语法 

2. default子句

3.练习

三、循环语句

1. while 循环

1. 语法与流程图

2. while 中的 break

3. while 中的 continue

4. getchar 和 putchar 应用在while循环语句中

2. for 循环

1. 语法与流程图

2. for 中的 break 和 continue

3. for 语句中的循环控制变量

4. for 循环的一些变种

3. do...while 循环

1. 语法与流程图

2. do...while 中的 break 

3. do...while 中的 continue 

四、goto语句

1 .goto 概念

2. 关机程序



一、什么是语句?

C语言中由一个分号     ;    隔开的就是一条语句

例如 

printf("xunhuan and fenzhi");
int a = 1 + 2;

二、分支语句

1. if 语句

1. 语法和流程图

if语句的语法结构

 语法结构 
if(表达式)
       语句;
if(表达式)

       语句1;
else
       语句2;

//多分支  
if(表达式1)
       语句1;
else if(表达式2)
       语句2;
else
       语句3;


2. 悬空 else

打开记事本,输入这段代码之后效果是这样的

 复制这段代码到VS下,代码会变成这样

输出结果:

 这一段代码看似相同,实则不同

这段代码复制到 VS 中,else会默认与最近的 if 组合 这是 VS 这个软件默认的

如果在 if else 语句后面都加上大括号就会很大程度避免这种情况发生

 第二次在记事本上的 if else 语句后面都加上大括号之后,再复制到VS里面,然后我们来看看效果

输出结果:

结果一样

总结:

适当的使用{}可以使代码的逻辑更加清楚

代码风格很重要


3. if 书写形式的对比

//代码1
if (condition) {
	return x;
}
return y;
//代码2
if (condition)
{
	return x;
}
else
{
	return y;
}
//代码3
int num = 1;
if (num == 5)
{
	printf("hehe\n");
}
//代码4
int num = 1;
if (5 == num)
{
	printf("hehe\n");
}

四种代码书写方式中,哪个更好?

代码2代码4更好,逻辑更加清晰,不容易出错。


2. switch 语句

1. 语法 

switch 语句也是一种分支语句。 常常用于多分支的情况。

 语法结构 

switch(整型表达式)
{

     case 整形常量表达式:
                                语句;
}

在 switch 语句中,我们没法直接实现分支,搭配 break 使用才能实现真正的分支。

例如用 switch 输入星期一到星期天 

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

现在改变代码 

#include <stdio.h>
//switch代码演示
int main()
{
	int day = 0;
	switch (day)
	{
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("工作日\n");
			break;
		case 6:
		case 7:
			printf("休息日n");
			break;
	}
	return 0;
}

break 语句的实际效果是把语句列表划分为不同的部分

 编程好习惯 

在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)

2. default子句

  1. 写在任何一个case标签可以出现的位置。
  2. 当 switch 表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。
  3. 每个switch语句中只能出现一条default子句。
  4. 但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句

 编程好习惯 

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

3.练习

#include <stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;
	case 2:
		n++;
	case 3:
		switch (n)
		{//switch允许嵌套使用
		case 1:
			n++;
		case 2:
			m++;
			n++;
			break;
		}
	case 4:
		m++;
		break;
	default:
		break;
	}
	printf("m = %d, n = %d\n", m, n);
	return 0;
}

三、循环语句

1. while 循环

1. 语法与流程图

//while 语法结构
 while(表达式)
        循环语句;

例:在屏幕上打印1-10的数字

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

2. while 中的 break

break 代码实例 

//break 代码实例
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

这里代码输出的结果是什么?

  1. 1 2 3 4
  2. 1 2 3 4 5
  3. 1 2 3 4 5 6 7 8 9 10
  4. 1 2 3 4 6 7 8 9 10

 输出结果 

 总结 

break 在 while  循环中的作用 
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的
break是用于永久终止循环的。


3. while 中的 continue

continue 代码实例 1 

//continue 代码实例1
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

continue 代码实例 2 

//continue 代码实例1
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		i = i + 1;
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

这里代码输出的结果是什么?

  1. 1 2 3 4
  2. 1 2 3 4 5
  3. 1 2 3 4 5 6 7 8 9 10
  4. 1 2 3 4 6 7 8 9 10
  5. 2 3 4 6 7 8 9 10

 输出结果 

 总结 

continue在while循环中的作用就是 
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断

4. getchar 和 putchar 应用在while循环语句中

代码实例 1 

#include <stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
		putchar(ch);
	return 0;
}

代码实例 2 

#include <stdio.h>
int main()
{
	while ((ch = getchar()) != EOF)
	{
		if (ch < ‘0’ || ch > ‘9’)
			continue;
		putchar(ch);
	}
	return 0;
}

2. for 循环

1. 语法与流程图

 语法结构 

for(表达式1;表达式2;表达式3)
                   循环语句;

表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。

while 循环  for 循环 有什么不同呢?我们来对比一下 

使用 for 循环 在屏幕上打印 10 个 草 

#include <stdio.h>
int main()
{
	int i = 0;
	//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
	for (i = 1; i <= 10; i++)
	{
		printf("草");
	}
	return 0;
}

使用 while 循环 在屏幕上打印 10 个  

#include <stdio.h>
int main()
{
	int i = 0;

	i = 1;//初始化部分
	
	while (i <= 10)//判断部分
	{
		printf("草 ");

		i = i + 1;	//调整部分
	}
}

 总结 

可以发现在 while 循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for 循环的风格更胜一筹。 for循环使用的频率也最高。


2. for 中的 break 和 continue

for 循环 中也可以出现 break continue,他们的意义和在 while 循环 中是一样的。 但是还是
有些差异 ▼

break 代码实例 

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

continue 代码实例 

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

3. for 语句中的循环控制变量

 建议 

1. 不可在 for 循环体 内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的
取值采用“前闭后开区间”写法。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}

//两边都是闭区间
for(i=0; i<=9; i++)
{}


4. for 循环的一些变种

变种一 ▼

#include <stdio.h>
int main()
{
	//变种1
	for (;;)
	{
		printf("草\n");
	}
	return 0;
}

省略 初始化部分、判断部分、调整部分 之后这个循环还可以进行,但结果就是无止境的一直输出 

变种二 ▼

#include <stdio.h>
int main()
{
	//变种2
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("草\n");
	}
	return 0;
}

 初始化部分、判断部分、调整部分 都有两个不同的条件,但是照样能够输出,语法没有问题,VS环境下也没有报错,说明这个变种是可行的

输出结果 ▼

3. do...while 循环

1. 语法与流程图

 语法结构 

do
循环语句;
while(表达式);

 特点 

 循环至少执行一次,使用的场景有限,所以不是经常使用。

2. do...while 中的 break 

include <stdio.h>

int main()
{
	int i = 10;

	do
	{
		if (5 == i)
			break;

		printf("%d\n", i);

	} while (i < 10);

	return 0;
}

输出结果 

 输出5之后,程序结束

 为什么?

当i=5,来到 if语句 ,if语句条件被激活,执行 break 语句,然后程序直接结束。

3. do...while 中的 continue 

#include <stdio.h>

int main()
{
	int i = 0;

	do
	{
		if (5 == i)
			continue;

		i = i++;

		printf("%d\n", i);
	} while (i < 10);

	return 0;
}

输出结果 

输出5之后,光标一直闪烁,程序陷入死循环

 为什么?

当i=5,来到if语句,if语句 条件被激活,执行 continue语句,然后直接又跳到 if语句,从而陷入死循环。


四、goto语句

1 .goto 概念

  1.  C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
  2.  从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
  3.  但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。
  4.  这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

2. 关机程序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
	char input[10] = { 0 };
	system("shutdown -s -t 60");
again:
	printf("电脑将在1分钟内关机,如果输入:我是大佬,就取消关机!\n请输入:>");
	scanf("%s", input);
	if (0 == strcmp(input, "我是大佬"))
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
}

有历经千辛万苦的意志,谁就能达到任何目的。——米南德

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极 衍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值