【无标题】C语言——分支和循环语句(一)

分支语句

  • 1. if语句
    • if...else...语句
    • 嵌套if
    • 悬空else
  • 2. switch语句
    • 小试牛刀

我们之前有讲到C语言是一门结构化的程序设计语言,这里的结构指的就是顺序结构、选择结构、循环结构。

  1. 顺序结构:从开始到结束跟着走就行。
  2. 选择结构:比如从家到学校,你可以选择走路也可以选择坐公交。 在C语言中我们常用 if 和 switch 语句实现。
  3. 循环结构:我们每天都在不断重复做的一件事。在C语言中我们常用 while 、do while、for语句实现。

1. if语句

语法格式:

if (表达式)  //当表达式为真(非0)时执行下面的语句,当表达式为假(0)则不执行下方的语句
{
	语句;
}

这里需要注意的是如果你有多条语句就必须按照上面的格式书写,如果你只有一条语句则可以省略大括号{}直接写语句。

举个栗子:

#include<stdio.h>
int main()
{
	int a = 6;		//给a赋值为6
	if (a > 2)		//因为6>2为真,所以会执行下面的语句。反之,如果a=1,1<2为假,显示屏则不会打印hehe
		printf("hehe\n");
	return 0;
}

if…else…语句

上面我们说到如果不走路上学,那么我们可以选择坐公交车。这里的那么其实就是指else。
语法格式:

if (表达式)	//如果表达式成立则执行语句1,如果不成立那么执行语句2
	语句1else
	语句2

举个栗子
输入一个年龄,如果年龄>=18就输出 成年,可以谈恋爱了,否则输出 未成年,不能谈恋爱。

法一:当表达式只有一条语句时省略大括号{ }
#include<stdio.h>
int main()
{
	int age = 0;
	scanf_s("%d", &age);
	if (age >= 18)
		printf("已成年,可以谈恋爱了\n");	
	else
		printf("未成年,不可以谈恋爱\n");
	return 0;
}

法二:当表达式有多条语句,将多条语句放入{ }#include<stdio.h>
int main()
{
	int age = 0;
	scanf_s("%d", &age);
	if (age >= 18)
	{
		printf("已成年\n");
		printf("可以谈恋爱了");
	}	
	else
	{
		printf("未成年\n");
		printf("不可以谈恋爱");
	}
	return 0;
}

嵌套if

在 if else 语句中, else 可以与另⼀个 if 语句连用,构成多重判断。
举个栗子
输入一个整数,判断输入的整数是0,还是正数或者负数

#include<stdio.h>
int main()
{
	int num = 0;
	scanf_s("%d", &num);
	if (num == 0)	//需要格外注意==表示等于,=表示赋值
		printf("输入的值是0\n");
	else if (num > 0)
		printf("输入的值是正数\n");
	else
		printf("输入的值是负数\n");
	return 0;
}

悬空else

上面的例子我们可以看到代码里边有多个if else,那么if 到底是和哪个else相对应呢?我们可以这样记: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;
}

解答:当程序运行后我们会发现并没有输出打印haha。这是因为else与离它最近的if语句是配套的(可以看下面的图),又因为a=0与第一条if (a == 1)不吻合所以if后面的程序都不会执行,所以屏幕没有输出打印任何东西。这也反映出我们写代码时应该写规范些,这样才能增强可读性!!
在这里插入图片描述

2. switch语句

switch语句是一种特殊形式的if else结构,它用于判断有多个结果的情况。
语法格式:

switch(表达式)
{
case 常量表达式1:[语句1];break;
case 常量表达式2:[语句2];break;
default:[语句];break;
}

方括号括起来的部分是可选项。
上面代码中根据表达式的值,执行相应case分支,如果找不到对应的值就执行default分支。
default:它可以放在case语句之前,也可放在句末。我们通常都是放在句末。
break:打断,中断的意思,是用来终止switch语句执行的,如果没有break,程序将一直执行直到遇到{}。

需要注意的是:
switch后面的表达式必须是整型表达式。
case后面的常量表达式必须是整型常量表达式
补充:字符类型也归为整型。因为字符的本质是ASCII码值,这个值是整数

举个栗子:
任意输入一个整数,计算除3之后的余数
解析:3无论被谁除,它的余数都只可能为0、1、2

#include<stdio.h>
int main()
{
	int n = 0;
	scanf_s("%d", &n);			
	switch (n % 3)					//当n%3的余数为0,执行case 0后面的语句,当遇到break时结束,跳出switch语句,不在执行后面的语句
	{								//当n%3的余数为1,执行case1后面的语句,当遇到break时结束,跳出switch语句,不在执行后面的语句
	case 0:							//当n%3的余数为2,执行case1后面的语句,当遇到break时结束,跳出switch语句,不在执行后面的语句
		printf("整除,余数为0\n");
		break;
	case 1:
		printf("余数是1\n");
		break;
	case 2:
		printf("余数是2\n");
		break;
	}
	return 0;
}

上边我们说到switch是if else的一种特殊形式,所以我们也能用if else来写这道题

#include<stdio.h>
int main()
{
	int n = 0;
	scanf_s("%d", &n);
	if (n % 3 == 0)
		printf("整除,余数为0\n");
	else if (n % 3 == 1)
		printf("余数为1\n");
	else
		printf("余数为2\n");
	return 0;
}

小试牛刀

练习:
输入一个1~7的数字,打印对应的星期几
例如:
输入:1 输出:星期一
输入:2 输出:星期二
输入:3 输出:星期三
输入:4 输出:星期四
输入:5 输出:星期五
输入:6 输出:星期六
输入:7 输出:星期天

#include <stdio.h>
int main()
{
	int day = 0;
	scanf_s("%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;
	default:
		printf("输入错误请重新输入\n"); break;
	}
	return 0;
}

如果我们想要输入1~5,输出的是“工作日”; 输入6-7,输出的是“休息日”那又该怎么办呢?
正常情况下我们会这样写:

#include <stdio.h>
int main()
{
	int day = 0;
	scanf_s("%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:
	case 7:
		printf("休息日\n"); break;
	default:
		printf("输入错误请重新输入\n"); break;
	}
	return 0;
}

可是我们会发现这样写出来很繁琐,那该怎么简化一下呢?上面我们有说到如果没有break,程序会一直往下运行,因此我们可以这样写:

#include <stdio.h>
int main()
{
	int day = 0;
	scanf_s("%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;
}
  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值