C语言-分支和循环语句

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


提示:C语言-分支、循环语句:

例如:分支:if、switch
循环:do while、while、for


提示:以下是本篇文章正文内容,下面案例可供参考

1.分支语句是什么?

示例:分支就像生活中的选择,假期我可以选择做的两件事。
​​选择学习或者打游戏

1.1 if语句

那if语句的语法结构是什么样的呢?

语句表达式:
结构1if(表达式)
    语句;

结构2if(表达式)
    语句1;
else
	语句2;

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

代码演示如下:

//代码1
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年");
	}
	return 0;
}

//代码2
#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年\n");
	}
	else
	{
		printf("成年\n");
	}
	return 0;
}

//代码3
#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年\n");
	}
	else if(age>18 && age<50)
	{
		printf("成年\n");
	}
	else
	{
		printf("老年\n");
	}
	return 0;
}

解释下如果表达式为真,则语句执行。
在C语言中如何表示真假?

0表示假,非0表示真

如果条件成立,要执行多条语句,怎样使用代码块。

#include <stdio.h>
int main()
{
	if(表达式1)	
	{
		语句1;
	}
	else(表达式2)
	{
		语句2;
	}
	return 0;
}

这里的{ } 就是 个代码块。

1.1.1 悬空else

当你写了这个代码:


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

看起来是打印-haha,但是它什么都不会打印。

else的匹配:else是和它离的最近的if匹配。
改正:

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

1.1.2 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更好,逻辑更清晰,不容易出错。

1.1.3 练习,自己尝试做下,做不出来也没关系。(我博客里面有答案和解析)

1、判断一个数是否为奇数
2、判断1-100之间的奇数

1.2 swich语句


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

输入-1,输出-星期1
输入-2,输出-星期2
输入-3,输出-星期3
输入-4,输出-星期4
输入-5,输出-星期5
输入-6,输出-星期6
输入-7,输出-星期7

如果我写成if…else if…else if的形式太复杂,那我们就得有不一样的语法形式。
这就是switch语句。

switch(整形表达式)
{
	语句项;
}

语句项是什么呢?

是一些case语句:
如下:
case 整形常量表达式:
	语句;

1.2.1 在switch语句中的break

在switch语句中我们没办法实现分支,得搭配break使用才能实现分支。
比如:

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期1\n");
		break;
	case 2:
		printf("星期2\n");
		break;
	case 3:
		printf("星期3\n");
		break;
	case 4:
		printf("星期4");
		break;
	case 5:
		printf("星期5");
		break;
	case 6:
		printf("星期6");
		break;
	case 7:
		printf("星期7");
		break;
	}
	return 0;
}

但有时候,我们的需求变了:
例如:

1、输入1-5,输出"weekday";
2、输入6-7,输出"weekend";

所以我们的代码就该这样实现了:

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	}
	return 0;
}

break语句 的实际效果是把语句列表划分为不同的分支部分(白话 :遇到break就停止,没遇到就继续向下执行)。

编程好习惯

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


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

2.循环语句


  • while
  • for
  • do while

我们已经掌握了,if语句;

if(条件)
	(语句);

当条件按满足,语句执行,否则不执行。
但是这个语句只会执行一次。
但是我们发现生活中的很多例子是:同一件是我们需要不断的完成很多次。那我们怎么怎么做呢?
C语言就帮我们引入了:while语句,它:可以实现循环。

while 语法结构

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

while语句执行的流程:
在这里插入图片描述

比如我们实现:

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

#include <stdio.h>

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

上面的代码已经帮我了解了while语句的基本语法,那我们在了解下:

2.1.1 while语句中的break和continue

break 介绍以及代码实列:

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

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

  • A、 1 2 3 4
  • B、 1 2 3 4 5
  • C、1 2 3 4 5 6 7 8 9 10
  • D、1 2 3 4 6 7 8 9 10

(答案A)
总结:
break在while循环中的作用:

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

continue介绍

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

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

  • A. 1 2 3 4
  • B. 1 2 3 4 5
  • C. 1 2 3 4 5 6 7 8 9 10
  • D. 1 2 3 4 6 7 8 9 10

答案:A

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

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

  • A. 1 2 3 4
  • B. 1 2 3 4 5
  • C. 1 2 3 4 5 6 7 8 9 10
  • D. 1 2 3 4 6 7 8 9 10
  • E. 2 3 4 5 6 7 8 9 10 11

答案:E

总结:
continue在while循环中的作用是:

代码演示1#include "stdio.h"

int main() 
{
    int ch = 0;
    while ((ch = getchar()) != EOF) 
    {
        putchar(ch);
    }
    return 0;
}

代码演示2#include <stdio.h>
int main()
{
	int ch = '0';
	while((ch = getchar()) != EOF)
	{
		if (ch < '0' || ch > '9')
		{
			continue;
		}
		putchar(ch);
	}
	return 0;
}

//这个代码的作用是只打印数字字符,跳过其他字符。

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

2.2 for循环

我们已经知道了while循环,但是我们为什么还需要一个for循环呢?
首先来看看for循环的语法:

2.2.1 语法

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

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

实际问题:
<用for循环,在屏幕上打印1 - 10的数字。


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

for循环的执行流程图:
在这里插入图片描述

现在我们对比一下for循环和while循环。

#include <stdio.h>
int main()
{
	int i = 0;
	//实现相同的功能,使用while
	i = 1;//初始化部分
	while (i <= 10)//判断部分
	{
		printf("hehe\n");
		i = i + 1;//调整部分
	}

	//实现相同的功能使用for
	for (i = 1; i <= 10; i++)
	{
		printf("hehe\n");
	}
	return 0;
}

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

2.2.2 break和continue在for循环中

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

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

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

2.2.3 for语句的循环控制变量

建议:

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

//代码2-continue

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

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

2.2.4 一些for循环的变种

#include <stdio.h>
int main()
{
	//代码1
	for (;;)
	{
		printf("hehe\n");
	}
	//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。

	//代码2
	int i = 0;
	int j = 0;
	//这里打印了多少hehe?
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("hehe\n");
		}
	}

	//代码3
	int i = 0;
	int j = 0;
	//如果省略吊初始化部分,这里打印了多少个hehe?
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("hehe\n");
		}
	}

	//代码4-使用多余一个变量控制循环
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("hehe\n");
	}

	return 0;
}

2.2.5 一道笔试题:

//请问循环要循环多少次?
#include <stdio.h>
int main()
{
	int i = 0;
	int k = 0;
	for (i = 0, i = 0; k = 0; i++, k++)
	{
		k++;
	}
	return 0;
}

答案:0次,注意看判断部分是=(赋值),不是比较。

3.3 do…while()循环

3.2.1 do语句的语法:

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

3.3.2执行流程

3.3.3 do语句的特点

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


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

3.3.4do while循环中的break和continue

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

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

3.4 练习

  1. 计算 n的阶乘。
  2. 计算 1!+2!+3!+…10!
  3. 在一个数组中查找具体的某个数字n。(讲解二分查找)
  4. 编写代码,演示多个字符从两端移动,像中间汇聚。
  5. 编写代码实现,模拟用户登录情景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入失败,则退出程序。

总结

提示:这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了分支与循环语句的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值