零基础玩转C语言第一章—分支语句

大家好,我是深鱼~

目录

前言:

1.什么是语句?

2.分支语句(选择结构)

2.1if语句

2.1.1悬空的else

2.1.2if书写形式的对比

2.1.3练习

2.2switch语句

 2.2.1在switch语句中的break和default语句

2.2.2练习

结语:彼方尚有荣光在,少年不惧岁月长


前言:

今天我们来重点来学习分支语句的相关内容,对于分支语句大家应该都挺熟悉的,但是你一定还有一些知识不知道,不信就来看看!

1.什么是语句?

C语言中的语句分为以下五类:

(1)表达式语句                       3+5;                
(2)函数调用语句                    printf("hehe\n");    
(3)空语句:                           ;      

有时候我们需要一条语句,但是这条语句什么都不需要做,就可以使用空语句   

(4)控制语句:用于控制程序的执行流程

可分为以下三类:

<1>分支语句(条件判断语句):if语句,switch语句

<2>循环语句:do while语句,while语句,for语句

<3>转向语句:break语句,goto语句,continue语句,return语句

(5)复合语句

2.分支语句(选择结构)

2.1if语句

语法结构:C语言中:0表示假,非0表示真

if(表达式)             if(表达式)                    //多分支   if(表达式1)

     语句;                    语句1;                                           语句1;

                                 else                                               else if(表达式2)

                                     语句2;                                          语句2;

                                                                                       else

                                                                                            语句3;

代码演示:
单分支:

//单分支
#include<stdio.h>
int main()
{
	//如果年纪大于18输出成年人
	int age = 0;
	//输入
	scanf("%d", &age);
	//判断
	if (age >= 18)
		printf("成年人\n");
	return 0;
}

双分支: 注意else后面不跟表达式

//双分支
#include<stdio.h>
int main()
{
	//如果年龄大于等于18-成年人,否则打印-未成年人
	int age = 0;
	//输入
	scanf("%d", &age);
	//判断
	if (age >= 18)
		printf("成年人\n");
	else
		printf("未成年\n");
	return 0;
}

多分支:因为各个分支是相互排斥的,所以18-30大于18就可以不用写

//age<18  - 未成年
//18~30   - 青年
//31~50   - 中年
//51~70   - 中老年
//71~99   - 老年
//>99     - 老寿星
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年\n");
	else if (age <= 30)
		printf("青年\n");
	else if (age <= 50)
		printf("中年\n");
	else if (age <= 70)
		printf("中老年\n");
	else if (age <= 99)
		printf("老年\n");
	else
		printf("老寿星\n");
	return 0;
}

注意:(1)在C语言中要想表达18<age<30怎么表达:不能和数学中一样直接写,C语言中不存在连等

if(age>18&&age<30)

(2)if默认只能控制一条语句,要执行多条语句,就得加{}

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

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

大家可以看看这个程序的结果是多少?

其实什么也不打印,因为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;
}

改成这样就清晰的知道这个代码的逻辑

2.1.2if书写形式的对比

if(condition)
 { 
     return x;
 }
return y;

分析这个代码,思考一下是不是满足condition就return x,不满足就return y

答案使肯定的,但是这样的代码我们还要思考一下才能知道它的逻辑

if(condition)
 { 
     return x;
 }
else
{
     return y;
}

这样改进就可以清晰的知道其逻辑

我们再来看一个代码

#include <stdio.h>
int main()
{
	int a = 10;
	if (a == 5)
		printf("hehe\n");

	return 0;
}

我们看到第5行,对于我们初学者很可能分不清=和==的区别,就经常会在if后面表达式跟=

先来看看=和==有什么区别?

=赋值符               eg:a=5,意思就是把5赋值给a

==判断是否相等  eg:a==5就是判断a和5是否相等

 既然==是判断是否相等,那左右两边交换位置也就没有影响,那么我们为了防止写错

 if(5==a)

2.1.3练习

(1)判断一个数是否为奇数

#include<stdio.h>
int main()
{
	int number = 0;
	scanf("%d", &number);
	if (number % 2 == 1)
		printf("是奇数\n");
	else
		printf("不是奇数\n");
	return 0;
}

(2)输出1-100之间的奇数

方法一:

#include<stdio.h>
int main()//输出1-100之间的奇数
{
	int i = 0;
	for (i = 1; i <= 100; i++)
	{
		//判断并输出
		if (i % 2 == 1)
			printf("%d ", i);//记得加一个空格隔开
	}
	return 0;
}

方法二:1就是奇数,然后加2下一个奇数,直接i=i+2

#include<stdio.h>
int main()//输出1-100之间的奇数
{
	int i = 0;
	for (i = 1; i <= 100; i = i + 2)
	{
		printf("%d ", i);//记得加一个空格隔开
	}
	return 0;
}

2.2switch语句

switch语句也是一种分支语句,但是常常是多分支的情况(这样就避免if..else if...else if..形式)

比如:

switch语句的结构:

switch(整形表达式)
{

       case 整形常量表达式:

                       语句;

}

 注意:switch语句中case和switch后面接的不一定只是int类型,还可以是char,short,long类型,但是不能跟double,float类型

 2.2.1在switch语句中的break和default语句

break实现了switch语句跳出分支语句的效果,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\n");
		break;
	case 5:
		printf("星期5\n");
		break;
	case 6:
		printf("星期6\n");
		break;
	case 7:
		printf("星期天\n");
		break;
	}
	return 0;
}

但是如果要

1.输入1-5,输出“weekday”

2.输入6-7,输出“weedend”

 代码如下:

#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;
	default:
		printf("选择错误\n");
		break;
	}
	return 0;
}

如果输入的值和所有case标签的值都不一样,那就直接进入default语句,注意每个switch语句只能出现一个default子句,default子句可以出现在语句列表的任何位置

编程好习惯:在最后一个case语句和default语句的后面加上一条break语句

2.2.2练习

问题:看看下面代码结果是什么?

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

答案:m=5,n=3

分析:首先n=1,m=2,然后进入switch语句,n=1,直接进入case1,m=3,因为没有break,继续进入case2,n=2,然后又没有break,继续进入case3,因为n=2,进入case2,m=4,n=3,然后break跳出小的switch语句,因为case3没有break,继续进入case4,m=5,遇到break直接跳出大的switch语句,最后输出m=5,n=3

结语:彼方尚有荣光在,少年不惧岁月长

觉得笔者写的还可以,或者自己有些许收获的时候,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢 

猜你喜欢

转载自blog.csdn.net/qq_73017178/article/details/131761276