C语言入门篇(三)

前言
  人生会面临各种岔路口,选择适合自己的路才是最好的。

分支语句

  • 什么是语句?
  • 1. if语句
    • 1.1 悬空else
    • 1.2 if书写形式对比
    • 1.3 练习
  • 2. switch语句
    • 2.1 在switch语句中的break
    • 2.2 default子句
    • 2.3 练习
  • 结束语

什么是语句?

C语句可分为以下五类:

  • 表达式语句
  • 函数调用语句
  • 控制语句
  • 复合语句
  • 空语句

本篇文章后面介绍的是控制语句。
  控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
  可分成以下三类:
  1.条件判断语句也叫分支语句: if语句、 switch语句;
  2.循环执行语句: do while语句、while语句、 for语句;
  3.转向语句: break语句、goto语句、continue语句、 return语句。

#include
int main()
{
	3 + 5;//表达式语句
	;//空语句
	printf("iloyo.");//函数调用语句
	return 0;
}

1. if语句

if语句的语法结构:

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

//单分支-if语句可以不加else
if(表达式)
	语句;

//多分支
if(表达式1)
	语句1;
else if(表达式2)
	语句2;
else
	语句3//嵌套使用
if(表达式1)
    语句1;
else
{
    if(表达式2)
    	语句2;
    else
    	语句3}

如果表达式的结果为真,则语句执行
在C语言中:0表示假,非0表示真。

如果条件成立,要执行多条语句,应该使用代码块:{ }

#include
int main()
{
	if(表达式)
	{
		语句列表1;
	}
	else
	{
		语句列表2;
	}
	return 0;
}

实例:

//代码1
#include
int main()
{
	int age;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年");
	return 0;
}

//代码2
#include
int main()
{
	int age ;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年\n");
	else
		printf("成年\n");
	return 0;
}

假设人的一生可分为:幼年(1-10岁)、青年(11-35岁)、中年(36-60岁)、老年(61- 岁)。已知一个人的年龄,如何知道ta处于人生哪个阶段呢?

#include
int main()
{
	int age = 20;
	//int age;
	//scanf("%d",&age);
	if (age >= 1 && age <= 10)
		printf("幼年");
	else if(age>10&&age<=35)
		printf("青年");
	else if(age>35&&age<=60)
		printf("中年");
	else
		printf("老年");
	return 0;
}

1.1 悬空else

下面是一个悬空的else语句,本意是与第一个if语句匹配,输出结果应该是“haha”,为什么会出错呢?
C语言入门篇(三)_第1张图片
原因一:默认情况下,if只能控制一条语句,若想控制多条语句,就要加上{ },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;
}

1.2 if书写形式对比

下面的代码2和代码4更好,逻辑更加清晰,不容易出错。

//代码1
if (condition)
{
	return x;
}
return y;
//代码2
if(condition)
{
	return X ;
}
else
{
	return y;
}

//代码3
int num = 1;
if(num == 5)
{
	printf("hehe\n");
}
//代码4
int num = 1;
if(5 == num)
{
	printf("hehe\n");
}
  • 当常量与变量判断相等时,把常量放在“==“”左边,避免出错
  • 函数体中,只要碰到return就返回,后面语句不再执行
  • 养成良好的代码风格,在笔试中才不会丢分

1.3 练习

1.判断一个数是否为奇数
2.输出1-100之间的奇数

下划看答案

//第一题
#include
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 2 == 1)
	{
		printf("%d是奇数\n",n);
	}
	else
	{
		printf("%d不是奇数\n",n);
	}
	return 0;
}
//第二题
//代码1
#include
int main()
{
	int i = 1;
	while (i <= 100)
	{
		printf("%d ", i);
		i = i+2;
	}
	return 0;
}

//代码2
#include
int main()
{
	int i;
	for (i = 1; i <= 100; i++)
	{
		if (i % 2 != 0)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

2. switch语句

switch语句也是一种分支语句。
常常用于多分支的情况,在语法上不强调顺序。
语法结构:

switch (整型表达式)
{
	语句项;
}

什么是语句项?

//由一些case语句组成,如:
case 整型常量表达式:
	语句;

比如:
  输入1,输出星期一
  输入2,输出星期二
  输入3,输出星期三
  输入4,输出星期四
  输入5,输出星期五
  输入6,输出星期六
  输入7,输出星期日
用if语句表示如下:

#include
int main()
{
	int day = 0;
	scanf("%d", &day);
	if (1 == day)
		printf("星期1\n");
	else if (2 == day)
		printf("星期2\n");
	else if (3 == day)
		printf("星期3\n");
	else if (4 == day)
		printf("星期4\n");
	else if (5 == day)
		printf("星期5\n");
	else if (6 == day)
		printf("星期6\n");
	else if (7 == day)
		printf("星期天\n");
	else
		printf("输入错误\n");
	return 0;
}

switch语句表示:

#include
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期日\n");
		break;
	}
	return 0;
}

如果用if…else if …else的形式表示就太复杂了,而switch语句在书写上就更简洁。

几种switch语句的书写方式:

switch(常量)
{
    case 常量1:
        printf(" ");
        break;
    case 常量2:
        printf(" ");
        break;
}
switch(常量)
{
    case 常量1:
    case 常量2:
        printf(" ");
        break;
    case 常量3:
        printf(" ");
}
witch(常量)
{
    defult:
        printf("输入错误");
        break
    case 常量1:
    case 常量2:
        printf(" ");
        break;
    case 常量3:
        printf(" ");
        break;        
}

2.1 在switch语句中的break

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
比如:

要求:输入1-5,输出的是"weekday"
   输入6-7,输出"weekend"

代码实现:

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

break语句的实际效果是把语句列表划分为不同的分支部分。

switch语句书写时,最好在最后一个case语句的后面加上一条break语句。
(可以避免出现在以前的最后一个case语句后面忘了添加break语句)

2.2 default子句

如果表达的值与所有的case标签的值都不匹配怎么办?

其实也没什么,结果就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C语言中并不认为这是个错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

你可以在语句列表中增加一条default子句,把下面的标签
 defaut:
写在任何一个case标签可以出现的位置。
当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。

每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

2.3 练习

看完上面的内容,你学会使用switch语句了吗?
来看看这段代码的结果是什么呢?

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

答案:
在这里插入图片描述


结束语

以上就是我对if语句和switch语句的分享,希望对你有所帮助。
  道阻且长,行则将至;行而不辍,未来可期。
  我们下一篇文章再见。
在这里插入图片描述

你可能感兴趣的:(浅谈C语言,c语言)