C语言:选择结构

目录

1.if,if-else,if-else-if-else-else,if嵌套

1.1if语句

1.2.if-else语句

 1.3.if-else-if-else语法 

 1.4.if嵌套

2if语句的一些要点

2.1.1条件表达式的多样性:

2.1.2语句快的概念:

2.2-if语句容易错误的点:

2.2.1-if的逻辑错误:

2.2.2括号忘记加了,导致错误:

2.2.3变量没有初始化:

3.结合本章所讲终极练习题:


 

首先,在我们的生活中,今天天气很好,是否要出门,今天下雨了,雨衣还是打伞,都是需要判断了,那在C语言中也是一样的,程序也面临类似抉择时刻。当你编写温度监控程序,温度高于 30 摄氏度,空调制冷系统就得启动,低于某个度数,制热或许就得跟上。接下来,就让我来为大家讲解C语言中的if语句吧,揭开if语句的大门!!!

1.if,if-else,if-else-if-else-else,if嵌套

1.1if语句

1.1if语句的语法形式:

if(表达式)
{
    语句;
}

首先,条件表达式是核心,它能够得出真假值(后面会讲)的式子,比如if(a > b),其中a,b是整型变量,当a的值大于b时,条件为真,为真时,这个花括号内语句就会执行,反之b大于a,为假,不执行。

举个例子:

#include <stdio.h>
int main()
{
	int a = 0; //初始化
	printf("请输入:");//把请输入打印在屏幕上
	scanf("%d", &a);//输入
	if (a > 0) //条件表达式
	{
		printf("正数"); //语句
	}
	return 0;
}

运行结果: 

 如上的运行结果,我们可以直观的看到,非零为真(大于0,不等于0的数),零为假(等于0,小于零)为真则输出花括号的语句,为假,则不输出。

 

这是If语句的流程图,方便大家很好的理解。 

1.2.if-else语句

有时候,单一的条件判断是远远不够的,你在学if时应该有所察觉吧,可能会想,哎呀,这个为什么只能输出正数呢,为什么负数不输出呢,负数可不可以输出呢,这里我想说,你的需求,当然可以实现,那么就让我们来学习if-else来助你解决这个问题:

if-else语法形式:

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

现在,我们在输入负数时,也能输出,其代码如下:

#include <stdio.h>
int main()
{
	int a = 0; //初始化
	printf("请输入:");//把请输入打印在屏幕上
	scanf("%d", &a);//输入
	if (a > 0) //条件表达式
	{
		printf("正数"); //语句
	}
	else
	{
		printf("负数");
	}
	return 0;
}

看完代码,是不是感觉很简单了,就加了一个else,就能实现它吗,让我们看运行结果,输入-9时,我们可以看到输出了负数,if-else其实就是"如果-否则",就是如果条件表达式为假,就用否则了,可以这么理解,当然了,每个人的理解并不同,你觉得哪个好就用哪个。

 光说不练可不行,现在就让我们来几道if-else的练习

1.输入一个数,判断这个数是奇数还是偶数:

#include <stdio.h>
int main()
{
	int a = 0;
	printf("请输入:");
	scanf("%d",&a);
	if (a % 2 == 0) 
	{
		printf("是偶数");
	}
	else
	{
		printf("是奇数");
	}
	return 0;
}

运行结果: 

做题思路:

        判断奇数偶数,在判断中让定义的a%2(取模,在数学中就是取余数),如果等于0,就是偶数,如果 摸1就是奇数。

2.输入一个字母,判断是不是大写字母,如果是大写字母,输出是大写字母,如果是小写,就输出小写字母:

#include <stdio.h>
int main()
{
	char a;
	printf("请输入一个字母:");
	scanf("%c",&a);
	if (a >= 'A' && a <= 'Z')
	{
		printf("大写字母");
	}
	else
	{
		printf("不是大写字母");
	}
	return 0;
}

 运行结果如下:

做题思路:

        首先,条件表达式一定是判断大写字母的,这一点都母庸置疑的,a >= 'A' &&(并且) a <= 'Z',条件表达式是核心,表示A-Z这些都是大写字母,超出的都输出小写字母,到这里你可能会有疑问,你可能想到,万一是特殊字符,也是输出小写字母,没有准确性啊,这个就用到我们的if-else-if-else了,我相信学这个了,你的理解会更上一层楼!!!

 1.3.if-else-if-else语法 

首先,在C语言中,if-else-if-else语法是一种强大的工具,用于处理复杂的条件判断和分支逻辑。

首先,先了解if-else-if-else-if-else语法:

