[C.C++] C语言:选择结构

146 0
Honkers 前天 21:56 来自手机 | 显示全部楼层 |阅读模式

目录

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语句的语法形式:

  1. if(表达式)
  2. {
  3. 语句;
  4. }
复制代码

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

举个例子:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a = 0; //初始化
  5. printf("请输入:");//把请输入打印在屏幕上
  6. scanf("%d", &a);//输入
  7. if (a > 0) //条件表达式
  8. {
  9. printf("正数"); //语句
  10. }
  11. return 0;
  12. }
复制代码

运行结果: 

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

 

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

1.2.if-else语句

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

if-else语法形式:

  1. if(表达式)
  2. {
  3. 语句1;
  4. }
  5. else
  6. {
  7. 语句2;
  8. }
复制代码

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

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a = 0; //初始化
  5. printf("请输入:");//把请输入打印在屏幕上
  6. scanf("%d", &a);//输入
  7. if (a > 0) //条件表达式
  8. {
  9. printf("正数"); //语句
  10. }
  11. else
  12. {
  13. printf("负数");
  14. }
  15. return 0;
  16. }
复制代码

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

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

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

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a = 0;
  5. printf("请输入:");
  6. scanf("%d",&a);
  7. if (a % 2 == 0)
  8. {
  9. printf("是偶数");
  10. }
  11. else
  12. {
  13. printf("是奇数");
  14. }
  15. return 0;
  16. }
复制代码

运行结果: 

做题思路:

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

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

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char a;
  5. printf("请输入一个字母:");
  6. scanf("%c",&a);
  7. if (a >= 'A' && a <= 'Z')
  8. {
  9. printf("大写字母");
  10. }
  11. else
  12. {
  13. printf("不是大写字母");
  14. }
  15. return 0;
  16. }
复制代码

 运行结果如下:

做题思路:

        首先,条件表达式一定是判断大写字母的,这一点都母庸置疑的,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语法:

  1. if(条件表达式1)
  2. {
  3. 语句1;
  4. }
  5. else if(条件表达式2)
  6. {
  7. 语句2;
  8. }
  9. else if(条件表达式3)
  10. {
  11. 语句3;
  12. }
  13. else
  14. {
  15. 语句4;
  16. }
复制代码

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

1.学生成绩评定等级:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int score = 0;
  5. printf("请输入分数:");
  6. scanf("%d", &score);
  7. if (score >= 95)
  8. {
  9. printf("A");
  10. }
  11. else if (score >= 85)
  12. {
  13. printf("B");
  14. }
  15. else if (score >= 75)
  16. {
  17. printf("C");
  18. }
  19. else if (score >= 60)
  20. {
  21. printf("D");
  22. }
  23. else
  24. {
  25. printf("E");
  26. }
  27. return 0;
  28. }
复制代码

运行结果: 

做题思路:

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

 1.4.if嵌套

  1. if (条件表达式1)
  2. {
  3. if (条件表达式2)
  4. {
  5. 语句1;
  6. }
  7. else
  8. {
  9. 语句2;
  10. }
  11. }
  12. else
  13. {
  14. 语句3;
  15. }
复制代码

举个例子:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num1 = 10;
  5. int num2 = 5;
  6. if (num1 > 0)
  7. {
  8. if (num2 > 0)
  9. {
  10. printf("两个都是正数");
  11. }
  12. else
  13. {
  14. printf("num1是正数,num2不是正数");
  15. }
  16. }
  17. else
  18. {
  19. printf("num1不是正数");
  20. }
  21. return 0;
  22. }
复制代码

当两个数都是正数时: 

 当num1为假时:

当num2为假时:

2if语句的一些要点

2.1.1条件表达式的多样性:

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

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

2.1.2语句快的概念:

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

举个例子:

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

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

  1. if (a > 5)
  2. {
  3. printf("a大于5\n");
  4. }
复制代码

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匹配的,因为"就近原则"。

 正确写法:

  1. int main()
  2. {
  3. int a = 10;
  4. int b = 100;
  5. if (a > 5)
  6. {
  7. if (b > 10)
  8. {
  9. printf("a大于5,b大于10");
  10. }
  11. }
  12. else
  13. {
  14. printf("a小于5");
  15. }
  16. return 0;
  17. }
复制代码

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 天)。

  1. #include <stdio.h>
  2. int main() {
  3. int year, month;
  4. printf("请输入年份:");
  5. scanf("%d", &year);
  6. printf("请输入月份:");
  7. scanf("%d", &month);
  8. int days;
  9. if (month == 2)
  10. {
  11. if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
  12. {
  13. days = 29;
  14. }
  15. else
  16. {
  17. days = 28;
  18. }
  19. }
  20. else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
  21. {
  22. days = 31;
  23. }
  24. else
  25. {
  26. days = 30;
  27. }
  28. printf("%d 年 %d 月有 %d 天\n", year, month, days);
  29. return 0;
  30. }
复制代码


    

 

 

 

 

 

 

 

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行