标题:试试这样学习C语言
取消只看楼主
sooyahoo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-18
 问题点数:0 回复次数:7 
试试这样学习C语言
初到这个论坛,了解到不少东西(不是学到,因为已经没啥可学了,学习和认识是不同的,区别去看看大仲马的“基督山复仇记”第一册就知道了),比如allegro图形包什么的,减少了我很多麻烦,觉得这里学习的人真多,我准备贡献一下,最近我恰好在整理资料,就开个题目“试试这样学习C语言”,也想知道大家的反馈,每1周到2周我争取来转一圈,写些东西,我的目标是如果你是高中以上智力水平,我就在20-25讲之内让你成为一个,不敢说绝顶高手吧,反正语言类课程你是不用再学了(包括面向对象的,统统可以自学,不费劲的自学)。

   你信吗?这样吧,今天太晚了,我不能再写了,该睡了,如果该贴有10人以上回复,我就解决你们学C语言的烦恼。方法是我利用该贴写一个教程从
printf("hello world"); 写到线性表,高兴就写到二叉树,涵盖1/3数据结构;算你们赚了,我辅导自考和考研的数据结构课程通过率很高的呦,而且不学C语言照样能过。

   多年来我总是在想,这东西会有人学不会吗?
搜索更多相关主题的帖子: C语言 大仲马 基督 面向对象 学习 
2008-04-18 23:52
sooyahoo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-18
得分:0 
呵呵,前两天来还没那么多人呀
别骂了,先说一件事,谭老师是不可以拿来开玩笑的,我遇见他时还不流行签名啥的,只流行鞠躬问好,不然我肯定签一个,这句话是不是说明我们有代沟了?

写,一定写,白天出去一下,晚上回来写,说话算数,不然被人骂。==我
2008-04-26 07:17
sooyahoo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-18
得分:0 
嘿嘿,总是爱骂人
从指针开始吧,每天有空写一点(最近常出去不在电脑旁),到下周写完,以后看情况再说写不写。
共同交流吧,再说我也没说啥,只是说C语言我不用再学了,嘿嘿。

题目:指针
第一节 指针初步
1.1 可以认为指针是个“长整型数”
  注意这里的长整型是带引号的,比如下面程序

1:#include "stdio.h"
2:main()
3:{
4:      long a,b,c;
5:      a=30;
6:      printf("\na->%d",a);
7:      printf("\n&a->%ld",&a);
8:      printf("\ninput b as &a ");
9:      scanf("%d",&b);/*//**躲过b=&a;   b=(int *)&a;也是不可能的*/
10:      printf("\input a via b(value)");
11:      scanf("%d",b);
12:      printf("\nnew value of a->%d\n",a);
13:      printf("Bye Bye");
14:      getch();
15:      getch();
16: }

可参考的运行结果:
1:a->30
2:&a->2293620
3:input b as &a 2293620
4:input a via b(value)456

5:new value of a->456
6:Bye Bye

这个程序(注意编译时去掉里面所有中文字符,不然会出个167....错误)及其修改版本(一会说如何修改)常用来说明指针的“本质”,我们经常说指针就是XX的地址,这个程序说明什么是地址。
第5行 给a任意赋了初值30;
第6行 打印出了a的地址,至此见运行结果 第2行
后来 程序第9行 我把看见的a的地址直接赋值给b  效果见运行结果第3行
然后在程序11行(那个明显的“错误行”) 通过标准的“长整型”变量b给a赋值 见运行结果 第4行,因为现在b的“值”就是&a,而scanf函数只要&a的值就可以了。
程序第12行打印被改变了的a的值。明显是我的输入“456”

