C语言学习(七)——C判断(if语句)

C语言中的判断结构主要通过条件语句实现,允许程序根据不同的条件执行不同的代码块。核心判断语句包括ifif-elseswitch-case等,它们基于布尔表达式的结果(真或假)控制程序流程。C 语言把任何非零非空的值假定为 true,把或 null 假定为 false。

常见判断语句:

语句描述
if 语句一个 if 语句 由一个布尔表达式,若表达式为真,则执行,否则跳过
if...else 语句一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
嵌套 if 语句可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。
switch 语句一个 switch 语句允许测试一个变量等于多个值时的情况。
嵌套 switch 语句可以在一个 switch 语句内使用另一个 switch 语句。

举几个生活中的例子,帮大家快速理解:

  • 如果今天下雨,就带伞;如果不下雨,就不带伞(两种选择,对应 if...else 语句);
  • 考试分数:90分及以上是优秀,80-89分是良好,60-79分是及格,60分以下是不及格(多种选择,对应 if...else if...else 语句)
  • 如果周末有空,或者节假日有空,就去旅行(满足一个条件即可,对应逻辑运算符 ||)

1.if语句

if语句是C语言中最基础、最常用的判断语句,作用为:如果某个条件成立,就执行一段代码;如果条件不成立,就跳过这段代码。

语法:

if(条件表达式){
		//条件成立时,要执行的代码块(可以是一行或多行代码)
}

需注意的关键细节:

  • if 后面的「括号 ()」是必须的,不能省略。括号里放的是「条件表达式」。
  • 大括号 {} 用来包裹“条件成立时要执行的代码”,如果只有一行代码,大括号可以省略。
  • 条件表达式的结尾不需要加分号,但该种方法不推荐。

示例:

#include <stdio.h>

int main() {
    // 定义成绩变量,并赋值为75分
    int score = 75;
    
    // 判断成绩是否≥60,成立则执行打印语句
    if (score >= 60) {
        printf("恭喜,成绩及格!\\n");
    }
    // 条件不成立时,跳过上面的打印语句,执行这里
    printf("成绩判断结束\\n");
    
    return 0;
}

结果:

恭喜,成绩及格!
成绩判断结束

2.if…else…语句

if 语句只能处理“条件成立就执行,不成立就跳过”的场景,但很多时候我们需要「二选一」——条件成立执行A操作,不成立执行B操作,这时候就需要用到 if…else…语句。它的核心逻辑是:「非此即彼」,两个操作中必然会执行一个,不会出现都执行或都不执行的情况。

语法:

if (条件表达式) {
    // 条件成立时,执行的代码块(A操作)
} else {
    // 条件不成立时,执行的代码块(B操作)
}

关键细节:

  • else 后面没有括号,直接跟大括号。else 不能单独使用,必须紧跟在 if 语句的大括号后面。
  • if 和 else 后面的代码块,只会执行其中一个。
  • 和 if 语句一样,如果 if 或 else 后面只有一行代码,大括号可以省略,但同样不推荐。

示例:

#include <stdio.h>

int main() {
    int score;
    // 提示用户输入成绩
    printf("请输入你的成绩:");
    // 读取用户输入的成绩,存入score变量
    scanf("%d", &score);
    
    // 二选一判断
    if (score >= 60) {
        printf("恭喜,成绩及格!\\n");
    } else {
        printf("抱歉,成绩不及格,继续努力!\\n");
    }
    
    return 0;
}

运行场景1:输入 88 → 输出“恭喜,成绩及格!” 运行场景2:输入 59 → 输出“抱歉,成绩不及格,继续努力!”

3.if…else if…else语句

生活中很多场景需要「多个选择」——比如成绩分级、会员等级判断、区间判断等,这时候就需要用到 if…else if…else 语句。它的核心逻辑是:「从上到下依次判断条件,只要有一个条件成立,就执行对应的代码块,之后不再判断后面的条件;如果所有条件都不成立,就执行 else 里的代码块」。

语法:

