C语言基本语法-选择结构

本文详细介绍了C语言中的选择结构,包括if语句(单分支和嵌套)、if...else语句以及switch语句,展示了如何通过这些结构判断条件并执行相应代码块。
摘要由CSDN通过智能技术生成

介绍

如果从我们身边的日常处理事情的角度来讲,可以大致将我们的思维划分为三个类别,因此一门完美的编程语言需要与人的认知思维相符合。C语言是一门结构化的程序语言,这里的结构化包括顺序结构、选择结构、循环结构。这篇内容介绍选择结构,选择结构也被称作分支。

C语言中的选择结构包括if语句和switch语句。

1  if 语句

1.1  if

if语句的语法格式

if(表达式)
    语句

说明:

1、表达式中的值为真,代码块中的语句开始执行,如果为假停止执行,跳过改代码块中的语句。

2、在C语言中对于一个表达式或整数,如果表达式或整数的值为零则为假,非零则为真。

例1:输入一个数判断是否为偶数

#include<stdio.h>
int main() {
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 0) {
		printf("%d是偶数。\n",num);
	}
	return 0;
}

1.3  if...else语句

if...else语句的语法格式:

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

说明:

如果表达式的值为真(即表达式的值为非零)执行语句1,如果表达式的值为假(即表达式的值为零)执行语句2。

例2:判断一个数是奇数还是偶数

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

例3:输入一个人的年龄判断是否成年

#include<stdio.h>
int main() {
	int age;
	scanf("%d", &age);
	if (age >= 18)
		printf("已经成年\n");
	else
		printf("未成年\n");

	return 0;
}

1.4  if或else分支中包含多条语句

说明白这个问题先举下面的一个例子

例4:输出一个数并判断这个数是奇数还是偶数

如果这样写就会报出下面的错误:

 

因此,为了解决这个问题只需在if和else语句后加上一个大括号

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

说明:在if或else语句后面的大括号中的语句成为复合语句或者程序块。 

1.5 if语句的嵌套

if语句中可以再包含if语句;else语句中可以再包含else语句。

如果通过一层if或else语句后仍然需要对条件进行判断选择,这时就需要在if或else的这个分支中再加一层或多层if或else语句,满足我们的需要。

例5:输入一个数判断该数的正负

#include<stdio.h>
int main() {
	int num;
	scanf("%d", &num);
	if (num == 0) {
		printf("这个数是0\n");
	}
	else {
		if (num > 0) {
			printf("这个数是正数\n");
		}
		else{
			printf("这个数是负数\n");
		}
	}
	return 0;
}

在if或else语句中包含if或else语句是C语言的基本语法;当然也可以用...else if...来对多重条件进行判断,但这不是标准的语法结构。

例6:输入数字1~7,将数字对应的星期几输出

#include<stdio.h>
int main() {
	int num;
	scanf("%d", &num);
	if (num == 1)
		printf("今天是星期一\n");
	else if (num==2)
		printf("今天是星期二\n");
	else if (num == 3)
		printf("今天是星期三\n");
	else if (num == 4)
		printf("今天是星期四\n");
	else if (num == 5)
		printf("今天是星期五\n");
	else if (num == 6)
		printf("今天是星期六\n");
	else
		printf("今天是星期天\n");
	return 0;
}

1.6  关于else的一个问题

 如果一个程序中有多个if或者是else语句,那么该else语句总是和相离最近的if语句进行匹配。

例7:判断该程序的输出结果

说明:该程序的运行结果为空。else是与第三个if相匹配的,但是在第二个if时判断结果为0,所以不执行第二个if语句的内容因此结果为空。

合理的对齐格式有助于更好的理解代码,上面的代码可写成如下的方式。

#include<stdio.h>
int main() {
	int m = 1;
	int n = 0;
	int t = 2;
	if (m == 1) {
		if (n == 1) {
			if (t == 2)
				printf("good\n");
		    else
			    printf("bad\n");
		}
	}
	return 0;
}

2  switch语句

switch语句可以替代多重else if语句,通过表达式的值将程序分为多个分支使程序更加易用、可读性更好。

2.1  switch

switch语句的语法格式:

#include<stdio.h>
int main(){
    switch(expression)
    case one : 
        语句1;
        break;
    case two : 
        语句2;
        break;
    default : 
        语句3;
        break;
    return 0;
}

说明:switch语句首先需要将表达式expression的值进行判断,然后程序会指向case后书写的值与判断结果相等的部分,执行相应的语句。如果没有case的值与表达式expression的值匹配,那么执行default中的语句。

注意:

1、switch括号内的控制表达式必须是整数类型(即expression这个表达式的值必须是一个整数)。

2、case后面的one、two...等值必须是整形常量表达式,且必须与case中间有一个空格。

3、每一个case子句或switch子句中的代码执行完成之后须在最后加上break。

4、switch语句中case子句和default子句之间的顺序没有要求,但通常将default子句放在所有case子句之后。 

例7:显示整数除以3所得余数的程序代码

#include<stdio.h>
int main() {
	int num;
	scanf("%d", &num);
	switch (num % 3) {
	case 0:
		printf("余数为0\n");
		break;
	case 1:
		printf("余数为1\n");
		break;
	case 2:
		printf("余数为2\n");
		break;
	default:
		printf("输入数据格式不正确\n");
		break;
	}
	return 0;
}

 2.2  case语句中没有break的后果

如果将上面例7的程序中的break去掉观察一下情况。

分析:3的余数为0,打印时原本只有第一行结果,但是又多出来了余数为1,余数为2,输入格式不正确的结果。造成这种结果的原因是switch语句是分支语句,使用break才能跳出switch语句,如果某一个case语句没有break程序会顺着继续执行下一个case或default语句直到程序执行完或者遇见一个break为止。因此break使switch语句具有了分支的功能。

当然break并不是每一个switch语句中必须都要有,有时间要根据解决问题的实际情况进行选择,请看下面一个例子。

例8:输入1~12中的数字,结合输入的数字在屏幕上打印相应的月份

#include<stdio.h>
int main() {
	int month;
	scanf("%d", &month);
	switch (month) {
	case 1:
	case 2:
	case 3:
		printf("第一季度\n");
		break;
	case 4:
	case 5:
	case 6:
		printf("第二季度\n");
		break;
	case 7:
	case 8:
	case 9:
		printf("第三季度\n");
		break;
	case 10:
	case 11:
	case 12:
		printf("第四季度\n");
		break;
	default:
		printf("输入数据格式不对\n");
		break;
	}
	return 0;
}

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值