软件工程-C语言-C语言学习教程_第1页
软件工程-C语言-C语言学习教程_第2页
软件工程-C语言-C语言学习教程_第3页
软件工程-C语言-C语言学习教程_第4页
软件工程-C语言-C语言学习教程_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言学习教程.txt43风帆,不挂在桅杆上,是一块无用的布;桅杆,不挂上风帆,是一根

平常的柱;理想,不付诸行动是虚无缥缈的雾;行动,而没有理想,是徒走没有尽头的路。

44成功的门往往虚掩着,只要你勇敢去推,它就会豁然洞开。C语言学习教程

多数情况下,现在的编程高手都是从学习C语言入门的,在学校里,计算机相关专业中

最基础的课程也包括C语言,因此,掌握好这门课程对每一位立志成为优秀程序员的初学者

来说是大有裨益的!另外,对想通过参加全国计算机等级考试获得证书的同学来说,学好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程序开发经典实例之七

10sC程序开发经典实例之八

三、综合提升(点击下面文字链接即可打开页面)

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又比用汇编简单,易于实现).另外,学Win32C程序设计还有助于更深入地了解

Windows的内幕和Win32API,

任何的编程语言都是一种工具,学习语言的目是要使用它来编写出实际需要的软件来,而

软件作为一个用户程序,运行时要依赖操作系统,大多数人使用什么操作系统,我们就要编写

出基于哪一种平台上的程序来.这样,软件才会有更大的市场。

现在市面上出现的有关c语言方面的书大多是教授DOS下的c,上机实习也是在TurboC

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或be(borlandc).在windows

下可以用c++builder或者visualc++来编程,最好用visualc++毕竟是微软的东西嘛!

微软•天不垮台,编程者的饭碗就不会掉的啦,,再说,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:下面的程序

inta=3,b=4:

charstr=,c';

