C语言到底能干什么.docx

上传人:b****8 文档编号:9397038 上传时间:2023-02-04 格式:DOCX 页数:100 大小:667.56KB
下载 相关 举报
C语言到底能干什么.docx_第1页
第1页 / 共100页
C语言到底能干什么.docx_第2页
第2页 / 共100页
C语言到底能干什么.docx_第3页
第3页 / 共100页
C语言到底能干什么.docx_第4页
第4页 / 共100页
C语言到底能干什么.docx_第5页
第5页 / 共100页
点击查看更多>>
下载资源
资源描述

C语言到底能干什么.docx

《C语言到底能干什么.docx》由会员分享,可在线阅读,更多相关《C语言到底能干什么.docx(100页珍藏版)》请在冰豆网上搜索。

C语言到底能干什么.docx

C语言到底能干什么

 

C语言究竟能干什么

序言

鉴于现在已经大三了,很多同学很迷茫,自己学的东西到底能做什么,将来自己到底能干什么?

我不想看着同学迷茫的面孔,

特别是几个好兄弟,有几个想学习编程,但又苦苦找不到门路的兄弟,所以想写点东西,希望对大家又点略微的帮助,以尽兄弟我的微薄之力。

很多同学学了C语言之后,可能难免会有所感叹:

这就是C语言!

总是感觉C语言竟然能写出Windows、Linux?

为了解除同学们

的疑惑,也愿为同学们指点编程之道吧。

我写的这些东西采用C语言,计划通过编程实例来讲解C编程的一些知识,让大家对C

能又更深一层的理解和认识。

当然,大家不要指望看了这些之后会写出一个操作系统来,但是我想,如果你认真看了的话,写

一个类似与QQ的聊天程序应该不难。

 

回顾一个自己的学习经历,高二时,有个上大学的表哥,学的是计算机,暑假到他家里玩,不经意间,看到了他的C语言书,

是谭浩强编的那本,是第几版倒是记不起来了。

当时其实都不知道计算机到底是咋回事,那时显示器一般都是CRT的,就认为那个方块的显示器就是电脑的全部,根本就不晓得主机是啥玩意儿。

那次就看了一点C的语法,记了点模模糊糊的东西,好像是知道了有那么个叫循环语句的东西,但也不晓得这东西咋能编出程序来呢。

其实,那之前连键盘都没摸过几次。

再后来,高三时,洛阳市第二次大练习之后,感觉自己的压力重,心情颇为郁闷,就和一个同学去网吧解闷,申请了平生的第一个QQ号,到现在我都用这着,当时不知道申请了多少次,被腾讯公司给忽悠了多少遍,才终于申请到一个,倍感来之不易,虽号不吉利,仍不忍弃之。

高考后,同学们都说该放松放松了,基本都跑到网吧去放松了。

以前去过没去过的,会开机的不会开机的都到网吧了。

以至于大小黑正网吧爆满,机器不够用。

广大学生疯狂通宵。

结果呢,第二天就有某网吧中因人夺机打人致死的消息,于是乎有

关部门就下令网吧不得开放通宵,午夜12点一律关门。

那个时候,也知道了电脑是由主机的,但是不知道主机的两个按钮是干啥用的,不知道哪个是开机键,哪个是复位键,反正

到了网吧,要不电脑是开着的,若不开,把两个按就都按了,电脑自然是会开的,那时纯粹是好奇,感觉电脑挺好玩的。

高考后,没有进入理想的大学,就选择了复读。

复读时,自认为功力已到火候,就没有了百尺竿头更进一步的耐力了,日

练几题,维持水平而已。

闲的时间不再是埋头做题,而是总结得分技巧,看看一些时尚读物,有空时还到阅览室去看看。

由于

暑假对电脑萌生爱意,于是就去找有关电脑的读物读。

学校这方面的书可真是少的可怜,看得懂的就更少了。

唯有《电脑爱好

者》还算能看懂上面的一些汉字,不过都是明日黄花——一年前的过期的了。

当时了看了上面的在互联网上筑巢,感觉做网站

的确很酷,知道在互联网申请免费的空间来放网页。

