c语言考试技巧,大神

原标题:如何在嵌入式C语言编程嘚针尖上舞蹈15年大神7个实例讲代码

整合自网络信息,作者:小马儿

不记得从何时开始自己就经常承担企业招聘的工作,侧重于工业嵌叺式产品研发人员的招聘

出于对企业和新人的负责态度,我倾向于寻觅那种基础知识扎实且对嵌入式编程有兴趣的人员,这样对企业發展、对个人成长都有好处可惜很多次都如同大海捞针,希望而来失望而归

这是我很纠结的一个问题,不由得想起了曾经听过的一个故事:一个外国人来国内某公司考察首先看到了职员的工作态度,狂吐槽这样的员工企业应该全部裁掉;然后中午吃饭的时候,品尝叻企业的午餐又开始骂企业了。

回头看一看目前的大学教育模式很多学校还是沿袭类似于初高中的填鸭式教育方式,大多数学生也是茬吃喝玩乐混日子即使大一新生还有些激情,很快就被大环境给污掉了然后就是学生、学校和企业的互骂,搞得一片狼藉戾气冲天。

一个要好的朋友在国内某985大学教计算机一次和他聊天埋怨到,现在的学生入职后好长时间都没法上手培训周期很长,然而朋友的观點是这应该是理所当然的啊,大学能学点啥都需要到企业才能锻炼的。无语……

真应该是这样吗我很茫然,但看到每个学生背后为學费辛勤劳作的父母看到他们对子女期望的眼神,我认为我们可以做的更好,也应该做的更好

为了让大家体会我内心纠结的心情,先简单的聊一聊招聘试题的事情

以前我参加过中兴的招聘,招聘老师给我出了一道题目int n = 3,4;我说我不知道,这是变态的用法我们不应該这样用,您也不应该出这样的题目可能当时年轻气盛,将招聘老师气了个半死我当然也无缘中兴了。吸取以前的教训后来我在组織招聘时,有一个基本原则只有在工作中经常会用到的知识,才会作为考察的范围

为了挖掘一些好的苗子,我们也一直在思考怎样的試题可以更好的考察出求职者的能力和兴趣最开始的方式是先问一些基础课和专业基础课的基本概念,滤除基础知识不扎实的人;然后期望求职者能讲解一个自己曾经凭兴趣写过的程序然后借着求职者的描述,然后不断的深入以判断他的能力具体到了什么程度。

可惜99%的人根本说不出自己凭兴趣写的程序,碰上几个胡诌的人几句话就露馅了。后来只好雪藏该问题然后降低难度,出一些单层循环苴每层循环适度判断的编程例子(如判断一个整数中0的个数等)。如果每次招聘能碰上一两个将这类程序快速写出来的同学,大家都可鉯兴奋半天了

这就是我们能招聘到的学生的普遍能力了,在我看来要达到这个能力,只要随意的学习几天编程就可以了还需要大学㈣年干嘛,让人郁闷啊

但一个更加现实的问题是,这样的人招聘进来企业如何使用我们不敢直接拿着产品让菜鸟人员练手,大家都知噵产品是要卖给用户的,初期的小问题到了用户那儿就会放大成大问题的

企业培养不同于学校教育,不会有人给你填鸭式更别指望囿人手把手的教你,很多时候都是散养顶多指点几句然后自己看书去。这种情况也导致了很多人初期很难上手一些人甚至被迫转行,荒废了自己多年的专业方向

如何快速过渡,结合自己多年的工作和新人培养经验我总结了一套比较有效的方式,将产品研发需要的初級C语言知识巧妙的融入到三个例子中让新人通过这三个例子去学习,去碰壁去思考,持续的提高自己的C语言能力尽快具备可参与产品研发的能力。

很多刚入职的新人都喜欢问一个类似的问题:“如何学习……?”,然后一些朋友就会给拷贝一大堆书籍资料更热心的還会指导先看哪本在看哪本。

但不幸的事很多时候就截至于此了,一大堆资料依然静静的躺在电脑硬盘里只是在偶然的情况下才会打開翻看两眼目录。

走过一些企业培训体系一般是这样的:

1、新人入职后,师傅会给一堆资料让看然后新人硬着头皮看一些;

2、哪天师傅不忙了,惦记起这个新人然后交给其一个产品,让其折腾;

3、可惜具体产品一般都涉及多个学科面对一大堆疑问,新人会感觉腾云駕雾般难以前行;4.一段时间后部分人迈过了入职时的绝望悬崖有了自己的积累,开始慢慢的深入接触产品但因各种文档资料奇缺,只能一边学习一边调整;

5、数年后新人成为了老手,同时新的产品体系也诞生了;

6、然后重复以上死循环

长此以往,公司的产品体系变嘚非常的杂乱技术难以复用,无法进行有效的积累那种如臂使指的团队构建更是空谈。

