c语言学习经典例题.docx
- 文档编号:23462802
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:167
- 大小:91.11KB
c语言学习经典例题.docx
《c语言学习经典例题.docx》由会员分享,可在线阅读,更多相关《c语言学习经典例题.docx(167页珍藏版)》请在冰豆网上搜索。
c语言学习经典例题
c语言学习经典例题.txt30生命的美丽,永远展现在她的进取之中;就像大树的美丽,是展现在它负势向上高耸入云的蓬勃生机中;像雄鹰的美丽,是展现在它搏风击雨如苍天之魂的翱翔中;像江河的美丽,是展现在它波涛汹涌一泻千里的奔流中。
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程序开发经典实例之七
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又比用汇编简单,易于实现).另外,学Win32C程序设计还有助于更深入地了解Windows的内幕和Win32API。
任何的编程语言都是一种工具,学习语言的目是要使用它来编写出实际需要的软件来,而软件作为一个用户程序,运行时要依赖操作系统,大多数人使用什么操作系统,我们就要编写出基于哪一种平台上的程序来.这样,软件才会有更大的市场。
现在市面上出现的有关c语言方面的书大多是教授DOS下的c,上机实习也是在TurboC2.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(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,%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(“%d\n”,?
?
?
?
pp);
}
(A)44(B)24(C)22(D)46
分析:
在此题中p++是后加方式,先输出?
?
p的值,p再自加,pp是二级指针,指向一级指针p,执行第一条输出语句前后,存在下列指向关系:
所以本题应选b
问题5:
下列输出语句执行后结果为:
inti=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:
设有以下语句,
structst
{intn;
structst?
?
next;
};
staticstructsta[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分。
参加过考试的人都应该知道一本书――南开大学出版的《全国计算机等级考试?
上机考试习题集》,这本书基本上包含了所有的上机考试题目类型。
这本书里一共有100道题,都很经典。
但也许有人会觉得太多了,没时间看完所有的题目。
下面我给大家介绍一个复习技巧。
简化问题
每道试题的程序都很长,而且涉及的知识点很多。
实际上,在考试时看完全部程序并没有必要。
每次只用把主要精力放在子程序的编制上,认真思考其“功能要求”。
所以平时我们只用关注需要编制的子程序。
试题归类
要学会找出题目之间的规律,复习起来就会事半功倍。
在一百道题目中,实际上只需要仔细分析其中的二十多道题就足够了,其他的只用看一下就行。
因为大部分的题目都是类似的,总结出规律来之后,我们可以举一反三。
例如下面两类题目:
例1.(占题库10%)已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。
其中:
金额=单价×数量可计算得出。
函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。
请编制函数SortDat(),其功能要求:
按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT10.DAT中。
程序:
voidSortDat()
{intI,J;
PROxy;
for(I=0;I<100;I++)
{if(strcmp(sell[I].dm,sell[J].dm)<0)①
{xy=sell[I];
sell[I]=sell[J];
sell[J]=xy;}
elseif(strcmp(sell[I].dm,sell[J].dm)==0)②
if(sell[I].je
{xy=sell[I];
sell[I]=sell[J];
sell[J]=xy;}
}
}
分析:
这类程序题目的关键部分在于①、②、③三句上。
它们的作用就是给出调换记录次序的条件。
与其类似的题目只是在功能要求上有所不同(例如把“从大到小”改为“从小到大”,把“产品代码”换成“产品名称”等),所以我们只需要修改这三句。
如果我们抽到的题目是“金额从小到大,如相同,则产品名称从大到小”,我们就将
①改为:
if(sell[I].je>sell[J].je)
②改为:
elseif(sell[I].je==sell[J].je)
③改为:
if(strcmp(sell[I].mc,sell[J].mc)<0)
而对于将记录次序进行调换的程序xy=sell[I]、sell[I]=sell[J]、sell[J]=xy,我们只需要套用就行。
例2.(占题库10%)函数ReadDat()的功能是实现从文件ENG.IN中读取一篇英文文章,存入大字符串数组xx中;请编制函数encryptChar(),按给定的代替关系对数组xx中的所有字符进行代替,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS1.DAT中。
代替关系:
f(p)=p*11mod256。
其中p是数组xx中某一个字符的ASCII值,f(p)是计算后的新字符的ASCII值,如果计算后f(p)的值小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行代替。
程序:
voidencryptChar()
{intI;
char*pf;
for(I=0;I
{pf=xx[I];
while(*pf!
=0)
{if(*pf*11%256>130||*pf*11%256<=32)①
{pf++;
continue;}
*pf=*pf*11%256;
pf++;
}
}
}
分析:
这一类题目较例1更为简单,其关键只有①一句,它是对条件“如果计算后f(p)的值小于等于32或大于130”的描述。
上机考试中类似的题目可能只对这个条件作少许变动。
例如:
“如果原字符是大写字母或计算后f(p)的值小于等于32”,则只需把①改为:
if((*pf>=`A`&&&&*pf<=`Z`)||*pf*11%256<=32)
其他试题也可以按照上述方法进行总结。
总而言之,对于三级上机考试,我们不仅要提高编程能力,还应该注意分析试题,寻找规律,用更少的时间和精力解决更多的问题!
备战C语言上机考试
C语言是目前最常用的软件开发语言之一,其功能强大,具有悠久的历史,从C、C++发展到现在的C#,不断地得以更新繁衍。
在全国计算机等级考试中有,五个类别使用C语言作为上机考试内容,为各编程语言中应用最多的。
理论先行
[被屏蔽广告]
虽是上机考试,仍需以理论知识为基础,所以必须将C语言教材从头到尾学习一遍(应选择权威教材),对C语言的基本概况做到心中有数。
学完教材后,选取一些有代表性的编程范例,将其语句逐条理解透彻。
同时还须注意一点,看的懂未必等于自己就会编写,应当自己尝试默写,从而找出知识薄弱点、思维盲点。
要养成一些良好习惯,比如,代码书写格式使用规范的锯齿形,尽量使用完整表达。
如果采用简化方式,虽然不一定影响运算结果,但有的考试评分标准是按答题要点给分,所以还是不省为妙。
以下是学习C语言过程中容易出现的问题:
1.函数、变量使用前未定义。
2.混淆“=”和“==”。
3.语句后或预定义的函数名后漏掉分号。
4.将else拼写成esle、continue拼写成contiune。
5.括号搭配错误。
6.首地址理解为1。
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)的ASCII值小于32或为奇数,则原字符不变,否则予以替代。
这道题目需要编写的程序代码没几行,我写好后调试运行,一切正常,复查几遍也看不出有哪儿不妥。
正打算离开考场时,忽然觉得运算结果值得怀疑,根据题意,经过ASCII值计算后的结果不大可能仍都是常规字符,因此回过头来再逐字审查题目,反复对照编好的程序,焦点集中在了存放f(p)值的变量定义上,难道应将“char”改为“unsignedchar”?
一试,结果果然不同。
事后查知,char变量值的范围为-128至+127,unsignedchar变量值的范围为0至255。
比如字符“x”的ASCII值为120,按上述公式运算后值为248,字符应予以替代;如果存放f(p)值的变量定义为char型,值则转换为-8,字符因而不被替代,难怪刚才运算结果显出全篇常规字符了。
所以说,仔细严谨的应考作风能弥补一些技术上的不足,有助于临场发挥。
友情提示
1.由于使用UCDOS,当屏幕下方显示其状态条时,TurboC中的快捷键Alt+F9(调试编译)、Alt+F5(查看运行结果)等提示会被屏蔽掉,解决的办法为按一下右Shift键,隐藏UCDOS状态条后即可正常使用。
值得一提的是,Alt+F9虽然是TurboC菜单中的Run/Run命令的快捷键,但两者不完全相同:
菜单命令包括自动编译、连接和运行程序;而快捷键方式却不包括运行程序,自然也就无运算结果,所以即使程序代码编写正确,考试成绩仍有可能为零分。
2.虽然一些模拟软件的习题也是从国家考试中心发行的《全国计算机等级考试上机考试习题集》中选取,但正式考试时如遇到练习过的题目,仍应看仔细,其中可能会有“小于”与“大于”之类的一字之别。
C语言程序设计技巧
在许多应用软件运行时都带有命令行参数,其实这些命令行参数在C语言编写的程序中也可以实现,灵活地运用命令行参数进行处理可以有效地提高程序的运行效率,收到事半功倍的效果。
C语言中有关命令行参数涉及到程序的主函数main(intargc,char*argv[]这样两个参数,其中,intargc表示命令行参数的个数(包括可执行程序名本身),char*argv[]表示每个参数的具体内容,argv[0]为命令行中可执行程序名本身,argv[1]为命令行中第二个参数的内容,依次类推。
如下例输出命令行参数的个数及参数的内容:
main(intargc,char*argv[],
{intI;
printf("\n命令行中可执行文件名为:
%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学习 经典 例题
![提示](https://static.bdocx.com/images/bang_tan.gif)