大神 我C语言爱看书的我看了无数遍了 可是还是掌

OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;
欢迎您订阅我们的技术周刊
我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,
欢迎分享您的观点,经验,技巧,心得
让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;
本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com
订阅邮件周刊
为什么大神级程序员的C语言代码里到处都是goto?
注意 转载须保留原文链接,译文链接,作者译者等信息。&&
当我学C语言时,老师整天告诉我:“不要使用goto, 这是一个坏习惯, 这种写法很烂,而且很危险!”等等。但是为什么那么多内核程序员那么喜欢用goto呢?在这段linux内核& & 代码里,我觉得可以用简单的一个while替换掉,如:while(condition) {} //或do {} while(condition);注*这段代码来自torvalds的linux内核代码,其实不仅可以使用while,还有很多地方可以使用if () {} else {} 的结构代替,很多内核的其他文件也是如此,如 fs.open& 对此我很不理解,在某些情况下使用goto比while/do-while好吗?如果是的话,为什么呢?注: 这也许从另一个角度诠释了的观点。by: musicmatze来自国外网友的精彩评论:回答一:对于这个例子中,我估计是从原来SMP不安全(non-SMP-safe)的方式改成SMP的方式。使用goto语句对原来的代码改动量最小,引起潜在风险的概率最小。我其实也不赞成你们用这种方式,但我认为绝对不要使用goto也是一种误导。在一个只会向前走,绝不会后退的函数里,使用goto绝对不会引起死循环,而且这种方式绝对是最简单最清楚的跳转方式。(如通过在清理代码和返回错误时使用)by: R..回答二:历史:我们也许记得Dijkstra 在1968年写的 Goto Considered Harmful , 现在快半个世纪过去了。外面已经很少看到goto了。不过我们来分析一下这个例子,一个关于错误处理的,让我们用结构化的语法来写:if (do_something() != ERR) {
if (do_something2() != ERR) {
if (do_something3() != ERR) {
if (do_something4() != ERR) {
...那么,换成goto呢?if (do_something() == ERR)
// |if (do_something2() == ERR) // |
// |if (do_something3() == ERR) // |
// Vif (do_something4() == ERR)
// 使用普通的平铺形式我们看到这段代码都是平级的,不相互依辣的,明显goto的结构更好。by: Dietrich Epp来自国内网友的精彩评论
句话解释“写汇编写惯了”。对于写应用程序的人来说,if,while自然是熟悉的不能再熟悉,但是系统程序员不同,由于要和硬件打交道比较多,经常写汇
编。尤其对于某些大神而言,可能用汇编还习惯些,比如早期的linux内核代码有大量的汇编。汇编里面没有所谓的if,while,基本上就是无条件和有
条件跳转。所以用熟了,习惯使然吧。
16:05其实goto语句的问题,在《代码大全》(Code
Complete)一书中有17.3专门一节详细讲述支持(以Knuth大神为首)和反对(以Dijkstra大神为首)两方的观点。最后作者本人的结论
是:90%情况下用goto都是错的,但少数情况goto确实有效(比如在错误处理中的多重判断,又如两个条件判断和一个else子句的情况),是解决问
题的合理办法。这时候用goto无妨,但应该加注释说明理由。 查到这一节英文网上有:
原文地址:
&热门文章 - 分享最多
&相关阅读 - 心得体会
&欢迎订阅 - 技术周刊
我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;
我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊如何学习 C 语言? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title=",371,879分享邀请回答53150 条评论分享收藏感谢收起tyvj.cn/
类似有很多,北大、北邮这种大学都有类似的网站,上面不仅有题目,还有算法、有答案、有提示,还能直接在网页上做题。刷题可以获得及时反馈,一旦你AC了3道题,那种成就感可以让你继续下去,哈哈。不过除非你兴趣就是算法本身,那么刷30道题基本就可以了,毕竟这种刷题会猛烈地提高算法能力,但是对架构能力的提升几乎没有任何作用,对大多数人来说不建议刷太多。4、非常重要的私货:如果除了做练习题以外没有练习机会,那么请把C语言放一下,快速学习Python(首选)、Lua(次选)、JavaScript(或TypeScript更好)等能够立即实现功能效果的语言。学习好的动态语言有两方面好处:第一:表层来说,能迅速提高逻辑代码的编写能力。用C语言构思半天才能写一点的功能,用动态语言会快速的多,动态语言将我们从内存分配、容器等基本问题中解脱出来,直接实现我们想要的效果。用动态语言实现之后,可以用C语言仿写这些逻辑代码,相当于按图索骥,直达目的。第二:深层来说,较高级的语言对底层的语言编写有强烈的指导意义。我个人在工作中使用C++用了很长时间,但是总感觉遇到瓶颈无法突破。直到我学习了Python,写了一两个比较复杂的工具,从另一个角度突破了逻辑设计的屏障,才感觉到编程水平有了明显提高。第三:在掌握了Lua或Python后,再找资料一边学习一边看Lua和Python的C源码,对提高C语言水平有实质性的帮助。这里举一个简单的例题:一个文件中有很多对ID和字段,这些ID和字段对分别代表另一个文件。而另一个文件内容可能会链接到更深一级的文件。怎样读取这些文件组成一棵树呢?这个问题对能力达到一定水平的人是基础问题,而对于初学者来说可能是一个门槛。这种问题我的建议是用Python或Lua的表、字典来解决,然后理清思路之后,改写为C代码。四、总结写了很多,感觉再写下去个人私货就太多了,并不客观。总之C语言的学习是知识点少、难点多。上面针对初学提供了一些建议,进阶方面写了很多个人的心得体会,希望能给学习C语言的初学者和进阶者提供一些帮助。如何学习C语言这是个挺重要的大问题,读者若有意见和建议,可以讨论交流,有问题我可以修正。11714 条评论分享收藏感谢收起学习C语言的教材 - 阮一峰的网络日志
学习C语言的教材
我的C语言是自学的,这些年看过不少教材。
下面,我对其中一些教材做个点评。
1. How to Think Like a Computer Scientist: C version
这是我读过最易懂的C语言教材。
虽然它只讲解最基本的语法,但是写得特别好懂,深入浅出,读起来不觉得累,而且它还允许免费下载。我认为,这是C语言的首选入门教材。
下载网址:
2. C Primer Plus和C Programming: A Modern Approach
上面这两本,都是著名的C语言初级教材,都是厚厚的大部头。
我通读过它们,感觉都写得不错,都值得推荐。但是因为这两本书定位类似,内容重复,相比之下,我觉得C Primer Plus可能更适合中国读者的思维,更易读一些。
3. C Programming Language (2nd Edition)
这是最著名的C语言书籍。
但是,它不是写给初学者看的,更偏重C语言的编程技巧和算法思维。我读过两遍,还是觉得很多地方没读懂。
4. 国产教材
通常来说,国产教材质量不高,不值得推荐。但是有两本,我想特别提一下。
《零基础学C语言》,康莉等著,机械工业出版社,2009。
这本是我在图书馆里偶然捡起来的,翻了几页,发现是原创的,而且写得比较认真,代码解释详尽,行文错误少,就把它读完了。我认为,在国产教材中,这本书的质量很高,值得推荐。
《Linux C编程一站式学习》
这本书在国产书籍中罕见地采用了GFDL许可证,有在线阅读,可以免费下载。这一点值得高度肯定。
但是,正如前言所说,它的主要资料来源是两本英语教材《How To Think Like A Computer Scientist: Learning with C++》和《Programming from the Ground Up》,以及一些教师的上课讲义,然后拼在一起,做成一本书。所以,造成它的体系比较生硬,缺乏整体感,衔接得不好,很多地方没有做到由潜入深、循序渐进。所以,我觉得这本书不适合初学者,可以当做手册查资料。
5. Beginning Linux Programming
这是我现在正在阅读的书。我看它在Amazon上排名Linux C编程的第一位,就选了它。
它主要讲解如何用C语言调用Linux的系统API,偏重基本概念的解释,我已经读了两章,感觉还不错。
=================================
下面想听听大家的意见。
我现在的C语言,到了这样一个水平:语法已经基本掌握了,可以独立开发一些小程序。下一步,我想进一步提高C语言水平,主要用于Linux开发。
大家能不能推荐一些C语言的中级教材?
Systemd 作为 Linux 的系统启动器,功能强大。
HTTP/2 协议的主要目的是提高网页性能。
春节前,我看到 Nginx 加入了 HTTP/2 的 server push 功能,就很想试一下。
Docker 是一个容器工具,提供虚拟环境。很多人认为,它改变了我们对软件的认识。初学C语言的新手们来看看这个题要怎么解,大神也可以来看看。 - 『编程语言讨论求助区』
- 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn
后使用快捷导航没有帐号?
只需一步,快速开始
请完成以下验证码
请完成以下验证码
查看: 3478|回复: 20
初学C语言的新手们来看看这个题要怎么解,大神也可以来看看。
阅读权限20
发帖求助前要善用【】功能,那里可能会有你要找的答案;
求助软件脱壳或者破解思路时,请务必在主题帖中描述清楚你的分析思路与方法,否则会当作求脱求破处理;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人。
小弟最近再学C语言。看了一小部分的教程。
学了不同类型的变量和常量。和if、while、for循环。于是想自己出一点简单的题来考考自己。基本上都可以编出
今天有朋友问我是否可以用编程来解下面这个题,看题目我认为我刚学的这些知识应该可以解这个题了。
但是....我发现我错了。无敌复杂。我想得头都爆了都不知道怎么解。数学的解法就有一套思路。但也不知道对不
现在来请大家共同研讨一下这个题目。大神会解也请给点思路的提示。
题目如下:
如果用编程的形式解下面的题。要怎么解:
首先,有一对兔子(即2只)。它们每个月可以生一对兔子。
它们生的那一对兔子一个月后成年。又可以生一对兔子。
如果一直那么下去。
一年后兔子的数量为多少?
我觉得就用变量和循环+if应该是可以解到这个题目的。
我就逻辑思维不过关。现在蛋疼中。。
数学的解法应该就是:2+2的2次方+2的3次方......+2的11次方。(也不知道对不对。。汗颜啊。。。)
欢迎新手来讨论,大神来指导...
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
谭浩强的 《C程序设计(第四版)》上貌似有个差不多的&&你可以百度一下
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
这不斐波那契数列小兔子问题么。一个比较经典的例题,不知道你在看什么教程
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
gomyway 发表于
这不斐波那契数列小兔子问题么。一个比较经典的例题,不知道你在看什么教程
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
---------- run ----------
第1月成兔2只,产幼兔2只(幼兔在下月转为成兔!)。总数为4只
第2月成兔4只,产幼兔4只(幼兔在下月转为成兔!)。总数为8只
第3月成兔8只,产幼兔8只(幼兔在下月转为成兔!)。总数为16只
第4月成兔16只,产幼兔16只(幼兔在下月转为成兔!)。总数为32只
第5月成兔32只,产幼兔32只(幼兔在下月转为成兔!)。总数为64只
第6月成兔64只,产幼兔64只(幼兔在下月转为成兔!)。总数为128只
第7月成兔128只,产幼兔128只(幼兔在下月转为成兔!)。总数为256只
第8月成兔256只,产幼兔256只(幼兔在下月转为成兔!)。总数为512只
第9月成兔512只,产幼兔512只(幼兔在下月转为成兔!)。总数为1024只
第10月成兔1024只,产幼兔1024只(幼兔在下月转为成兔!)。总数为2048只
第11月成兔2048只,产幼兔2048只(幼兔在下月转为成兔!)。总数为4096只
第12月成兔4096只,产幼兔4096只(幼兔在下月转为成兔!)。总数为8192只
Output completed (0 sec consumed) - Normal Termination
想着想着,我也发现有点绕乱了,不知道有没有想错。
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
cu29 发表于
---------- run ----------
第1月成兔2只,产幼兔2只(幼兔在下月转为成兔!)。总数为4只
第2月成兔4只, ...
你那个是直接出答案的- -。我想着用编程的形式....
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
这个应该是找规律的吧&&
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
milian520 发表于
先看书,郝斌讲的也不一定全部到位
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
sky_line 发表于
这个应该是找规律的吧
数学就可以用简洁的方法。但是我认为编程还是要按照电脑的思考方式来写。。。
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
gomyway 发表于
先看书,郝斌讲的也不一定全部到位
那些基础知识觉得我已经差不多了。现在就是出这个题难到我了
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz!
Comsenz Inc.我是小白一只,求帮我看看
#define MAX 20
int read_file(HOUSE house[]) {
我是小白一只,求帮我看看
#define MAX 20
int read_file(HOUSE house[]) {
if((fp=fopen("house.txt","rt"))==NULL)
prin... 我是小白一只,求帮我看看#include #include #include #include #define MAX 20 int read_file(HOUSE house[]){
if((fp=fopen("house.txt","rt"))==NULL)
printf("*****库存文件不存在!请创建");
while(feof(fp)!=1)
fread(&house[i],sizeof(HOUSE),1,fp);
if(house[i].name==0)
fclose(fp);}void save_file(HOUSE house[],int sum){
if((fp==fopen("house.txt","wb"))==NULL)
printf("读文件错误!");
for(i=0;i&i
if(fwrite(&house[i],sizeof(HOUSE),1,fp)!=1)
printf("写文件错误!");
fclose(fp);}void main(){
HOUSE house[MAX];
int choice,
sum=read_file(house);
if(sum==0)
printf("并录入基本楼盘库存信息!*****");
sum=append(house,sum);
system("cls");
********楼盘系统********");
1.添加楼盘信息");
2.修改楼盘信息");
3.删除楼盘信息");
4.打印楼盘库存信息");
5.查询楼盘信息");
6.楼盘排行信息");
0.退出系统");
请选择(0-6):");
scanf("%d",&choice);
switch(choice)
case 1:append(house,sum);
case 2:modify(house,sum);
case 3:del(house,sum);
case 4:output(house,sum);
case 5:inquire(house,sum);
case 6:sort(house,sum);
}while(choice!=0);
save_file(house,sum);} 展开 字数不够,我缩减了不重要的代码
全部答案(共1个回答)
* if((fp==fopen("house.txt","w"))==NULL)这里,你打成==了 {
pintf("读文件错误!
");
void save_file(HOUSE house[],int sum){ FILE * if((fp==fopen("house.txt","w"))==NULL)这里,你打成==了 {
pintf("读文件错误!
etun; } fo(i=0;ii
if(fwite(&house[i],sizeof(HOUSE),1,fp)!=1)
pintf("写文件错误!
fclose(fp);}
答: 是用VB还是C?
VB的话直接用UCase(str1)即可.
#define MAXLEN 50
void main()
答: 可以看懂,我也是这样自学C语言的.但编好程序后最好要上机调试,才知道自已所编程序是否正确和实用.
答: 新年好!首先,你必须了解计算机的组成和结构以及操作系统的运作原理,这是基础
如果你想学习开发多线程、WINDOWS应用、动态链接库、WINDOWS组件的话,建议...
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区

我要回帖

更多关于 爱看书的我作文400字 的文章

 

随机推荐