至此指针的概念我们说明了一半,即指针就是个“数值”,所以以后可以考虑对这个数值运算,但没有说道的问题就是,指针是个有什么样规则的“数值”呢。
.......yong pin yin xie ,wo shi ge chu zi,ta men deng zhe wo zuo fan ne ,晚上见!....
2008-04-26 17:45
sooyahoo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-18
得分:0 
解释
我刚看了,我最前面的“留言”,他是说我从printf(“hello ”);那个地方写,后来觉得不妥,太冗长了,大家不会需要吧,先从指针写,其它视情况而定吧。
2008-04-26 17:51
sooyahoo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-18
得分:0 
嘿嘿,不敢不敢
首先说我可不是来吵架的,走错了地方不来就是了。
一些问题可不能马上就有答案
比如说01识别问题,往复杂了说就是OCR的算法,挺困难的,工作量也大,往简单了说,如果只是数字的识别,其实也挺复杂,因为基本过程不能省,我刚才写了以下数字0,1,2,3,4,5,6,7,8,9;借鉴ocr的特征比对 可以建立“边角特征”我建议建立“米”字特征,先瘦边,再按一定比例省掉一些笔画,比如“2”下面一横太小了就考虑辨认为“7”,当然,决定多“小”才是“小”的“一定比例”可由矩阵大小和比例决定,(然后要旋转就有些麻烦了比如把5字倒过来写什么的),比较特征,如果我做就把特征库做得大大(数量多)的,算法自然就可以简单了,至于程序嘛,编出来太费功夫,我不至于为了想在这发言就费这么大功夫,嘿嘿,实话,写完这个又会出现那个,你说对不对?
好多人看过Thomas H.Cormen的《算法导论》,我大多数题都有答案,里面很多示例我总是当字典和样板用,没求甚解,惭愧,所以就不抄上来了充当自己做的了,如果大家有全套答案一定要共享呀。
我怎么觉得跟“孔明过江”似的,先来三个问题,吓人,我又不联合你家主公抗曹,费那么大劲干啥?
“交流融通”,我受惠于论坛的一些版块,就想回报一下,别的技术我没啥发言权,就这门还比较熟,要是不欢迎就算了,做个结尾吧。那就是:
上面的例子并没有现指针,我的意思是先要弄清“地址”的概念再谈指针,所以先说这个例子,估计以后发言越来越难,“风声紧,下回又要挨砖”,所以提纲携领的说说得了,省得大意都不完全,例子免了呀!
接下来说说指针,指针大家都说复杂其实指针可以使程序更简单,它可以用来灵巧地处理“复杂数据(成块的数据)”和技巧地使用函数。他的要点就是“抽象”处理复杂数据体现在处理数组上(特别是自定义类型的数组),技巧的使用函数指的是利用函数的指针可以大大的简化编程。
1:指针和普通变量
定义书上都有,但所有的示例只是用来说明指针语法,注意,不是用法。对单个变量来说指针仅用于从函数中带回来一个以上的值,即类似于后来的“引用传递”
2:指针与数组体现了指针处理数据的能力,大部分人都觉得指针与2维数组,指针的指针等等内容比较烦,其实只要掌握一点,嘿嘿,那就是[],对方括号不是“神圣的不可侵犯的类似保留字的东西”,他是运算符呀,他的等效运算是“ *()”,那么对于一维数组来说 a[i]既是*(a+i)既是
“*(i+a)” 就是i[a],不信试试;没错的,oreilly公司的哪本书上就有例子。
那么对于2维数组a[M][N]来说,就好理解多了 a[i][j]既是  "*(a[i]+j)",a[i]当然就不是个“所谓数值了”,它是个地址,或者说指针,那a已经是数组了,那它就是个指针数组,它包括M个指针,
即M个a[i],而a[i]这种指针不是“标准类型”如整形之类的(体现在+-运算的“跨度”上),他是“自定义类型数据”,他的“容量”是N*sizeof(TYPE),(简单说了,想结束本帖,就不画图了)。
如果结合这些想法看看书,是否有助于理解?
3、函数的指针,这可是不能不学的地方,如果想从业这部分内容必学,并且体现“修养”哟。
他体现了指针的另一个能力“抽象”,当然,回调函数,包括C#里的委托,Java里动态代理都是直接使用函数指针的例子,但我要说的就是可以利用“抽象”达到简化编程的目的,这也是广泛运用的。
比如,发帖框旁边的“兔斯基”,怎么动得都有,一页16个,逐个用算法去画太复杂,可以规范一个接口,利用函数的指针  int (draw *)(arg...);然后定义一个结构体数组比如ra_s[M],除了把兔子的坐标之类放进去以外,还有个成员就是这个函数指针,然后你尽可以发明各种画兔子的方法,但有一条,必须符合 int (draw *)(arg...);的标准,然后对ra_s[M]中的函数指针成员赋值(即指向各种画法),
然后遍历ra_s[M],访问函数指针就可以得到各种形态的兔子了。

