网易首页 > 网易号 > 正文 申请入驻

一起学《C程序设计》第四课——if语句、switch语句及实战练习

0
分享至

if语句属于控制类型的语句,程序里的逻辑判断、控制语句执行的“走向”大多都由它来主导,在今后的学习和工作中,if语句会伴随左右,在程序代码里随处可见它的身影。

注意,请认真学习完《C程序设计(第五版)》第四章后再阅读本文会有更大的收获。

if语句

if可以单独出现,else if 和else必须跟着if的后面,不能单独出现,在使用过程通常遵循以下几点。

大括号不要省略

初学者会觉得省略一对大括号会让代码看起来简洁。

其实不然,在项目开发中,随着功能的不断迭代,代码也要迭代,之前一句话式的if语句可能要扩展功能,判断成立后要做不止一个操作,这就必须把大括号补回来,所以早写上早省心。

还有一点代码的可读性问题,在其他人(甚至时间很久后你自己)阅读你的代码的时候,这种一句话式的if语句一般都要脑补拆解出来条件表达式和执行语句,显得不是那么友好。早点形成好的编程习惯,会受益终身。

减少嵌套

遇到很多个条件判断的时候先理清楚这些条件直接的包含关系,尽可能的减少if语句嵌套的层级,因为多层级嵌套同样会使得代码可读性变差,并且后续的迭代和维护也会变得麻烦。初学者可能体会不到代码可读性和后续迭代维护等事宜,这个只能慢慢的去做项目积累经验了,在这里提出来自然是希望同学们少走弯路,好习惯早养成。

复杂的逻辑表达式

书本上为了讲解逻辑运算符以及逻辑表达式的运算优先级,总结出了它们的顺序规则。在实际的使用中我们通常遇不到复杂的逻辑表达式的判断,如果遇到很复杂的逻辑表达式,为了保证运算顺序能按照我们预想的步骤进行,这时候可以祭出“括号”大法,但是“括号”套“括号”这样臃肿的写法也不推荐,所以在进行逻辑表达式的构建之前,先把条件分类,比如五个条件分两类,分别计算这两类的逻辑值,再进行“与或非”的运算。

switch语句

if语句是按条件来决定执行代码的,switch语句则更加直白——匹配执行。直接根据有限个匹配结果去逐一编写相应的执行语句,原理上来讲,switch语句完全可以被if语句取代,switch语句多用来“等值”的判断,if语句多用来逻辑值“真”和“假”的判断。

实战编程

光说不练假把式,要想掌握C语言基本的数据结构和语法规则,唯有动手实操这一条路,下面我们来看几道书本上的练习题目。

有3个整数a,b,c,由键盘输入,输出其中最大的数。

按照上一课讲的,第一步理清算法思路:先比较a和b得出它们两个之间最大的数,然后再去和c比较得出最大的数即是a,b,c它们三个之间的最大数,下面画出流程图:

然后开始写代码,从上述流程图能看出最直观的做法就是用if语句。但是还记得三元运算符吗?我们用三元运算替代这种简单的if语句会使得程序简洁,下面附上代码片段:

两层三元运算符的嵌套代替了两层if-else语句的嵌套,当然我们也可以混合使用,比如外面是if-else语句,里面是三元运算,感兴趣的尝试一下吧~

从键盘输入一个小于1000的正数,要求输出它的平方根(如果平方根不是正数则输出它的正数部分)。要求在输入数据后先对其检查是否小于1000的正数。若不是,则要求重新输入。

这是一个简单的数学运算题,求平方根用 sqrt() 这个函数,有个前提是要在文件头包含 math.h 头文件:#include ;另一个点是小数转整数,还记得强制类型转换这个知识点吧,用 (int) 即可把数据转换成整型,我们先看第一个版本的代码:

注意到,代码里判断了两次错误的输出就会退出程序,如果没有 return 这个语句,程序会继续往下执行,那么上面做的if语句判断就没有任何作用了。

不妨拓展一下思维:如果要求输入数据出错后可以一直重试直到输入正确的数据为止呢?我们可以在if语句里继续嵌套第三次、第四次、第五次…的有限次判断,但是这样代码会显得很臃肿,并且达不到“一直验证输入数据直到正确”的要求,那接下来该如何是好呢?

无限制的if语句嵌套作用都是一样的,目的都是判断数据准确性。输错了继续输,输错了继续输,这不就是一个循环吗,一直到输入正确为止——while循环的特性。这里引申到下一章的知识点了,算是抛砖引玉吧,不妨来看一下用while语句改造后的代码:

给出一百分制成绩,要求输出成绩等级'A'、'B'、'C'、'D'、'E'。90分及以上为'A',80~90分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。

这个题目很简单,最直观的就是用if语句做判断。这里介绍另外一种方式——switch语句。我们的switch语句主要做等值判断,但是题目给出的分数是范围,怎么进行关联呢?题目中的分段是按照10分为单位划分的,如果我们把分数除以10并取整是不是就把一个范围内的10个数字对应到它们的“十位数”了呢?比如70~79对应“7”,经过这样的转换再用switch语句就很简单了,看一下代码:

PS:这里的成绩数据也是有一个范围的,同学们不妨参考上一个程序的while循环检测数据也来改造一下这个程序吧~

另外,这个题目和书本第10题类似,分别用if语句和switch语句来编程,这里就不赘述了。

给一个不多于5位的正整数,要求:
1、求出它是几位数;
2、分别输出每一位数字;
3、按逆序输出各位数字,例如原数为321,应输出123。

此题目字数很少,乍一看很简单,其实有点难度。首先要解决的问题是如何算出一个数的各个位分别是什么?这似乎是一个纯数学问题,也是本题的核心算法所在。这里的基本算法是:

  • 对10取余求出个位数
  • 对100取余再除以10取整得到十位数
  • 后面的百位数、千位数…以此类推

得到个位的数字后还要判断是几位数,我们从高位往下判断,比如:最高位第五位是0,那再去看第四位是不是0,不是0就肯定是4位数,否则继续向下看。

如果是从低位开始判断则会遇到最高位不是0,中间位是0的情形,比如10001,这种判断逻辑是有缺陷和漏洞的。下面参考一下代码:

这里我们还可以拓展一下:给出的数位数未知,怎么计算其长度和每位的数是多少呢?有兴趣的可以尝试一下~

输入4个整数,要求按由小到大的顺序输出。

这是一个经典的算法题——排序算法,是学习算法的入门课。算法排序有很多种方法,这里我们就用最经典的排序算法——冒泡排序。

PS:我这里是按从大到小的顺序来排的,怎么给它编程由小到大来排序呢(输出顺序还是a,b,,c,d)?

总结

一般初学者学到这里会有以下几种困境:

  1. 数据结构和语法规则没熟练掌握
  2. 想不出有些题目的解题算法
  3. 算法转换为代码有难度
  4. 数学知识需要多补一补

首先,第1点和第3点需要多些代码、多练习,前期吃力,只要坚持下来,后面会越来越轻松;第2点和第3点,这个需要我们转换思维,第二课算法推荐的算法学习网站,也要多去练习,看看怎么把数学解题思维转换成程序的算法,除了看题做题别无他法。

大家千万不要打退堂鼓,因为这个书本毕竟是教学课程,理论性的东西偏多,也是为我们今后的学习打基础。在日后的工作过程中,我们面对的是不同行业的业务流程和业务逻辑,不会像纯数学题和算法题一样觉得枯燥(搞科研的除外),而是解决现实中的问题。

尽快找到适合自己学编程的方法才是当下最主要的,如果找到写代码的感觉,那就请飞起来吧。

有问题请私信交流,想要练习题源代码的也请私信。

往期文章

一起学《C程序设计》第三课——数据结构、运算符、表达式和语句

一起学《C程序设计》第二课——算法

一起学《C程序设计》第一课——C语言概述和学习前的准备、意识

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
563支AI队伍和姜萍答了同一份试卷:最高34分,无一入围决赛

563支AI队伍和姜萍答了同一份试卷:最高34分,无一入围决赛

经济观察报
2024-06-15 19:56:17
网传南方医科大学老师因救人导致上课迟到,被留学生举报后,遭学校罚款+通报批评

网传南方医科大学老师因救人导致上课迟到,被留学生举报后,遭学校罚款+通报批评

可达鸭面面观
2024-06-16 10:28:07
幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

赢梯
2024-06-13 09:43:08
莫斯科外汇交易所停止美元交易后,人民币和美元汇率翻天覆地

莫斯科外汇交易所停止美元交易后,人民币和美元汇率翻天覆地

火星宏观
2024-06-16 06:00:03
港媒:美军核潜艇并不是“撞山”,而是被解放军发现后“伏击”!

港媒:美军核潜艇并不是“撞山”,而是被解放军发现后“伏击”!

黑天鹅洞察
2024-06-14 11:51:11
31岁河南禹州市医保局局长任小龙,拟遴选进入省政府办公厅

31岁河南禹州市医保局局长任小龙,拟遴选进入省政府办公厅

澎湃新闻
2024-06-15 21:58:28
倒查30年后补税是个危险信号

倒查30年后补税是个危险信号

深度财线
2024-06-15 22:03:47
魔怔了?美国洛杉矶移除“禁止转弯”交通标志,因涉嫌歧视“弯的”

魔怔了?美国洛杉矶移除“禁止转弯”交通标志,因涉嫌歧视“弯的”

不掉线电波
2024-06-16 09:33:45
乌情报总局局长:俄最新型S-500防空系统部分部件已运抵克里米亚

乌情报总局局长:俄最新型S-500防空系统部分部件已运抵克里米亚

红星新闻
2024-06-15 20:16:15
红色预警!大暴雨!浙江入梅后最强降水来袭

红色预警!大暴雨!浙江入梅后最强降水来袭

鲁中晨报
2024-06-16 10:19:06
中国女排3-2土耳其!赛后评分:张常宁满分+4将出彩,一将需提升

中国女排3-2土耳其!赛后评分:张常宁满分+4将出彩,一将需提升

理工男评篮球
2024-06-15 23:27:43
东莞茶山教育管理中心主任文辉被查,已有同僚落马

东莞茶山教育管理中心主任文辉被查,已有同僚落马

南方都市报
2024-06-16 10:56:09
疯传!女员工表白大20岁副行长,言语肉麻发错群,银行回应来了

疯传!女员工表白大20岁副行长,言语肉麻发错群,银行回应来了

懂瓜瓜
2024-06-15 20:12:37
你是不是想死?奔驰车主棍打女骑手,真实身份被扒,评论区沸腾了

你是不是想死?奔驰车主棍打女骑手,真实身份被扒,评论区沸腾了

刚哥说法365
2024-06-16 02:52:08
【史话】张国焘说长征:毛泽东等北上抗日只是幌子,想逃跑才是真

【史话】张国焘说长征:毛泽东等北上抗日只是幌子,想逃跑才是真

年之父
2024-06-16 06:10:02
16岁的暑假班!亚马尔生吃格瓦迪奥尔、1v4、带作业到德国做✍️

16岁的暑假班!亚马尔生吃格瓦迪奥尔、1v4、带作业到德国做✍️

直播吧
2024-06-16 10:40:12
湖南省辰溪县中医医院原党支部书记、院长傅胜义接受纪律审查和监察调查

湖南省辰溪县中医医院原党支部书记、院长傅胜义接受纪律审查和监察调查

鲁中晨报
2024-06-16 10:59:05
大陆不再沉默,给黄仁勋上了一课,选在美收紧对华AI芯片出口之际

大陆不再沉默,给黄仁勋上了一课,选在美收紧对华AI芯片出口之际

陈菲副教授
2024-06-15 18:20:03
俄空军遭遇滑铁卢,单日8架战机被毁伤,乌克兰粮食出口创新高

俄空军遭遇滑铁卢,单日8架战机被毁伤,乌克兰粮食出口创新高

史政先锋
2024-06-15 21:05:23
漫天狂嘘!欧洲杯第1场催眠大战:2-1领先不攻了,球迷愤怒

漫天狂嘘!欧洲杯第1场催眠大战:2-1领先不攻了,球迷愤怒

叶青足球世界
2024-06-16 04:58:35
2024-06-16 11:42:44
程序员鲁大厨
程序员鲁大厨
做了十余载的程序员,记录分享
22文章数 20关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

法国股市暴跌引发恐慌 马克龙:法国处于非常严峻时刻

头条要闻

法国股市暴跌引发恐慌 马克龙:法国处于非常严峻时刻

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

时尚
亲子
游戏
健康
军事航空

中年女性还是穿连衣裙最有气质!裙摆过膝、腰部收紧,巨显瘦

亲子要闻

孩子吃饭时习惯让别人盛饭,外婆是这样做的...

回暖!《绝地潜兵2》更新之后PC玩家数量飙升86%

晚餐不吃or吃七分饱,哪种更减肥?

军事要闻

普京提停火和谈条件 美防长迅速回应

无障碍浏览 进入关怀版