if (条件1) {
    // 条件1成立时,执行的代码块
} else if (条件2) {
    // 条件1不成立、条件2成立时,执行的代码块
} else if (条件3) {
    // 条件1、2都不成立、条件3成立时,执行的代码块
} ... // 可以有多个else if
else {
    // 所有条件都不成立时,执行的代码块(可选,可省略)
}

关键细节:

  • 判断顺序很重要:必须「从特殊到一般」「从大到小」排列条件。
  • else if 可以有多个,根据实际需求增减,没有数量限制。
  • else 是可选的:如果所有条件都不成立时,不需要执行任何操作,就可以省略 else。
  • 同样,每个条件后面的大括号,建议都加上,避免逻辑混乱。

正确示例:

#include <stdio.h>

int main() {
    int score;
    printf("请输入你的成绩(0-100):");
    scanf("%d", &score);
    
    // 多分支判断,注意条件顺序:先判断无效成绩,再从高分到低分判断
    if (score < 0 || score > 100) {
        printf("成绩无效,请输入0-100之间的分数\\n");
    } else if (score >= 90) {
        printf("优秀\\n");
    } else if (score >= 80) {
        printf("良好\\n");
    } else if (score >= 60) {
        printf("及格\\n");
    } else {
        printf("不及格\\n");
    }
    
    return 0;
}

反例:

// 错误示例,不要这么写!
if (score < 0 || score > 100) {
    printf("成绩无效\\n");
} else if (score >= 60) {
    printf("及格\\n");
} else if (score >= 80) {
    printf("良好\\n");
} else if (score >= 90) {
    printf("优秀\\n");
} else {
    printf("不及格\\n");
}

此时输入 95,会打印“及格”——因为 95 ≥ 60 这个条件先成立,程序执行完“及格”的打印语句后,就不再判断后面的 80、90 条件了,这就导致逻辑错误。所以,多分支判断的「顺序」,是重中之重!

4.if…else语句嵌套

在实际开发中,会经常遇到“二选一”基础上,再增加“二次判断”的场景,这时候就需要使用if…else语句嵌套,核心逻辑是:在一个if或else语句的代码块中,再包含另一个完整的if…else语句,实现更复杂的多层判断。

语法:

if(外层条件)
{
		//外层条件成立,执行这里的代码
		if(内层条件1)
		{
				//内层条件1成立,执行的代码
		}
		else
		{
				//内层条件1不成立,执行这里的代码
		}
}
else
{
		//外层条件不成立,执行这里的代码
		if(内层条件2)
		{
				//内层条件2成立,执行的代码
		}
		else
		{
				//内层条件2不成立,执行的代码
		}
}

关键细节:

  • 嵌套时,内层的 if...else 必须完全包裹在外层 if 或 else 的大括号内,不能超出范围,否则会导致逻辑混乱或编译报错。

示例:

判断成绩是否及格(≥60分),若及格,再判断是否为优秀(≥90分);若不及格,再判断是否接近及格(≥50分)

#include <stdio.h>

int main()
{
		int score;
		printf("请输入你的成绩:");
		scanf("%d",&score);
		//外层判断:及格vs不及格
		if(score>=60)
		{
			//内层判断:几个范围内:优秀vs普通及格
			if(score>=90)
			{
				printf("优秀,继续保持!\\n");
			}
			else
			{
				printf("及格,继续加油\\n");
			}
		}
		else
		{
			//内层判断:不及格范围内,接近及格vs差距较大
			if(score>=50)
			{
				printf("不及格,但接近加油,再加把劲\\n");
			}
			else
			{
				printf("不及格,差距较大,需加倍努力\\n");
			}
		}

}

最后,给大家一个实用技巧:写判断语句时,尽量“先边界后正常”“先特殊后一般”,比如先判断无效成绩(<0或>100),再判断正常成绩;先判断高分段,再判断低分段。同时,养成“成对敲括号”“加注释”的习惯,不仅能减少错误,还能让代码更易读,后续修改也更方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值