好,1,2,3都讲完了,本想详细道来,现在匆匆一讲,大家都是很高水平,不用我赘述了,写完只是为了有个交代,别说俺没写。
另外楼上忘了说弄个三维空间干嘛了,本来不想说,但实在忍不住,取坐标中的值?O(1),画轨迹?嘿嘿,算了
886,继续潜水!
2008-04-26 23:13
sooyahoo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-18
得分:0 
画蛇添足
本来说不发言了,还是没忍住,因为觉得关于指针的描述有让人误解的地方。特来解释一二,描述的不清楚是因为篇幅比原来预料的小了。

首先,指针是一个“长整型数”,注意是带引号的,只是指出“数值问题”,他还有“运算问题”,运算要考虑类型问题。

其次,补充一下,指针对于单个变量和函数指针的用途我都说了,唯独忘记说指针对数组的用途,其实很简单,还是“抽象”,比如说对于不同长度的数组要完成相同的“算法”(这词太大,完成相同功能就好了),我们就可以用指针来处理,这么说吧,我直接给结论了,处理数组的范式应该为 :
fun(代表数组首地址的指针,数组的尺寸,其他参数)

指针仅此而已,千万别让课本把你们吓住了,

最后给大家几句话共勉:
一句名言:(忘了谁说的,好象出自《人月神话》)“简单,让人能够读懂的,甚至有错误的程序,比高技巧的,让人读不懂的能正常运行程序有价值”。我认为,此话中肯,切切!!!
C语言很重要,学不好是你没努力,我学C语言时只用谭浩强的课本,每一道例题,习题都是自己做的,并在例题基础上修改使之略有变化,受益良多,C语言到底有多重要:
举例一,我考研究生时没有学习数据结构(我非计算机专业),中科大入学考试数据结构得了90多分吧(据说他们本校有个牛人弄了个98),我的意思是学好后你就没有“实现方法”的障碍,考虑的只是“思路”,那就轻松多了,而很多初学者是“思路”与“实现方法”都不会,两线作战当然困难。
举例二、我做第一个JAVA项目时,没有接触过JAVA,但我把项目做出来只用了15天。理由同上,当然那时我还不会用JAVA的思想,但写个符合JAVA规范的项目不成问题,我弄C#只用了10来天吧,这回是会“OO”了,哈哈。

如果你要学习一门语言,你已经选对了,C语言是不二法门。
我前年做项目,需要设计集成电路,惊奇地发现Verilog-HDL也是类C的,
结论:学好C语言,走遍天下也不怕!!!

有人抱怨为什么不从头开始,因为大家水平都挺高,从头说大家不爱看,就快些结束了!!

结束!
2008-04-30 12:55
sooyahoo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-18
得分:0 
再,多说一句
牛人都不玩计算机软件了。
我的老师:中科大数学系,学士;中科大理论物理,硕士;哲学,博士,现研究古代天文学,讲授哲学与科学史,第一牛人,真的很牛,啥我不懂的道理一讲就透,比如什么叫知识,什么叫技术,知识和技术的关系等等,所以有空多看看哲学书是比较好的,再回过头来看看C语言,数据结构,算法?简直开玩笑。
2008-04-30 13:03
sooyahoo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-18
得分:0 
回复
我可不是看不起编程的,真的,因为我本人也是干这个的,算法,STL,模式....也日看夜看的,我就是说不要将此神圣化,并以此为乐。
你我(一半的我)觉得这些技巧了了不起,但在许多人看来太初级,就像大人看孩子在讨论“跳房子”的技巧。比如说最牛的奖“图灵奖”,图灵是什么人。首先是哲学家、数学家,再给一个光辉的名字:“唐稚松”,某国家顶尖实验室挂着他的像,还穿着大褂呢,你们上网看看他是什么人,有什么建树,就会明白我的意思。

另外我也不否定要努力学习呀,而且我觉得一定要努力,就是,唉,这么说吧“不要光低头拉车,也要抬头看路”。
2008-04-30 14:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-209856-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049184 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved