C语言王国——选择与循环(1)

2024-06-04 8885阅读

目录

一、引言

二、选择结构

1,if语句

1.1,if...else...语句

1.2,多分支语句

1.3悬空else的问题

2,switch语句

2.1,switch

2.2,break

2.3,default


一、引言

       写了几个C语言代码我发现C语言程序和我们做事一样,按照顺序做事,选择做某事或者重复做某事。那我们继续对C语言深入认知:

C语言是结构化的程序设计语言,这⾥的结构指的是顺序结构、选择结构、循环结构,C语言是能够实 现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种 结构的组合。

 顺序结构:就如我们人做事一样一样的进行。

选择结构:就是对多个分支选择一个进行。用if、swich语句来实现。

循环语句:对同一件事反复进行。用for、while、do while语句来实现。

        那接下来就让我们了解这些结构:

二、选择结构

*顺序结构大家已经耳熟能详了,C语言中也没有对顺序结构有特殊的语句所以不再做详细叙述。

1,if语句

1.1,if...else...语句

if语句的语法表达式如下:

if (//表达式)
{
    //语句1
}
else
    //语句2

*若语句只为一句,大括号可以不加。

这个代码执行的逻辑就是,表达式成立则执行语句1,反之则执行语句2。

那C语言怎么判断表达式成立的呢?

在C语言中有一个特别的数0,0则代表假,非0则代表真。

举一个例子方便大家理解:

输出a和b中大的数字

if (a>b)
{
    printf("%d",a);
}
else
    printf("%d",b);

正如代码上显示的表达式为a>b,若成立则而1即为真,则打印a;若不成立则为0,即为假。则打印b,

1.2,多分支语句

       有细心的人就会发现只有if和else那只能分成两种情况啊,那如果多种情况我们该如何编写呢?其实大家不用担心,C语言在设计的时候已经考虑到了这个问题,那就是在if..else...语句中,else可以与另外一个if语句连用,构成多重判断。

举个例子:

判断整数的正负性

#include
int main()
{
    int num = 0;
    scanf("%d",&num);
    if(num > 0)
        printf("你输入的数字为正数");
    else if(num  

这个例子中就很好的利用到了else if,最后再加上一个else把没有讨论到的0也加上去。

*else if的使用其实就是构成了嵌套的if语句。

*if语句也可以在if语句中使用也属于if语句的嵌套。

1.3悬空else的问题

       在写代码中常常会遇到else写着写着位置跑丢了,不知道跟谁匹配了。那接下来姜糖就跟大家聊一聊这个问题。

        大家如果遇到有多个if和else,可以记住这样的一条规则,else总是跟最接近的if匹配。那大家就来看看下面这个代码:

#include 
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

 大家那想一想输出结果是什么呢?

C语言王国——选择与循环(1) 第1张

输出结果为啥也没有输出,嘿嘿嘿,想到了吗?

没想到也没有问题,接下来我们一起来分析一下:

       可能有些人会想else跟第一个if对齐的所以a=0不=1所以输出haha。但我上面不是跟大家说过吗,else总是跟最接近的if匹配所以else是和第二个if相匹配,而大家所认为的对齐和排版是不绝对这个的,大家可以试试你把代码放一行也是可以运行的。排版只是方便程序员的理解。

比如我改一下这个代码:

#include 
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	    else
		    printf("haha\n");
	return 0;
}

这样子,大家是不是更好理解了。

        或许有的人希望让这个else与第一个if匹配那有什么办法了。 豁,还真有办法,数学中你想让什么在一起计算加括号就行了,那我这边也是不是可以加括号呢?是的,只不过加的是大括号。这样我们就可以这样修改这个代码:

#include 
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
    {
		if (b == 2)
			printf("hehe\n");
    }
	else
    {
		printf("haha\n");
    }
	return 0;
}

只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。

2,switch语句

2.1,switch

在C语言中的选择结构中除了if语句外,C语言还提供了switch语句来实现分支结构。

switch 语句是⼀种特殊形式的if...else 结构,用于判断条件有多个结果的情况。它把多重 的 else if 改成更易用、可读性更好的形式。

代码定义如下:

switch(条件语句)
{
    case 条件1: 语句1
    case 条件2: 语句2
    default: 语句3
}

 switch语言中是根据条件语句中不同的值,执行相对应的case分支。如果没有对应的值则执行default分支。

注:

*switch中的条件语句必须是整形表达式

*case后的值,必须是整形常量表达式

那让我来用switch来举个例子:

输入一个整数输入➗3之后的余数

#include 
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.2,break

       细心的人已经发现了我在每一个case语句中的代码执行完之后,加上了break,那如果不加会怎么样呢?

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

C语言王国——选择与循环(1) 第2张

我们发现10/3余数为1,结构程序还多打印了一行余数为2。

这是为什么呢?

原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执行,有可能执行其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。就比如上面的代码就执行了 case 2 中的语句。 所以在 switch 语句中 break 语句是非常重要的,能实现真正的分支效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

2.3,default

在选择结构的多分支中我们常常不能把情况选完,但可以把他们全都归为一类,所以就诞生了else,和default。他们的用法是相同的,只不过放在不同的语句中。

接下来我就举一个例子让大家更深刻的了解他们(用default):

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

在一个星期中只有七天,那输入的超过7呢,那就提醒他输入错误。

那default和case在switch语句中有顺序要求吗?答案是没有的,只不过我们通常喜欢把default放在最后方便理解。


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]