分支与循环的初步学习(1)

本篇文章主要介绍分支结构的一些基础语法,好好学习,天天向上!

分支结构

1.if语句

1.1.if语句的语法形式如下:

if(表达式)
   语句

表达式为真,执行语句,为假,则不执行语句。在c语言中,0为假,非零为真

例子:判断一个人是否为男性

#include<stdio.h>
int main()
{
	int flag = 0;
	scanf("%d", &flag);
	
	if (flag == 1)
		printf("是男性");
	return 0;
}


1.2.else

显然,一个人的性别除了男性还有女性,要判断到底是男性还是女性就要用到else语句

例子:

#include<stdio.h>
int main()
{
	int flag = 0;
	scanf("%d", &flag);
	
	if (flag == 1)
		printf("是男性");
	else
		printf("是女性");
	return 0;
}

1.3分支中包含多条语句

默认在if和else下都只控制一条语句

例子:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("您已成年");
	    printf("可以接触未成年防沉溺");
	return 0;
}

上面的代码我们会发现,无论我们输入什么,可以解除未成年沉溺都会被打印

这就是因为if语句只能控制一条语句,对于第二条语句是独立存在的,无论条件是否成立都会被打印

如果我们想让他同时控制两条语句,那就需要用{}把要执行的语句括起来,else同理

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("您已成年");
		printf("可以接触未成年防沉溺");
	}
	return 0;
}

这样就可以使代码输出满足我们的要求

当输入值小于18时,什么都不输出

1.4嵌套if

在实际生活中,仅仅是一个简单的if...else很难满足需要,需要我们进行多重判断才能达到目的

这时候我们就要用到嵌套if,当然if嵌套,既可以嵌套到if语句中,也可以嵌套到else语句中

这里给出一个嵌套在if的例子,else类比同理:

#include<stdio.h>
int main()
{
	int m = 0;
	scanf("%d", &m);
	if (m > 0)
	{
		if (m % 2 == 0)
			printf("偶数\n");
		else
			printf("奇数\n");
	}
	else
		printf("非正数\n");
	return 0;
}

当我们学会了if...else的嵌套语法,就可以解决逻辑更加复杂的问题了

1.5悬空else

当代码中出现多个if...else时,有这样一个规则:else总是与最近的if配对

例子:

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 3;
	if (a == 2)
		if (b == 3)
			printf("ok\n");
	else
		printf("yes\n");

	return 0;
}

对于这个代码错误的想法就是,a不等于2,那么执行else语句输出”yes“。事实上这个代码的运行结果什么也不输出

原因是什么呢?

这就是悬空else

根据规则,else总是与离他最近的if匹配,这里代码的排版让我们以为,else于第一个if匹配,当地一个if的语句不成立时,执行else,打印yes。但事实上,else是与第二个if匹配,他们构成的if...else嵌套在第一个if语句中,当第一个if语句不成立时,代码就不会再往下执行,最终什么也不输出。

为了方便理解,我们可以把代码改成这样

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 3;
	if (a == 2)
    {
		if (b == 3)
			printf("ok\n");
	    else
		    printf("yes\n");
    }

	return 0;
}

如果我们确实想让else与第一个if匹配来达到目的,可以通过加适量的大括号,让代码的逻辑更清新,方便阅读

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 3;
	if (a == 2)
    {
		if (b == 3)
			printf("ok\n");
    }
	else
		printf("yes\n");

	return 0;
}

1.6switch语句

在c语言中,实现分支结构除了可以用if语句外,还可以使用switch语句

switch适用于判断条件有多个结果的情况

switch (expression)
  {
  case value1: statement
  case value1: statement
  default:statement
  }

根据上面的代码,根据条件表达式expression可能出现的不同的值,分别执行相应的case分支,如果没有对应的case分支,就执行default语句。

!!!

1.switch后边的expression必须是整型表达式

2.case后边的value1,也必须是整型常量表达式

例子:输入一个整数,计算除3之后的余数

#include<stdio.h>
int main()
{
	int m = 0;
	scanf("%d", &m);
	switch (m % 3)
	{
	case 0:
		printf("余数为\n");
		break;
	case 1:
		printf("余数为1\n");
		break;
	case 2:
		printf("余数为2\n");
		break;

	}
	return 0;
}

这个代码中应该注意

!!!

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

2.每一个case语句的代码执行完后,都要加一个break语句,来跳出switch语句

1.6.2switch语句中的break

如果不加break语句会怎样呢?

根据编译的结果我们不难看出,明明我们输入了4,理想的结果应该只输出余数是1,但程序运行的结果却多了一行,余数是2.                                                                                                                

出现这个结果的原因就是:switch语句也是有分支效果的,只有在switch语句中使用break语句才能跳出switch语句,如果一个case语句后边没有break,代码就会继续向下执行,出现执行其他case语句的代码的情况,直到遇到break,或者switch语句结束。比如上边的代码,就没有break,在执行完case1后,程序没有停下来,而是接着执行case2中的语句,直至switch语句结束 

                  

由此我们可以看出switch语句中break非常之重要。

当然,也不是所有情况case语句后边都要跟一个break

例子:判断这一天是工作日还是休息日

#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;来更好地满足我们的要求。

1.6.3switch语句中的default语句

在使用switch语句的过程中,我们也会碰到,expression语句中的值不满足任何一个case语句,这个时候沃尔玛你可以选择不做处理,或者加入default语句

还以上边的例子为例:

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

运行结果如下:

当我们输入9时,case语句均不满足,执行default语句,输出”输入错误“

1.7switch语句中的case和default的顺序问题

在switch语句中case和default语句的顺序并没有硬性的要求,只要顺序满足要求即可,不过大家通常都把default语句放在最后。

作者有话说:这是写的第一篇,可能有很多不足,希望可以提出宝贵意见!!!

虚心求教!!!我只是一只刚学c语言没几天的小白,如果感到有帮助,还麻烦各位看官老爷点个赞!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值