if(条件表达式1)
{
    语句1;
}
else if(条件表达式2)
{
    语句2;
}
else if(条件表达式3)
{
    语句3;
}
else
{
    语句4;
}

看到这,是不是感觉非常雷同,现在就趁热打铁先练习几道题,咱来练练手:

1.学生成绩评定等级:

#include <stdio.h>
int main()
{
	int score = 0;
	printf("请输入分数:");
	scanf("%d", &score);
	if (score >= 95)
	{
		printf("A");
	}
	else if (score >= 85)
	{
		printf("B");
	}
	else if (score >= 75)
	{
		printf("C");
	}
	else if (score >= 60)
	{
		printf("D");
	}
	else
	{
		printf("E");
	}
	return 0;
}

运行结果: 

做题思路:

        首先,学生成绩评定等级,是以成绩来判断等级的,等级无非就是ABCDE,那我们就从最高分A,依此类推就可以做出来了。 

 1.4.if嵌套

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

举个例子:

#include <stdio.h>
int main()
{
	int num1 = 10;
	int num2 = 5;
	if (num1 > 0)
	{
		if (num2 > 0)
		{
			printf("两个都是正数");
		}
		else
		{
			printf("num1是正数,num2不是正数");
		}
	}
	else
	{
		printf("num1不是正数");
	}
	return 0;
}

当两个数都是正数时: 

 当num1为假时:

当num2为假时:

2if语句的一些要点

2.1.1条件表达式的多样性:

        首先,条件表达式可以是关系表达式,逻辑表达式,其中&&表示逻辑与,要求两边表达式都得是真的,就是说有一边是假的,就都是假的,||表示逻辑或,两边只要有一个为真,就都是真的,算术表达式,结果为非零为真,如if(a + b)(这就是一个算术表达式)

小重点:可以使用括号来改变运算顺序(括号优先级最高),确保条件判断的准确性。if((a > 5) && (b < 10))。

2.1.2语句快的概念:

        语句快是用{}括起来的一组语句,如果if(或else,else if)后面只有一条语句,{}可以省略,但是啊,为了代码的可毒性和避免逻辑错误,我不建议你去省略。

举个例子:

if (a > 5)
    printf("a大于5\n");
    printf("这行代码可能会被误解为与if无关\n");

建议的写法(加一个花括号,作为程序员,要有一定的严谨性,代码必须要有一定的健壮性):

if (a > 5) 
{
    printf("a大于5\n");
}

2.2-if语句容易错误的点:

2.2.1-if的逻辑错误:

        条件表达式写错了,比如if(a > b > c)这种写法是错误的,会先判断a > b,得到一个布尔值(0或1)然后用这个布尔值和c比较,这里通常不是我们要的结果。

正确写法:

        if(a > b) && (b > c) 

2.2.2括号忘记加了,导致错误:

        忘加括号给if了,比如if直接让a > b 比较,这样是错误的,大家在写代码时一定不要这样去写,这是非常非常低级的错误,我刚开始学的时候,就犯了这样的低级错误

        正确写法:

                if(a > b)

        省略语句快的括号时,可能会导致代码逻辑混乱,在if-else语句中,如果省略货号,会导致else匹配到错误的if.

        举个例子:

 这里else实际上是和最近的if匹配的,因为"就近原则"。

 正确写法:

int main()
{
	int a = 10;
	int b = 100;
	if (a > 5)
	{
		if (b > 10)
		{
			printf("a大于5,b大于10");
		}
	}
	else
	{
		printf("a小于5");
	}
	return 0;
}

2.2.3变量没有初始化:

 未初始化可能会导致错误发生:

3.结合本章所讲终极练习题:

输入年份(4 位整数)和月份(1 - 12 的整数),输出该月的天数。需考虑闰年情况,闰年判断规则为:能被 4 整除但不能被 100 整除,或者能被 400 整除的年份是闰年,闰年 2 月有 29 天,平年 2 月 28 天,其他月份天数固定(1、3、5、7、8、10、12 月 31 天,4、6、9、11 月 30 天)。

#include <stdio.h>
int main() {
    int year, month;
    printf("请输入年份:");
    scanf("%d", &year);
    printf("请输入月份:");
    scanf("%d", &month);
    int days;
    if (month == 2)
    {
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        {
            days = 29;
        }
        else 
        {
            days = 28;
        }
    }
    else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) 
    {
        days = 31;
    }
    else 
    {
        days = 30;
    }
    printf("%d 年 %d 月有 %d 天\n", year, month, days);
    return 0;
}


    

 

 

 

 

 

 

 

 

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值