分支语句 · if语句 · switch语句


一、C语言中语句的定义

C语言中由一个分号 ; 隔开的,就是一条语句,比如:

> printf("Hello World !");
> 3 + 5;

二、分支语句(选择结构)

如果你好好学习,将来就进好公司敲代码。

如果你不好好学习,将来就进小公司敲代码。

这就是选择!

2.1 if 语句:

if 语句的结构

表达式的结果如果是真,就执行语句;为假就不执行语句。

如何判断真假呢?
0 为假,非 0 为真。

if (表达式)
	语句;
if (表达式)
	语句;
else 
	语句;
//多分支结构
if (表达式1)
	语句1;
else if (表达式2)
	语句2;
else if (表达式3)
	语句3;
......
else 
	语句 n ;

代码演示

//代码一
#include <stdio.h>
int main() {
	int age = 0;
	scanf("%d", &age);
	if (age >= 18) {
		printf("成年!\n");
	}
	return 0;
}
//代码二
#include <stdio.h>
int main() {
	int age = 0;
	scanf("%d", &age);
	if (age < 18) {
		printf("未成年!");
	}
	else {
		printf("成年!");
	}
	return 0;
}
//代码三
#include <stdio.h>
int main() {
	int age = 0;
	scanf("%d", &age);
	if (age < 18) {
		printf("少年\n");
	}
	else if (age >= 18 && age < 30) {
		printf("青年\n");
	}
	else if (age >= 30 && age < 50) {
		printf("壮年\n");
	}
	else if (age >= 50 && age < 80) {
		printf("老年\n");
	}
	else {
		printf("长寿老人\n");
	}
	return 0;
}

练习题

试判断该代码的输出值

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

这很容易造成误导,结果什么都不输出。

适当使用 { } 可以使代码的逻辑更加清楚。

代码的风格很重要!

更正

#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.2 if 书写形式的对比

试着判断两个代码是否是一样的:

//代码一
if (condition) {
	return x;
}
return y;
//代码二
if (condition){
	return x;
}else{
	return y;
}

结果是一样的!return 只能 return 一次。

判断哪一种代码书写方式更好:

//代码一
int num = 1;
if (num == 5) {
	printf ("hehe\n");
}

//代码二
int num = 1;
if (5 == num){
	printf("hehe\n");
}

第二种会好一些,因为可以避免 if 表达式中漏写一个“=”号,出现的 bug。


2.3 关于 if 语句的练习题:

  1. 判断一个数是否为奇数
  2. 输出1-100之间的奇数
代码1:
//> 1. 判断一个数是否为奇数
#include <stdio.h>
int main() {
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1) {
		printf("%d是奇数。\n", num);
	}
	return 0;
}
代码2:
//> 2. 输出1 - 100之间的奇数
#include <stdio.h>
int main() {
	int i = 1;
	for (i = 1; i <= 100; i++) {
		if (i % 2 == 1) {
			printf("%d\n", i);
		}
	}
	return 0;
}

2.4 switch 语句

switch语句也是一种分支语句。常用于多分支结构的情况。

比如:

输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
。。。
输入7,输出星期日

若我们用前面学过的 if 语句来写,很麻烦,要不停的写 if else。
那我们可以试一下用 swithc 语句。

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

语句项又是什么呢?

case 整形常量表达式;
	语句;

而以上的结构,还要搭配 break 使用,这样才能实现分支

例如:

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

使用 break 关键字就会跳出 switch 结构,如果我们灵活使用 break,可以完成别的需求。

输入1-5,输出的是‘weekday’;
输入6-7,输出的是‘weekend’。

#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;
	}
	return 0;
}

要擅用 break,把 switch 语句分割成不同的部分。


default 子句

如果 switch 表达式的值与所有的 case 标签都不匹配怎么办?假设用户就没有输入1-7,输入一个 0 会怎么样?

其实也不会怎么样,就是结构的所有项都被跳过,执行 switch 之后的代码了。

如果你不想忽略不匹配的所有 case 标签的值,这个时候可以使用 default 子句。
default 子句在所有不匹配项过后,自动执行 default 子句后面的代码。所有每个 switch 语句中只有一个 default 子句。

default 子句可以出现在语句列表的任何位置,而且执行顺序会先贯穿每一个 case 标签后再执行 default子句。

在每个 switch 语句中都放一个 default 子句是个好习惯,甚至可以在后面加上 break。

改良关于星期的 switch
#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;
}
switch 练习:
#include <stdio.h>
int main() {
	int n = 1;
	int m = 2;
	switch (n) {
	case 1:
		m++; //3
	case 2:
		n++; //2
	case 3:
		switch (n) { //2
		case 1:
			n++; 
		case 2:
			m++; //4
			n++; //3
			break;
		}
	case 4:
		m++; //5
		break;
	default:
		break;
	}
	printf("m = %d,n = %d\n", m, n); //5 3
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值