c c语言是什么语言大神来?

题目描述已知n个学生的学号(8位數)、姓名和Cc语言是什么语言成绩请按照规定输出他们的排名。排序规则:如果成绩不相同按照成绩的降序排列,如果成绩相同按照学号的升序排列。数据保证每个... 题目描述
已知n个学生的学号(8位数)、姓名和Cc语言是什么语言成绩请按照规定输出他们的排名。排序規则: 如果成绩不相同按照成绩的降序排列,如果成绩相同按照学号的升序排列。数据保证每个学生的学号各不相同

输入数据有多組,每组数据占n+1行第一行为学生总人数n(0 < n < = 100000),其余n行包含每个学生的学号、姓名和成绩信息

对于每组数据,输出排序后的学生信息

還可以 ,编写控制台程序

你对这个回答的评价是?

下载百度知道APP抢鲜体验

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

}

提供一个与众不同的思路
对每┅个整数,每3位统计一次1的位数具体是多少,就查上面的表

如果想更快,就建 0 - 15 0 - 31等表格,但要是2的n次幂方便计算。

}

换个角度来问其实是:Cc语言是什么语言在运行之前,得编译才行那Cc语言是什么语言的编译器从哪里来? 用什么c语言是什么语言来写的如果是用Cc语言是什么语言本身來写的,到底是先有蛋还是先有鸡

我们假设世界上不存在任何编译器, 先从机器c语言是什么语言说起看看怎么办。 

机器c语言是什么语訁可以直接被CPU执行不需要编译器。

然后是汇编c语言是什么语言 汇编c语言是什么语言虽然只是机器c语言是什么语言的助记符,但是也需偠编译成机器c语言是什么语言才能执行没办法只能用机器c语言是什么语言来写这第一个编译器了(以后就不用了)。 

汇编c语言是什么语訁的问题解决了就往前迈进了一大步,这时候就可以用汇编c语言是什么语言去写Cc语言是什么语言的编译器我们说这是C编译器的老祖宗。 

有了这个老祖宗就可以编译任意的Cc语言是什么语言程序了,那是不是可以用Cc语言是什么语言本身写一个编译器只要用老祖宗编译一丅就可以了。

OK 这么一层层上来,终于得到了一个用Cc语言是什么语言写的编译器 真是够麻烦的。 

到这个时候之前那个汇编写的Cc语言是什么语言编译器就可以抛弃了。 

当然如果在Cc语言是什么语言之前,已经出现了别的高级c语言是什么语言例如Pascal,那就可以用Pascal来写一个Cc语訁是什么语言的编译器

第一个Pascal的编译器据说使用Fortran写的。而做为第一个高级c语言是什么语言的Fortran它的编译器应该是汇编c语言是什么语言写嘚。

关于编译器这里边有个有趣的传说:

传说Unix 发明人之一的 Ken Thompson在贝尔实验室,大摇大摆的走到任何一台Unix机器前输入自己的用户名和密码,就能以root的方式登录! 

贝尔实验室人才济济另外一些大牛发誓要把这个漏洞找出来,他们通读了Unix的C源码终于找到了登录的后门, 清理後门以后编译Unix , 运行 可是Thompson 还是能够登录进去。

有人觉得可能是编译器中有问题在编译Unix的时候植入了后门, 于是他们又用Cc语言是什么语言偅新写了一个编译器用新的编译器再次编译了Unix, 这下总算天下太平了吧

可是仍然不管用, Thompson 依然可以用root登录真是让人崩溃 !

后来Thompson 本人解开了秘密,是第一个C c语言是什么语言编译器有问题 这个编译器在编译Unix源码的时候,当然会植入后门 这还不够,更牛的是如果你用C c語言是什么语言写了一个新编译器,肯定也需要编译成二进制代码啊用什么来编译,只有用Thompson写的那第一个编译器来编译好了, 你写的這个编译器就会被污染了你的编译器再去编译Unix , 也会植入后门 :-)

说到这里我就想起了几年前的XcodeGhost 事件,简单来说就是在Xcode(非官方渠道下载的)Φ植入了木马这样XCode编译出的ios app都被污染了,这些app就可以被黑客利用做非法之事 

虽然这个XCodeGhost和Thompson的后面相比差得远,但是提醒我们下载软件嘚时候要走正规渠道,从官方网站下载认准网站的HTTPS标准,甚至可以验证一下checksum

可能有人问:我用汇编写一段Hello World都很麻烦,居然有人可以用咜写复杂的编译器这可能吗?

当然可能在开发第一代Unix的时候,连Cc语言是什么语言都没有 Ken Thompson 和 Dennis Ritchie 可是用汇编一行行把Unix敲出来的。   WPS第一版是求伯君用汇编写出来的 Turbo Pascal 的编译器也是Anders 用汇编写出来的,大神们的能力不是普通人能想象得到的 

对于编译器来说,还可以采用“滚雪球”的方式来开发:

还是以Cc语言是什么语言为例第一个版本可以先选择Cc语言是什么语言的一个子集,例如只支持基本的数据类型流程控淛语句,函数调用...... 我们把这个子集称为C0

然后用汇编c语言是什么语言写个编译器,只搞定这个c语言是什么语言的子集C0这样写起来就容易鈈少。

C0这个c语言是什么语言可以工作了然后我们扩展这个子集,例如添加struct指针......  ,把新的c语言是什么语言称为C1 

那C1这个c语言是什么语言嘚编译器由谁来写?   自然是C0

等到C1可以工作了,再次扩展c语言是什么语言特性用C1写编译器,得到C2 

这个过程被称为bootstraping , 中文叫做自举

我昰刘欣,畅销书《码农翻身》作者15年以上开发经验,前 IBM 架构师领导过多个企业应用架构设计和开发工作;洞察技术本质,擅长用故事詓讲解复杂技术

每天仅需4毛钱 加入码农翻身知识星球和我以及来自腾讯、阿里、京东、滴滴、IBM、SAP等各路大牛深度交流技术学习,项目开发编程技术,职业发展......

}

我要回帖

更多关于 c 语言 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信