C语言学习教程
下面,是我整理出来的若干文章,总体上按照三个大的方向进行分类, 一、基础性问题
1、C语言学习:如何由dos向windows转变 2、二级C语言实例解答 3、等级考试:C 程序设计 4、备战C语言上机考试
5、C语言程序设计技巧 6、C语言初级讲座 7、写好C程序的10条秘籍 8、强大的语言――C入门之一 9、强大的语言――C入门之二
二、实例开发 1、用C语言解决鬼谷算题 2、用C语言实现的闹钟程序 3、C 程序开发经典实例之一 4、C 程序开发经典实例之二 5、C 程序开发经典实例之三 6、C 程序开发经典实例之四 7、C 程序开发经典实例之五 8、C 程序开发经典实例之六 9、C 程序开发经典实例之七 10、C 程序开发经典实例之八
三、综合提升 1、C语言:黑客学员必修课之一 2、C语言:黑客学员必修课之二 3、C 程序设计基础之一 4、C 程序设计基础之二 5、C 程序设计基础之三 6、C 程序设计基础之四 7、C 程序设计基础之五 8、C 程序设计基础之六 9、C语言高效编程的的四大绝招(1) 10、C语言高效编程的的四大绝招(2)
C语言学习:如何由dos向windows转变
很多人学C语言很长一段时间了,还不知C究竟能干什么,以为学习c语言没什么用,纯粹是为了应付学校的考试.更有人说\学C语言?别做如此愚蠢的行为了!赶快学C++吧!\这种看法是不对的,不应该把c跟c++之间划起绝对的界限,过分看重c++而把c贬得一无是处,这是很片面的.C++功能虽然强大,但它毕竟是c的\超集\在c++里有哪一处找不到c的影子呢?没有c的支持,c++只能是无本之木。
一般情况下,c++编程方式编写的程序源代码量小,但编译后的代码量较大,运行的速度略低,不过开发时的工作量和工作难度较小;而c编程方式编写的源代码量较大,但可执行的效率高.如果一些对速度要求高,尤其是对硬件操
作较多的程序,大多数还是用c编程方式开发的(用C又比用汇编简单,易于实现).另外,学Win32 C程序设计还有助于更深入地了解Windows 的内幕和Win32 API。
任何的编程语言都是一种工具,学习语言的目是要使用它来编写出实际需要的软件来,而软件作为一个用户程序,运行时要依赖操作系统,大多数人使用什么操作系统,我们就要编写出基于哪一种平台上的程序来.这样,软件才会有更大的市场。
现在市面上出现的有关c语言方面的书大多是教授DOS下的c,上机实习也是在Turbo C 2.0(简称Tc)环境下转来转去.编程环境的单调总使人感到不爽.这也没办法,dos 下的c是最简单的,初学者当然要从最简单的入门啦.连比较有名的计算机专家谭浩强编的书也都是赞成从dos下的c学起的.再说,一个刚刚入门的人想在windows 这样的多进程,多线程的操作系统下用c编程,那似乎又不太现实.(那要了解在windows下,一个win32程序大体上是怎样执行的.要对系统有比较多的了解才行,一个初学者暂时还不具备那么多的知识)但我们的脚步又不能够只停留在dos里,应该积极地从dos向windows转变.在dos的时代,我们可以对dos下的编程迷恋,但现在都是windows横行霸道的时代了,我们就应用c语言编写windows平台上的程序,因时而变,学以致用.是时代使然!如果现在还是dos雄霸天下的话,那我就不会写这篇狗屁不通的文章来遗笑大方了,不被臭鸡蛋扔死才怪呢!
\变法\是大势所趋的了,关键是怎么变,不单单是学习c语言的人如此,就连学c++的人都这样,笔者曾经在QQ上碰到一个学了c++将近一年的小伙,居然问我,他想编一个windows窗口,该怎么下手,如果学一门语言用了一年时间,只是学了一点语法知识,却没有编过一道程序,那实在是一种悲哀.下面我谈谈从dos向windows转变的一些个人见解,(这纯属个人观点,仅供参考,如果您已是高手,完全不必要在此浪费时间):
一.拓宽视野,改变偏见 别老以为c只是dos特有的东西,一提到c语言就认为c只能在dos下编程.其实,这是被tc束缚了意识,我们在学校里平时就只在dos的tc里面用c编程,很少用到\图形模式\整天面对?quot;乌黑黑\的屏幕,也难怪有些人一看到一个用c语言描绘出来的像windows的窗口便以为是c++的手笔.其实,作为一种语言,可以在任何一种平台上编程,只是接口不同而已,只要找到适合该平台的编程工具即可,c语言当然也能在windows下大放异彩.眼界放宽点,改变偏见,必有精彩发现.
二.选择优秀的编程工具. “有好的工具,做起事来就事半功倍”.在dos下我们常用tc或bc(borland c).在windows下可以用c++builder 或者visual c++ 来编程,最好用visual c++ 毕竟是微软的东西嘛!微软一天不垮台,编程者的饭碗就不会掉的啦 ^_^ .再说,windows操作系统是微软出的,其内幕微软是最清楚不过的了,在应用程序接口上,相信vc也是做得最好的.不过用vc++6来编c程序会恨烦的,大家要有心理准备.同时可以选择多种编程工具,例如汇编,可以加强对windows的了解,是成为高手的好方法。
三.加强对windows的了解. 可以说编一个程序,就是用一种语言的语法形式将数据结构和表面的执行过程描述出来.在不同的操作系统下,其程序的执行过程是不同的.我们应该对windows的系统机制最起码有个大体的了解,才有可能编写windows的程序.dos是单进程单线程的系统,进程从头到尾的顺序执行,而windows是多进程、多线程的操作系统,是基于事件的,消息驱动的操作系统.明白这些是在windows下编程必不可少的,多学学它,你会发现windows 和 dos有很多的不同之处。 四.采取灵活多变的学习方法. 在不同的时期,学习不同的东西?
可是有些人学习像word,excel这类操作性极强的办公软件时,总是先看书,看到尾巴忘了头,到上机时却不知所措.这种学习方式是被动的,看这些软件操作的书,里面说的都是具体的操作,不亲手又怎能接受新知识? 五.多进行比较. dos和windows有许多共同和不同的地方,如果是从dos学过来的话,在学习过程中不妨多进行比较,把不同的地方记下,相同的地方可以跳过,这可以快速地了解系统的不同之处,迅速地学到东西!
学习程序设计,我主张\实践->理论->再实践\的方式,在编程的初期,不管你会不会写程序,都应先实践(这里的实,践是指编程工具操作方面的实践),学会操作编程工具.也许有些人会说:\废话!没有理论,又怎么实践?\不错,当你坐在一台电脑面前不知所措时,你就会想方设法使自己学会操作它,主动看书,看联机帮助,请教别人,忙得个\不亦乐乎\这不是变\被动\为\主动\了吗? 边学习边操作,以实践来带动理论的学习,接着达到\理论与实践同步\就可闯过第一关,学会了编程工具的基本操作,可以为以后上机实践打下铺垫.
光学会操作像vc这类的工具还不行,工具是死的,人才是活的,不会编程只能是空操作,你还会说:\废话!没有理论,怎么实践?\的,这时就要学习编程的真功夫了,也就是我说的第二阶段--学\理论\阶段,深入研究前辈们的著作,吸取前人的智慧精华为我所用,扎扎实实打好编程内功,功夫到家了就应该\再实践\将学到的东西运用于实际,编写出我们需要的软件来.学以致用嘛,呵呵~~这种方式总比\先学好语法的条条框框,再上机实践\的效果好得多啦.
关于向windows转变的个人观点就只谈这些,希望初学者早日踏上windows的光明大道!由于我也是一个菜鸟,水平有限,写得不好,还请各位多多包涵!
二级C语言实例解答 C语言牵涉的概念比较复杂,规范繁多,使用灵活,容易出错,不少初学者感到困难,下面通过几个实例的分析来说明c语言学习中容易混淆的几个问题,以期抛砖引玉,对初学者有所帮助。 问题1:下面的程序 int a=3,b=4; char str=’c’;
printf(“%d,%d”,a,b,str);
执行后, 输出结果为: (A)3,4,c (B)3 4 c (C)3,4 (D)程序出错
分析:在格式输出时一般要求格式说明符与输出项相一致,当输出项多余格式说明符时多余的输出项不输出,所以答案为C。
问题2:有下面的程序段
char a[3],b[]=“china”; a=b;
printf(“%s”,a);
则输出结果为:
(A)运行后输出china (B)运行后输出ch (C) 运行后输出chi (D)编译出错
分析:这个题容易错选a??实际答案为d,由于定义了字符数组后,数组名作为数组的首地址,是一个常量,给一个常量赋值的语句是错误的,换句话说,不能用赋值语句将一个字符常量或字符数组直接赋值给一个字符数组,以答案选D。
问题3:下列说明不正确的是:
(A)char a[10]=“china” (B)char a[10],??p=a;p=“china” (C)char ??p;p=“china”(D)char a[10],??p;p=a=“china”;
分析:此题易知A是正确的,D是错误的,对于B、C就很难选择了。有人认为p是一个字符变量,以为把”china”赋给该字符变量是不对的,实际上它是一个指针变量,只能指向一个字符变量或其他字符类型数据,不是把”china”存放到p中(指针变量只存放地址),只是把
“china”的首地址赋给指针变量 p,所以B,C也是正确的。 问题4:下面的程序执行结果是:
main()
{int x[5]={2,4,6,8,10},??p??????pp; p=x; pp=&&p;
printf(“%d”,??(p++)); printf(“%d\\n”,????pp); }
(A)4 4 (B)2 4 (C)2 2 (D)4 6
分析:在此题中p++是后加方式,先输出??p的值,p再自加,pp是二级指针,指向一级指针p,执行第一条输出语句前后,存在下列指向关系: 所以本题应选b
问题5:下列输出语句执行后结果为:
int i=3; printf(“%d”,-i++);
(A)3 (B)4 (C)-3 (D)-4
分析:此题考查运算符的优先级,负号运算符和++运算符同优先级,而结合方向为“自左至右”,即-i++相当于-??i++??,所以先取出i的值3,输出-i的值-3,然后i增值为4,而不是i先增值为4,然后输出-4,所以答案选择C。 问题6:设有以下语句,
struct st {int n; struct st ??next; };
static struct st a[3]={5,&&a[1],7,&&a[2],9,’\\0’},??p;
则以下表达式的值为6的是:
(A)p++→n (B)p→n++ (C)(??p).n++ (D)++p→n
分析:此题也是考查运算符的优先级,→优先级高于++,结合方向为自左至右,而后者结合方向为自右至左,A答案相当于??p++??→n??B答案相当于??p→n??++??所以A、B、C表达式值均为5,D答案相当于++??p→n????自加方式为前加方式,所以其值为6。
上面是我在教学过程中学生一些比较集中的问题,只要认真的体会和总结,加强上机实践,对自己C语言的学习会大有裨益。 等级考试:C 程序设计
计算机等级考试改革后,三级考试由A、B两类改为PC技术、数据库技术、网络技术、信息管理技术四类。其后三类的上机考试内容均为C语言程序设计。
三级上机不同于二级,它只有一道编程题,风险更大。但只要能达到题目的要求,一般都能拿到3分。 参加过考试的人都应该知道一本书――南开大学出版的《全国计算机等级考试?上机考试习题集》,这本书基