C语言循环语句和分支

本文详细介绍了C语言中的结构化编程,包括if,else,switch,while,for和do-while循环的语法、使用示例和注意事项。通过实例演示了如何进行条件判断和多分支选择,强调了正确代码排版和break语句的重要性。
摘要由CSDN通过智能技术生成
C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实 现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种 结构的组合,这里给大家分享循环结构的知识,保姆教程。

我们可以使⽤ if switch 实现分⽀结构,使⽤ for while do while 实现循环结构。

1. if语句

1.1 if

if语句的语法形式如下:

1 if(表达式)
2      语句

(表达式(为真),则执行语句),(表达式不成立(为假),则语句不执行)

在C语言中,0为假,1为真,也就是表达为0,则语句不执行,表达式为1,则语句将执行。

让我举个例子:输入一个整数,判断是否是正数

#include <stdio.h>

int main()
{
    int num;

    printf("请输入一个整数:");
    scanf("%d", &num);//scanf是输入的意思,是一个函数,你输入给它一个值,才能判断是否是正数

    if (num > 0)
    {
        printf("这是一个正数。\n");
    }
   
    return 0;
}

 

这里我输入了5,计算机判断是个正数,如果我这里输入了负数,比如-5,那么代码运行起来后什么都不会打印,那么你不想什么都不打印输出,想要打印负数那该什么表达呢?来跟着我往下看。

1.2 else

else 是可以跟 if 搭配使用的一个关键字,在英文中是别的,其他的意思,if...else...语法形式如下:

if(表达式)
    语句1
else
    语句2

例子:输入一个整数,判断是否为正数,如果是正数打印是正数,否则打印负数。

#include <stdio.h> 

int main()
{
    int num;

    printf("请输入一个整数:");
    scanf("%d", &num);

    if (num > 0)
    {
        printf("这是一个正数。\n");
    }
    else (num < 0)
    {
        printf("这是一个负数。\n");
    }
   
    return 0;
}

1.3 分支中包含多条语句

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

#include<stdio.h>
int main()
{
	int grade = 0;
	scanf("%d", &grade);
	if (grade >= 60)
		printf("合格\n");
	else
	printf("不合格\n");
	printf("好好学习\n");
	return 0;
}

你会发现,上面的代码无论你是输入>=60,还是小于<=60,“好好学习”都会打印在屏幕上

因为 if 和 else 语句中默认都只控制一条语句,对于printf("好好学习"); 是独立存在的,无论if语句条件的真假,都会执行该语句。如果我们要同时控制多条语句,就要使用  { } 将代码括起来。

#include<stdio.h>
int main()
{
	int grade = 0;
	scanf("%d", &grade);
	if (grade >= 60)
	{
		printf("合格\n");
	}
	else
	{
		printf("不合格\n");
		printf("好好学习\n");
	}
	return 0;
}

1.4 嵌套if

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

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num < 18)
		printf("少年\n");
	else if (num <= 35)
		printf("青年");
	else if(num <= 50)
		printf("中年\n");
	else if (num <= 80)
		printf("老年");
	else
		printf("老寿星");
	return 0;
}

当然这个代码也可以加上代码块,有不同的方法,对于不加代码块,相对更容易读懂些,

#include<stdio.h>

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num < 18)
	{
		printf("少年\n");
	}
	else 
	{
		if (num <= 35)
		{
			printf("青年");
		}
		else
		{
			if (num <= 50)
			{
				printf("中年\n");
			}
			else
			{
				if (num <= 80)
					printf("老年");
				else
					printf("老寿星");
			}
		}
	}
	return 0;
}

1.5悬空else

很多同学都会出现,悬空else的问题,什么是悬空else?例如:

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("哈哈");
    else
		printf("呵呵");
	return 0;
}

你认为输出结果是什么?结果是什么都没有打印输出,你需要记住一条规则,else 总是跟最接近的if 进行匹配。

上面的代码排版,让 else 和第一个if语句对齐,会导致部分初学者认为 else 是跟第一个 if 进行匹配的,当我们看到第一个 if 语句条件不成立时,会认为 if 语句条件不成立就走 else 打印呵呵,但是 else 是和第二个 if 语句进行匹配的,第一个 if 条件不成立时,嵌套 if 就没有机会执行判断代码,所以最后的结果什么都没有进行打印。

正确的代码排版是非常重要的,能让别人更好读懂你的代码,如下:

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
    {
		if (b == 2)
			printf("哈哈");
        else
		    printf("呵呵");
    }
	return 0;
}

2.switch语句

语句格式:

switch ()//整形表达式 
{
		case //整形常量表达式 :
			//语句
			break;//跳出switch语句
}

使用条件运算符和 if else 语句很容易编写二选一的程序。但是,有时程序需要在多个选项中进行选择。可以用 if else 来完成,但是,大多数情况下,使用 switch 语句更方便些。两者比较如下:

#include <stdio.h>
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 改写:

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

上述代码中,要注意的点有:

1.case 和后边的数字之间必须要有空格

2. 每一个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个 switch 语句。

2.1 switch 语句中的 break  

break 语句在其中起到什么作用? 它让程序离开 switch 语句,跳至 swith 语句后面的下一条语句。如果没有 break 语句,那么就会从匹配的标签开始执行到 switch 末尾直到遇到 break。删除程序中所有的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 除以3本来余数是0,但是程序运行结果多了俩行,“余数是1” ,“余数是2”的打印。如 break 开头介绍,从匹配的标签打印直到 switch 语句结束。

原因是 switch  也是有分支效果的,只有在 switch 语句中使用 break 才能在跳出 switch 语句,如果某一个 case 语句后没有 break 语句,那么代码会继续执行下去,直到遇到 break 或者 switch 语句结束。

由此可见 switch 语句中 break 语句是非常重要的,能实现真正的分支效果。

当然,break 也不是每个 case 后面必须都得有,可以根据你代码需求编写。


比如:要求输入1~5;输出的是“工作日”,输入6~7,输出"休息日"

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);	
	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 ,或者在哪里使用 break ,才能达到我们实际的需求。

2.2 switc语句中的befault

在使用 swict 语句时,我们可能会遇到一种情况,比如 switch 后的表达式中的值与所有的 case 都无法匹配时,可以在 switch 语句中加上 befault 子句。

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

简单来讲,比如上面的代码,如果day输入的值,不是1~7的值,那么就无法与代码中所有的 case语句进行匹配,那么就会匹配 default  从而打印 “输入错误” ,你也可以选择不加这个 default 那么在你输入,不是1~7的值时,将什么都不会打印,选择权在你。

2.3 switch 语句中的 case 和 defualt 的顺序

在 switch 语句中 case 和 default 是没有顺序要求的,只要的顺序可以满足你想要表达输出的实际需求的就可以,但是建议把,default 放在最后。

3. while 循环

while语句结构 和 if 语句结构对比

while(表达式)
     语句;
if(表达式)
   语句;

是不是发现非常相似,他们的区别也非常简单

int main()
{
	if (1)
		printf("哈哈\n"); //if后边条件满足,打印一次哈哈
	return 0;
}
int main()
{
	while (1)
		printf("呵呵\n");//while后边的表达式成立,死循环打印呵呵,直到你停止打印。
	return 0;
}

这就是它们的区别,一个打印一次,一个循环打印。

让用 while 我们实际一下:在屏幕上打印1~10的值

参考代码:

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

代码解析:

4.for 循环 

for的循环是三种循环普遍使用最多的,for 循环的语法如下:

for (表达式1;表达式2;表达式3)
{
	语句;
}

表达式1 用与循环变量的初始化,如定义一个 int i = 0;

表达式2 用于循环结束条件的判断,如判断 i <=10 , 如果条件成立进入循环,反则跳出循环

表达式 用于循环变量的调整,如i++,i-- 等

4.1for 循环规则

//屏幕上打印 0~10的值
int main()
{
	for (int i = 0; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

运行结果:

首先执行表达式1 初始化变量,这里可以看到表达式1,把 0 赋值给 i ,然后执行表达式2 的判断部分,表达式2,i <= 10;  i 小于10 条件成立进入循环,当 i 大于 10,则跳出循环,当每次判断结束后,进入循环语句执行完后,再去执行表达式3 ,调整循环变量,i++后,在去到表达式 2 的地方执行判断,直到条件不成立 i 大于10 ,跳出循环。
注意:整个循环的过程中,表达式1初始化部分只被执行一次,剩下只有表达式2 , 表达式3在执行循环。

5.do-while 循环

do
     语句;
while (表达式);

while 和 for 这两种循环都是先判断,条件成立才进入循环,执行循环语句,如果不满足的话则跳出循环。

而 do while 循环则是先直接进入循环,执行循环语句后,在执行while表达式的判断,表达式成立,就会进行下一次循环,表达式不成,则跳出循环。

5.1 do while 循环的实例:

在屏幕上打印1~10的值

#include<stdio.h>

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

执行结果:

解析:

由此可见,在do while 语句中循环体是至少执行一次,(也就是我不管你表达式是否成立,你先给我进入循环体执行语句,在判断条件是否成立,是否为真,还是假。

如果这篇文章对你有帮助的话,麻烦点个赞,鼓励一下叭。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值