一、引言
有人说:“C语言早过时了,现在都用C++、Java了C真的过时了吗?没有!C语言不但没过时,而且依然是一门非常重要的基础语言。首先,C语言是其它高级语言基础,C++的核心基础是C,Java的基本语法、基本数据结构和基本控制结构都和C语言类似,学好C语言的基本语法对于学习高级语言起到非常重要的作用。其次,C的适用范围非常广,几乎所有的硬件驱动、网络通信、快速数据处理等都涉及到C语言,甚至有人用C语言替代复杂的汇编语言,实现硬件控制。很多软件公司都把C语言作为应聘程序员的重要技能标准。第三,C语言的普及率非常高,而且依然在不断扩大,国内几乎所有大学都把C语言作为程序设计相关专业的一门必修基础课,国外也是一样,很多大学都将C语言作为必修课开设。第四,C语言是各种认证考试的上机操作语言,目前计算机水平考试中的二级、三级、四级、和程序员等很多考试中都将C语言作为上机考试的内容。
综上所述,C语言并没过时,而且依然是非常值得我们学习的一门语言。学好C语言对于学好其它高级语言,对于实际工作都是非常必要的。所以,C语言我们要学,而且一定要学好,学精。至于如何学好C语言,C语言该学哪些内容,这就是下面要重点讨论的内容。
二、学习C语言的技巧和方法
(一)掌握程序设计的过程和思路
学习C语言的目的也是要进行程序设计,所以,同样符合程序设计的一般思路和方法。要学好程序设计,首先要掌握的就是程序设计的基本过程和思路,只有这样,才能逐渐形成一个良好的设计习惯,能够正确地设计程序,高效地完成设计任务。
1.分析问题,找出解题思路。所谓分析问题是对要解决的问题进行分析,找出解决问题的基本思路,即用什么样的控制流程,找到表示抽象数据的程序语言方法,即用什么样的数据格式表示,这样才能把抽象问题数字化,流程化。如“报数问题”:“有100人按编号顺序顺时针围成一个圈,现在从1号开始报数,并且下一位的报数总是加1,报数中凡能被3整除的人就退出圈外,直到圈中剩下三人为止,请问最后剩下三人的最初编号是多少。”这样一个看似简单的问题,真要着手写代码,真有不少问题。
首先,我们分析一下解题思路。对于按顺序绕圈报数,实际上就是绕圈在循环啊,所以可以使用循环结构。至于能被3整除的报数人退出圈外,这仅仅是个判断。问题是当一个人退出后,这个圈变小了,实际中是中间留出了空位,程序中如何处理空位?这实际上就是我们如何表示这个圈的问题。因为报数是按顺序进行的,而且是循环的,所以我们可以想象这些人是站成一个队列,报数从左开始,凡是能被3整除的就退出圈外,最右边一个人报数后又从最左边开始报数,这样就和圈报数的效果一样了。在每报完一个循环后,队员立即向左对齐,消除中间空位,这样只是队列缩短了,并不影响报数,从而有效解决了空位问题。既然我们可以把一个圈想象为一个队列,问题就很容易解决了,对于这样一组连续的同类数据,学过C语言的人都知道,用数组表示是最合适不过了。
分析问题的时候也要学会一些方法,不能千篇一律,常用的有比较法,模块化,简单化,归纳法,演绎法等等。比较法就是把两个类似的问题放在一起进行对比,从已知的问题中找出另一个问题的解题思路;模块化就是把一个复杂的问题分解开,逐个求解,最后再综合在一起;简单化是对干扰因素较多的问题,首先考虑最简单的因素,找出解决的方法,然后再逐渐复杂化,达到解决问题的目的,如空气的动力问题,一般都要忽略空气阻力与空气温度的关系;归纳法就是通过类似问题的总结归纳,得出解题的思路;演绎法则是将同类问题的几个典型的例子的解题方法推广到一类问题的解决方法。
2.流程设计,规划代码编写顺序。找到了解题的基本思路和方法之后,接下来就是要设计编写代码的流程,即先干什么后干什么。流程设计的好坏直接影响程序执行的效率和正确性。结合上面的问题,我们给出基本的流程结构图,如图1所示。图中左侧是整体流程图,右侧图是循环报数的部分。分开的目的是为了使得流程更加容易理解。
在设计流程中有几点需要注意:流程设计需要清晰易懂,没必要把所有的代码过程都在流程总体线出来,可以使用文字描述一些复杂的代码过程;另外,流程设计中可以通过多个流程实现复杂问题的简单化,如上面的“报数问题”就用两个流程,左侧流程是主流程,是程序的整体执行顺序,右侧流程则是该问题的核心代码部分的执行顺序。
在流程设计中,很多人往往简单勾勒几笔,养成很随便的习惯。对于正规的程序一定要养成好的习惯,使用正规的软件设计完整的流程图。如微软的Visio就是专业的流程设计软件。
3.编写代码,完成问题的程序化。设计好流程后,接下来就是编写代码。好多初学者写代码的时候往往一蹴而就,结果运行发现错误百出,结果望而却步,这是很不好的习惯!下面代码是上面“报数问题”的具体代码。
#define NUM 200 /*定义总人数常量*/
#define LEFT 3 /*定义剩余的人数常量*/
#define DIVED 3 /*定义被整除的常量*/
#define REMV -1 /*定义退出标记*/
int main(int argc, char* argv[]){
/*=======初始化部分=====*/
int count,i,counter=0; /*count为剩余人数,counter为计数器*/
int p[NUM+1];
for(i=1;i<=NUM;i++)p=i; /*初始化队列,给每个人编号*/
count="NUM"; /*最开始的剩余人数等于队列人数*/
/*========核心代码部分======*/
while(1){ /*循环报数过程*/
for(i=1;i<=NUM;i++){ /*从左到右报数*/
if(p==REMV)continue; /*如果该人已经退出,则跳过报数*/
counter++; /*报数*/
if(counter%DIVED==0){ /*报数是否能被3整除*/
p=REMV;count--; /*如被3整除则标记为退出,并将圈人数减1*/
if(count==LEFT)break; /*如队列中剩余3人则立即退出for循环*/
}
}
if(count==LEFT)break; /*如果队列中剩余3人则立即退出while循环*/
}
/*==========输出结果=========*/
for(i=1;i<=NUM;i++){ /*从左到右扫描*/
if(p!=REMV)printf("%5d",p); /*输出未退出人的编号*/
}
}
代码编写中,需要注意以下2个问题1)代码书写一定要规范。该缩进的要缩进,该换行的要换行,不要都挤在一行;(2)在代码中多添加注释。这样不但方便其他人阅读,也方便自己后来修改。在大型软件设计中,注释不但是必须的,而且必须符合一定的规范。
4.调试代码,排除存在的各种错误。程序设计中的错误往往分为两类:一类是语法错误,主要是指代码书写不符合语言规范,如C语言语句后丢失了分号,语句块后丢失了打括号的等等。在Turbo C中,当按F9或Ctr+F9时屏幕地下出现的一些蓝色错误信息,并带有代码行的,一般都是语法错误。对于这类错误,只要仔细观察语句书写格式,并对照C语言的语法规范,一般都能很快找到问题所在。
文章评论(0条评论)
登录后参与讨论