C语言 分支语句:if 语句和 switch语句

目录

if 语句

悬空else —— else跟距离它最近的 if 匹配

if 书写形式的对比

if…else、if…else if…else if 和 if...if...if 语句的区别

switch语句


C语言是结构化的程序化设计语言!

顺序结构 —— 从头做到尾,按顺序一步一步往下走

选择结构 —— 做的时候有选择   —— 分支语句

  • if 
  • switch

循环结构 —— 循环重复 —— 循环语句

  • while
  • for
  • do while

goto语句

什么是语句?

C语言中由一个分号;隔开的就是一条语句。

if 语句

C语言是如何表示真和假的呢?

非0就是真  比如 -1

0 就是假

语法结构:

//单分支
if(表达式)  //如果表达式为真,语句被执行
		语句;
//双分支
if(表达式)  //如果表达式为真,执行语句1,否则执行语句2
		语句1;
	else
		语句2;
//多分支
	if(表达式1)  //如果表达式1为真,执行语句1,如果表达式1不成立,判断表示2
		语句1;
	else if(表达式2)  //如果表达式2成立,执行语句2,否则执行语句3
		语句2;
	else
		语句3

举例:

//单分支
#include<stdio.h>
int main(void)
{
	int age = 10;
	if (age >= 18)
		printf("成年\n");  //不输出
	return 0;
}
//双分支
#include<stdio.h>
int main(void)
{
	int age = 10;
	if (age >= 18)
		printf("成年\n");  
	else
		printf("未成年\n");  //输出: 未成年
	return 0;
}

if 和 else 后面如果没有{},则只控制它们后面的第一条语句

if 和 else 后面有{}括起来的多条语句,则会控制被{}的多条语句

//双分支
#include<stdio.h>
int main(void)
{
	int age = 10;
	//if 和 else 后面如果没有{},则只控制它们后面的第一条语句
	//if 和 else 后面有{}括起来的多条语句,则会控制被{}的多条语句
	if (age >= 18)
	{
		printf("成年\n");
		printf("恭喜你,可以谈恋爱啦\n");
	}
		
	else
	{
		printf("未成年\n");        
		printf("不能谈恋爱\n");
	}
	return 0;
}

输出:

悬空else —— else跟距离它最近的 if 匹配

看下面代码会输出什么?

 建议养成自己良好的代码风格:

#include<stdio.h>
int main(void)
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
		{
			printf("呵呵\n");
		}
			
		else
		{
			printf("哈哈\n");
		}
	}	
	return 0;
}

if 书写形式的对比

比较代码1和代码2意思是不是相同的?

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

	//代码1和代码2是不是一样?
	//代码1和代码2表达的意思是相同的,但是代码1风格不好

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

代码3:如果 if (num == 5)漏掉一个 = 变成 if (num = 5),则相当于把 5 赋值给 num,代码3就会输出:哈哈 

//代码3
	int num = 2;
	if (num == 5)
	{
		printf("哈哈\n"); 
	}
	// 因为不满足条件,代码3不输出
	

代码4:将两个整型并列进行比较的时候,把常量放在左边,这样就不会出现代码3那样的错误

//代码4
	int num = 2;
	if (5 == num)      //将常量放在左边
	{
		printf("哈哈\n");
	}

总结:代码2和代码4更好,逻辑更加清晰,不容易出错。

if…else、if…else if…else if 和 if...if...if 语句的区别

 if…else、if…else if…else if:只要有一个条件被满足,则只会执行与之对应的语句,然后跳出整个判断。

if...if...if:无论条件是否满足,接下来的条件都会被逐个判断。

练习:

1,输入一个数,判断它的奇偶

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

2,输出1-100之间的奇数

#include<stdio.h>
int main(void)
{
	int num = 0;
	while (num++ < 100)
	{
		if (num % 2 == 1)
		{
			printf("%d\n", num);
		}	
	}
	return 0;
}

或者 

#include<stdio.h>
int main(void)
{
	int num = 0;
	for (num = 0; num <= 100; num++)
	{
		if (num % 2 == 1)
		{
			printf("%d\n", num);
		}	
	}
	return 0;
}

或者

#include<stdio.h>
int main(void)
{
	int num = 1;
	for (num = 1; num <= 100; num += 2)
	{
		printf("%d\n", num);
	}
	return 0;
}

switch语句

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

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

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

格式:

必须是整型,float不行,字符可以,因为字符用的是其对应的ASCII码值,也是整型

//switch语句格式
	switch (整型表达式)    
	{
		语句项;
	}
    //必须是整型,float不行,字符可以,因为字符用的是其对应的ASCII码值
	
    //语句项是什么呢?
	//是一些case语句,如下:

	case 整型常量表达式:   //必须是整型、常量值
		语句;

举例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	int day = 0;
	scanf("%d", &day);
	switch (day)   // (day)的值是几,就从case几进去,
	{              //想在哪里出来,就在哪里加 break 使其跳出、停止
	case 1:     
		printf("星期一\n");  
		break;                
		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;     即使是最后一个case, break可加可不加,也建议加上
	}
	return 0;
}

case 后面要不要加 break,是看用户需求来决定的,不是语法规定的,比如:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	int day = 0;
	scanf("%d", &day);
	switch (day)   // (day)的值是几,就从case几进去,
	{              //想在哪里出来,就在哪里加 break;
	case 1:      
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;      
	default:       //可以给一个错误提示,default放前中后哪里都行,建议放最后
		printf("输入错误\n");
		break;     
	}
	return 0;
}

练习:下面程序输出什么?

#include<stdio.h>
int main(void)
{
	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);   //输出:m = 5, n = 3
	return 0;
}

解析:

  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

食人的小草

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值