赞
踩
我前面发表过的《初始c语言》系列文章是对c语言有大概的认识,现在进入了一个全新的阶段,在这个阶段,将对C语言有更深层次的认识,当然,因为C语言编程是一门实践性的学科,所以一定要多练,在文章中,我都会通过举例的形式,去加深对知识点的理解。
本文大纲
以及对应的一些题目解析
本文主要介绍的是控制语句
做分支也就是在做选择,《初始c语言》中简单介绍过选择结构,就是将生活中的选择问题转化为代码的表达
(分支语句)选择结构中有:if语句、switch语句下面介绍以下它们的用法
语法结构可以分为:
if (表达式)
语句;
这种是就基本的一种,表示的意思是:如果表达式为真(c语言中规定0为假,非0为真)就会执行语句,一般来说很少会单独用 if,但也举个简单的例子:
- #include <stdio.h>
-
- int main()
- {
- int age = 10;
- if(age>18)
- {
- printf("成年\n");
- }
- if (age == 10)
- {
- printf("未成年\n");
- }
- return 0;
-
- }
if (表达式)
语句1;
else
语句2;
如果表达式为真,语句1就要被执行
如果表达式为假,语句2就要被执行(就是如果……否则的意思)
这是比较常用的一种类型,下面举个例子:
- #include <stdio.h>
-
- int main()
- {
- int age = 10;
- if (age > 18)
- {
- printf("成年\n");
- }
- else
- {
- printf("未成年\n");
- }
- return 0;
-
- }
特别注意
If 和else语句只跟一条语句就不用加大括号{ },因为不加大括号,if或者else都只能识别一条语句,跟多条语句就一定要加大括号,建议:无论一条或者是多条语句都加上大括号{ },下面就举个例子来说明一下代码规范的重要性 :
先猜一下下面的代码的输出是什么?
说明:else匹配规则:else是和它离得最近的if匹配的,就是把红框看作一组(不会因为和谁对齐而看成与它是一组),所以不会打印出任何东西
所以应该如何改正呢?下面给出改正后的代码:
- #include <stdio.h>
-
- int main()
- {
- int a = 0;
- int b = 2;
- if (a == 1)
- {
- if (b == 2)
- printf("hehe\n");
- }
- else
- printf("xixi\n");
- return 0;
- }
if的书写形式的对比,再来看一下,下面这个例子:想一下输出是多少
- #include <stdio.h>
-
- int test()
- {
- int a = 4;
- if (a == 4)
- return 1;
- return 0;
- }
- int main()
- {
- int r = test();
- printf("%d\n",r);
- return 0;
- }
对比于上面的代码,下面给出另一种书写:对比一下那种更有阅读性呢?
- #include <stdio.h>
-
- int test()
- {
- int a = 4;
- if (a == 3)
- return 1;
- else
- return 0;
- }
- int main()
- {
- int r = test();
- printf("%d\n", r);
- return 0;
- }
再给个例子(这个凭个人习惯):
- #include <stdio.h>
-
- //if的书写形式的对比例二
- int main()
- {
- int num = 3;
- if (5 == num)//相当于if(num ==5),这个漏一个等号会报错,将变量赋值给常量是错误的
- printf("haha\n");
- return 0;
- }
所以代码风格是很重要的,想要加强代码风格可以去看一下《高质量C++/C编程指南(李锐)》
if (表达式1)
语句1;
else if (表达式2)
语句2;
else
语句3;//注意:分支结束的时候一定要用else结尾
以上语句同理,先判断表达式1是否为真,如果为真,就执行语句1,如果表达式1为假,就再判断表达式2是否真,如果为真,就执行语句2,如果所有 if 和else if都中的判断表达式都为假,就执行else中的语句3.
下面举个例子:
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
-
- int main()
- {
- int age = 10;
- scanf("%d",&age);
-
- if (age < 18)
- {
- printf("青少年\n");
- }
- else if (age >= 18 && age < 28)
- {
- printf("青年\n");
- }
- else if(age >= 28 && age < 40)
- {
- printf("中年\n");
- }
- else if (age >= 40 && age < 60)
- {
- printf("壮年\n");
- }
- else if (age >= 60 && age < 100)
- {
- printf("老年\n");
- }
- else
- {
- printf("老寿星\n");
- }
- return 0;
- }
下面举一些例子,让大家对if 语句更加深刻。
练习1、写一段程序,输入一个整数,判断它是否为奇数
答案:
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
-
- int main()
- {
- int a;
- printf("输入一个整数:");
- scanf("%d",&a);
- if (a % 2)//或者if(a % 2 == 1)
- {
- printf("这个数是奇数");
- }
- else
- {
- printf("这个数是偶数");
- }
- return 0;
- }
练习2、输出1-100之间的奇数
答案:
- #include <stdio.h>
-
- int main()
- {
- int a = 1;
- while (a < 100)
- {
- if (a % 2)//或者if(a % 2 == 1)
- {
- printf("%d ", a);
- }
- a++;
- }
- return 0;
- }
switch也是一种分支结构,常用于多分支,虽然if else也可以写多分支,但过于复杂
比如:要求我们按照输入,来选择输出
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
如果用 if else 语句实现:
- #include <stdio.h>
-
- int main()
- {
- int day = 0;
- scanf("%d", &day);
- if (1 == day)
- printf("星期一\n");
- if (2 == day)
- printf("星期二\n");
- if (3 == day)
- printf("星期三\n");
- if (4 == day)
- printf("星期四\n");
- if (5 == day)
- printf("星期五\n");
- if (6 == day)
- printf("星期六\n");
- if (7 == day)
- printf("星期日\n");
- else
- printf("请输入正确的数字");
-
- return 0;
- }
if 语句的形式可能会太复杂,那我们就有了不一样的语法形式
这就是switch语句
switch(整型表达式)
{
case 整型常量表达式
语句;
}
在switch语句中,我们没办法直接实现分支,要搭配break使用才能实现真正的分支
比如:
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
-
- int main()
- {
- int day = 0;
- scanf("%d",&day);
- switch (day)//注意switch中的数据类型必须要整型
- {
- case 1:
- printf("星期一\n");
- break;
- case 2:
- 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;
- }
- return 0;
- }
如果在case下不加break,就会按顺序的执行case,直到遇到break或者程序结束。
比如:
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
-
- //在比如只需要判断工作日或者是周末
- int main()
- {
- int day = 0;
- scanf("%d", &day);
- switch (day)//注意switch中的数据类型必须要整型
- {
- case 1://可以不加break,不跳出,继续循环下面的语句
- case 2:
- case 3:
- case 4:
- case 5:
- printf("weekday\n");
- break;
- case 6:
- case 7:
- printf("weekend\n");
- break;//最后一个break可以不加,不加也是因为结束跳出,但建议加上
- // default:
- // printf("选择错误\n");
- // break;
- }
- return 0;
- }
这个例子就会发现,输入1-5的时候,就会按顺序执行到case 5 ,遇到break后退出,如果觉得不明显可以用调试(vs2019按F10,就能看到程序运行的步骤)
正式break的这个特性,使我们代码实现把语句列表划分为不同的分支部分,运用起来更加灵活。
用上面的例子加入default 改进后:
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
-
- //在比如只需要判断工作日或者是周末
- int main()
- {
- int day = 0;
- scanf("%d", &day);
- switch (day)//注意switch中的数据类型必须要整型
- {
- case 1://可以不加break,不跳出,继续循环下面的语句
- case 2:
- case 3:
- case 4:
- case 5:
- printf("weekday\n");
- break;
- case 6:
- case 7:
- printf("weekend\n");
- break;//最后一个break可以不加,不加也是因为结束跳出,但建议加上
- default:
- printf("选择错误\n");
- break;
- }
- return 0;
- }
说明:上面的程序,输入1-7以外的值时就会输出选择错误
为了巩固switch,下面一个题目,非常经典
阅读以下代码,写出输出。
- #include <stdio.h>
-
- int main()
- {
- 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;//只会跳出当前的switch语句
- }
- case 4:
- m++;
- break;
- default:
- break;
- }
- printf("m = %d, n = %d\n",m,n);
- return 0;
- }
答案为:m = 5,n = 3
下一篇将介绍循环语句的相关知识
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。