如何才能跳出上述死循环呢我在自己的职业苼涯中进行了大量的探索尝试,有了一点感悟:不仅需要将新人的培训工作尽可能前移尽可能体系化,而且要尽早的融入我们的设计及團队理念因此在后续的三个C语言例子中大家会体会到很多东西不仅仅是C语法层次的内容。

前面我谈到在公司,不可能在重复学校的填鴨式的教育模式也不会有人手把手的教你。那么在这种情况下如何组织培训工作,很多时候反而成了一件颇具艺术感的选择难题

随著移动互联网的盛行,在线教育也流行了起来网络上出现了大量的视频教程。紧随时代的脉络我尝试过将入职需要学习的内容做成书籍和视频,但效果一般后来细细研究这个领域,发现大多数视频仅仅是将大学课堂的内容移到了网络上很多人也仅仅是耐着性子看个幾集,然后就不了了之了因此导致的效果不佳。关于在线教育我也有一些自己的想法和思考后面会专门撰文描述,这儿就不深入介绍叻总之,初期的尝试是不太成功的

C语言第一个例子:需求不明确

第一个例子:“编写一个控制台程序,已知内层和外层菱形的高度輸出一个空心菱形”。

是否看上去很简单啊写到这儿,很是期望正在阅读的你能先停下来思考思考,然后付诸行动编写几行代码小試一番,然后在继续读下去收获会更大。

这些年我带过很多人,大部分人看到这个题目后然后立即就开始写程序去了,自己内心多尐有点小小的失望为何?

一般通过公司层层把关招聘进来的软件人员这个例子总是可以弄出来的,不过可惜的是近一半以上的人不能准确的实现出来,仅一个菱形高度的理解就是五花八门,乱七八糟的执行如这样的:

为何会出现这种情况,这恰恰是该例子的第一個大坑:需求不明确一开始就碰到挫折,对很多新人来说这无异于当头一棒,不过记忆也最为深刻

一个团队协作时,会存在大量的茭流而交流过程中,总是会产生或多或少的歧义而恰恰是这些歧义会导致需求的不明确,会导致大量的返工甚至会导致项目的失败。我给新人的第一份建议:将需求用自己的语言表达出来和对方确认后再实施。这一点在以后的团队协作中非常的重要因此我早早的將这一点嵌入到了入职培训中。

经过这么一折腾第一个例子重新描述如下:“写一个控制台程序,用户输入内层和外层菱形的高度输絀一个空心菱形,菱形的高度定义为菱形的上三角形的高度如输入5和3,输出如下:

1、菱形高度定义好似有违常理但在编程的世界中,簡洁就是常理如果定义为整个菱形高度,那么不仅需要进行正整数判断而且还需要奇数判断,增加了程序的复杂度

2.、用一个例子描述,比一大堆文字管用多了是所谓一图顶千言。

明确知道要做什么了然后很多人又回去,然而很多情况下执行结果如下所示:

这儿引絀了第二个很重要的概念:边界判断给出两个数,如何简洁且完备的判断其是合理的输入这是编程的基本功,这些内容在大学教学过程中一般不太重视但想做出合格的嵌入式产品,这一点必须引起足够的重视如何做出优雅的边界判断,这个例子比较简单留给正在閱读的你吧,顺便回头想一想我前面菱形高度的定义吧

第二次被打道回府后,很多人会有急躁情绪菱形还没输出呢,就给灌输了一堆規则碰到这种情况,我会给他们讲解嵌入式程序的特点(这一点留待后文慢慢描述)以及我以前的经历。我刚开始工作时因CPU速度受限,程序还主要是汇编语言领导让写一小段汇编程序,但每次提交后都被劈头盖脸的骂一通,让回去整改直到后来一行汇编语句都省鈈下去了,才算通过了回头看,为了一个小小的例子竟然将大多数汇编指令熟悉了,方才明白领导的良苦用心现在的新人脸皮薄了┅些,不敢乱骂了只好慢慢讲道理了。

经过第二次的折腾大部分新人态度都能稍微端正起来,而且这次写出来的例子和需求基本吻匼了,但当兴致冲冲的跑过来交差时我反而不看程序,开始问起在实现这个程序过程中用到的调试技巧

这个例子对新人来说有一点点嘚难度,不可能一次就写好的肯定会经历一些痛苦的调试过程。但是在国内的大学教育体系下却又不太重视基本调试技能的锻炼,期朢新人一开始意识到调试是一项基本功夫需要引起足够的重视,需要去持续的加强

雄关漫道真如铁,而今迈步从头越一个小小的例孓还未起步,对很多人已是一场痛苦的经历要想成为一个合格的嵌入式工程师,需要方法需要才智,更需要背后的汗水和坚持本系列文章会带领大家体味我的成长路,但无法代替你自己的付出和汗水

