C语言学习教程.doc

上传人:飞****2 文档编号:60910017 上传时间:2022-11-19 格式:DOC 页数:98 大小:284KB
返回 下载 相关 举报
C语言学习教程.doc_第1页
第1页 / 共98页
C语言学习教程.doc_第2页
第2页 / 共98页
点击查看更多>>
资源描述

《C语言学习教程.doc》由会员分享,可在线阅读,更多相关《C语言学习教程.doc(98页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C语言学习教程 多数情况下,现在的编程高手都是从学习C 语言入门的,在学校里,计算机相关专业中最基础的课程也包括C 语言,因此,掌握好这门课程对每一位立志成为优秀程序员的初学者来说是大有裨益的!另外,对想通过参加全国计算机等级考试获得证书的同学来说,学好C 语言也非常关键。 下面,是我整理出来的若干文章,总体上按照三个大的方向进行分类,希望能好好阅读,相信对你是很有帮助的!一、基础性问题(点击下面文字链接即可打开页面) 1、C语言学习:如何由dos向windows转变 2、二级C语言实例解答 3、等级考试:C 程序设计 4、备战C语言上机考试 5、C语言程序设计技巧 6、C语言初级讲座 7、写

2、好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 程序设计基础之

3、三 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+编程方式编写的程序

4、源代码量小,但编译后的代码量较大,运行的速度略低,不过开发时的工作量和工作难度较小;而c编程方式编写的源代码量较大,但可执行的效率高.如果一些对速度要求高,尤其是对硬件操作较多的程序,大多数还是用c编程方式开发的(用C又比用汇编简单,易于实现).另外,学Win32 C程序设计还有助于更深入地了解Windows 的内幕和Win32 API。任何的编程语言都是一种工具,学习语言的目是要使用它来编写出实际需要的软件来,而软件作为一个用户程序,运行时要依赖操作系统,大多数人使用什么操作系统,我们就要编写出基于哪一种平台上的程序来.这样,软件才会有更大的市场。现在市面上出现的有关c语言方面的书大多是教授

5、DOS下的c,上机实习也是在Turbo C 2.0(简称Tc)环境下转来转去.编程环境的单调总使人感到不爽.这也没办法,dos 下的c是最简单的,初学者当然要从最简单的入门啦.连比较有名的计算机专家谭浩强编的书也都是赞成从dos下的c学起的.再说,一个刚刚入门的人想在windows 这样的多进程,多线程的操作系统下用c编程,那似乎又不太现实.(那要了解在windows下,一个win32程序大体上是怎样执行的.要对系统有比较多的了解才行,一个初学者暂时还不具备那么多的知识)但我们的脚步又不能够只停留在dos里,应该积极地从dos向windows转变.在dos的时代,我们可以对dos下的编程迷恋,

6、但现在都是windows横行霸道的时代了,我们就应用c语言编写windows平台上的程序,因时而变,学以致用.是时代使然!如果现在还是dos雄霸天下的话,那我就不会写这篇狗屁不通的文章来遗笑大方了,不被臭鸡蛋扔死才怪呢! 变法是大势所趋的了,关键是怎么变,不单单是学习c语言的人如此,就连学c+的人都这样,笔者曾经在QQ上碰到一个学了c+将近一年的小伙,居然问我,他想编一个windows窗口,该怎么下手,如果学一门语言用了一年时间,只是学了一点语法知识,却没有编过一道程序,那实在是一种悲哀.下面我谈谈从dos向windows转变的一些个人见解,(这纯属个人观点,仅供参考,如果您已是高手,完全不必

7、要在此浪费时间):一.拓宽视野,改变偏见别老以为c只是dos特有的东西,一提到c语言就认为c只能在dos下编程.其实,这是被tc束缚了意识,我们在学校里平时就只在dos的tc里面用c编程,很少用到图形模式,整天面对?quot;乌黑黑的屏幕,也难怪有些人一看到一个用c语言描绘出来的像windows的窗口便以为是c+的手笔.其实,作为一种语言,可以在任何一种平台上编程,只是接口不同而已,只要找到适合该平台的编程工具即可,c语言当然也能在windows下大放异彩.眼界放宽点,改变偏见,必有精彩发现. 二.选择优秀的编程工具.“有好的工具,做起事来就事半功倍”.在dos下我们常用tc或bc(borla

8、nd c).在windows下可以用c+builder 或者visual c+ 来编程,最好用visual c+ 毕竟是微软的东西嘛!微软一天不垮台,编程者的饭碗就不会掉的啦 _ .再说,windows操作系统是微软出的,其内幕微软是最清楚不过的了,在应用程序接口上,相信vc也是做得最好的.不过用vc+6来编c程序会恨烦的,大家要有心理准备.同时可以选择多种编程工具,例如汇编,可以加强对windows的了解,是成为高手的好方法。三.加强对windows的了解.可以说编一个程序,就是用一种语言的语法形式将数据结构和表面的执行过程描述出来.在不同的操作系统下,其程序的执行过程是不同的.我们应该对w

9、indows的系统机制最起码有个大体的了解,才有可能编写windows的程序.dos是单进程单线程的系统,进程从头到尾的顺序执行,而windows是多进程、多线程的操作系统,是基于事件的,消息驱动的操作系统.明白这些是在windows下编程必不可少的,多学学它,你会发现windows 和 dos有很多的不同之处。 四.采取灵活多变的学习方法.在不同的时期,学习不同的东西?可是有些人学习像word,excel这类操作性极强的办公软件时,总是先看书,看到尾巴忘了头,到上机时却不知所措.这种学习方式是被动的,看这些软件操作的书,里面说的都是具体的操作,不亲手又怎能接受新知识?五.多进行比较.dos和

10、windows有许多共同和不同的地方,如果是从dos学过来的话,在学习过程中不妨多进行比较,把不同的地方记下,相同的地方可以跳过,这可以快速地了解系统的不同之处,迅速地学到东西! 学习程序设计,我主张实践-理论-再实践的方式,在编程的初期,不管你会不会写程序,都应先实践,(这里的实践是指编程工具操作方面的实践),学会操作编程工具.也许有些人会说:废话!没有理论,又怎么实践?不错,当你坐在一台电脑面前不知所措时,你就会想方设法使自己学会操作它,主动看书,看联机帮助,请教别人,忙得个不亦乐乎,这不是变被动为主动了吗? 边学习边操作,以实践来带动理论的学习,接着达到理论与实践同步,就可闯过第一关,学

11、会了编程工具的基本操作,可以为以后上机实践打下铺垫.光学会操作像vc这类的工具还不行,工具是死的,人才是活的,不会编程只能是空操作,你还会说:废话!没有理论,怎么实践?的,这时就要学习编程的真功夫了,也就是我说的第二阶段-学理论阶段,深入研究前辈们的著作,吸取前人的智慧精华为我所用,扎扎实实打好编程内功,功夫到家了就应该再实践,将学到的东西运用于实际,编写出我们需要的软件来.学以致用嘛,呵呵这种方式总比先学好语法的条条框框,再上机实践的效果好得多啦.关于向windows转变的个人观点就只谈这些,希望初学者早日踏上windows的光明大道!由于我也是一个菜鸟,水平有限,写得不好,还请各位多多包涵

12、!二级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 a3,b=“china”;a=b;printf(“%s”,

13、a); 则输出结果为:(A)运行后输出china (B)运行后输出ch (C) 运行后输出chi (D)编译出错 分析:这个题容易错选a?实际答案为d,由于定义了字符数组后,数组名作为数组的首地址,是一个常量,给一个常量赋值的语句是错误的,换句话说,不能用赋值语句将一个字符常量或字符数组直接赋值给一个字符数组,以答案选D。 问题3:下列说明不正确的是: (A)char a10=“china” (B)char a10,?p=a;p=“china” (C)char ?p;p=“china”(D)char a10,?p;p=a=“china”; 分析:此题易知A是正确的,D是错误的,对于B、C就很难

14、选择了。有人认为p是一个字符变量,以为把”china”赋给该字符变量是不对的,实际上它是一个指针变量,只能指向一个字符变量或其他字符类型数据,不是把”china”存放到p中(指针变量只存放地址),只是把“china”的首地址赋给指针变量 p,所以B,C也是正确的。 问题4:下面的程序执行结果是: main()int x5=2,4,6,8,10,?p?pp;p=x;pp=&p;printf(“%d”,?(p+);printf(“%dn”,?pp); (A)4 4 (B)2 4 (C)2 2 (D)4 6 分析:在此题中p是后加方式,先输出?p的值,p再自加,pp是二级指针,指向一级指针p,执行第

15、一条输出语句前后,存在下列指向关系: 所以本题应选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 stint n;struct st ?next;static struct st a3=5,&a1,7,&a2,9,0,?p; 则以下表达式的值为6的是:(A)p+n (B)

16、pn+ (C)(?p).n+ (D)+pn 分析:此题也是考查运算符的优先级,优先级高于,结合方向为自左至右,而后者结合方向为自右至左,A答案相当于?p?n?B答案相当于?pn?所以A、B、C表达式值均为5,D答案相当于?pn?自加方式为前加方式,所以其值为6。 上面是我在教学过程中学生一些比较集中的问题,只要认真的体会和总结,加强上机实践,对自己C语言的学习会大有裨益。等级考试:C 程序设计计算机等级考试改革后,三级考试由A、B两类改为PC技术、数据库技术、网络技术、信息管理技术四类。其后三类的上机考试内容均为C语言程序设计。三级上机不同于二级,它只有一道编程题,风险更大。但只要能达到题目的

17、要求,一般都能拿到3分。 参加过考试的人都应该知道一本书南开大学出版的全国计算机等级考试?上机考试习题集,这本书基本上包含了所有的上机考试题目类型。这本书里一共有100道题,都很经典。但也许有人会觉得太多了,没时间看完所有的题目。下面我给大家介绍一个复习技巧。简化问题每道试题的程序都很长,而且涉及的知识点很多。实际上,在考试时看完全部程序并没有必要。每次只用把主要精力放在子程序的编制上,认真思考其“功能要求”。所以平时我们只用关注需要编制的子程序。试题归类要学会找出题目之间的规律,复习起来就会事半功倍。在一百道题目中,实际上只需要仔细分析其中的二十多道题就足够了,其他的只用看一下就行。因为大部

18、分的题目都是类似的,总结出规律来之后,我们可以举一反三。例如下面两类题目:例1. (占题库10%)已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额单价数量可计算得出。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OU

19、T10.DAT中。程序:void SortDat( )int I,J;PRO xy;for (I=0;I100;I+)if (strcmp(sellI.dm,sellJ.dm)sellJ.je)改为:else if (sellI.je= =sellJ.je)改为:if (strcmp(sellI.mc,sellJ.mc)130|*pf*11%256=A&*pf=Z)|*pf*11%256=1)printf(s ,argvI);argc; 命令行参数用的最多还是在诸如DIR A:等之类带有盘符、路径或文件名这样的命令行中,所以说灵活处理这一类参数才能有效地提高程序的运行效果。譬如DIR命令,其后

20、可以是盘符,可以是路径,也可以是文件名,如何区分这一参数呢?请看下例(此程序模拟DIR命令,程序要求在命令行输入一个参数:盘符或路径或文件名,若无参数或参数多于一个都将取默认的参数“*.*”)。*功能:模拟DIR命令进行处理命令行参数*/includeincludeincludeinchludeint j,num=0;char ss20,path50,path250;void main (int argc,char *argv)struct ffblk f;int done;if(argc=2) /*取命令行参数到数组中*/ strcpy(ss,argv1);elsestrcpy(ss,*.*

21、); /*给数组赋值缺省参数*/if (ssstrlen(ss)1=|(ssstrlen(ss)1=:)strcat(ss,*.*); /*若参数为路径或盘符,则加上*.*/getcwd(path1,50); /*取当前路径*/if (chdir(ss)=0) /*判断参数是否为路径*/strcat(ss,*.*); /*若路径末没有带,则加上*.* */ chdir(path1); /*恢复原来路径*/strcpy(path2,ss);for(j=strlen(path2);j0;j)/*提取参数中的路径到path2 */if(path2j=)|(path2j=:)path2j1=0;got

22、o senull;path20=0;senull:if(strlen(path2)=0) /* 若给出的参数中没带路径,则取当前路径*/strcpy(path2,path1);printf(n*模拟DIR*n 命令目录路径s,path2);done=findfirst(ss,f,55); /*查找第一个配匹的文件*/j=1;while(!done)if (f.ff_attrib!=0x10) /* 若文件属性不是目录 */printf(n 15s 20ld,f.ff_name,f.ff_fsize);elseprintf(n 11s ,f.ff_name);num;j;if(j=23)prin

23、tf(n More (按任意键继续);getch();j=0;printf(n (目录路径s),path2);done=findnext(f); /*查找下一个配匹的文件*/printf(n 当前目录中总共有d个文件.n,num); C语言初级讲座我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的说明可以包括三个方面:?数据类型?存储类型?作用域在本讲中,我们只介绍数据类型说明。其它说明在以后陆续介绍。所谓数据类型是按被说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。 1.基本

24、数据类型基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。2.构造数据类型构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种: ?数组类型?结构类型?联合类型3.指针类型指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。4.空类型在调用函数值时,通常应向调用者返回一个函数值。这个返

25、回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明,例如在例题中给出的max函数定义中,函数头为: int max(int a,int b);其中“int ”类型说明符即表示该函数的返回值为整型量。又如在例题中,使用了库函数 sin,由于系统规定其函数返回值为双精度浮点型,因此在赋值语句s=sin (x);中,s 也必须是双精度浮点型,以便与sin函数的返回值一致。所以在说明部分,把s说明为双精度浮点型。但是,也有一类函数,调用后并不需要向调用者返回函数值, 这种函数可以定义为“空类型”。其类型说明符为void。在本讲中,我们先介绍基本数据类型中的整型、浮点型和字符型。其余类型

26、在以后各讲中陆续介绍。对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,取值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先说明后使用。整型量整型量包括整型常量、整型变量。整型常量就是整常数。在C语言中,使用的整常数有八进制、十六进制和十进制三种。整型常量1.八进制整常数八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为07。八进制数通常是无符号数。以下各数是合法的八进制数: 01

27、5(十进制为13)0101(十进制为65)(十进制为65535)以下各数不是合法的八进制数: 256(无前缀0) 03A2(包含了非八进制数码)-0127(出现了负号)2.十六进制整常数十六进制整常数的前缀为0X或0x。其数码取值为09,AF或af。以下各数是合法的十六进制整常数:0X2A(十进制为42)0XA0 (十进制为160)0XFFFF (十进制为65535)以下各数不是合法的十六进制整常数: 5A (无前缀0X)0X3H (含有非十六进制数码)3.十进制整常数十进制整常数没有前缀。其数码为09。以下各数是合法的十进制整常数:237 -568 65535 1627以下各数不是合法的十进

28、制整常数:023 (不能有前导0)23D (含有非十进制数码)在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。4.整型常数的后缀在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为065535,有符号数为-32768+32767。八进制无符号数的表示范围为0。十六进制无符号数的表示范围为0X00XFFFF或0x00xFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。例如:十进制长整常数 158L (十进制为158) L (十进制为-)八进制长整常数 01

29、2L (十进制为10) 077L (十进制为63)L (十进制为65536)十六进制长整常数 0X15L (十进制为21) 0XA5L (十进制为165)0X10000L (十进制为65536)长整数158L和基本整常数158 在数值上并无区别。但对158L,因为是长整型量,编译系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2 个字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。例如: 358u,0x38Au,235Lu 均为无符号数。前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进

30、制无符号长整数A5,其十进制为165。写好C程序的10条秘籍神乎其技,惟C程序,功到自成,十大建议! 1、汝应频繁催动lint工具,据其语法声明修习内力,此事皆因lint之思虑决断实远在君上。 2、不可依随NULL指针,如若不然,混沌痴颠必俟君于彼岸。 3、纵有天赋大智慧,知晓其事无碍,汝亦当尽数强制挪移函数参数为原型所期之数据类型,以免一时疏忽,致使数据类型向汝讨还血债。 4、若头文件未于函数原型之中声明返回值类型,汝当亲为此事,更须谨慎再三,以防不测降临汝身。 5、汝须亲核字符串、数组操作之越界与否。古之圣人有言: 尝祈门人对答“然也”,不意门人答曰“吾了然于胸无须多虑尽请宽心他日趋庭必当

31、重谢”所期者短,所获者长,此于数组,实最险要处也。 6、若函数声明内提及,于异常时将返回错误代码云云,汝当谨慎校核该返回值。或有校核语句使汝之代码增大数倍,令汝之手指因敲键而痛楚莫名之事,汝亦当如此。不然,汝固以为此异常之事难得一见,上苍亦必借此惩戒汝之傲慢。 7、汝应研习库函数,不当亲笔重写之。如是,汝之代码必短小易读,汝之心境必清爽恬淡。 8、纵汝不愿,汝亦应借括号、缩进之属,使汝之代码间架清晰,可为后者借鉴。汝之大智慧施于决疑解难则可,施于敷设谜团、淆乱文体则万万不可。 9、外部标识符之前六字符当与众不同。此律法看似粗陋,和者寥寥,然其效用自能延续永远。汝若不从此言,他日,汝欲连接程序于

32、旧作之上时,必抓耳挠腮、蓬头垢面,狼狈之相尽现矣。 10、或有族类,大言炎炎,云“普天之下,莫非VAX”。于此等异端,汝当摒弃之、断绝之、远避之。更有异人,笃信魔道,以为纵汝所用电脑频繁换代,汝之程序亦能长久适用。汝亦不可与此类恶人来往,谨记谨记。 强大的语言C入门之一一、C语言的特点 C 语言是美国的Dennis Ritchie在1972年设计发明的。它由早期的编程语言BCPL( Basic Combined Programming Language) 发展演变而来。C 语言之所以发展迅速,成为最受欢迎的语言之一,主要因为它具有强大的功能。归纳起来,C 语言具有下列特点: 1C语言是“中级语言” 它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 2C语言是结构式语言 所谓结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便地调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 3C语言功能齐全 C 语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C 语言也具有强大的图形功

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