C语言:控制语句(顺序+循环+分支)

目录

前言

顺序

循环

什么是“真”  什么是“假”

while循环

for循环

do while循环

分支

if语句

 switch语句


前言

现实生活中完成一件事情无外乎三种情况:

  • 按照怎样的顺序去执行----顺序
  • 遇到选择了如何去选择----分支
  • 某件事可能要多做几次----循环

编程也是一样,最基本的结构就是这三种情况。


顺序

#include<stdio.h>
int main(void)
{
    int num;//创建变量
    scanf("%d",&num);//输入变量的值
    return 0;
}

上述代码中,我们需要先创建变量,再使用它,而不能使用完它再创建,这就是顺序。


循环

  • 什么是“真”  什么是“假”

C语言规定:0为“假”,其他的数字为“真”。

如果一个表达式成立,例如5>3,这个表达式恒成立,则为真,会返回数字1(每个表达式都会返回一个值),相反,如果写成5<3,则这个表达式会返回0,就为假。

  • while循环

#include<stdio.h>
int main(void)
{
    while(1)
    {
        printf("xxxx\n");
    }
    return 0;
}

while()循环括号里面是判断是否可以进入循环的条件,如果括号里的条件成立,即为真,就进入循环,否则不进入循环。括号里面是1,那么就进入循环,

执行完循环里面的语句后,会再次回到while()循环的条件进行判断,1永远为真,所以就会一直循环,造成死循环。

运行结果如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA44CQIOaVmeS4uyDjgJE=,size_20,color_FFFFFF,t_70,g_se,x_16

这里只截取到一部分,实际上会一直打印


  • for循环

for(exp1;exp2;exp3)循环括号内部分为三个部分,exp1是初始化,只在for循环开始时执行一次,exp2是判断条件,exp3是调整部分,这三部分中间用分号隔开。

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

6993055ae7264e8a8b8d02c7dcf02a7d.png

这段代码即用for循环打印了0-9的数字 ‘


  • do while循环

do while循环不管三七二十一先执行一次循环体内部的语句,然后再进行判断是否循环

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA44CQIOaVmeS4uyDjgJE=,size_11,color_FFFFFF,t_70,g_se,x_16

 注意:do while循环的while后面是有分号的,而while循环和for循环括号后面是不可以加分号的


分支

当我们遇到好多种情况需要去抉择的时候我们应该如何去选择呢,这就需要分支语句

  • if语句

#include<stdio.h>
int main(void)
{
	int num;
	scanf("%d", &num);
	if (num > 0)
	{
		printf("%d > 0\n",num);
	}
	else if (num < 0)
	{
		printf("%d < 0\n",num);
	}
	else
	{
		printf("%d = 0\n",num);
	}
	return 0;
}

上述代码即为if语句的例子,输入num,符合哪种情况就进入哪一个代码段

f14da95854854173a9181c9ab9a75678.png

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA44CQIOaVmeS4uyDjgJE=,size_10,color_FFFFFF,t_70,g_se,x_16

 290896708842471ab16e1adf3cfd12cf.png

 使用if语句需要注意的事项

  • 每个if语句后面只能跟一个语句,如果有多个语句需要用大括号括起来
  • else if可以有无数多种
  • else 的情况是除了if 和 else if 之外的所有情况
  • 如果代码段没有用大括号括起来,那么else语句会和离else语句最近的if 匹配

例如如下代码:

#include<stdio.h>
int main(void)
{
	int num;
	scanf("%d", &num);
	if (num > 0)
		printf("%d > 0\n", num);
		if (num < 0)
			printf("YES\n");
	else
		printf("NO\n");
	return 0;
}

代码运行结果如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA44CQIOaVmeS4uyDjgJE=,size_11,color_FFFFFF,t_70,g_se,x_16

有人疑惑,为什么else 语句也会执行?

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA44CQIOaVmeS4uyDjgJE=,size_14,color_FFFFFF,t_70,g_se,x_16

实际上,和else 语句离的最近的是2号if语句并不是1号if()语句,如何避免这种情况呢?就是每个情况都用大括号括起来,不管有几个语句,都用大括号括起来,这样可以使代码之间的关系一目了然,可读性提高,不至于造成上面的情况。

优化后如下:

#include<stdio.h>
int main(void)
{
	int num;
	scanf("%d", &num);
	if (num > 0)
	{ 
		printf("%d > 0\n", num);
	}
	if (num < 0)
	{
		printf("YES\n"); 
	}
	else
	{ 
		printf("NO\n");
	}
	return 0;
}

  •  switch语句

#include<stdio.h>
int main(void)
{
	int day;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("今天是周%d",day);
		break;
	case 2:
		printf("今天是周%d", day);
		break;
	case 3:
		printf("今天是周%d", day);
		break;
	case 4:
		printf("今天是周%d", day);
		break;
	case 5:
		printf("今天是周%d", day);
		break;
	case 6:
		printf("今天是周%d", day);
		break;
	case 7:
		printf("今天是周%d", day);
		break;
	default:
		printf("输入错误");
		break;
	}
	return 0;
}

switch()括号里的判断条件是整数

case 后面的数字即为switch括号里的数字

如果有一种情况符合,就从这个case 进入,一直执行后面的语句,知道遇到第一个break才停止,如果没有遇到break,就会执行完后面所有的情况

例如:

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA44CQIOaVmeS4uyDjgJE=,size_10,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA44CQIOaVmeS4uyDjgJE=,size_11,color_FFFFFF,t_70,g_se,x_16

 输入2,就会进入case 2,一直执行到遇到break

default 语句可有可无,是除了列出来的case 的所有情况,所有case 情况的顺序没有要求,任意位置都可以


//有任何疑惑和看法欢迎留言

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

【 Stack_OverFlow 】

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

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

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

打赏作者

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

抵扣说明:

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

余额充值