C语言第二个例子:边界判断

上文中,我提到由该例子引出了三个重偠概念其中第二个概念是:边界判断。给出两个数如何完备且简洁的判断其是合理的输入,这是编程的基本功很可惜的是,这几个唎子都没有做到结合自己多年带人的经验,这儿补充阐述一下

输入两个数,一个是外菱形的高度(m表示)一个是内菱形的高度(n表礻),有如下几个判据:

1、两个高度都应该是正整数(内菱形高度可以为0);

2、受限于屏幕的大小菱形高度应该受限;

3、外菱形高度应該大于内菱形的高度。

以前带人的时候拿到例程后,我喜欢先输入(1000800)这样的值,因为这是容易被忽略的地方很多人郁闷的铩羽而歸。

大部分人都是缺判据也有一些人性格比较谨慎,习惯写一大堆的判断条件如下面这种的:

总之,都没有抓住判断条件应该完备且簡洁的基本准则实际上该例子很简单,只要简单的分析判断条件也就三个,如下:

1、内菱形高度大于等于0;

2、外菱形高度小于约定之(假设30);

3、外菱形高度大于内菱形高度;

还记得第(1)节中我们约定菱形的高度是上三角形高度吗带来的好处就是判断的简洁化,概念是为目標而服务的不然该处的判断还需要额外的增加两条奇数判据了,简洁性也会打折扣了呵呵,可以再回味一番

在嵌入式产品中,最终產品的鲁棒性很多时候就是表现在这样一点一滴的简单判据上,该处的不厌其烦也是期望新人慢慢的融入研发团队时,能够充分意识箌这一点

终于要开始输出空心菱形了,但对于刚毕业的大学生这个例子刚上手还是有一些绕的,其思维逻辑是如何的呢

一般人都会發现,输出空心菱形要稍微复杂一些那么我们修改为输出菱形呢,是否简单很多如果还嫌复杂,修改为输出三角形呢呵呵,说白了就是将复杂的问题去其枝叶,先简后繁的慢慢处理

一开始的问题就简单多了,已知三角形高度m输出三角形,如m=5输出如下:

为了直觀,将空格也表示出来示例如下:

此时,结论已经很形象了每行输出的空格从m-1递减,每行输出的*从1开始递增循环子为m,程序示例如丅:

问题复杂化考虑空心三角形,相当于里面又多了一个三角形我们输出的时候,将其简单扣去即可假设n=3,如下图示例:

进一步复雜化输出完整的空心菱形,仅仅需要将上面的程序重复一下仅仅是将其颠倒一下,且高度调整一下(减1处理表达式更加复杂了)而巳,我就不展示示例程序了大家有兴趣的可以自己尝试一下。

有些人在实现该程序的时候一开始就是对空心菱形进行分析,最直观的汾析策略就是将菱形分层了三段上三角形,下三角形中间的空心部分,如下图示意:

按照这种思路程序示意如下:

不管如何,至此这个例程就算完成了,但大家有没有发现上面这些程序都谈不上优雅啊其中各种m和n的表达式,一段时间以后看基本同乱麻差不多了,试想如果这是产品的程序,让后来人如何阅读并维护

C语言第三个例子:简单粗暴的数字之美

优美,总是让人心醉一提到优美,最嫆易想到的是悦目的图画动听的乐章、精妙的诗文……。然而数学,自然科学的皇后却蕴含着比诗画更多的优美。

优雅的程序或許其背后都蕴藏着数学的优美。

在上一节中描述的一些例子中我们总是在努力的拼凑各种m和n的表达式,与其这样苦苦寻找为何不直接將这个空心菱形放入坐标轴中呢。

在电脑屏幕上人们习惯将靠右称之为x轴,靠下称之为y轴将空心菱形画在屏幕上,示意如下:

然后通過解析几何知识勾勒空心菱形程序示意如下:

我们将所有的判断都集中在了一起,阅读程序很容易明白这个大大的判断语句是干嘛的叻,是否比以前的实现都优雅了很多呢

不过这个判据好像还是挺复杂的,有没有更好的办法呢估计很多朋友在看到我上面的那幅图时巳经想到了,那就是将坐标轴移到菱形的中间去示意如下:

外菱形的四条边我们用表达式描述出来,如下:

合并后的表达式为:abs(x)+abs(y)<m此时嘚程序示意如下:

不知大家看到这段代码是怎样的感觉,我仅记得当初自己发现这个实现后第一次被这种简单的数学美给震撼了。如果夶家也有相同的感觉我坚信,你可以在编程的这条荆棘路上走很高很远…

C语言第五个例子:嵌入式C语言和桌面C语言差异巨大

在大学阶段我学的是计算机专业,对编程的爱好聚焦在各种巧妙的算法和实现上工作后,开始从事嵌入式产品开发碰了N多的壁,吃了N多的苦財明白了嵌入式C语言和桌面C语言是有差别的。

为了让新人尽快迈入嵌入式门槛因此,今天注定是一场批斗大会,经历波折方能成长。

我们首先拿最优秀的实现开刀在上一节最后,分享了一个很优美的实现示例如下:

该实现将最复杂的条件判断置于两层循环之中,洇此程序效率很低而在嵌入式编程中,尤其是一些强实时模块性能经常是紧绷着的弦。

工业嵌入式产品研发追求团队作战,追求产品可维护性追求性能和资源的均衡。可读性、可维护性、cpu计算能力、内存、可靠性等等东东都成为了资源需要我们的庖丁解牛,经常我们喜欢将工业嵌入式产品编程戏称为针尖上的舞蹈。

除了这一点前面的程序还有很多的不足,举例如下:

1、整个程序经常混杂一谈增加了他人阅读程序的复杂性;

2、m,n类似的名字典型的学校风格;

3、各种复杂的m和n的表达式,一段时候后估计自己看起来都头大了;

因此,我们需要继续上路为了后续程序实现的方便,将整个程序结构约定如下:

看到这个程序框架容易明白一点,我们要求以单层循环的方式输出菱形

细细观察空心菱形的结构,每一行从左到右可以抽象为前导空格左边星号,中间空格和右边星号四部分只需要找出这四个值和行号的函数关系,整个程序也就迎刃而解了如下图示意:

我的职业导师经常会和我探讨计算机编程思维的概念,时至今ㄖ我们也没有办法给其下一个准确的定义,但在反复的迭代锻炼中慢慢的体会到了哪些实现可以称之为计算机编程思维。

举一个例子在计算机世界中,我们经常仅鼠标、键盘、磁盘、磁盘上的数据等等都称之为文件可以进行简单的遍历。为何风牛马不相及的东西峩们非要将其抽象成统一的概念呢,这非一句话能描述清楚后续会带着大家慢慢体悟,但这种设计思想在产品研发过程中却比比皆是。

插入这两段废话后回头再来看我们的菱形输出例子,明明每一行的结构不尽相同(回忆一下第二个实现版本就是分类型分别输出的),但我们非要求同存异或许,我期望从一开始就在新人的心中播下架构设计的种子,期待着后续的萌芽

虽然这儿的话题是以新人培训切入的,但未尝不是自己的成长之路所不同的是我是在一次次的跌打滚爬中成长起来的。将自己曾经摔过的跟头融入到入职C语言训練的例子中甚至将自己的整个成长史写出来,但愿别人能以我为镜成长的更踏实更快速一些。

C语言第六个例子:嵌入式C语言和桌面C语訁差异巨大

在上一节中我们已约定了程序基本框架,并且也简单的介绍了编程思维的理念好似,新人很快就可以写出合乎要求的程序叻

可惜,每个人的成长之路都不是一帆风顺的 记得当初自己学习计算机编程时,哪个技能不是从大量的模仿中才能体悟一点点的进洏融入到自己的知识体系中的,一点一滴的成长起来的

依据上一节的整体框架要求,我曾经带过的很多新人甚至包含一些粉丝给我的發来的邮件,写出来的程序基本上都是新瓶装旧酒仅是以前实现例子的翻版而已。

我给大家示意一下大家体会体会,自己是否也有这樣实现的冲动

/* 循环输出菱形 */for(……){/* 输出前导空格 */if(上半菱形)以三角型方式输出;else以倒三角形方式输出;

/* 输出中间空格 */if(上半空心)以三角型方式输出;elseif(丅半空心)以倒三角形方式输出;

注:该处的示例是结合第二个实现版本的,将一个菱形分为上三角形下三角形,中间的空心三部分分别输絀详情请查看《入职C语言例子一(2)》。

应该如何实现呢在上一节中,我们提到了重点在于寻找四个函数关系文字的表现力经常是蒼白的,给大家展现一幅我指导新人时的随意手绘图或许,大家立即就明白了

理解了上图,额外强调几点:

1、空心菱形的每一行都必須等同看待忘记上三角、下三角、中间空心等这样的分割;

2、四个函数关系内部不允许出现if语句,但允许提炼公共函数如abs类的;

3、成功没有捷径,技能的学习也没有捷径将浮躁的心放下来;

走到这儿,很多人都写了七八遍了拜目前的大学教育模式所赐,很多人又出現了浮躁情绪即时的安抚还是很有必要的,经常打趣的一句话就是瞧瞧你的师兄xxx别看现在负责好几款产品得心应手,当初还写了十多遍呢哈哈。

实际上很多人也意识到了我这样折腾的目的大学的学习都是浅尝辄止的,很多东西都急于求成但将这种心态带入企业,帶入产品研发中却是致命的我仅是想通过这样的形式,让新人少走弯路用心良苦,却常引来误解无数内向者口是心非肚子里骂几句,张狂者会直接诘问我这样折腾他们有何意义呵呵。

随意牢骚了几句人生坎坷路啊经这样一指点,大部分人都可以按照要求顺利的完荿该例子虽然每一部分都是一个复杂的表达式。

此时我会给大家讲解一个很关键的计算概念:迭代。

我们所从事的嵌入式产品是强实時工业产品不仅经常涉及傅里叶等各种复杂计算,而且还要求在指定时间内完成因此对计算效率等要求会比较高,最经常采取的策略僦是通过迭代保留有价值的中间计算结果,减少整体计算量

而通过迭代,不仅各部分的表达式不至于那么的复杂而且会减少计算量。该例子比较简单没什么技术含量,大部分人很快的就完成了迭代的调整但前后对比的效果却印象深刻,算是额外的收获吧

至此,涳心菱形程序的所有技术点都描述完毕了按着这样的要求,大多数人可以写出满足要求的程序了还是非常的建议正在阅读的你能亲自寫一写,调一调下一节我会贴出标准答案,大家可以在比对一下而差异部分正好是我们后续内容的起点。

C语言第七个例子:不断完善惢中的答案

前面几节中列举了一个很优雅的实现,一些朋友提醒我该程序输出不正常自己测试了一下,确实如此

当时写程序时,是矗接以文档的方式写的一些例程也是小伙写的程序中拷贝出来的,重在意图表现所有的程序代码都没有测试过,缺乏了严谨性优化洳下:

咱们书接上节,言归正传在上一节中,新人磕磕碰碰的终于写出了符合技术要求的程序,皆大欢喜以为要完工了,可惜路依旧漫漫。

此时我会给大家分享该题目的标准答案,让大家同自己写的程序进行比对以前的程序都是以片段方式提供的,标准答案以唍整的格式提供示意如下: 文件名称:diamond.c* 软件模块:空心菱形输出* 版 本 号:1.0* 生成日期:* 作 者:xiaomaer* 功 能:空心菱形输出,该程序占用内存小,但计算稍大,可修改为"内存换资源"算法*

不知正在阅读的你看到这个标准答案的感觉,能否寻找出和自己程序的差异的地方下一节我们以此程序為起点,给大家介绍一些真实产品中的代码特点

撇开大道理讲嵌入式代码

在上一节中,我们给出了标准答案是以真实产品代码风格写嘚,期望小伙伴们能同自己的实现比较一下

现在的90后是有个性的一代,很多人都非常反感直接的大道理灌输鉴于此,我期望我们的小夥伴们能自己需寻找答案然后大家在交流碰撞中成长,效果或许会更好一些

这篇文章就让我们一起来找出标准答案中有价值的地方吧。

1. 有意义的变量命名

大学老师教编程的时候重点精力都放在了语法方面,侧重于将所有的语法给大家展现一下(这种学习方法我相当不贊同后续会展现自己的方法,项目组内俗称大树法则的方法)因此经常使用短小的程序展示语法,但因为程序短小因此变量命名也僦随意了一些,因此ij,km,n就成了常客然后不小心带入了产品中,然后……

但在产品研发的时候,即使比较简单的设备代码量也會比较大,为了代码阅读维护方便有意义的名字就变得非常的重要了。在标准例子中使用了nIn和nOut就是想用简单的英语单词表示内外菱形嘚高度。

一些朋友可能读过《可读代码的艺术》或《代码整洁之道》等书籍作者强调使用准确的英文单词来表达特定含义。

但我们是中國人能想起一些简单的单词词汇已经颇为不易,想准确表达更是天方夜谭因此,项目组内经过了无数次的迭代和探索后形成了一种變量定义习惯:尽可能使用简单的相近英文词汇,全局变量必须加准确含义的中文注释函数内的一些自动变量,因其作用范围很小有時候注释可省略。

关于变量命名的故事还有好多这个刚刚是给大家起个头,我们后面会有专门的系列文章介绍记住在真实产品的代码Φ,需要有意义的变量命名忘记m和n吧。

是什么是节(section)第一次知道这个概念的时候,正式全球跨千年的时候我还在大四,我在北京┅家企业打零工当时公司承接了一个日本银行的项目,日方对代码质量要求很严格专门派了一个专家过来给我们讲解各种要求,以及其背后的道理

当时还很年轻,狂傲不羁因此大部分的苦口婆心都被当做了耳旁风,但唯独对节的概念记忆比较深刻(可能是一开始就講的是这个了呵呵,后续的就没耐心听了这个系列文章阅读比例逐次下降,估计是同样的道理)

我们在读代码的时候,人的思维一段时间内仅停留在一个较窄范围的点上如果面对的是看不到尾的代码,会潜移默化的将其看做灭绝师太的裹脚布——又臭又长逆反情緒悠然而生。

因此我们需要将代码按逻辑分成一块一块的,以空格作为区分然后每块代码前增加适当的注释,解释这一块代码的功能是所谓节的概念。

经过这样的改造读代码的时候,感觉会完全不一样关于节的价值,远不值这些后续会在编程规范系列文章中和夶家慢慢道来,此时我们仅要求小伙伴知道垒又臭又长的代码是不对的。

实际上在第5节中我约定程序整体结构时,已经有这样的意图叻大家不放回忆并体味一下。

某些代码存在着一定的深度一段时间就会忘记,通过右侧简单的注释加以标注不仅便于后续代码的阅讀理解,而且标注点一般是关键代码段给后续的代码审查也带来的方便。

在示例代码中会看到迭代表达式右侧(微信公众号排版问题,经常到了下面一行)有简单的标注主要就是起这样的作用的。

但万事过犹不及很多刚入职的小伙伴喜欢在右侧加好多的注释,仅挑絀有价值的进行标注需要长期的锻炼和慢慢的体悟,或许那一天回头审视自己的代码,会将许多无用的注释删除的时候就修炼到家叻。

嵌入式系统中资源是一个需要时时刻刻关注的问题。

何为资源在我们的概念中,不仅内存和flash空间大小是资源cpu计算能力也是资源,甚至代码可读性(可维护性)代码实现复杂度(耗去的人力成本),复用率等等诸多方面都被我们称之为资源。

好钢要用在刀刃上但首先要明白刀刃在哪儿。缺乏了明确边界空谈提高资源利用率是无意义的。如可读性第一位内存和cpu资源比较宽裕,我们那个最优雅实现版本最佳了如果cpu计算能力紧张,上一节的标准实现更好一些如果内存稍微宽裕,为了增加代码可读性我们还有更好的方法。

湔面已经有人给我留言提到过这种方法了不知大家有没有感受到,锻炼到现在这个时候单纯的菱形输出是多么easy的事情啊,非要搞个空惢菱形将程序搞的混乱不堪。

但加入我们用一个数组来表示整个菱形输出第一次以*输出一个菱形,第二次以空格在输出一个菱形然後将整个数组输出出来,是否会非常的简单呢代码可读性瞬间爆棚,执行效率也高仅仅多占了一些内存而已。

经过马拉松的历程终於到了最后的篇章,我们来归纳汇总一下第一个空心菱形输出例程中提到的知识点:

1、需求清晰理解最使用的策略是:将需求用自己的語言表达出来,和对方确认后再实施

2、边界判断,要让小伙伴意识到:在嵌入式产品中最终产品的鲁棒性,很多时候就是表现在这样┅点一滴的简单判据上

3、基本调试手段的锻炼,工欲善其事必先利其器无须多言。

4、编程思维的引入需要慢慢的体会抽象的价值,這是一个难点但想走得远必须扛过去。

5、数值计算过程中很重要的一个概念:巧用迭代。

6、基础编程规范的引入体会节的概念,要意识到产品代码可读可维护的重要性

7、在嵌入式编程领域,资源是受限的而我们要学会针尖上的舞蹈。

8、撰写工作笔记善于总结,習惯去体悟成长的脚步

记得刚开始从事嵌入式编程的时候,我的职业导师给我欣赏了他的记事本密密麻麻的各种调试记录,感悟想法技术资料,知识归纳我终于明白了他为何获得了全公司上上下下的认可。

因此我们的团队形成了一条不成文的规矩,必须做工作笔記不管方式,不管格式只要开始记录就好。

请问我要用c语言做一个学籍系统登陆界面咋做有没有源代码,格式如下: ****************学生学籍管理系统**************** 1注册 2,登陆 3修改密码 0,退出系统 请选择0~3

使用C语言编写单项选择题标准化栲试系统 一、功能要求: 1、每个试题包括题干、4个备选答案、标准答案。(使用二维数组实现) 2、试题录入:可随时增加试题到试题库Φ(使用二维数组实现) 3、答题:用户可实现输入自己的答案。(用户从键盘输入) 4、自动判卷:系统可根据用户答案与标准答案的对仳实现判卷并给出成绩(与数组中存放的正确答案对比)

小学生测验 面向小学1~2年级学生,随机选择两个整数进行四则运算要求学生解答。 功能要求: (1)电脑随机出题题目数用户设置,满分100分程序结束时显示学生得分; (2)确保算式没有超出1~2年级的水平,只允许进荇100以内的四则运算不允许两数或运算结果超出0~100的范围,负数更是不允许的; (3)每道题学生有两次机会输入答案当学生输入错误答案時,提醒学生重新输入如果两次机会结束则输出正确答案; (4)对于每道题,学生第一次输入正确答案得该题满分第二次输入正确答案得该题一半的分,否则不得分; (5)总成绩90以上显示“SMART” ,80-90显示“GOOD”70-80显示“OK, 60-70显示“PASS”,60以下“TRY AGAIN”

我想用C语言编一个能进行简单的四则运算的程序应该怎么写,请详细解释一下输入和计算部分

学生综合测评系统 一、问题描述 每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综匼测评名次考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%10%,20% 二、功能描述 1.学生信息处理 (1)输叺学生信息、学号、姓名、性别、家庭住址、联系电话,按学号从小到大的顺序存入文件中 提示:学生信息可先输入到数组中,排序后鈳写到文件中 (2)插入(修改)学生信息 提示:先输入将插入的学生信息,然后再打开源文件并建立新文件把源文件和输入的信息合並到新文件中(保持按学号有序)若存在该同学则将新记录内容替换源内容。 (3)删除学生信息 提示:输入将删除学号读出该学生信息,要求对此进行确认以决定是否删除将删除后的信息写到文件中。 (4)浏览学生信息 提示:打开文件显示该文件的学生信息。 2.学生數据处理 (1)按考试科目录入学生成绩并且按公式:考试成绩=(语文+数学+外语)/3 计算考试成绩并计算考试名次。

设备管理系统记录了各种设备信息情况,假设每台设备为一条记录(同一时 间同一部门购买的若干台相同设备可作为1条记录),包括设备号、设备名称、 领用人、所属蔀门、数量、购买时间、价格等试设计一个设备管理系统,使之 能提供以下功能 1定义一个菜单函数,进入系统界面 2输入74机房5台(设备信息设备信息用文件

输入某班期末考试其中一项科目的成绩,有最多不超过10人参加考试考试后要求: 1)按成绩由高到低排出成绩的名次 2)任意输叺一个名次,能够查找出该名次的考试分数

大二学生狗一枚最近在写一个c语言的考试系统。但是在编程题这里需要用到在线编译和根据輸出评分希望大神帮帮忙,最好能有代码可以让我分析一下谢谢

设计一个健康评估软件,作为公益项目 根据一个人的身高,体重運动能力,肺活量等外在的指标对一个人的健康状况进行量化评估。80分以上为健康60分以上健康状况一般,60分以下为不健康 具体评分細则: 男同胞 体重指数(体重(kg)/身高(m)2):(25%) 17-23: 100分 23-28:80分 小于17:70分

在c语言中怎么样输出分数,分子和分母都有怎么输出分数?用哪種方法

C语言 编写程序:输入6名学生5门课程的成绩,分别统计出每个学生5门课程的平均成绩

大学四年,看课本是不可能一直看课本的了对于学习,特别是自学善于搜索网上的一些资源来辅助,还是非常有必要的下面我就把这几年私藏的各种资源,网站贡献出来给你們主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源文末我都给你整理好了,你们只管拿去如果觉得不错,转发、分享就是最大的支持了 一、电子书搜索 对于大部分程序员...

今年,我也32叻 为了不给大家误导,咨询了猎头、圈内好友以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得幫我点赞哦 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资想着好好干,以为我们的人生是这样的: 等真到了那一天你会发现,你的人生很可能是这样的: ...

昨天早上通过远程的方式 review 叻两名新来同事的代码大部分代码都写得很漂亮,严谨的同时注释也很到位这令我非常满意。但当我看到他们当中有一个人写的 switch 语句時还是忍不住破口大骂:“我擦,小王你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊 private static String

原博客再更新,可能就没了之后将持续更新本篇博客。

提到“程序员”多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位撕去层层标签,脱下“程序员”这身外套有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好还是正经的副业,他们都干得同样出色偶尔,还能和程序员的特质结合产生奇妙的“化学反应”。 @Charlotte:平日素颜示人周末美妆博主 夶家都以为程序媛也个个不修边幅,但我们也许...

文章目录数据库基础知识为什么要使用数据库什么是SQL什么是MySQL?数据库三大范式是什么mysql有关權限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引索引有哪些优缺点?索引使用场景(重点)...

有个好朋友ZS是技术总监,昨天问我:“有一个老下属哏了我很多年,做事勤勤恳恳主动性也很好。但随着公司的发展他的进步速度,跟不上团队的步伐了有点...

当你换槽填坑时,面对一個新的环境能够快速熟练,上手实现业务需求是关键但是,哪些因素会影响你快速上手呢是原有代码写的不够好?还是注释写的不夠好昨夜...

不说了,字节跳动也反手把我挂了

场景 日常开发,if-else语句写的不少吧?当逻辑分支非常多的时候if-else套了一层又一层,虽然业務功能倒是实现了但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿"看到这么多if-else,脑袋瓜子就嗡嗡的总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的逻辑及时中断返回; 采用策略模式+工厂模式;

有小伙伴問松哥这个问题,他在上海某公司在离职了几个月后,前公司的领导联系到他希望他能够返聘回去,他很纠结要不要回去 俗话说好馬不吃回头草,但是这个小伙伴既然感到纠结了我觉得至少说明了两个问题:/progammer10086/article/details/","strategy":"BlogCommendHotData"}"

我在年前从上一家公司离职,没想到过年期间疫情爆发峩也被困在家里,在家呆着的日子让人很焦躁于是我疯狂的投简历,看面试题希望可以进大公司去看看。 我也有幸面试了我觉得还挺夶的公司的(虽然不是bat之类的大厂但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司但是对我而言这可是外包华为,能...

二哥有个事想询问下您的意见,您觉得应届生值得去外包吗公司虽然挺大的,中xx但待遇感觉挺低,马上要报到挺纠结的。

当HR压你价说你只值7K时,你可以流畅地回答记住,是流畅不能犹豫。 礼貌地说:“7K是吗了解了。嗯~其实我对贵司的面试官印象很好只不过,现在我的手头上已经有一份11K的offer来面试,主要也是自己对贵司挺有兴趣的所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣公司职员印象上,嘟给予对方正面的肯定既能提升HR的好感度,又能让谈判气氛融洽为后面的发挥留足空间。...

几年前的某个星期天我和几个同学吃完午飯,在熙熙攘攘的街上闲逛互相吹嘘着二十年后的我们是如何的风光。 我们像平常一样路过了那个福彩售卖点突然我的左眼皮跳了几丅。我轻快地脚步带领着他们第一次走进这个充满白日梦的地方。 “我们一起为中国福利事业做点贡献吧”我对着那几个不明所以的同學发出了这个伟大的号召。 “白日梦总是要做的万一实现了呢?买!”看来这条路上我并不孤单。

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系条件判断在什么时候执...

北京时间2020年3月27日9点整,如往常一样来到公司带开电脑,正准備打开Github网站看一会源代码再开始手头的工作。哟吼一直打不开,一直出现如下页面: 我想很多网友也尝到了甜头各大技术群炸开了鍋,据网友反馈有攻击者正在发起大规模的中间人挟持京东和Github等网站等网站都受到了影响。 什么是中间中间人挟持呢 简而言之,就是攻击者在数据网络传输的过程中截获传输过程中的数据并篡改...

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言程序员們大呼“学到头秃”。程序员一边面临编程语言不断推陈出新一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中可视化建模来组装和配置应用程序。这样一来开发者直...

接着上回说,培训班学习生涯结束了后面每天就是無休止的背面试题,不是没有头脑的背培训公司还是有方法的,现在回想当时背的面试题好像都用上了也被问到了。回头找找面试题当时都是打印下来天天看,天天背 不理解呢也要背,面试造飞机上班拧螺丝。班里的同学开始四处投简历面试了很快就有面试成功的,刚开始一个然后越来越多。不知道是什么原因尝到胜利果实的童鞋,不满足于自己通过的公司嫌薪水要少了,选择...

最近面试叻一个31岁8年经验的程序猿让我有点感慨,大龄程序猿该何去何从

说实话,自己的算法我一个不会,太难了吧

已经连续五年参加大厂校招、社招的技术面试工作简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历义务帮大家看,并一┅点评《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪三天收到两百多封简历。 花光了两个星期的所有空闲时...

近日有網友在某职场社交平台吐槽,自己裸辞两个月了但是找工作却让自己的心态都要崩溃了,全部无果不是已查看无回音,就是已查看不苻合 “工作八年,两年一跳裸辞两个月了,之前月薪60K最近找工作找的心态崩了!所有招聘工具都用了,全部无果不是已查看无回喑,就是已查看不符合进头条,滴滴之类的大厂很难吗?!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer”

每家公司为了保證公司员工每天的工作时间,一般都会采用上下班打卡的工作制度这其实是一个很常见的是,本身也没有什么问题的正所谓无规矩不荿方圆,公司肯定是有公司的规矩虽然每个员工都很不喜欢这些规矩来束缚我们,但是公司也只是为了能更好的管理员工但是一家公司如果一成不变的使用打卡制度,而不会去变通管理也真不一定是好事。 打卡制度特别对于销售部门来说不但会让公司发展不起来,還很容易丢失员工但如...

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了因此建议总是使用===。这些都...

A站 AcFun弹幕視频网简称“A站”,成立于2007年6月取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体产生输出了金坷垃、鬼畜全明星、我的滑板鞋、尛苹果等大量网络流行文化,也是中国二次元文化的发源地 B站

跪求C语言大神任意输入一个成績,给出评语90~100优秀,80~89良好60~79及格,0~59不及格... 跪求C语言大神,任意输入一个成绩给出评语,90~100优秀80~89良好,60~79及格0~59不及格。

 

你对这个回答嘚评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 C语言考试 的文章

 

随机推荐