printf("%d,刎”,a,b,str);

执行后,输出结果为:

(A)3,4,c(B)34c

(C)3,4(D)程序出错

分析:在格式输出时一般要求格式说明符与输出项相一致,当输出项多余格式说明符时多余

的输出项不输出,所以答案为C。

问题2:有下面的程序段

chara[3],b[]="china";

a=b;

printf("%s",a);

则输出结果为:

(A)运行后输出china(B)运行后输出ch(C)运行后输出chi(D)编译出错

分析:这个题容易错选a??实际答案为d,由于定义了字符数组后,数组名作为数组的首地址,

是一个常量,给一个常量赋值的语句是错误的,换句话说,不能用赋值语句将一个字符常量

或字符数组直接赋值给一个字符数组,以答案选D。

问题3:下列说明不正确的是:

(A)chara[10]="china"(B)chara[10],??p=a;p="china"(C)char??p;p="china”

(D)chara[10],??p;p=a="china";

分析:此题易知A是正确的,D是错误的,对于B、C就很难选择了。有人认为p是一个字符

变量,以为把“china”赋给该字符变量是不对的,实际上它是一个指针变量,只能指向一个

字符变量或其他字符类型数据,不是把“china”存放到p中(指针变量只存放地址),只是

“china”的首地址赋给指针变量p,所以B,C也是正确的。

问题4:下面的程序执行结果是:

main()

{intx[5]={2,4,6,8,10),??p??????pp;

p=x;

pp=&&p;

printf(“%d”,??(p++));

printf(w%d\nM,????pp);

}

(A)44(B)24(C)22(D)46

分析:在此题中p++是后加方式,先输出??p的值,p再自加,pp是二级指针,指向一级指

针P,执行第一条输出语句前后,存在下列指向关系:

所以本题应选b

问题5:卜列输出语句执行后结果为:

inti=3;

printf(a%dn,-i++);

(A)3(B)4(C)-3(D)-4

分析:此题考查运算符的优先级,负号运算符和++运算符同优先级,而结合方向为“自左

至右“,即一i++相当于一??i++??,所以先取出i的值3,输出一i的值一3,然后i增值

为4,而不是i先增值为4,然后输出一4,所以答案选择C。

问题6:设有以下语句,

structst

{intn;

structst??next;

);

staticstructsta[3]={5,7,9,'\0'),??p;

则以下表达式的值为6的是:

(A)p++fn(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分。

参加过考试的人都应该知道一本书一一南开大学出版的《全国计算机等级考试?上机考试

习题集》,这本书基本上包含了所有的上机考试题目类型。这本书里一共有100道题,都很经

典。但也许有人会觉得太多了,没时间看完所有的题目。下面我给大家介绍•个复习技巧。

简化问题

每道试题的程序都很长,而且涉及的知识点很多。实际匕在考试时看完全部程序并没

有必要。每次只用把主要精力放在子程序的编制上,认真思考其''功能要求:所以平时我们

只用关注需要编制的子程序。

试题归类

要学会找出题目之间的规律,复习起来就会事半功倍。在一百道题目中,实际上.只需要

仔细分析其中的二十多道题就足够了,其他的只用看一下就行。因为大部分的题目都是类似

的,总结出规律来之后,我们可以举一反三。例如下面两类题目:

例1.(占题库10%)已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录

由产品代码dm(字符型4位)、产品名称me(字符型10位)、单价dj(整型)、数量si(整型)、

金额je(长整型)几部分组成。其中:金额=单价X数量可计算得出。函数ReadDatO的功能

是读取这100个销售记录并存入结构数组sell中。请编制函数SortDatO,其功能要求:按

产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果

仍存入结构数组sell中,最后调用函数WriteDatO把结果输出到文件0UT10.DAT中。

程序:voidSortDat()

{intI,J;

PROxy;

for(I=0;K100;I++)

{if(strcmp(sell[I],dm,sell[J].dm)<0)①

{xy=sell[I];

sell[l]=sell[jh

sell[J]=xy;}

elseif(strcmp(sell[I].dm,sell[j].dm)=0)(2)

if(sell[I].je

{xy=sell[I];

sell[I]=sell[Jh

sell[J]=xy;}

)

)

分析:这类程序题目的关键部分在于①、②、③三句上。它们的作用就是给出调换记录

次序的条件。与其类似的题目只是在功能要求上有所不同(例如把“从大到小”改为“从小到

大”,把“产品代码”换成“产品名称”等),所以我们只需要修改这三句。如果我们抽到的

题目是“金额从小到大,如相同,则产品名称从大到小”,我们就将

①改为:if(selltlLje>sell[J].je)

②改为:elseif(sell[I].je==sell[J].je)

③改为:if(strcmp(sell[I],me,sell[J].mc)<0)

而对于将记录次序进行调换的程序xy=sell[lLsell[I]=sell[J],sell[J]=xy,我们

只需要套用就行。

例2.(占题库10%)函数ReadDat()的功能是实现从文件ENG.IN中读取一篇英文文章,

存入大字符串数组xx中;请编制函数encryptCharO,按给定的代替关系对数组xx中的所

有字符进行代替,仍存入数组xx的对应的位置上,最后调用函数WriteDatO把结果xx输出

到文件PS1.DAT中。

代替关系:f(p)=p*llmod256»其中p是数组xx中某一个字符的ASCII值,f(p)是计

算后的新字符的ASCH值,如果计算后f(p)的值小于等于32或大于130,则该字符不变,

否则将f(p)所对应的字符进行代替。

程序:voidencryptChar()

{intI;

char*pf;

for(1=0;I

{pf=xx[I];

while(*pf!=0)

{if(*pf*ll%256>130||*pf*ll%256<=32)①

{pf++;

continue;}

*pf=*pf*ll%256;

pf++;

)

}

)

分析:这一类题目较例1更为简单,其关键只有①一句,它是对条件''如果计算后f(p)

的值小于等于32或大于130”的描述。上机考试中类似的题目可能只对这个条件作少许变动。

例如:“如果原字符是大写字母或计算后f(p)的值小于等于32”,则只需把①改为:if

((*pf>='A'&&&&*pf<='Z')I|*pf*ll%256<=32)

其他试题也可以按照上述方法进行总结。总而言之,对于三级上机考试,我们不仅要提

高编程能力,还应该注意分析试题,寻找规律,用更少的时间和精力解决更多的问题!

备战C语言上机考试

C语言是目前最常用的软件开发语言之一,其功能强大,具有悠久的历史,从C、C++发

展到现在的C#,不断地得以更新繁衍。在全国计算机等级考试中有,五个类别使用C语言作

为上机考试内容,为各编程语言中应用最多的。

理论先行

[被屏蔽广告]

虽是上机考试,仍需以理论知识为基础,所以必须将C语言教材从头到尾学习一遍(应选

择权威教材),对C语言的基本概况做到心中有数。

学完教材后,选取—些有代表性的编程范例,将其语句逐条理解透彻。同时还须注意一

点,看的懂未必等于自己就会编写,应当自己尝试默写,从而找出知识薄弱点、思维盲点。

要养成一些良好习惯,比如,代码书写格式使用规范的锯齿形,尽量使用完整表达。如

果采用简化方式,虽然不一定影响运算结果,但有的考试评分标准是按答题要点给分,所以

还是不省为妙。

以下是学习C语言过程中容易出现的问题:

1.函数、变量使用前未定义。

2.混淆“=”和“=

3.语句后或预定义的函数名后漏掉分号。

4.将else拼写成esle、continue拼写成contiune。

5.括号搭配错误。

6.首地址理解为lo

7.p++与++p区别不清。

8.break、continue运用不当。

9.误将单引号用于字符串常量,将双引号用于字符常量。

10.else分句中嵌套条件语句时,漏掉了“if”。

上机实践

虽然考点、培训点•般都提供模拟上机,但毕竟时间、地点受到限制,不能保证充分的

练习时间,因此很多考生都希望能在自家电脑上进行操作实践,下面具体谈谈如何实现在个

人电脑上进行练习的方法。

一、简易环境练习

系统要求:Windows系统

需用软件:TurboC2.0

TC软件虽然不是标准的Windows程序,但在Windows环境下依然可以使用。为使软件处

于理想运行状态,运行tc.exe后需要做一些设置:

1.按“汉”按钮,否则会出现部分乱码。

2.点击属性按钮,在程序选项卡的“工作目录”栏中根据上一命令行填入程序所在目录,

“运行”栏选择最大化,选择“退出时关闭”。

设置好后即可依照练习册输入习题,进行编译调试。编程中用到的处理数据一般需自建。

为了提高效率,可从网上下载习题。这里应留意一些下载习题中的问题,比如遗漏字符、录

入错误等,还有一些不易发现的情况,像双引号的字体不标准、文件扩展名前的句号成了逗

号、甚至一些看似无内容的空行中包含着某些ASCII码,都会影响编程结果。

二、全真环境练习

系统要求:DOS系统

需用软件:TurboC2.0、UCDOS、上机模拟软件

经过基础阶段学习后,再来进行针对等级考试的练习,这就需要用到模拟软件了。布面

上模拟软件很容易买到,其操作界面与正式考试完全一样,还往往汇集了丰富的题库和答案、

源程序、输入数据,并可进行自我评分。有的还提供笔试题知识点查询,介绍考试技巧等。

使用模拟软件前,应先安装UCDOS(这与真实考试要求一样,须选5.0以上版本,而且最

好采用正式版,否则可能影响软件使用)。通常情况下在Windows环境下是无法使用模拟软件

的,经过•些专业设置后虽可实现,但仅限于Windows9X操作系统,而且设置不当易使系统

崩溃,所以笔者建议还是在纯DOS环境下使用为妥。

实战心得

笔者参加的今年上半年考试题目大意如下:要求将一篇英文文章中每个字符的ASCII值

按公式f(p)=p17%256计算,如f(p)的ASCH值小于32或为奇数,则原字符不变,否则予

以替代。这道题目需要编写的程序代码没几行,我写好后调试运行,一切正常,复查几遍也

看不出有哪儿不妥。正打算离开考场时,忽然觉得运算结果值得怀疑,根据题意,经过ASCII

值计算后的结果不大可能仍都是常规字符,因此回过头来再逐字审查题目,反复对照编好的

程序,焦点集中在了存放f(p)值的变量定义上,难道应将“char”改为“unsignedchar”?

一试,结果果然不同。

事后查知,char变量值的范围为-128至+127,unsignedchar变量值的范围为。至255。

比如字符“x”的ASCII值为120,按上述公式运算后值为248,字符应予以替代;如果存放

f(p)值的变量定义为char型,值则转换为-8,字符因而不被替代,难怪刚才运算结果显出全

篇常规字符了。所以说,仔细严谨的应考作风能弥补一些技术上的不足,有助于临场发挥。

友情提示

1.由于使用UCDOS,当屏幕下方显示其状态条时,TurboC中的快捷键Alt+F9(调试编译)、

Alt+F5(查看运行结果)等提示会被屏蔽掉,解决的办法为按•下右Shift键,隐藏UCD0S状

态条后即可正常使用。值得一提的是,Alt+F9虽然是TurboC菜单中的Run/Run命令的快捷

键,但两者不完全相同:菜单命令包括自动编译、连接和运行程序;而快捷键方式却不包括

运行程序,自然也就无运算结果,所以即使程序代码编写正确,考试成绩仍有可能为零分。

2.虽然一些模拟软件的习题也是从国家考试中心发行的《全国计算机等级考试上机考试

习题集》中选取,但正式考试时如遇到练习过的题目,仍应看仔细,其中可能会有“小于”

与“大于”之类的一字之别。

C语言程序设计技巧

在许多应用软件运行时都带有命令行参数,其实这些命令行参数在C语言编写的程序中

也可以实现,灵活地运用命令行参数进行处理可以有效地提高程序的运行效率,收到事半功

倍的效果。

C语言中有关命令行参数涉及到程序的主函数main(intargc,char*argv□这样两个参

数,其中,intargc表示命令行参数的个数(包括可执行程序名本身),char*argv口表示每

个参数的具体内容,argv[0]为命令行中可执行程序名本身,argv[l]为命令行中第二个参数

的内容,依次类推。如下例输出命令行参数的个数及参数的内容:

main(intargc,char*argv[],

{intI;

printf("\n命令行中可执行文件名为:%s”,argv[0]);

printf("\n总共有%d个参数:”,argc);

1=0;

while(argc>=l)

{printf("%s”,argv[l++]);

argc---;}

)

命令行参数用的最多还是在诸如DIRA:等之类带有盘符、路径或文件名这样的命令行

中,所以说灵活处理这一类参数才能有效地提高程序的运行效果。譬如DIR命令,其后可以

是盘符,可以是路径,也可以是文件名,如何区分这一参数呢?请看下例(此程序模拟DIR命

令,程序要求在命令行输入一个参数:盘符或路径或文件名,若无参数或参数多于一个都将

取默认的参数)o

功能:模拟DIR命令进行处理命令行参数

-----------------------------------------*/

#include

#include

#include

#inchlude

intj,num=O;

charss[20],path[50],path2[50];

voidmain(intargc,char*argv[])

(

structffblkf;

intdone;

if(argc==2)/*取命令行参数到数组中*/

strcpy(ss,argv[l]);

else

strcpy(ss,;/*给数组赋值缺省参数*/

if(((ss[strlen(ss)—1]==,\\'II((ss[strlen(ss)—1]==,/))

strcat(ss,");/*若参数为路径或盘符,则加上"*.*"*/

getcwd(pathl,50);/*取当前路径*/

if(chdir(ss)==0)/*判断参数是否为路径*/

strcat(ss,〃\\*.*");/*若路径末没有带〃\〃,则加上“*.*〃*/

chdir(pathl);/*恢复原来路径*/

strcpy(path2,ss);

for(j=strlen(peith2);j>0;j---)/*提取参数中的路径到path2*/

{if((path2[j]==,W))||(path2[j]==:')){

path2[j+l]=>\0";

gotosenull;}

)

path2[0]=,\0>;

senull:

if(strlen(path2)=0)/*若给出的参数中没带路径,则取当前路径*/

strcpy(path2,pathl);

printf(〃\n**模拟DIR**\n命令目录路径%s〃,path2);

done=findfirst(ss,&f,55);/*查找第一个配匹的文件*/

j=l;

while(!done)

{if(f.ff_attrib!=0xl0)/*若文件属性不是目录*/

printf(z/\n%15s%201d/,,f.ff_name,f.ff_fsize);

else

printf(w\n&Ils",f.ffname);

num++;

j++;

if(j==23)

printf(,z\n----------------More(按任意键继续)-------");

getch();

j=0;

printf(w\n(目录路径%s)",path2);}

done=findnext(&f);/*查找下一->t•配匹的文件*/

}

printf(w\n当前目录中总共有%d个文件.\n",num);

C语言初级讲座

我们一经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的

说明可以包括三个方面:

?数据类型

?存储类型

?作用域

在本讲中,我们只介绍数据类型说明。其它说明在以后陆续介绍。所谓数据类型是按被

说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类

型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。

1.基本数据类型

基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类

型是自我说明的。

2.构造数据类型构造数据类型

是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型

的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个

构造类型。在C语言中,构造类型有以下几种:

?数组类型

?结构类型

?联合类型

3.指针类型

指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储

器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能

混为一谈。4.空类型在调用函数值时,通常应向调用者返回一个函数值。这个返回的函数值

是具有一定的数据类型的,应在函数定义及函数说明中给以说明,例如在例题中给出的max

函数定义中,函数头为:intmax(inta,intb);其中“int”类型说明符即表示该函数的

返回值为整型量。又如在例题中,使用了库函数sin,由于系统规定其函数返回值为双精度

浮点型,因此在赋值语句5=5简(x);中,s也必须是双精度浮点型,以便与sin函数的返回

值一致。所以在说明部分,把s说明为双精度浮点型。但是,也有类函数,调用后并不需

要向调用者返回函数值,这种函数可以定义为“空类型”。其类型说明符为void。在本讲中,

我们先介绍基本数据类型中的整型、浮点型和字符型。其余类型在以后各讲中陆续介绍。

对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,

其值不发生改变的量称为常量,取值可变的量称为变量。它们可与数据类型结合起来分类。

例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、

枚举变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先说明后使用。

整型量

整型量包括整型常量、整型变量。整型常量就是整常数。在C语言中,使用的整常数有

八进制、十六进制和十进制三种。

整型常量

1.八进制整常数八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为

0〜7。八进制数通常是无符号数。

以下各数是合法的八进制数:

015(十进制为13)0101(十进制为65)0177777(十进制为65535)

以下各数不是合法的八进制数:

256(无前缀0)03A2(包含了非八进制数码)-0127(出现了负号)

2.十六进制整常数

十六进制整常数的前缀为0X或Ox。其数码取值为0、9,A~F或a~f。

以下各数是合法的十六进制整常数:

0X2A(十进制为42)OXAO(十进制为160)OXFFFF(十进制为65535)

以下各数不是合法的卜六进制整常数:

5A(无前缀OX)0X3H(含有非十六进制数码)

3.十进制整常数

十进制整常数没有前缀。其数码为0~9。

以下各数是合法的十进制整常数:

237-568655351627

以下各数不是合法的十进制整常数:

023(不能有前导0)23D(含有非十进制数码)

在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果

不正确。4.整型常数的后缀在16位字长的机器上,基本整型的长度也为16位,因此表示的

数的范围也是有限定的。十进制无符号整常数的范围为0-65535,有符号数为-32768〜

+32767。八进制无符号数的表示范围为0-0177777。十六进制无符号数的表示范围为0X0〜

OXFFFF或0x0〜OxFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型

数是用后缀“L”或“1”来表示的。例如:

十进制长整常数158L(十进制为158)358000L(十进制为-358000)

八进制长整常数012L(十进制为10)077L(十进制为63)0200000L(十进制为65536)

十六进制长整常数0X15L(十进制为21)0XA5L(十进制为165)0X10000L(十进制为

65536)

长整数158L和基本整常数158在数值上并无区别。但对158L,因为是长整型量,C编

译系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2个字节的存储

空间。因此在运算和输出格式上要予以注意,避免出错。无符号数也可用后缀表示,整型常

数的无符号数的后缀为“U”或"u”。例如:358u,0x38Au,235Lu均为无符号数。前缀,后

缀可同时使用以表示各种类型的数。如0XA5LU表示十六进制无符号长整数A5,其十进制为

165。

写好C程序的10条秘籍

神乎其技,惟C程序,功到自成,十大建议!

1、汝应频繁催动lint工具,据其语法声明修习内力,此事皆因lint之思虑决断实远在

君上。

2、不可依随NULL指针,如若不然,混沌痴颠必俟君于彼岸。

3、纵有天赋大智慧,知晓其事无碍,汝亦当尽数强制挪移函数参数为原型所期之数据类

型,以免一时疏忽,致使数据类型向汝讨还血债。

4、若头文件未于函数原型之中声明返回值类型,汝当亲为此事,更须谨慎再三,以防不

测降临汝身。

5、汝须亲核字符串、数组操作之越界与否。古之圣人有言:尝祈门人对答“然也”,不

意门人答曰“吾了然于胸无须多虑尽请宽心他日趋庭必当重谢”一一所期者短,所获者长,

此于数组,实最险要处也。

6、若函数声明内提及,于异常时将返回错误代码云云,汝当谨慎校核该返回值。或有校

核语句使汝之代码增大数倍,令汝之手指因敲键而痛楚莫名之事,汝亦当如此。不然,汝固

以为此异常之事难得一见,上苍亦必借此惩戒汝之傲慢。

7、汝应研习库函数,不当亲笔重写之。如是,汝之代码必短小易读,汝之心境必清爽恬

淡。

8、纵汝不愿,汝亦应借括号、缩进之属,使汝之代码间架清晰,可为后者借鉴。汝之大

智慧施于决疑解难则可,施于敷设谜团、淆乱文体则万万不可。

9、外部标识符之前六字符当与众不同。此律法看似粗陋,和者寥寥,然其效用自能延续

永远。汝若不从此言,他日,汝欲连接程序于旧作之上时,必抓耳挠腮、蓬头垢面,狼狈之

相尽现矣。

10、或有族类,大言炎炎,云“普天之下,莫非VAX”。于此等异端,汝当摒弃之、断绝

之、远避之。更有异人,笃信魔道,以为纵汝所用电脑频繁换代,汝之程序亦能长久适用。

汝亦不可与此类恶人来往,谨记谨记。

强大的语言C入门之一

一、c语言的特点

C语言是美国的DennisRitchie在1972年设计发明的。它由早期的编程语言

BCPL(BasicCombinedProgrammingLanguage)发展演变而来。C语言之所以发展迅速,成

为最受欢迎的语言之一,主要因为它具有强大的功能。归纳起来,C语言具有下列特点:

1.C语言是“中级语言”

它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以像汇编语言

一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

2.C语言是结构式语言

所谓结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息

交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是

以函数形式提供给用户的,这些函数可方便地调用,并具有多种循环、条件语句控制程序流

向,从而使程序完全结构化。

3.C语言功能齐全

C语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言

也具有强大的图形功能,支持多种显示器和驱动器,而且计算功能、逻辑判断功能也比较强

大,可以实现决策目的。

4.C语言适用范围广

C语言还有一个突出的优点就是适合多种操作系统,如DOS、Windows.UNIX,也适用于

多种机型。

二、C语言基础介绍

随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些

C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为c

语言制定了一套ANSI标准,成为现行的C语言标准。而在这里我们将主要以美国Borland公

司的产品TurboC2.0作为介绍对象,简要介绍一下C语言的基本知识.

1.数据类型

在C语言中,每个变量在使用之前必须定义其数据类型。TurboC有以下几种类型:整

型(int)、浮点型(float),字符型(char)、指针型(*)、无值型(void)以及结构(struct)

和联合(union)o其中前五种是C语言的基本数据类型、后两种数据类型(结构和联合)则

是C语言的扩展数据类型。

2.关键字和标识符、运算符

所谓关键字就是已被C语言本身使用、不能作其它用途的字。例如关键字else,就再不

能用作变量名、函数名等。所谓标识符是指常量、变量、语句标号以及用户自定义函数的名

称。C标识符的定义十分灵活。

C的运算符非常丰富,主要分为三大类:算术运算符、关系与逻辑运算符、按位运算符。

3.变量

C规定所有变量在使用前都必须加以说明。•条变量说明语句由数据类型和其后的一个

或多个变量名组成,例如“intx”。变量可以在程序中三个地方说明:函数内部、函数的参

数定义中或所有的函数外部。根据所定义位置的不同,变量可分为局部变量、形式参数和全

程变量。C像其它高级语言一样也使用数组变量。所谓数组就是指具有相同数据类型的变量

集,并拥有共同的名字。数组中的每个特定元素都使用下标来访问。

4.控制流程语句

C提供了丰富、灵活的控制流程语句,主要有:条件语句、循环语句利开关语句。条件语

句的-,般形式为if—else。C提供三种基本的循环语句:for语句、while语句和do—while

语句。而在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套if-else

-if语句来实现,但if-else-if语句使用不方便,并且容易出错。对这种情况,C提供了

一个switch开关语句。

5.指针(point)

学习C语言,指针是较难理解的一个概念。我们知道变量在计算机内占有一块存贮区域

(也就是有一个“地址”),变量的值就存放在这块区域之中,在计算机内部,通过访问或修

改这块区域的内容来访问或修改相应的变量。C语言中,对于变量的访问形式之一,就是先

求出变量的地址,然后再通过地址对它进行访问,这就是指针及指针变量。指针变量的般

定义为“类型标识符*标识符”,其中标识符是指针变量的名字,标识符前加了号,

表示该变量是指针变量,而最前面的“类型标识符”表示该指针变量所指向的变量的类型。

一个指针变量只能指向同一种类型的变量,也就是说,我们不能定义一个指针变量,既能指

向一整型变量又能指向双精度变量。

三、C程序设计初步

C语言是一种中级语言,用户用C语言编写的程序称为源程序,源程序文件的后缀一般

必须为“.c”。计算机硬件不能直接执行源程序,必须将源程序翻译成二进制目标程序。翻译

工作是由编译程序完成的,翻译的过程称为编译,编译的结果称为目标程序,目标程序文件

后缀一般为“.OBJ"。程序翻译成目标程序后,便可进行连接。“连接”的目的是使程序变成

在计算机上可以执行的最终形式。在这阶段,系统程序库中的程序要与目标程序连接,连

接的结果称为执行程序,执行程序文件名字一般以EXE”结尾。正如所有利用计算机

语言所编写的的第一个程序一样,下面,我们也试着建立一个名为“HELLO.C”的源程序,这

个程序将在屏幕上面打印出“你好,《电脑报》软件世界!”这个短语。

通过键盘输入程序:

include

main()

printf(w你好,《电脑报》软件世界!\n");

}

这个最简单的程序,也包括了C语言的一些基本的内容,它有一个主函数main。,使用

到了标准的输出函数printfO,同时为了能够让程序运行时包含这个标准函数,我们首先要

在程序的最开始写上include,“stdio.h”是C语言提供的标准输入输出函数库头文件,我

们可以直接引用里面的••些函数,来完成我们所要实现的功能。

现在,让我们来编译、连接并运行一下这个最简单的程序,我们将看到,在屏幕上打印

出了“你好,《电脑报》软件世界!”

四、参考资料

首先是一些C语言相关的书籍:

《C语言》谭浩强,《C语言编程宝典》王大刚,《数据结构与算法一一面向对象的C++

设计模式》BrunoR.Preiss,《C/C++语言与研究开发实践》伍晓宇、辛勇,《BorlandC

++Builder3.0/4.0类参考详解》张济、袁野、王秀娟,《BorlandC++Builder3.0/4.0

高级类参考详解》王秀娟、孙悦、黎华,《C++语言命令详解(第二版)》BrianOverland,

《C++程序设计实验指导》钱能。

用C语言解决鬼谷算题

在鬼谷算题中有这样一个著名的题目:“今有物不知其数,三三数之剩二,五五数之剩三,

七七数之剩二,问物几何?”这属于高等数学中的数论。我国宋代学者对这类题目钻研已颇为

精深,总结出了“三人同行七十稀,五树梅花廿一枝,七子团圆正半月,去百零五便得知。”

这样的口诀,意思是说“以三三数之,余数乘以七十;五五数之,余数乘以二十一;七七数

之,余数乘十五。三者相加,如不大于一百零五,即为答数;否则须减去一百零五或其倍数。”

这道算题的答案为23。计算起来比较繁琐,但如果用我们所熟悉的C语言来编写一小段程序

的话,很快就能解决。

这段程序如下:

ttinclude"stdio.hM

main

intx

forx=0x<100x++??

ifx%3==2&&x%5==3&&x%7==2

printf"Thisnumberis%d\nfzx

看一看,是不是很简单啊!

用C语言实现的闹钟程序

#include

#include

ttinclude

#include

Sinclude

voidmain()

(

intgd=DETECT,gm;

intx=320,y=240,r=200,i,h,m,s,thetamin,thetasec;

structtimet;

charn[12][3]={"3","2","1","12","11","10","9","8","7","6","5","4"};

initgraph(&gd,&gm,〃g:\\tc\\bgi〃);〃图形驱动器路径,根据自己的系统更换。

circle(x,y,210);

setcolor(4);

settextstyle(4,0,5);

for(i=0;i<12;i++)

if(i!=3)

outtextxy(x+(r-14)*cos(M_PI/6*i)-10,y-(r-14)*sin(MPI/6*i)-26,n[i]);

else

outtextxy(x+(r-14)*cos(M_PI/6*i)-20,y-(r-14)*sin(MPI/6*i)-26,n[i]);

)

gettime(&t);

printf(Z/Thecurrenttimeis:%2d:%02d:%02d.%02d\nz,,t.ti_hour,t.ti_min,

t.ti_sec,t.tihund);

while(!kbhit())

(

setcolor(5);

setfillstyle(l,5);

circle(x,y,10);

floodfill(x,y,5);

gettime(&t);

if(t.timin!=m)

(

setcolor(0);

line(x,y,x+(r-60)*cos(thetamin*(M_PI/180)),y-(r-60)*sin(thetamin*(M_PI/180

)));

circle(x+(r-80)*cos(thetamin*(M_PI/180)),y-(r-80)*sin(thetamin*(M_PI/180))

,10);

line(x,y,x+(r-l10)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-110)*sin(M_PI/6*h

-((m/2)*(M_PI/180))));

circle(x+(r-130)*cos(M_PI/6*h-((m/2)*(M_P1/18O))),y-(r-130)*sin(M_PI/6*h-(

(m/2)*(M_PI/180))),10);

)

if(t.ti_hour>12)

t.ti_hour=t.ti__hour_12;

if(t.ti_hour<4)

h=abs(t.ti_hour_3);

else&n

bsp;

h=15-t.ti_hour;

m=t.

if(t.ti_min<=15)

thetamin=(15-t.ti_min)*6;

else

thetamin=450-t.

if(t.ti_sec<=15)

thetasec=(15-t.ti_sec)*6;

else

thetasec=450-t.ti_sec*6;

setcolor(4);

1ine(x,y,x+(r-110)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-HO)*sin(M_PI/6*h

-((m/2)*(MPI/180))));

circle(x+(r-130)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-130)*sin(M_PI/6*h-(

(m/2)*(MPI/180))),10);

line(x,y,x+(r-60)*cos(thetamin*(M_PI/180)),y-(r-60)*sin(thetamin*(M_PI/180

)));

circle(x+(r-80)*cos(thetamin*(M_PI/180)),y-(r-80)*sin(thetamin*(M_PI/180))

,10);

setcolor(15);

line(x,y,x+(r-70)*cos(thetasec*(MPI/180)),y-(r-70)*sin(thetasec*(MPI/180

)));

delay(1000);

setcolor(0);

line(x,y,x+(r-70)*cos(thetasec*(MPI/180)),y-(r-70)*sin(thetasec*(MPI/180

)));

}

}

该程序已在TurboC++3.0中通过编译.

C程序开发经典实例之一

【程序1】

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4o组成所有的排列后再去

掉不满足条件的排列。

2.程序源代码:

main()

(

inti,j,k;

printf("\n");

for(i=l;i<5;i++)/*以下为三重循环*/

for(j=l;j<5;j++)

for(k=l;k<5;k++)

(

if(i!=k&&i!=j&&j!=k)/*确保i、j、k三位互不相同*/

printf(/z%d,%d,%d\n”,i,j,k);

)

)

【程序2】

题目:企业发放的奖金根据利润提成。利润⑴低于或等于10万元时,奖金可提10%;

利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,

可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时

高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,

高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总

数?

1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

2.程序源代码:

mainO

(

longinti;

intbonus1,bonus2,bonus4,bonus6,bonuslO,bonus;

scanf&i);

bonusl=lOOOOO^.1;bonus2=bonu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论