然对其是何东东尚且不知,只知道按上面说的一步一步做就是了。

书上说

用的申请的,自己就以自己名字的汉语拼音申请了个网址(姑且这么说吧,当时自己根本就没见过域名这个

词):

的10M的空间。

当时这个系统做得非常的不好,反应速度非常慢。

第一次我就在上面放

上了一些个人的信息,不过还是一种成就感自心中犹然而生,使我高兴良久。

后来,又在一期过时的《电脑爱好者》上看到了利用GoogleAdsense赚钱的文章,于是就照书上所说的注册了一个Google帐

户,待审核成功后,我直接把Google提供的广告代码,放到我那个空间上,广告果然显示了,Google账户里还真有点钱了,这

更增加了我学网页制作的信心。

这样了一段时间之后,就不满足空间提供商所提供的功能组件了,因为其反应速度实在是太慢

了,会浪费很多时间,当时又是在网吧,也会花去我好多RMB的。

本来人就穷,都是从饭钱里省出来上网的(想起来,那真是

一段苦涩的日子呀)。

后来注意那个系统旁边有那么一个警示,大概意思是这样的:

如果系统反应速度慢,请先用FrontPage

等网页设计工具设计好后,直接将代码拷过来提交即可。

当时什么也不懂,于是就按照上面说的做,到县城的图书馆里买了一本介绍用FrontPage设计网页的书,花了我三十多块钱,对于那个年代的我来说,可真是大出血了,当时就想一定要把这钱给赚回来。

买了书回去就猛看了一通,可谓是废寝忘食。

到了星期天就没有回家,晚上在网吧通宵了一把。

按照书上的步骤:

开始→程序→FrontPage去启动FrontPage.找了一个晚上,硬是没有找到,甚是郁闷。

也就从那次之后,才慢慢的知道了什么是软件,也知道了微软不是生产电路板的了。

虽然开机都有Microsoft字样,但已经隐隐约约地知道了,这不是电路设计的结果。

后来,在一次一个同学说微软是生产电脑的时候,我理直气壮地说:

微软是生产电脑的,那中国的长城、联系是干嘛的。

想想当时自己就知道了软件与硬件的区别,的确挺牛的,哈哈。

毕竟很多人到了大学还找不到开机按钮的。

知道了FrontPage是软件后,就想着到网吧下载就是了。

到了网吧去下载,当时上网的人下载并不疯狂。

迅雷之类的下载软件也都还处于襁褓之中。

下载纯粹就是IE的下载功能,记得当时点了下载,看到出现的下载对话框上显示“剩余时间约概51小时”,我都差点吐血,随即就点了“取消”。

自己来网吧最长时间也不过8小时(通宵),连一个软件都下载不了,而且自己也没有那么多的上网费。

就这样,学习用FrontPage制作网页的梦想也就破灭了。

后来,和一个上大学的同学(现在在支付宝工作)聊起来,他说他们学习用Dreaweaver设计网页的。

于是就决定再次出血买本Dreamweaver的书,这次话了四十多块钱,没把我给吐死。

还好,在洛阳市第一次演练中,数学考了全市的53名,得了50元钱,将此血口给堵上了,才使我没有损失多少元气,能够活到现在。

到网吧下载Dreamweaver才发现它的安装文件才70多M,真是善哉,善哉!

不到一个小时就能够下载完,时间上还算能说的过去。

于是就彻底弃FrontPage而投Dreamweaver。

买书时不知道软件还有版本,拿着一本3.0的书去操作8.0的软件,错误实在是难免了,很多都做不成书上所说的效果。

如今想起,不免淡笑。

那本Dreamweaver的书中有很多html标记,由于手头上就一本书,又不敢再出血买书,岁看不懂,但仍每天翻之数遍,数月之后,竟然把html的大多数标记给记住了,并且能够手写代码设计写简单的网页,真是天助我也!

懂了html的一些标记后,网页设计对我来说也不是那么羞涩难懂了。

那时在放Google的广告,也不会感到手足无措,不知道放哪合适了。

虽然广告是没有赚到几个银子,倒花了不少钱,但学到的一些知识,总让我洋洋自得,认为这是值得的,多少给自己以慰藉。

 

哎,也许是天意弄人,也许是上天注定……

再次高考,再次落榜,无奈在补报志愿中,选了一个垃圾学校的信息工程专业,因为感觉可能是学计算机的。

(不想提及伤心往事,此段就是简之)

 

高考的再次失利,对我的打击是沉重的,以至于整个大一都经常做噩梦,茶不思,饭不想,身体日趋消瘦。

大一,在苦闷中度过了大一。

刚到大学时,第一月学校不让新生进图书馆。

发下来的书都是通时课的,没有什么实质性、针对性,就想买基本计算机的书看下,希望可以略释我的愁思。

到了校外的小书摊上,看到一本《黑客手册》。

想着学黑客那不酷毙了,而且书也不贵,才四块钱,还带光盘,不过就是过期的了(这也许就是我技术落后别人的原因了吧,老看过期的书)。

那本《黑客手册》我是翻得最烂的了。

最初只是利用上面的工具,用的最多的就是明小子Domain3.5和啊D的注入工具。

当时对那些asp的网站,真是神了,填上网址就可以拿到后台。

哎,当时的网络安全性可真差呀!

我也是由于这个偶然的机会学习了一些黑客技术。

这个时候做网页的水平仍旧是停止不前。

有一次想做一个网页上的登录功能,却不知道怎么实现这个功能,界面出来了,却不知道怎么去处理。

于是就向我那个同学讨教,他说让我学习下asp。

后来图书馆开放了,就借了一大堆asp的图书,猛扑上去,这个时候,知识也像泉水一样涌进我的大脑。

大一第二学期,自己就带个破电脑(此言不虚,那是要多破有多破的)到学校,算是班里早一批有电脑的人士了吧。

有了电脑,就告别了网吧中那乌烟瘴气的学习环境,而且也不用担心时间按的问题了。

从此自己的学习可谓是一日千里,加之电脑超破,经常跟我闹别扭,于是闲暇之时,常常拆卸,摸索修理,对电脑的各个部件也有了一定的了解,为了解决故障,经常到网上查一些故障的解决办法,慢慢地积累多了,就成为经验,就成为技术了。

后来同学陪电脑要我去,电脑有点小毛病也让我去帮忙看下。

给了我很大的自信和很多的学习实践机会,还有很大的面子,在此感谢他们。

到了大二,自己的电脑水平已经是上了一层楼了。

此时拥有的知识有asp、vbscript、javascript、sql、css、xml,这些都是算上编程的东西吧,对网络我也算是颇有研究吧,也懂得传输的一些协议细节与原理。

还有一些Windows系统的一些设置和一些黑客知识,还有一点硬件知识。

大二下学期,算是找了一个所谓的兼职吧,给人维护一个网站和开发新的功能。

为了解决一些问题,我当时可是绞尽脑汁、想方设法,并且有了自己的解决方案,还编程实现了,性能也可以。

用了一点ajax,这个时候也了解了浏览器处理html的原理。

而后,有学习了php、虽然并不深入,然想深入研究,对我来说,未必是件难事。

到了此时,学习遇到了瓶颈,感觉再进展是举步维艰。

就像asp中的有些问题,知道解决方法,但是并不知道原由来。

有些问题也许就是asp.dll的造成的。

因此这个时候就想着学习下底层的东西,以便能清楚地知道计算机运行过程的一些细节,不求甚解,但求了解个大概。

光阴似箭,回首之间,一是大三了,刚好这学期开了《微机原理——基于32位的汇编语言》,加上以前电路知识和其他知识的积累,这门课对我来说并不是太难。

哎哎哎天有不测风云,人有旦夕祸福!

就当我兴趣很浓地学习一些底层动词的时候,身体一向很好的母亲却脑出血,于是回家一个月,母亲仍没有脱离生命危险。

但已经快该考试了,于是就回学校准备考试。

这段时间按真是苦闷的日子,估计也是我这一生中最苦闷的了(现在也是),为了掩盖着该死的苦闷,我拼死的学习底层知识,写代码,希望能把这该死的痛苦给压下去。

黄天不负苦心人,自己的能力是得到了很大的提升。

然上天也故意捉弄人,眼看母亲就快好了,却又把她给带走了。

本来书是假期里照顾妈妈时写的,原想是1、不让自己的水平停滞不前,温故知新(两个月的假期是很长的)

2.帮助一些同学,解决编程上的困惑

3.希望妈妈快点康复

4.让母亲和家里人知道自己一直都很努力,我是好样的

但现在母亲已经能够不在了,所以第三点,就改为原母亲在天之灵得到慰藉,早日放下烦恼,不用惦记我们。

 

C语言的基本语法我是不打算再提了,很多C语言编程的书,就是将一些基本的数据类型、数据结构、语法,然后就是一些数值

计算的实例,大多数都是雷同的,难免有抄袭之嫌,而且页没有多少实用价值。

本书以实用实例作为编程指导,指引大家编写真正实用的程序。

了解到大家对黑客程序、病毒、窗口类程序比较感兴趣,因此我就拿这些实例进行讲解。

基于大家基本都用WindowsXPSP3,我也就在这个系统上把程序调试成功后再给大家讲解。

编程环境,我还是喜欢Visual C++6.0

本书计划从四个大的方面来讲,这四个方面是:

窗口类、文件操作类、网络类、数据库类。

都是时下流行的编程必备技术,也是软件开发者,必须掌握的技术。

中间以实例讲解,逐步学习,相信大家看完后会有很大的提高的。

 

第一章窗口类程序的编写

这一章就先来讲解下窗口类程序的编写。

因为现在程序没有界面,就像人没有脸面一样,而且好的界面更能吸引人。

从基本的界面开始,相信能给大家指明出一条路的,使大家很容易地掌握窗口序的编写。

其实界面设计利用VC6.0的MFC,很容易地制作出来。

这里从底层开始写代码来写界面程序,使大家知道一些底层的东西,为以后学习打下好的基础,相信您学了这些,再用VC的MFC会得心应手的。

 

1.1

用C写的第一个一个窗口程序

作为编程的开始,我们还是以一个HelloWorld来开始我们的学习之旅。

代码如下:

#include

voidmain()

{

printf("HelloWorld!

");

}

这是一个再简单不过的C程序了,只要有点C语言的知识就能够懂的,不过这里估计还有些人,到现在还不知道#include

中的头文件stdio.h到底是什么东西,我就来说下了,stdio.h是一个文本文件,存在于磁盘上的,已VC为例它的位置如下图:

也许你听说过printf()函数是在stdio.h中预定义的,但是你见过其定义的形式没有,没有且看下图

其定义形式,就如图中所示,也许你并不懂前面那些东西是什么,不用担心,以后我会慢慢解释给大家的。

函数是先定义才能使用的,所以stdio.h中定义printf函数,我我们在引用了stdio.h头文件后就可以在程序中调用printf函数了。

上面是在命令行中显示一个“HelloWorld!

”,没什么意思,下面我写一个窗口程序,显示个HelloWorld!

#include

voidmain()

{

MessageBox(NULL,"HelloWorld!

","我的第一个窗口程序",MB_OK);

}

编译运行后如下图:

弹出的是一个对话框,上面有HelloWorld,还有一个标题和一个“确定”按钮。

当然你会说这对话框也算个窗口吗?

这里肯定的告诉你:

是的,对话框是窗口程序的一个子集。

你可能还会这样问,这样一个简单的窗口有啥用呢,其实这样的窗口非常有用,我们在操作计算机的时候,会出现一些警告或提示的对话框,都是基本是这种方法写出来的。

就算是这个很简单,学习本来不就是有易向难,有浅显深奥去的过程吗。

整个效果几乎就是靠一个函数MessageBox的功劳。

这里也先不介绍这个函数了,说些其他的。

其实用C编写一些恶程序,就是把编程环境中所提供的一些函数熟悉了基本就可以了。

用VC来写成序,其中的头文件有很多,定义了很多WindowsAPI函数、数据结构、宏,可以让我们大家运用,通过它们,我们可以快速开发出使用的程序。

这些WindowsAPI在微软的MSDN上查,上面有很多说明,部分还有代码示例。

不会是可以输入函数名,查找相关信息,建议大家用英文版的Library,因为其内容比中文版的全面,英语不好的同学呢,就先看中文了

中文MSDN:

英文MSDN:

到这里,我们就完成第一个有界面程序的编写,你感觉写有界面的程序难吗?

显然不难。

下面看一个向锋和波波感兴趣的程序:

九九乘法

采用命令行形式

#include“stdio.h”

inti=0,j=0;

for(i=1;i<10;i++)

for(j=1;j

printf(“%d*%d=%d\t”,j,i,j*i);

printf(“\n”);

和那个javascript效果都是一样的,所以语言只要学好一样,其他的就很容易旁通的,学习就捡一种学好,不要贪多。

好的,这一节就这样吧,大家先各自了解下微软的MSDN,对以后的学习会有很大的帮助的。

 

1.2第一个真正的窗口程序

上一节中,我们用MessageBox函数轻松地实现了一个对话框窗口,可能你会说,那仅仅是个没有用的对话框而已,是的,只是对话框而已。

我之所以以一个对话框为例呢,是因为我只是想让你知道写一个有界面的程序并不是件难办的事。

明白了这一点后,我们继续。

今天来编写一个真正的窗口程序。

下面就该罗嗦一段了,由于大家以前并没有写过什么窗口程序,写的都是命令行下的,我们知道在命令行下的程序都有一个主函数main,这个函数也就是程序的入口函数。

我们现在用VC6.0来写,而且要写窗口类程序,VC6.0给我们提供了一个专门用作窗口类程序的入口函数WinMain()

这个函数原型是这样的

intWINAPIWinMain(

  HINSTANCEhInstance,

  HINSTANCEhPrevInstance,

  LPSTRlpCmdLine,

  intnCmdShow

);

大家是不是感觉这个函数挺复杂的,有这么几个参数,而像main好像就没有参数。

其实main是有参数,这个向锋和小四是知道了的。

但是main函数的参数是可以省略的,而WinMain是不可以省的。

这里也要对VC6.0的编译模式改下

看下图

依次是“工程”→“设置”→“连接”,在“工程选项”里把console改为windows就可以了。

如果认真学了汇编,或是手写命令编译连接过C程序,就会知道这是干什么的。

Console是控制台的意思,以前我们用mian函数写的程序都是以控制台模式连接的,所以很少会有界面的。

现在我们要写有界面的程序,所以要选Windows(窗口)模式了。

我们写入以下代码,并按照上面说的方法去做,看看结果

#include"windows.h"

intWINAPIWinMain(HINSTANCEhInstance,

HINSTANCEhPreInstance,

LPSTRlpCmdLine,

intnShowCmd)

{

MessageBox(NULL,"WinMain创建的窗口程序","WinMain",MB_OK);

return0;

}

结果如下图:

与第一节中的这段代码代码比较下

#include“windows.h”

voidmain()

{

MessageBox(NULL,"HelloWorld!

","我的第一个窗口程序",MB_OK);

}

两者比较下,后者多了个cmd窗口。

可见用main写的并没有完全脱离命令行呀。

所以以后我们写窗口程序就用winmain了。

好了,转过来,我们来看看WinMain()函数,其中有4个参数

先看下解释(看不明白得先看完):

hInstance:

应用程序当前事例的句柄。

hPrelnstance:

应用程序的先事例的句柄。

对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。

对于一个32的位程序,该参数总为NULL。

lpCmdLine:

指向应用程序命令行的空字符串的指针,不包括函数名。

获得整个命令行,参看GetCommandLine。

nCmdShow:

指明窗口如何显示(是隐藏还是显示,有没有最大化按钮之类的)。

取值可以参考MSDN

这里我相信有一个词大家好应该比较陌生,句柄(HANDLE)是吧。

下面我就来简单的说下

句柄其实就是Windows系统中一个东西的唯一标识。

就是系统中有很多运行的程序或者资源之类的,为了更好的管理使用,Windows系统给它们每人一个ID一样。

懂得网页制作的人应该知道网页中各个元素的ID吧,网页的ID如果重复话可能出现错误。

那么系统的句柄会不会有相同的,那是肯定不会有的了,就和我们的学号一样,系统自动分配每一个模块的句柄,是不会相同的了。

对于句柄大家可以先这样理解着,不用一下子搞懂得。

以后学着学着就明白了。

估计大家对那几个参数的类型改犯迷糊了吧。

其实那几个类型,并不是什么新类型,都是Windows开发人员为了自己和他人编程方便,同过基本的C语言语法定义一种新的结构体,或者是共同体,再者就是枚举类型。

我知道结构体、共同体和枚举类型,很多老师是没有讲到的,因为在书的后边,很多教C的,又是很垃圾的老师,所以不会讲那么快的。

其实结构体这些数据类型,就是通过我们常用的字符、整型、浮点等数据类型构造一个比较复杂的类型而已,举个例子,就是我们知道C没有一个数据类型可以描述一个人吧,那么我构造一个是不是很方便我们编程呢。

我们可以这样构造一个

structPeople

{

intage;//年龄

charsex[2];//性别

intheight;//身高

……

}

我们这样定义以后就可以在我们以后的程序中利用这个数据类型了,Peoplezhangsan;把zhangsan的身高172放到zhangsan.height中。

这样可以方便完成很多工作。

所以结构体是很简单的,还有其他的复杂数据类型也是很简单的,都是有常用的简单的类型来结合到一起构造一个复杂的而已。

这和JAVA定义类是很相似的,java定义个人类,不是可以这样的

publicclassPeople

{

publicintage;

publicstringsex;

publicheight;

……

}

看起来都差不多,而且用法也很相像。

唯一的差别其实就是类可以有方法,而结构体是没有的(经过特殊处理也是可以的,这里不用考虑)。

上面是为了让大家了解下复杂数据类型的定义,罗嗦了一大堆。

下面来看下WinMain中第一个参数的类型HINSTANCE这个只是个结构体而已,实际上和HANDLE这个类型差不多,但是有一点差别,而HANDLE是这样typedefPVOIDHANDLE;定义的,PVOID是什么呢,我们来看下typedefvoid*PVOID;说明PVOID是一个指针,初始指向空(void)。

因此可以知道句柄也是个指针而已。

看着这么复杂原来也只是指针。

这些都可以在微软的msdn上查得到的,而且很详细的

那个第二个LPSTR根据字面上的意思就知道是字符串类型了。

查一查果然是。

大家一定要利用好msdn,很有用的。

本节就到此结束了,主要是说明了一个WinMain函数和结构体的事情,东西也不算太多,大家应该能接受得了吧。

下节就来点复杂点深点的东西,希望大家做好心理准备。

 

1.3窗口程序的编写

 

在来啰嗦之前,希望大家能够做好准备,这一节知识有点多,内容有点长。

但愿大家能够一口气读完,如果一口气读不完,那就换口气接着读。

上节中我们用MessageBox()就实现了一个真正的窗口。

MessageBox()中的原型如下:

IntMessageBox(HWNDhWnd,

LPCTSTRlpText,

LPCTSTRlpCaption,

UINTuType);

参数解释

hWnd所属对话框所属窗口的句柄,如果是NULL,则此对话框不属于任何一个窗口。

lpText对话框窗口的显示内容。

lpCaption对话框窗口的标题。

uType对话框的样式和动作(像是确定按钮,还是取消按钮就是设置这里的)

关于这个函数的细节可以看这里

到此为止,你也算是会了窗口程序的编写,但只是一个开始,不过这已经很好,可能会让你感觉到了C的魅力,也可能会稍微解点C语言能干什么的疑惑。

在开始写代码之前,我有必要把细节和原理先说明下。

Windows下一个窗口创建的过程有以下几个步骤:

1.程序创建一个窗口,首先要向Windows系统注册一个窗口类wndclassex,其实就是定义一个变量,变量的类型是WNDCLASSEX(结构体)。

该结构

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1