求c语言单片机c语言练习题大神解7,8题 学弟不会问我这个学长也不会啊 天台风好大 坐等 急!!!感谢感谢!

现在的位置:
月薪9k电子工程师:我把单片机玩死了…
首先,自我介绍一下:电子工程师一枚,1986年生,09年毕业,在京工作四年,月薪9K。主要是因为自己比较懒,不愿意做比较累的工作,不然待遇还会更高,不过那样的话生活就没意思了,我喜欢慢慢的享受生活。
之所以把自己的经历写出来,一是无聊,最近项目刚刚做完;二是经常逛贴吧,在年轻人身上经常看到自己当年的影子,所以不希望他们走弯路。那么现在,就让时间回到2009年的夏天。
当时刚从大学毕业,专业是微电子学。严格地说,我的专业是制作芯片,而我现在的工作是应用芯片,已经走偏了。不过没办法,这个专业是学校新开的,各个老师都是学校东拼西凑过来的,那种感觉就像用韭菜和茄子做出来的大拌菜一样,吃起来怪怪的。我到快毕业都没想好该怎么找工作,刚好这个时候宿舍的一个哥们刚刚参加了一个培训班回来。他觉得很好,因为刚好负责培训的张老师来学校讲课,于是跟我说:去MCU起航吧,那里还不错!
我就想无头苍蝇忽然遇到一扇窗户一样,毕业了家也没回,直接背上行李去培训部了。庆幸的是路上并不孤单,班里的同学凯凯、安保和超哥都一起去了。
地点在燕郊的创业大厦,食宿条件很艰苦。住宿的地方是租的一个两居室,里面放满了上下铺,还有其他来参加培训的同学,他们来自各个地方。在之后的几个月里,我和他们结下了深厚的友情。
20个人,分成了四组,每组负责不同的项目。我在第一组,要做一个波形发生器出来;凯凯在第二组,做一个具有IC卡读写功能的智能水表;安保在第三组,做一个带有语音提示功能的温度报警器;超哥在第四组,做一个按键可控的数字电源。
刚刚分到任务我有点晕,因为单片机我都还没摸过,就要做东西,这是不是有点不合适?虽然在大学里学过课程,但完全是理论课,东西都没见过,更别说做东西了。我估计凯凯他们跟我一样心理犯嘀咕,搞不清楚什么状况。但想想之前来参加的宿舍那哥们,他基础跟我差不多,但是他能搞定,我应该问题不大,于是咬咬牙,开始搞了。
第一步,项目需求分析,为期一周。老张(就是张老师,我们暗地里习惯称他为老张)在北京工作了近十年,各个公司都呆过,正规的,不正规的都熟悉,所以要求我们第一步先去做需求分析,知道自己负责的项目在市场上有没有空间,该如何定位,技术指标如何确定,原理框图如何绘制。
于是,我们开始了疯狂的.......上网,是的上网查资料。凡是和波形发生器相关的内容,都下载下来,然后共享。相关的厂家、型号、技术指标、设计方 案、参照代码、市场分析等等等等,就记得那段时间是很疯狂的一段日子。我们像公司员工一样签到、签退,却要比他们更辛苦,因为我们晚上11点才离开实验 室,是每天!大脑像运行到极致的CPU一样,用力的查看着每一条可能有用的信息,每一次呼吸都感觉自己很累,不确定今天能得到什么结果,也不知道明天会怎 么样。于是,我不停的喝水,让自己有更多的上厕所的时间,这样可以多休息一会儿。
每周休息一天,日子很累,但却充实。我已经明显感觉到和波形发生器相关的各种关键词都充斥在我脑子里了,DDS、频率范围、单极性波形、双极性波形、调节精度、输出波形峰值等等。但这些还不够,因为我们得到的这些信息都是搜集来的,并不确定可行性。一切的一切,需要下周一老张审核我们的方案。而我们的心态,也从最开始的畏惧,逐渐被越来越多的疑问代替,然后抑制不住的想知道答案。
终于,开始方案审核了,老张让我们每人挨个讲解了一下自己的需求分析。然后指出不足,顺便夸了几句,给我们增加了点信心。最后给出了完整的方案。
第 二步,开始动手?NO!老张说,去逛逛北京城吧!What?我们愣了.....好吧,最后才知道,原来是去中发电子市场采购。可以这么说,在北京搞电子 的,没有人不知道中发电子市场,你能想到的一切器件,在这都能找到。而且,毕竟巧妇难为无米之炊,我们动手,总要有器件才行啊。所以,根据方案列出器件清 单。面包板有了,是老张提供的,别的东西自己解决。于是,一群菜鸟,选了一个阳光明媚的日子,兴冲冲的来到了中发电子市场,任人宰割.......记得那 天,我买完电阻,路过一家二手仪器仪表的店铺,看着里面慢慢的仪器,不自主的就走了进去。老板以为我是某个学校的学生,随口跟我聊了几句,我问他二 手示波器多少钱,他说看情况,便宜的三四千,好一点的七八千。忽然心里一动,又问他有没有波形发生器,他说有,然后告诉我在哪,怎么用。我很认真的看了很 久,心想这就是我要做的东西啊。
第三步,用汇编语言熟悉单片机的基本功能。是的,你没看错,是汇编语言!就是说,之后的项目也要用汇编去完成。当时没有想明白,但是当我一个月后熟练的掌 握51的底层结构的时候,我已经有点懂了。先从ORG开始,然后是MAIN...再然后MOVE来MOVE去,别人怎么写,我就抄过来,背下来,然后反复 写几遍,竟然就懂了。
从对单片机的一无所知,到跌跌撞撞不小心滚进单片机的大门,就这么发生了。那几天是异常兴奋的,我感觉我就是万能的神,我可以控制一切芯片。每段代码,我写了好多遍,然后又下载了好多遍,每一次成功、失败的过程都激励着我前进。
记得有一天在调试数码管,代码改了一下,重新烧录,结果整个电路忽然就不工作了。我愣了,不至于啊,改动不是很大,就算有问题,也不至于整个电路没反应。
于是我花了一个下午查看代码、检查电路都没找到问题。我问阿海,他瞄了我一眼说,你电路有问题吧...我无语,我的电路我清楚,不应该的。到了晚上,** 点的时候,我想再下载一次试试吧,代码没动,烧录进去,结果忽然就好了。我瞬间愣了一下,放佛想到了什么,马上打开AT89S52的器件手册,第一页的一个参数解决了我的所有疑惑:该芯片的flash区擦写次数为10000次。换句话说,因为多次擦写程序,导致这块单片机的程序存储区寿终正寝,已经快被我玩死了!
现在还记得当时兴奋的感觉,可能是因为一群疯疯癫癫的年轻人凑在一起,所以学习的过程并没有觉得多累,反而很嗨。当时用的ATMEL公司的89S52单片 机,还是用并口线下载的。先从点亮LED开始,然后是蜂鸣器,串口扫描,串口中断,键盘和灯,键盘控制数码管,软件延时,按键消抖等等。随手放几个当年的代码,现在看来,真的是惨不忍睹。
这是个串口扫描的:
MAIN: MOV SP,#60H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV PCON,#00H
MOV SCON,#50H
LOOP: JB TI,FH
SD: CLR RI
MOV A,SBUF
MOV SBUF,A
FH: CLR TI
-------------------------------------
这是个定时器定时的:
LJMP INTER
MAIN: MOV SP,#60H
MOV TMOD,#01H
MOV R2,#0FH
ACALL INTER1
HERE: JMP HERE
INTER1: MOV TL0,#0BCH
MOV TH0,#03CH
INTER: MOV TL0,#0BCH
MOV TH0,#03CH
DJNZ R2,FAN
MOV R2,#0FH
这是个按键控制数码管显示的:
MAIN: CLR P2.0
MOV P1,#0FEH
CJNE A,#0FEH,SAO1
MOV P1,#0FDH
CJNE A,#0FDH,SAO2
MOV P1,#0FBH
CJNE A,#0FBH,SAO3
MOV P1,#0F7H
CJNE A,#0F7H,SAO4
SAO1: ACALL DELAY
CJNE A,#0FEH,PAN1
PAN1: CJNE A,#0EEH,PD1
MOV A,#00H
PD1: CJNE A,#0DEH,PD2
MOV A,#01H
PD2: CJNE A,#0BEH,PD3
MOV A,#02H
PD3: MOV A,#03H
SAO2: ACALL DELAY
CJNE A,#0FDH,PAN2
PAN2: CJNE A,#0EDH,PD4
MOV A,#04H
PD4: CJNE A,#0DDH,PD5
MOV A,#05H
PD5: CJNE A,#0BDH,PD6
MOV A,#06H
PD6: MOV A,#07H
SAO3: ACALL DELAY
CJNE A,#0FBH,PAN3
PAN3: CJNE A,#0EBH,PD7
MOV A,#08H
PD7: CJNE A,#0DBH,PD8
MOV A,#09H
PD8: CJNE A,#0BBH,PD9
MOV A,#0AH
PD9: MOV A,#0BH
SAO4: ACALL DELAY
CJNE A,#0F7H,PAN4
PAN4: CJNE A,#0E7H,PD10
MOV A,#0CH
PD10: CJNE A,#0D7H,PD11
MOV A,#0DH
PD11: CJNE A,#0B7H,PD12
MOV A,#0EH
PD12: MOV A,#0FH
SEND: MOV DPTR,#TAB
MOVC A,@A+DPTR
DELAY: MOV R7,#100
D1: MOV R6,#50
D2: DJNZ R6,D2
DJNZ R7,D1
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,80H,0C6H,0C0H,86H,8EH,7FH
现在看来,写的很简陋。不过对于当时的自己来说,已经很知足了。
当时的我们,没有开发板,只有一块面包板。所有要用的东西,都是自己焊接的。可能耽误了很多时间,但是对后来工作中电路的检查能力,起到了很好的锻炼。因为我们手动焊接每一个LED,每一个电阻,每一个按键,接触了布局布线。所以导致我们对电路的敏感度非常高,在后来的工作中,检查故障电路的时候可以很快推断出故障出现的位置。这是那些整天叫嚣仿真万能的人体会不到的!!!这里还是要说一句,个人观点:初学者少碰protues仿真,什么时候用?当你已经完全学会单片机,在项目中要验证代码和原理可行性的时候再去仿真。想通过protues仿真来学习单片机,这真的是笑话了!
第四步,真的要动手开始做了。玩真的!具体指标记不清了,大概是:4×4矩阵键盘控制,数码管显示,频率10HZ~1000HZ按键可控,三角波、正弦 波、方波可选。难点主要在频率可通过按键控制上,就是说从10到1000,我随便输入一个数字,输出端都要给出相应的频率。频率是通过定时器定时中断控制 的,这就要求有一个算法,能根据输入值,计算出每次频率更新时,需要赋给的定时器初值。这涉及到16位的除法运算,汇编里面的除法器貌似只有8位,不够 用。没办法,我们到处找16位除法的算法,最后用减法循环模拟了一个,效果还不错。
最快的是阿海,波形发生器的每一步都是他先规划好,做出来,然后我们几个再去模仿。当然,不是单纯的复制。矩阵键盘的扫描上,我跟他的算法不一样,DAC0832的驱动电路,我俩也各不相同。但是,不可否认的是,他给我树立了很好的榜样的力量,让我知道,这个方向,这个思路是可行的。
记不清哪一天了,是个下午。我愣愣的把示波器打开,检测输出波形,当看到正弦波断断续续输出的时候,我傻了,原来我真的可以做出来。而那一天,距离我们开始做需求分析,不到45天。
后面的事情,很顺利了。大家的项目陆陆续续都出来,然后坐在一起进行经验交流。还有件事比较重要,就是学习C语言。虽然汇编效率高,但毕竟移植性太差,已经慢慢没落了,而C语言的生命力还很强,很多地方都能用到。
学完C语言,开始接触AVR和430单片机。在51里面摸爬滚打了一个月,可以说,我们是把51揉碎了,一点一点学完的,跟那种自学,仿真,或者看视频的 效果完全不一样。当我拿到430的开发板的时候,我只用了3天时间去熟悉它。前面一天熟悉开发环境和开发软件,后面两天看相关例程。因为我们动手过、实战 过、焊接过、调试过,当我们再去看这些高级单片机的时候,真的是一种轻而易举、水到渠成的感觉。
总结:很多人学51学的很仓促,觉得这是个很基本的东西,快没人用了,简单过一下就行。大错特错!上世纪80年代,intel将8051的内核技术转让给 各个厂家,这才有了现在的各种高级单片机。可以说430和AVR的内核都是51,只是多了一些寄存器和功能模块而已。记得逛一个论坛的时候,一位工作多年 的老工程师说了这样一句话:51,妙用无穷!现在我才有一点体会到这种感觉,可以这样说,如果你能把51单片机吃透,记住,是吃透,市面上的所有单片机, 你都可以信手拈来!
大概是11月份,进入找工作的阶段了。说起来比较丢人,因为我性格上比较内向,面试的时候表现的不是很好,错过了一些机会。找到的第一份工作是在一家医疗 器械的小公司,月薪只有2500,因为当时已经毕业几个月了,不想再花家里的钱,所以有点着急。而且,试用的阶段也是比较戏剧性的。为什么?
公司那边同意给我一个试用的机会,前提是把它们现有产品里面的一个bug改过来,限时一个月。当我打开他们的代码的时候,我乐了!为什么?可能这个问题对于别的新人来说很麻烦,但对我来说,太简单了。因为他们的代码竟然是用汇编语言写的!可能这就是缘分吧。
那个时候的我对汇编熟练到了什么状态?我可以看代码不需要注释!当然现在不行了,毕竟好几年没用了。也很感谢当时项目组的王公,帮我讲解产品的原理图,我才能快速的明白电路原理,另外,程序风格写的非常好。果然,半个月不到,问题解决了,我也顺利入职了。
后面的工作,比我想象的轻松很多。因为公司小,产品单一,所以研发的事情一拖再拖。主要工作就是组装机器、产品配送、故障电路调试、还有售后维修。周末偶 尔回到燕郊培训部,感受一下当初学习的气息,顺便拿几片不要钱的芯片。也会跟找到工作的同学聊聊工作的内容,发现各有搞笑和无奈的地方。
培训部有一点很好,即使你离开了,想要什么资料,它都会帮你找来。记得10年初的时候想学一下cadence这个软件,问MCU起航的朋友有没有相关资 料。结果给我发过来一个2G的系列视频教程,是一个叫于博士的大神制作的视频教程,从原理图到PCB都有,把我乐坏了。因为当时这个教程在网上还没传开, 所以显得很珍贵。
终于,待了不到一年,大概是2010年**月份。做够了文案整理和国标的研究,我感觉到了自己的退化,这不是我应该做的。于是我提出了辞职,裸辞,就是说 还没找好下家。刚好赶上当时换住的地方,一下子交了很多房租和押金,弄得自己很拮据。所以,这里奉劝各位,辞职以前,尽量找好下家,不然的话后果很严重。
总结:1、很多人写程序风格很烂,什么注释也不加。这是很坑人的,我可以负责任的告诉你,就算是自己写的代码,如果没有注释和良好的风格,三个月后,保证你自己也看不懂。这里贴一段当年入职时调试的代码,懂的人自然就懂了,知道写的风格有多好:
;***************************************
keyvalue data 30h
power data 31理疗输出功率变量
time data 32治疗时间存储变量
timepal data 33输出功率定时参数低位
timepah data 34输出功率定时参数高位
timelastset data 35备份用户设置治疗时间
STORE_TIME data 36预热开始定时参数位置值存储空间
jnb keyflag,setbex1 ;有键盘中断进入键盘处理程序,没有则跳转
mov r1,keyvalue
k1: cjne r1,#0feh,k2
跳转到功率增加子程序段
k2: cjne r1,#0fdh,k3
跳转到功率减少子程序段
k3: cjne r1,#0fbh,k4
跳转到时间增加子程序段
k4: cjne r1,#0f7h,k5
跳转到时间减少子程序段
k5: cjne r1,#0efh,setbex1
跳转到onoff子程序段
kout:清除键盘中断标志
播放按键音
; lcall d100ms
lcall d100每秒最多响应3次按键
setb ex1 ;开键盘中断
2、小公司锻炼人,虽然待遇一般,但是接触的东西多。一旦你换到一个新的环境,你会发现你比别人已经优秀太多了。
3、换工作的时候一定要谨慎,尽量找好下家再辞职,不然的话自己很被动。
当时在网上投了很多简历,记得有一天面试回来在公交车上。手机忽然响了,接通以后是一个中年男人的声音:
你会用单片机么,我们这需要单片机工程师,你过来吧!
我乐了,心想这公司招人的方式也太直接了,我就问他:
您那用的是什么单片机啊,51,430还是AVR?
谁知道他说了一句:
你说的都不对,430不是单片机,是DSP!
我愣了,心理纳闷,这是哪路神仙在玩我啊,430用了好几个月,明明是单片机,怎么到他那变成DSP了。直接说他不对吧,肯定不合适,会让人很没面子,于 是问了问面试的地点,第二天就过去了。谁知道这一次,迎接我的,是一个超大的坑!坑爹的公司啊!当然了,这是后话,当时我的愿望还是很美好的。
面试的过程很诡异,现在想想,他貌似没有问我什么技术问题,当时的场景更像是一个传销人员给我**。大致情况就是,他们公司之前是做工程项目的,比如修路 什么的。企业很大,去年的利润是十几个亿。但是是劳动力密集型企业,现在想转做技术密集型,所以准备成立一个部门,进驻电子行业,将来你们都会成为这个部 门的骨干。前期待遇不是很高,月薪只有2500,但是后面部门做起来......可以想象,没经过什么风雨的我,一下子就被那大叔的十几个亿吸引了,满脑 子都是钱,貌似没怎么考虑就答应了。
第二天去他们办公室,心凉了一半。真的是个办公室啊,只有不到20平米,焊接的试验台都没有,只是一个茶几,上面放了一个尖嘴的烙铁。尖嘴烙铁,貌似只有 入门的学生或者修理工人习惯用,正经调试电路的人都是用平口烙铁的。里面三个人,一个叶工负责带头,两个小弟负责帮忙,其中一个人拿出本51的指令集,用 手指着上面一个指令问我这是什么意思,貌似是想考考我。我瞄了一眼,顺嘴一说,他就没话了。虽然过去一年有点懈怠,但基本功还在。
当时貌似是在做一个单片机定时控制继电器的一个设备,想用弱电控制强电的开关。难度不大,主要是安全问题需要注意。据说去之前,两个小弟里面的一个已经做了快半年还没做好,用的还是51单片机。刘工(就是昨天面试我那个)问我:
你擅长哪个单片机,需要多久能搞定?
我看了下他们的原理图,以及需要实现的功能说:
51,430,AVR都能做,十个工作日左右吧。
刘工想了想说:别用51了,用高级一点的单片机,还能练练兵。
我说:那就AVR吧,下载调试也方便。
第二天我就后悔了,不是说做不了。正常的实验环境,是一点问题都没有的,问题是他这里不正常,什么都没有。没有示波器,没有试验台,没有面包板,没有下载线。仅有的一个烙铁还是尖嘴的,还有一些零散的电阻和LED,以及控制电路要用到的器件。
我擦了下冷汗,算了算要用到的器件说:我去趟中发....
下载线我自己学习的时候买了一条,主要用他们提供的一块液晶。AVR单片机控制的,具体型号记不清了,不过底层驱动都写好了,我只负责应用。然后多出来的 几个引脚负责开关控制。总算在第十个工作日搞定了。这个时候,叶工有事请了半个月的假,又发生了一件让我想不到的事.....
貌似聘请叶工的月薪是5K多一些,而我们几个人都是2.5K,然后刘工感觉我的工作能力可以顶替叶工,毕竟这十个工作日我解决了很多问题。而且那两个小弟也开始向我靠拢,于是,刘工私下主动辞退了叶工,这让我们很是诧异,原来商场如战场是真的.....
后面的工作,进入了研发的节奏,这是我想要的。定时控制完了之后,有个项目,是要给一个仓库做一个温度检测系统。仓库很大,所以要用到zigbee技术, 放置许多无线结点,然后数据上传到电脑上。我对zigbee比较感兴趣,于是着重看了很多相关的东西。最后发现,这个技术对应到单片机上,只是一些指令的 控制,毕竟让一个单片机工程师整天研究通信频率、通信协议不太正常。于是刘工申请了几块模块,让我们进行测试。
我选择了mega8做为控制核心,一是调试方便,二是芯片体积小,引脚少用到温度检测上比较合适,第三,mega8上面有SPI接口,直接就能驱动zigbee模块,省得模拟了。
那两个小弟对此一片空白,于是我又去了一趟中发,买了几片mega8,焊接mega8的调试板,还有下载线,杜邦线。回来以后,又找了块黑板,给他们讲解了一下mega8如何使用。戏剧的是,去年这个时候我还在苦逼的学习,今年已经可以给人讲课了。
模块调试的很顺利,一个星期就调试通了,但是越来越感觉那个刘工人品有问题。之前辞掉叶工是一方面,后面许诺的很多福利都拿不到,然后又把销售和研发放在 一个办公室,我一天有三分之一的时间都在听那个销售哥们打电话,根本没办法正常思考,最坑爹的是工资要拖欠三个月才发。反应了很多次,无果。
某天的一个下午,我给他们演示了如何把采集到的温度数据无线接收后,上传到电脑上,然后开始和软件部门的同事商量如何编写上位机收集串口数据的事情。刘工加入了我们的谈话,然后彻底毁了我对他的印象...
软件部的同事之前只会从数据库,或者固定的文件读取数据,这次我把数据发到串口上以后,他们不会采集,或者说他们之前没做过类似的东西。
这个时候,刘工插话了:是不是跟进制有关,换成二进制会不会好一些?
刘工:要不八进制也试一下。
我看了看软件部沉默的同事,说:刘工,这个跟进制没关系,是我们两边现在对接不上。
刘工:真的么,换成十六进制呢?
我无语了,现在也想不起来那天是怎么结束的了,只是记得当时心里就累了,萌生了想走的想法,于是开始投简历。
总结:很多公司习惯返聘一些退休的高级员工,他们回来工作不是为了钱,只是为了找点事情做,所以工资开的很低无所谓。但这对应届生就有一个不好的影响,公 司在招人的时候会说:我们这个德高望重的员工都拿这么点钱,你觉得你可以拿多少? 我相信很多应届生都不知道该怎么回答。
另外,面试的时候千万不要随便相信一些不知名公司吹出来的牛皮,公司利润再多,发不到你手上也没用。而且,如果方便的话,可以适当要求参观下办公地点,一定要清楚地知道会不会拖欠工资。
越往后面试,越会觉得面试很直接。为什么?公司找你来是做项目的,行就是行,不行就是不行。而面试官基本都是懂技术的,几句话就能问出你的深浅,你前面说 的再好听,技术不会别人也很难给你机会。因为你已经不是应届生了,没有培养的意义,所以,我们在工作的路上,一定要学习不止,这样,当机会来的时候,你才 不会眼睁睁的看着它走掉。
简单算了下,在第二家公司只待了三个月,zigbee的接触与一些网络协议是我最大的收获。我想找一个靠谱的公司,让我不用担心饿肚子,同时也能认真做一 些靠谱的研发工作。终于,有一家台资企业愿意给个面试的机会,我把这一年的收获整理了一下,对自己说了声加油,然后就去了!
第二个星期,我拿到了这家公司的offer,月薪5K,五险一金都有。好吧,总算解决温饱了,剩下的日子可能会有些累,但总算是一个成长的过程,很庆幸之 前经历的那一切。最怀念的是当初的培训部,那里教的不光是知识,还有学习的方法。即使有些东西是我不会的,但如果我想去学,借助那里的资源和学习的方法, 我可以最快的速度学会。据说现在已经变成在线辅导了,更适合广大的学员,但已经离我很远了。
原文链接:
搜索爱板网加关注,每日最新的开发板、智能硬件、硬件、活动等信息可以让你一手全掌握。推荐关注!
【微信扫描下图可直接关注】
【上篇】【下篇】
电子工程师指从事各类电子设备和信息系统研究、教学、产品设计、科技开发、生产和管理等工作的高级工程技术人才。一般分为硬件工程师和软件工程师。
RS232 标准是诞生于 RS485 之前的,但是 RS232 有几处不足的地方:接口的信号电平值较高,达到十几 V,使用不当容易损坏接口芯片,电平标准也与TTL 电平不兼容。
对于电子工程师来说,以国际单位制(SI)的标准来测量温度,在测量晶粒热点、增加测量的准确性与加速测量流程方面特别有帮助…
一提到智能家庭,大家可能首先想到的是各种大佬级公司搞的牛逼产品,或者说是创新产品。想想就觉得很复杂,有的用工控机,有的用树莓派,还有的用arduino,不管用什么,都绕不过服务器进行控...
当无尽的加班,停不下来的报表轻轻的抽打着你微贱的身体时,当每月看到工资单后那种忘穿秋裤的寒意袭来之时,你有没有想过,作为一个电子工程师,你到底有着怎样的一种酸爽的体验?
您必须才能发表留言!学c语言该怎么入门? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="0,382分享邀请回答pan.baidu.com/share/link?uk=&shareid=440002应该会觉得挺有意思的,这简直就是编程路上的“脑筋急转弯”!但不要忘记,才开始呢,这书就是想让你开开眼界!如果觉得忍不了上书的话,你也可以看看数据结构与算法经典书籍,值得一看。如果觉得看书有点无聊的话,也可以看看浙大陈越老师的公开课:B站地址:这个阶段最最重要的就是事必躬亲,多练习!有什么不清楚的C语言知识点,记得有空查资料即可。作为一名新人,自然会有很多时候写不出代码,那怎么办呢?那你可以去瞅瞅这个网站:有各种实现代码,供你学习,有各种习题,供你练习!如果还是觉得有点抽象的话,也可以去或者看看,让你充分感受“码形结合”。最后,如果你感兴趣的话,也可以试试:但,这还不是最重要的,最重要的是……17912 条评论分享收藏感谢收起7226 条评论分享收藏感谢收起大一c语言编程问题,求大神解答。。。。。。谢谢 有n个人围成一圈,顺序排号,从第一个人开始(从1-_百度知道
大一c语言编程问题,求大神解答。。。。。。谢谢 有n个人围成一圈,顺序排号,从第一个人开始(从1-
大一c语言编程问题,求大神解答。。。。。。谢谢有n个人围成一圈,顺序排号,从第一个人开始(从1-3报数),,报到三的人退出圈子,求退出顺序
我有更好的答案
#include &stdio.h&#define N 10void main(){
char student[N];//N个人,1表示未退出,0表示已经退出
int out[N];//退出的人的号码记录
int count = -1;//循环计数 0,1,2 &=& 1-3
int num_out = -1;//退出号码记录的数组的下标
memset(student, 1, sizeof(student));//将所有人状态置为1(未退出)
for (int i = 0; i & N && num_out & N - 1; i = ++i % N)
if (1 == student[i] && 2 == ++count%3)
//未退出的人计数到2的人标记退出,并将号码保存到out数组中
student[i] = 0;
out[++num_out] =
//循环输出退出的号码
for (int i = 0; i & N; ++i)
printf(&%d&#92;t&, out[i]+1);
}}PS:刚写的,简单验证过:OK
看不懂X o X(︶.︶)
我的注释太少了?
算了,我等会儿再看看,,说不定能看懂
你能再帮我看一个程序那有问题编译不了麽
#include &stdio.h&#define N 10void main(){
char student[N];&#47;&#47;N个人,1表示未退出,0表示已经退出
int out[N];&#47;&#47;退出的人的号码记录
int count = -1;&#47;&#47;循环计数 0,1,2 &=& 1-3
int num_out = -1;&#47;&#47;退出号码记录的数组的下标
memset(student, 1, sizeof(student));&#47;&#47;将所有人状态置为1(未退出)
for (int i = 0; i & N && num_out & N - 1; i = ++i % N)
&#47;&#47;当num_out=N-1的时候代表退出的数组满了,那就是所有人都退出了,则退出循环
&#47;&#47;i = ++i % N,这个要%N是因为到最后一个人的时候要从头继续数(1,2,...,9,10,1,2,...)
if (1 == student[i] && 2 == ++count%3)
&#47;&#47;未退出的人计数到2的人标记退出,并将号码保存到out数组中
student[i] = 0;
out[++num_out] =
&#47;&#47;循环输出退出的号码
for (int i = 0; i & N; ++i)
printf(&%d&#92;t&, out[i]+1);
}}PS:刚加了两句注释你还有什么问题?我现在要出去吃饭了,等会回来你还没有搞定再帮你看看
好的,那我自己先看看
帮我看一下吧,,写了好长时间,运行结果不对
某班九个人由高到低排好队后,来了一插班生,要求还按身高站队,编程,将该学生安排在合理位置
#include &stdio.h&#include &stdlib.h&int main(){ int i,j,t,k,m =0,a[10]; for (i=0; i & 9;i++) {
printf(&请输入身高:&);
scanf(&%d&, &a[i]); } for (i=0;i&8;i++) {
for (j=0;j&8-i;j++)
if (a[j] & a[j+1])
a[j]=a[j+1];
} } for (i=0; i & 9; i++) {
printf(&%d,&, a[i]); } printf(&请输入插班生的身高:&); scanf(&%d&, &m);&#47;&#47;放到m临时存储 for (i=0;i&9;i++) {
if (m &= a[i] && m &= a[i+1])
&#47;&#47;当比i的数大和比i+1数小时,所以m应该放到i+1位置上
&#47;&#47;先将从i+1开始的数据后移一位,最后将m赋值给i+1
&#47;&#47;即:i+n-1-&i+n,i+n-3-&i+n-2,...,i+2-&i+3,i+1-&i+2,m-&i+1
for (k=9;k&=i+2;k--)
a[k]=a[k-1];
} } for (m=0;m&=9;m++) {
printf(&%d,&, a[m]); } system(&pause&); return 0;} PS:不好意思,之前是在公司食堂吃完饭,回来看人都走了,我也回宿舍了,搞搞9点多才闲着
没事,你能说说我的问题在哪吗
我运行的时候前面的九个人排序都有问题
0-9表示十个人:首先你将插班生身高放到9,if(a[9]&a[i])a[i]=a[9]两个问题:1、a[i]=a[9]这样你直接赋值导致原先i的身高就没有了2、判断条件的话,不是应该比前面大,比后面小才符合条件的吗另外,for(k=i+1;k&=9;k++)a[k]=a[k+1];赋值错误,结果全赋值i的数比如:9人身高排序:9,8,7,6,5,4,3,2,1 插班生身高是5第一次进来,i=0,你直接将[i=0]9赋值[i=1],原先的[i=1]的身高8直接被覆盖成9,然后将[i=1]9又赋值给[i=2],好了原先[i=2]的身高7又被覆盖,结果一轮下来,后面的身高全部被第一个人的身高给覆盖了,外层的循环第一轮,数据就变成了:9,9,9,9,9,9,9,9,9,9,接着循环直接没有意义了
呀,,,好像还真是
可是你写的那个后半部分还是不太懂
恩,我又看了一遍,我懂了,谢谢
还是举个例子吧,假如前九个人0-8身高排序:90,80,70,60,50,40,30,20,10,插班生m:55循环到i=3(55&=60&&55&=50)时符合条件,我要将50放到i=4的位置上,那么我要先将后面的都往后移动一位变成90(i=0),80(1),70(2),60(3),50(4),50(5),40(6),30(7),20(8),10(9),再将55放到i=4的位置上移动一位思路:前面的不动,从i=4后面从最后一位往前都向后一位,自然就把i=4位置空出来了
嗯嗯,,,,我懂了,,
是不是显得我太笨
我以后不会的还可以问你不
可能你接触还不久的原因,而我接触过不少,呵呵!等你以后再看以前,也会感觉其实以前的东西也不是很难的样子。
嗯嗯,或许吧
反正现在我就是太无力
呵呵,编程要想搞的好首先要是有兴趣与干劲,除非你毕业以后不在这行业混,毕竟基础打的好,以后干活上手快(企业要毕业生非常看底子好不好,你才大一,说这个好像有点早,呵呵)
呵呵,,,谢谢你
我不是学计算机专业的,,但还是想学好它
不是计算机相关专业的?对了,大一基本都会开编程课。你想的是学好这门课是吧,学习分子啊,呵呵
我们专业和计算机没多大关系,不学就会挂科的,,,我不想在重修一次
我的一个QQ邮箱(不需加QQ,你有代码问题,直接发邮件,我有时间的话尽量帮你看看)
好的,,谢谢
采纳率:72%
:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位。(要求用指针链表实现) #include&stdio.h&#include&stdlib.h&#define N sizeof(struct student)int main(){struct student{struct student *};struct student *p,*q,a;int n,b=0,i;printf(&请输入n:&);scanf(&%d&,&n);p=q=(struct student *)malloc(N);a.next=p;for(i=0;i&n;i++){q=(struct student *)malloc(N);p-&a=i+1;p-&b=1;p-&next=q;p=p-& }p-&next=a.p=a.for(i=1;i&n;){if(p-&b==1){b++;if(b==3){b=0;p-&b=0;i++;}}p=p-&}printf(&最后出来的是第:&);p=a.for(i=1;i&=n;i++){if(p-&b==1)printf(&%d个人&#92;n&,p-&a);p=p-&}return 0;}
X o X原谅我看不懂你写的
本回答被网友采纳
#include&iostream&using&std::using&std::int&main(){&&&&int&n;&&&&cout&&&请输入n=&&;&&&&cin&&n;&&&&if(n&2)&&&&{&&&&cout&&&n必须大于2!\n请重新输入n=&&;&&&&cin&&n;&&&&}&&&&bool&*&a&=&new&bool&[n+1];&&&&a[0]=&&&&for(int&i=1;i&n+1;i++)&&&&a[i]=&&&&int&x,k=n;x=i=0;//i为每次循环计数变量,x为人员序号,K为剩余人数&&&&while(k!=0)&&&&{&&&&x++;&&&&if(x&n)&x=1;//当人员到达数组尾,序号重设为1&&&&if(a[x])i++;&//&跳过已退出人员&&&&if(i==3)&&&&{a[x]=i=0;k--;}//当数到3时,退出人员设为false,剩余人数减1,i设为0,重新计数&&&&}&&&&cout&&&留下来的人序号为:&&&&x&&&\n&;&&&&delete&[]&a;&&&&cin.get();&&&&cin.get();//等待下一次键击关闭窗口&&&&return&0;}
我的想法是建立一个数组,下标就是人的编号,每遍历3个人,就把当前的元素值设置为0下次报数忽略元素值为0的元素。i表示真实的数组下标,j表示第j个数#include&&stdio.h&#include&&stdlib.h&int&main(){&&&&int&n,&i,&j,&count&=&0;&&&&scanf(&%d&,&&n);&&&&int&*no&=&(int*)malloc((n&+&1)*sizeof(int));&&&&for&(i&=&1;&i&&=&n;&++i)&&&&&&&&no[i]&=&i;&&&&while&(n&-&count&&=&3)&&&&{&&&&&&&&for&(i&=&1,&j&=&1;&i&&=&n;&++i)&&&&&&&&{&&&&&&&&&&&&if&(no[i]&==&0)&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(j%3&==&0)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&printf(&%d&&,&no[i]);&&&&&&&&&&&&&&&&no[i]&=&0;&&&&&&&&&&&&&&&&++&&&&&&&&&&&&}&&&&&&&&&&&&++j;&&&&&&&&}&&&&&&&&printf(&\n&);&&&&}&&&&return&0;}
我刚学,有些符号看不懂
请认真写作业。
我也想认真写,这个不会写啊
这是一道数学题
。。。。。
想了半天都没想出来
其他2条回答
为您推荐:
其他类似问题
c语言编程的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 单片机c语言编程入门 的文章

 

随机推荐