目录
1.if,if-else,if-else-if-else-else,if嵌套
首先,在我们的生活中,今天天气很好,是否要出门,今天下雨了,雨衣还是打伞,都是需要判断了,那在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;
}