c语言高效编程的几招(精选8篇)
第1招:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招——以空间换时间。
例如:字符串的赋值。
方法A,通常的办法:
#define LEN 32
char string1 [LEN];
memset (string1,0,LEN);
strcpy (string1,“This is a example!!”);
方法B:
const char string2[LEN] =“This is a example!”;
char * cp;
cp = string2 ;
(使用的时候可以直接用指针来操作。)
从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执行的高效率。
如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。
该招数的变招——使用宏函数而不是函数。举例如下:
方法C:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
int BIT_MASK(int __bf)
{
return ((1U << (bw ## __bf)) - 1) << (bs ## __bf);
}
void SET_BITS(int __dst, int __bf, int __val)
{
__dst = ((__dst) & ~(BIT_MASK(__bf))) | (((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))
}
SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);
方法D:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
#define BIT_MASK(__bf) (((1U << (bw ## __bf)) - 1) << (bs ## __bf))
#define SET_BITS(__dst, __bf, __val)
((__dst) = ((__dst) & ~(BIT_MASK(__bf))) |
(((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))
SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);
函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间,
大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一些CPU时间。而宏函数不存在这个问题。宏函数仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏函数的时候,该现象尤其突出。 D方法是我看到的最好的置位操作函数,是ARM公司源码的一部分,在短短的三行内实现了很多功能,几乎涵盖了所有的位操作功能。C方法是其变体,其中滋味还需大家仔细体会。
第2招:数学方法解决问题
现在我们演绎高效C语言编写的第二招——采用数学方法来解决问题。
C语言具有执行效率高、语法规则简单、移植性强等特点,同时具有其他高级语言不能实现的对硬件进行操作的特点,因此成为计算机类专业入门必修的计算机语言[1]。该课程一般是在大一第一学期开始,对于刚入大学校门的新生来说既感到新奇又迷惑,新奇是发现C语言能解决很多在高中没能快速解决的问题,迷惑的是如何才能学好它用好它。C语言还是《数据结构》、《操作系统》以及其他程序设计语言等计算机类专业核心课程的基础,如果C语言学不好,必然对整个大学期间其他课程学习受到影响。一般新生入学比高年级学生入学晚,又有军训,导致在大一第一学期学习该课程时存在时间紧、任务重、难度大等特点,从而导致教学过程中存在学生学习积极性不高,对课程不感兴趣,语法规则难以记住,分析和解决实际问题难,动手能力差等特点。根据存在的问题,总结多年教学经验,从上好第一次课、弱化细节、重视上机、布置综合练习等方面提出教学建议,通过实践,证明这些建议是可行的、有效的。
2 上好第一次课,确定学习目标
对于大学中的任何一门课程,都要让学生掌握本课程的学习目标,如果学习目标不明确,学习兴趣则将不高[2]。C语言课程教学一般在第1周学生学习的积极性都很高,对课程也很感兴趣,因为刚接触C语言,发现能控制电脑做自己想要的简单事情,如输出自己想要的一些内容或图形。但在后续的过程中兴趣慢慢地减少,觉得学习C语言枯燥无味,不感兴趣,难以坚持等。若从开始授课时不进行调整,不采取相关对策,势必影响后续的学习。
好的开始是成功的一半,在第一节课授课时,要以生动有趣的形式告诉学生本课程的功能、主要学习的内容及重要性,让学生有目的地去学习本课程。很多教师在第一次上课时都会告诉学生学习完本课程后要考全国计算机等级考试二级中的《C语言程序设计》科目,其实这是一种错误的引导,这种做法让学生误认为本课程的学习就是为了考过二级,导致学生在学习过程中以二级考核的内容和知识点来引导自己学习,这必然导致学生只注重细节,不注重编程思想的形成。
以计算机科学与技术专业为例,在第一次上课时给学生提出本课程的学习目标:1)本课程主要学习顺序结构、分支结构、循环结构这三种结构程序设计的基本思想和语法结构,数量掌握数组、函数、结构体、指针以及文件的使用,掌握这些知识后为后续课程《数据结构》、《Java语言程序设计》、《C#程序设计》等与编程相关课程打下基础。计算机编程语言的语法和思想基本相通[3],C语言不掌握,以后其他课程的学习就很困难,更谈不上软件开发。2)掌握使用编程知识解决实际问题的方法,如求素数、数列之和、球类循环赛编排等,同时演示1-100之间人与计算机猜数字的游戏,让学生对简单的实际问题有一个基本了解;3)基本掌握小型软件开发及合作开发的基本方法,同时演示学生成绩管理系统,该系统基于VC++6.0使用C语言开发,经过这样的演示,学生基本了解软件开发的结果是什么样子,激发了学生开发软件的兴趣。对于上述三个学习目标的解释及演示,学生既了解到本课程所需要学习的知识,又能了解到学完本课程后能做什么事情。
在第一次授课时,除开给学生讲解学习目标外,还需要告诉学生本课程的学习方法:上课认真听知识点的讲解,为做实例奠定基础;认真完成上课时讲解的实例,总结实例的解决方法,为解决其他问题提供解题思路;重视上机,通过上机查找程序编写的问题,提高编程能力;课后多讨论所布置或发现实际问题的解决方法,养成自学及协同工作的习惯。
3 弱化学习细节,强化趣味实践
任何一门课程所要学习和掌握的内容是非常多的,根据课程的作用,对学习的内容必须要有所取舍,如果上课时面面俱到,最终将导致学到最后一无所获,特别是对于C语言这种细节能进行很深入展开的课程[4]。但是很多C语言的教师在授课时总是不知不觉的强调注意细节,总怕学生如果这点不掌握就在考全国计算机二级时相关知识点的题目不会做,如强调自增自减运算符的使用、对每个转义字符进行讲解、解释for语句中三个表达式可以省略等,对这些细节的强调不仅不利于学生学习,反而让学生去纠结到底用i++好还是++i才好,去背每个转义字符的作用,这样导致学生总是去考虑细节如何记忆,而没花心思去想某个问题的解决思路,从而不利于培养学生解决实际问题的能力。
其实在授课时,对知识点的讲解以基本够用就行,重点在培养学生解决实际问题的能力,通过具体的编程学习相关的知识点。如在学习顺序结构时,只讲整型、字符型、浮点型变量的定义以及printf、scanf函数的基本格式,然后就讲解“输入两个整数,求这两个整数的和、差、积、商,并且要求输出商有2位小数”这个例子,在这个实例中引出强制类型转换的知识,让学生实现本实例后,再讲解如何通过scanf和printf设置符合实际需求的输入输出格式。这样通过实例来学习知识点,既能避免学习知识点的枯燥无味,又能让学生记住相关知识点及掌握实际问题的解决方法。
在实践教学过程中,寻找有趣、容易理解且能引出相关知识点的趣味实例是教学过程中较难的地方,也是教师在备课过程中重点要考虑的教学设计。如在学习循环语句的使用时,讲解while语句的基本格式后,就要求学生考虑猜数字实例:使用rand函数随机生成一个1至100之间的整数,然后最多给10次机会输入整数,判断所输入的整数是否等于随机生成的整数,如果猜对了就提示“正确”,否则提示“大了”或者“小了”,接着继续猜。这样的实例既有趣,又能把循环中涉及的循环初值、循环条件、重复事件与循环增值内容理清,还能复习if语句嵌套的使用,更能够引出新知识:当猜对时需要使用break提前结束循环。因此通过实践巩固所学知识时,趣味实例是一种很好的运用,更能促使教师在上课前需认真备课。
4 重视上机实践,提高编程能力
C语言教学过程中经常碰到的问题就是学生编程能力差,遇到问题不懂如何解决,害怕教师布置作业,害怕编程,编程过程中遇到错误不懂解决等[5]。这些问题如果不能得到较好的解决,将影响学生学习C语言的兴趣,进而影响后续课程的学习。
C语言是一门实践性很强的课程,只掌握理论知识就好比纸上谈兵,必须要通过上机实践来理解并巩固课堂所学知识,因此上机实践是C语言教学的一个重要环节,只有强化、重视上机,才能切实提高学生的编程能力。
错误容易吸引学生的注意力,在上机实践前,进行与知识点相关实例讲解的过程中经常故意设置一些错误地方。这种故意错误分为两种,一种是语法错误,程序编译通不过,跟学生一起解读错误提示来解决语法错误,以提高学生语法错误的修改能力;另一种错误是逻辑错误,程序能正常执行,但得不到正确结果,如讲解1++……+1/10的累加实例中,以a表示分子,b表示分母,在求和时故意写成sum=sum+b/a,这样的错误让学生对变量的起名要引起注意,要能够见名知意,否则在编程过程中容易误用变量。
在上机过程中,有目的的引导学生,既能够锻炼学生纠错编程问题的能力,还能够锻炼学生分析问题的能力。在上机过程中,先让学生完成课堂上讲解的实例,在完成课堂实例程序编写的过程中,如果遇到语法错误学生提问时暂不予以解决,先让学生之间商量解决,实在无法解决的再提示学生如何解决。在完成课堂实例后,布置新的且未讲解过的实例,让学生自己寻找解决问题的方法,自己测试结果是否正确。如学生完成在1++……+1/10的累加实例后,布置学生求1-2/3+5/5-10/7+17/9+……数列前20项之和,让学生自己寻找分子分母的规律。由于没有提醒学生,学生找到各种各样的规律,让学生自行发现规律能充分锻炼学生的编程能力和思维能力,如第一种规律:下一项的分母是上一项的分母加2,下一项的分子是上一项分子与分母之和;第二种规律:i从1开始,分母是2*i-1,分子是(i-1)2+1等等。在让学生做上述练习时,也不告诉学生最终结果,让学生2项、3项、4项、……的测试,这样能锻炼学生测试程序的习惯,依赖教师则会越来越少。在完成课堂实例及新实例后,让学生在课后自行考虑自己需要解决的问题,将问题及程序在课后发给教师,教师根据这些问题及程序,结合上课及上机情况,综合确定学生的平时分。
5 布置综合作业,锻炼解决实际问题的能力
学生学习完每章内容之后,通过相关的作业能巩固本章所学知识,学生也能感觉到相关知识已经掌握。但当本课程的所有内容讲解完之后,学生就会放松了,认为所有知识都已经学习并掌握了。其实不然,学生经过每章学习掌握的是零散的知识,如何将这些知识综合起来使用,则是检验所学知识能否灵活运用所学知识,这时就需要综合作业来进行检验,通过这样的检验能很好地锻炼学生实际问题解决的能力及协作能力。
在根据教学大纲要求讲解完所有章节内容之后,分2至3人一组,布置一些综合练习题,学生完成这些练习之后,既复习了旧知识,又巩固了本章的重点内容,还锻炼了学生解决实际的问题能力及小组协作能力。如布置学生完成并实现学生成绩管理系统,该系统要求能够将学生的成绩信息录入后保存在文件中,并能够对成绩实现增加、删除、修改、按学号查询以及按总分排序等功能。这样一个简单功能的小项目,就能综合检验学生一学期所学的知识,如在保存数据时能检验结构体和文件的使用,实现增加、删除、修改等独立功能时能检验循环、分支以及函数的使用,在排序时能检验排序算法的掌握能力,在录入数据时能让检验格式化输入输出的使用等。
6 总结
提高学生的编程能力和解决实际问题的能力是每个C语言授课教师在授课时需要解决的实际问题,不同的教师有不同的解决方法。本文从上好第一次课、强化实践、重视上机、布置综合作业等方面来实现来解决上述问题。经过实践,证明这些方法是可行的,即笔者经过认真的备课及实例准备后,在2014级、2015级计算机科学与技术专业实施上述教学方法,在期末考试时,平均分能达到78分,考试试题中编程题占35分,80%的学生都能30分及以上,但选择题考得较细,学生的得分率不高;而2012、2013级的学生考试成绩平均分仅有65分。上述提高学生编程能力的方法需要授课教师课前认真准备实例,这将花费大量的时间和精力。在确保学生的编程能力和解决实际问题能力不降低的情况下,如何能够提高教师的备课效率,并能兼顾学生细节方面知识的学习,这将是以后教学改革的研究方向。
参考文献
[1]谢竞博.C语言程序设计教学中的问题及改革建议[J].重庆邮电大学学报:社会科学版,2008,20(2):137-140.
[2]姚利民,段文彧.高校教学方法改革探讨[J].中国大学教学,2013(8):60-64.
[3]高云.计算机编程思想的发展研究[J].软件导刊,2012,11(11):5-6.
[4]乔良.C语言教学中的常见问题和解决方案[J].华北科技学院学报,2014,11(3):86-89.
关键词:C语言;编程技巧;应用
中图分类号:G642 文献标识码:B 文章编号:1002-7661(2014)24-002-01
C语言属于一种程序设计类语言,其使用在数据处理方面有突出作用,在很多的学习工作领域都有大规模的应用,像是软件开发、科研建设等都离不开C语言的利用。C语言编程,就是用C语言进行相应计算机代码的编写,C语言的学习,需要掌握一定的技巧,不然没有头绪的学习是得不到良好学习效果的,掌握了C语言的学习技巧,才能够更好的促进C语言的学习[1]。
一、C语言与C语言的优势
当下世界上使用范围最广,流行度最高的计算机编程语言便是C语言,要想良好的学习和使用C语言,必须加深对C语言的了解。C语言发源于上个世纪60年代,成熟在70年代,最近半个世纪的使用过程中,C语言表现了如下几种优势:第一,C语言简洁紧凑,使用方式灵活方便,且语法运用宽松不受限制,书写方式自由随意,结合了高级编程语言的结构性与实用性的特点,组成了一种全新式的有强大使用功能的编程语言;第二,C语言有广泛的应用层面,且可植性强,C语言在各种系统中都能够被兼容使用;第三,C语言的运算符丰富多样,各种数据结构类型的使用,除了C语言可以将各种复杂的数据运算完成外,还具有强大的图形功能;第四,结构式的语言特点分割了代码和数据,其中的程序表现层次条理清楚,后期的使用和维护工作便利,使用C语言可以访问物理地址[2]。从中可知,C语言具有强大的功能,因此在信息技术的领域中,C语言所占据的地位是非常高的。
二、C语言学习难度大的原因
因为C语言所具备的各种强大功能,因此人们对其的关注程度也越来越高,想要学会并且全面掌握C语言技术的人也越来越多。可是大部分在刚刚接触C语言的时候,觉得C语言过于枯燥乏味,学习了一段时间后都没有掌握到多少知识,也没有一个清楚全面的认识对于C语言,觉得十分的茫然。出现这种情况的原因还是因为C语言是一种高级语言,这种语言和面向对象的语言之间存在较大的差别,在C语言的学习过程中,学习者难以从中看到形象的画面,只能够在编程程序成功后,经过调试才可以看到效果。在编程的过程中,只要出现一点粗心错误,就会让整个编程无法成功调试,出现一些错误的现象,除此之外,C语言的使用过程中,包含了大量的算法与数据组成结构,这些没有任何的技巧,就是要死记硬背,所以很多学习者在遇到这些枯燥晦涩的问题时,就会丧失学习兴趣,降低学习效率和学习质量。
三、C语言编程技巧的应用
1、用空间换时间
例如对字符串进行赋值,方法有以下几种:
(1)基础方法:
#define LEN 32
Char string I[LEN];
memset(string 1,0,LEN);
ctrcpy(string 1,“this is a example”) ;
(2)方法2:
const char string2[LEN]=“this is a example”;
char*cp;
cp=string2;
从这个案例中可以发现,方法(1)与方法(2)在电脑上的执行效率是不一样的,第一种方法必须使用两个字符函数才可以完成,而第二种方法直接使用指针就可以完成了。但是第二种方法相比第一种方法灵活性欠缺,如果这个字符串有不断变化的要求,那么第一种方法就有很大的使用优势了,第二种方法要占用较大的内存,但是效率比第一种更高[3]。
2、位运算掌握
在利用位运算的时候,能够让代码变得更加的简洁,提升运算效率,让问题得到顺利解决。在所有的计算机程序之中,最小的数据单位就是位,无特殊情况的话,所有的数据运算和操作都可以使用“位运算”方式完成,从这里就就可以看出,在编程语言之中,“位”有多么重要了。“位”使用在C语言的运算过程中,可以提升工作效率,顺利的将更多难度大的问题解决。
3、C语言特有函数掌握
很多时候进行编程,都需要使用C语言的特有函数,函数不是一种数据,而是一种功能,每一个函数都能够执行一定的功能建设,而相对应的函数名称中也将函数的功能反映了出来。开展函数定义的时候,要求操作者包含名字、参数名、类型和函数返回类型的数据,编译过程中,数据库系统是之前被定义好了的,使用过程中只要通过#include这项指令,把各种相关的头文件包含在本文件当中就可以了。
但是不管在C语言编程过程中使用怎样的技巧,还是需要做到具体问题具体分析,以上各种技巧使用起来因人而异,整体是能够提升编程效率,在学习过程中使用会获得一定的成效,而降低学习的枯燥感,拓宽C语言的使用范围。
C语言的学习过程中,每一位学习者都应该对C语言的特性有充分的了解,学习并且掌握每一种编程技巧,学习好了C语言的编程技巧,可以帮助学生提升C语言的学习兴趣,让学生的学习目的性更强,提升学生的C语言学习效率与学习质量。
参考文献:
[1] 余 勍.王 捷.浅谈C语言编程技巧在C语言学习中的应用[J].信息通信,2013,07:108.
[2] 赵 黎.范君君.C语言编程技巧在C语言学习中的应用研究[J]. 信息与电脑(理论版),2014,09:252.
int a,b,c,s,i=0;
for(s=100;s<1000;s++)
{
c=s%10;
b=s/10%10;
a=s/100;
if(s==a*a*a+b*b*b+c*c*c)
{
printf(“%dt”,s);
++i;
if(i%5==0)
printf(“n”);
}
} } 2.求1+2!+3!+...+20!的和 #include
is is printf(“nNo,the %ld is not palindrome!n”,num);} 4.求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并并按照一行5个的格式输出。
#include
if(((num%7||num%11)==1)&&((num%7&&num%11)==0)){ printf(“%dt”,num);++i;if(i%5==0)printf(“n”);} } 5.编程列出200以内所有的素数,按照一行10个的格式输出,并求出所有素数的平均值,#include
average
6、编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1+1/3+1/5...+1/n #include
7、已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有 组合。
#include
if((100*a+10*b+c+100*c+10*b+a)==1333)
printf(“a=%d,b=%d,c=%dn”,a,b,c);}
8、用户输入12个0-100之间的整数,统计出小于60,60到79,80到100三个范围的整数各有多少个? #include
are
%d numbers less than 60,%d numbers between 60 and 79,%d numbers between 80 and 100.n”,i,j,k);}
9、求这样一个三位数并输出该数字,该三位数等于其每位数字的阶乘之和。
即: abc = a!+ b!+ c!#include
number return sum;}
10、猜数游戏:由用户随机输入一个1位正整数数让人来猜,只能猜5次,如果人猜对了,则在屏幕上显示“You are so clever”,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止或者5次都猜不对给出提示“Game Over”。#include have %d times left!n”,5-i);continue;} else { printf(“nThe number you input is large,go on please!You have %d times left!n”,5-i);continue;} } if(i>5)Over!n“);} 11、设N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),求N的值。#include printf(”Game b=n/100%10;c=n/10%10;d=n%10;k=1000*d+100*c+10*b+a;if(k==9*n)printf(“N=%dn”,n);} } 12、100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮1担。试编写程序计算大、中、小马的数目。#include if(h1+h2+h3==100&&3*h1+2*h2+1/2*h3==100)printf(“The horse has has %d,middle old horse horse %d,young has %dn”,h1,h2,h3);} } 13、一位司机酒驾撞人逃跑。现场三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的;丙是位数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。(车号为4位数)#include 15、编程求出所有1000到3000之间能被7、11、17同时整除的整数,并求其平均值,并输出结果(结果保留两位小数)。#include printf(“n%d”,sum/k);} 16、编程找出满足下列条件的所有四位数的和并输出:该数第一、三位数字之和为10,第二、四位数字之积为12。 #include 17、求并输出所有满足如下条件的三位正整数:它是某整数的平方,它的三位数码有两位是相同的。(如100是10的平方,它有两个0,225是15的平方,它有两个2)。#include if((a==b||a==c||b==c)&&n==i*i)printf(“%dt”,n);} } 18、输出所有大于1010的4位偶数,且该类偶数的各位数字两两不相同。#include for(num=1012;num<=9999;num+=2){ a=num/1000;b=num/100%10;c=num/10%10;d=num%10;if(a!=b&&b!=c&&c!=d)printf(“%dt”,num);} } 19、编制程序要求输入整数a和b,若a+b大于100,则输出a+b百位以上的数字,否则输出两数字之和。#include 222void main(){ int a,b,s;printf(“Please input a and b:”);scanf(“%d%d”,&a,&b);s=a*a+b*b;if(s>100)printf(“n%dn”,s/100);else printf(“n%dn”,a+b);} 20、编写一个程序实现如下功能:计算1~100之间所有包含4或者包含5的数字,并显示其累加之和 #include 一、定义 管道是单向的、先进先出的,它将一个程序的输入和另一个程序的输出连接起来。数据被一个进程读出后,将被从管道中删除。分为无名和有名管道两种。前者用于父进程和子进程间的通信,后者用于同一系统的两个进程间通信。 二、无名管道 int pipe(int fd[2]); 其中,fd[0]用于读管道,fd[1]用于写管道。若成功则返回零,否则返回-1,错误原因存于errno中。 三、有名管道:FIFO int mkfifo(const char* pathname,mode_t mode) open时使用O_NONBLOCK,访问要求无法满足则立即出错返回。erron是ENXIO。 例子: fread.c //读文件 #include #include #define FIFO “myfifo” main{ int fd; char buff[100]; if(access(FIFO,F_OK) == -1){ mkfifo(FIFO,0777); } fd=open(FIFO,O_RDONLY|O_NONBLOCK); //设置非阻塞打开,否则当没有输入时,会阻塞在read函数 int num; while(1){ memset(buff,‘ ‘,100); //如不清空最后的字符会出现乱码 if((num=read(fd,buff,100))==0){ printf(“waiting.....n”); sleep(1); continue; } printf(“read %d in fifo , it‘s %s”,num,buff); sleep(1); } } fwrite.c //写文件 #include #include #include #define FIFO “myfifo” main(){ int fd; char buff[100]; memset(buff,‘ ‘,100); scanf(“%s”,buff); if(access(FIFO,F_OK) == -1){ mkfifo(FIFO,0777); } fd=open(FIFO,O_WRONLY); int num; num=write(fd,buff,strlen(buff)); printf(“%d char is written! It‘s %sn”,num,buff); } · 所需具备的背景知识 · 开发所需的基本环境 · 获得帮助的途径 · 通过一个实例了解基本步骤 Prerequisite 先决条件: 在Linux上编写 C 程序,至少要熟悉以下两方面的基础知识: 1. C语言的编程基础,至少要知道一些基本的语法,控制流程等编程常识。 对常用的标准 C 函数库有常识性的了解。 2. 对Linux/UNIX 的操作有常识性的了解,掌握常用的shell 命令,如 ls, cat, cp, mkdir …etc. Environment 所需环境: 1. Linux/ Unix 的操作系统,也可以使用windows下的cygwin。 我们这里讨论的都是通过shell命令行进行操作的。那如果进入了图形界面的Linux 怎么办呢?只要打开一个终端命令,就和命令行环境完全一样了(打开开始菜单可以找到终端命令)。 2. 必备的开发工具: 1) 输入程序需要一个编辑器。常用的有 vi , emacs. 在命令行上输入 vi, emacs, … 就可进入编辑环境 关于 vi 关于 EMACS 2) C语言的编译器。常用的是GNU的c语言编译器 gcc(编译 C 程序), g++(编译 C ++程序)。 关于 gcc / g++ 关于 makefile >>>>用于简化编译过程 这里有一片入门文章 Linux下C语言编程基础知识,可以先看一下 3) 调试程序的常用工具:gdb. 关于 gdb Get help获得帮助: 关于 Linux 的文档是非常丰富的, 最快捷,方便,全面的资料就在你的机器里,不要浪费。 在命令行上输入shell命令 man 或者 info: $man gcc >>>>这个命令可以获得GNU 的C语言编译器的文档。当然,他们是英文的。 关于 man 关于 info 网络上的资源也很多,多得以至于不知道什么才是自己最需要的。关于如何获得有价值的信息 看一下 loveunix 上的相关资源 >>>> Basic steps 基本步骤: 1. 输入源代码 2. 编译,链接,运行 3. 调试程序 我们从最基本的 hello world 程序开始,实际操作一下: 1. 输入源代码 引用 $ emacs hello.c >>>>进入emacs 编辑器环境#include >>>如果你看不懂这个函数,就去好好的看c语言的书int main(){printf(“Hello World. ”); >>>>Emacs环境下,按下 Tab 键,有自动缩进功能exit(0);} 完成输入后,按住CTRL 键,按下 x, 再按下 c , 最后松开 CTRL。 >>>>程序保留并退出emacs 环境。 2. 编译,链接,运行 引用 $ gcc –o hello hello.c$ ./hello >>>>./ 指明了所执行程序的路径Hello World.$ 一个linux平台上的c程序开发已经完成咯 3. 调试 如果要使用 gdb 调试程序,那么在上一步编译的时候,记得加上 –g 选项 引用 $ gcc –g –o hello hello.c$ gdb hello >>>>进入 gdb 调试环境 1 C语言 1.1 C语言特点 C语言在计算机语言编程中应用最流行、最广泛, 在学习中应对C语言有一点了解, 在使用过程中, C语言具有以下的特点: (1) C语言比较紧凑、操作灵活、操作方便, 没有非常严格的语法限制, 比较自由的书写程序过程, C语言有效结合了低级语言的实用性及高级语言的结构性, 功能非常强大。 (2) C语言应用范围广泛。C语言是学习其他语言程序的基础, 可植性比较强, 在多种操作系统中, 皆适用C语言, 可以灵活使用运算符, 实现编程的高效性。 (3) C语言的语法中数据结构多种多样, 简单复杂皆有, 图形处理能力甚强。 (4) C语言可以使用数据和代码分割, 具有结构式的语言特点, 程序层次清晰, 便于维护、使用及调式进行。C语言能够对物理地址进行直接访问以及各种操作。因此, C语言是学生学习计算机课程并不可少的一门知识, 但要学好C语言, 盲目的学习是不对的。 1.2 C语言的产生背景 1970年美国的Ken Thompson, 以BCPL语言作为基础, 然后设计出简单且接近硬件的B语言, 但是B语言功能比较有限, 过于简单。1972年~1973年, 美国D·M在B语言基础之上设计出C语言, C语言的出现给程序的编写带来不少便利, 而且编写程序比较自由, 吸引许多软件使用它。C语言语法里的运算和程序非常丰富, 编写程序的运算方法很多, 拥有可以实现一些高级程序都无法实现的功能, 且C语言用起来比较灵活, 在运算各种数据结构时, 不管事简单还是复杂, 都可以简单实现。C语言不仅在运算和程序编写上更加便利, 且可以直接访问地址, 并进行操作, 较快较容易的对程序进行编译以及控制。 2 学习 虽然许多学生选择计算机专业, 努力学习C语言, 但是学生仍然很难对C语言产生兴趣。C语言是计算机专业学习的基础课程, 且功能强大, 用途广泛。随着经济迅速发展, 第三产业越发越重要, 计算机相关的产业所占比重越来越大, C语言功能强大, 在计算机中越来越受到重视。 针对C语言的学习, 仅仅是课堂的理论传授远远不够, C语言理论比较丰富, 集合众多语言特点, 通过直接的感官方式教授给学生, 学生难以完全理解。如果教师能够把内容通过直观的方式展示出来, 比如让学生上机操作, 让理论与实践相结合, 提高学生对C语言的学习兴趣。 C语言中包含比较复杂的结构和算法, 许多学生难以理解, 只能简单的记忆, 但是学习效果比较低, 且学生觉得枯燥, 没有较高的学习兴趣, 在学生学习理论的同时, 应该多上机操作, 更加容易的掌握C语言的规律和方法。教师要注意自己的教学方法, 不能简单的进行实践教学与理论教学, 要关注学生, 加强学生与教师的沟通, 帮助学生理解课堂课外的C语言相关知识, 在教授知识之外, 教师要突出C语言在计算机学习中的重要性, 让学生更容易、深入的理解及分析C语言, 增加学习兴趣。 3 C语言编程的技巧 学生觉得C语言抽象、难以理解, 归根结底是没有找到学习的技巧, 对于刚入门者说, 学习C语言比较吃力, 学习任何一项技能都需要一个过程, 关键在于掌握其精髓, 掌握其中精髓再学习这门课程就容易许多。对于C语言, 编程技巧非常重要。 (1) 指针的掌握。掌握指针是C语言中比较重要的技巧, 指针虽有消耗内存的缺点, 但指针在运算中速度加快, 编程语句也更加容易, 指针的耗内存虽大, 但对整个编程而言却是微不足道。学生在学习指针这一章节时, 需加强学习能力, 除学习课堂知识之外, 可以多在网上查询资料, 进行补充, 掌握好指针这一技巧。 (2) 掌握数学知识。在学习计算机过程中, 数学知识的重要性不容小觑, 能够解决C语言运算中的许多问题, IT界有一句话叫“数学是计算机之母”, 可见数学对计算机的重要性。在C语言学习中, 逻辑思维较好的同学可以较容易的学习C语言, 进行编程前会分析, 选择更加简单的运算方法, 因此, 数学知识对学习C语言起很大作用。 (3) 掌握位运算。位运算的使用可以方便简洁代码, 提高运算效率, 较快解决问题。在计算机程序中, 位是最小数据单位, 是所有操作和运算的基础单位, 位运算是所有操作的基础运算程序。当然具体问题需要具体分析, 提高学生兴趣和编程效率, 让C语言的应用更加广泛最为重要。 4 结语 在学习C语言的过程中, 学生应准确了解C语言的特点, 学习并掌握C语言的编程技巧, 提高学生的学习兴趣, 学习更加具有目的性, 提高C语言的学习效率以及学习质量。培养学生的编程能力, 能够更好的服务社会。 摘要:随着时代的发展, 信息技术发展迅速, 计算机人才被社会所大量需求。因此大学中大都设立计算机专业, 为社会培养所需人才, C语言是计算机专业的重要课程之一, 是大一课程学习中比较基础的一门课程, C语言功能强大, 对于学生以后专业基础起到很大的作用, 但是学生学习效果并不是很好, 即使努力学习也没有得到预期的效果。笔者对C语言编程技巧在C语言学习进行研究, 并且提出解决措施。 关键词:C语言,学习编程,语言特点 参考文献 【关键词】高校教学;C语言;教学策略 【分类号】G642;TP312.1-4 C语言编程是一门兼具高级编程语言以及汇编语言共性的编程语言,应用广泛,不仅适用于编写各种工作系统程序,还可作为各种智能化程序设计语言。C语言编程过程中不依靠硬件,因此具有较强的实用性。当前C语言成为各大高校必开设的教学课程,学习好C语言后能够有效提升学生的竞争力,对学生就业有重要帮助,C语言教学过程中可结合其实际运用进行教学创新,提升教学效果。 1 教师在C语言编程教学中应注意的问题 计算机技术在未来社会的重要性不言而喻,现今C语言已经普及到各大高校教学中,为高校培养综合型人才提供有效途径。社会对计算机技术人才需求不断增加,无论是否计算机专业学生都需要掌握一定基础编程语言,C语言作为众多编程语言的代表成为高校的首选。学生学习好C语言编程不仅有利于拓宽个人知识面,还能够提高个人求职能力。教师在C语言教学过程中必须注意以下几个问题。 1.1 教学中强调C语言编程重要性 C语言并非高深编程语言,若在学习中找到学习技巧便能够快速入门。然而对于大多没有计算机编程语言基础的学生而言C语言如同无字天书般无法捉摸。一些学生在刚开始学习C语言时往往觉得课程难度太大而无法持续跟进,产生放弃学习的念头。学生初学C语言时往往无法了解C语言基础构建,很多学生仁威C语言构建过于复杂,而VFP等编程语言学习起来更加容易,也能够实现C语言的一些功能。教师应该让学生摒弃这种片面想法,介绍C语言相比于其他语言具备的独特优势,例如C语言是实现人工智能的基础,二其他语言在应用上过于片面等。初期学习C语言遇到各种困难时必然的,只要坚持不懈必然会取得骄人成绩。因此教师在教学中必须向学生强调C语言的重要性。教学前应该让学生对C语言有初步了解,向学生大致介绍C语言组成框架,并将其和其他编程语言的练习区别进行初步讲解,加深学生对C语言的第一印象。 1.2 利用VC程序展开教学 VC是计算机教学中比较先进的教学软件,全程为Visual +6.0,由微软公司开发,在应用上具有一定灵活性。相比于其他教学软件,VC具有独特优势,但若想熟练掌握VC却有相当难度。教师在教学中使用VC展开教学能够有效提升教学效果,该软件具备的WIN API方式以及MFC方式能够有效激发学生的学习兴趣,从而变学生被动学习为主动学习。 2 教学中提高学生C语言编程能力的教学策略 2.1 突出教学重点,明确学习任务 教师在教学中应该让学生带着目的学习。相对而言C语言是一门形式较为新颖的学科,学生在教学中往往容易迷失学习方向,因此教师在教学前需让学生了解本节课教学重点,学生了解终点后便能够在学习过程中有针对性吸收精华知识。教师在教之初应让学生明白学习C语言的关键之处在于灵活掌握并运用32个常见字以及常用库函数等知识。其次C语言教学并非仅靠教师讲解便可完成教学任务,整个教学过程需要学生参与,教师在教学过程中可以根据教学内容罗列出关键知识点并注明学习先后顺序,在教学过程中采用循序渐进引导方式,让学生掌握各关键知识点,最后将知识归纳在一起,形成系统性知识链。例如在进行signed以及long等程序整理数据知识教学时可首先提高学生该部分基础知识的掌握,在此基础上通过实题演练,通过电脑进行编程,让学生直观这些函数实用性。对于教学中一些教学难点,教师可以在教学中将其穿插于其他知识点反复讲解,加深学生对知识难点的理解,重复教学。 2.2 采用现代教学方法提高教学质量 随着科学技术不断发展,一些科技转变为教学辅助手段渗透到日常教学中,例如多媒体技术已经成为各大高校主要教学手段,因此教师在教学中可以借助这些现代教学手段提高教学质量。例如可以在教学中采用电子白板教学。C语言编程教学常见的例题有三种,分别为找错题、填空题、编程题,这三种类型例题也是当前C语言考试必考题。教师可以借助电子白板将这三种题型展示出来,并让学生在电子白板上自由书写,通过电子白板的支持能有效提高教学效率,免去书写习题题目的时间,同时该种教学方式具有一定人性化,学生可以在白板上通过书写方式展开练习,是学生最为熟悉的演练方式。通过现代教学技术还能够促进教学方式多样性,学生在教学过程中更为直观接触到C语言相关知识内容,便于快速吸收并消化知识点,为后续学习扫清障碍。 2.3 教学中避免出现概念混淆 C语言中含有大量概念性知识,对于初学者而言若容易出现概念混淆的情况。因此教学过程中教师必须强调学生注意对新知识新概念的理解,对于相似概念一定要从这些知识点不同之处展开记忆,把握知识体系。教师可在教学中对一些知识点进行系统性归纳总结,将容易混淆以及难以理解的知识点放在一起进行比较,让学生从根本上明白这些教学内容之间的练习和区别。例如在C语言中具有相同概念的知识就有循环结构以及分支结构,相似概念有指针和指针运算,教师在针对此类知识教学时须注意教学方法,避免学生走入学习盲区。 2.4 借助计算机网络加强学生自主学习能力 教师不仅需要在课堂教学发挥其作用,还需将其作用延续至课后,学生自学过程中由于缺少教师的支持,自学难以展开,效果不佳。教师可以利用网络平台向学生提供教学知识点以及教学视频,让学生在课后能够展开自主学习。其次教师可利用现代通讯工具和学生展开交流,学生有问题时可利用通讯工具向教师请教,教师可随时随地向学生传授知识,便于教学过程更好展开。 结束语: 提高各高校C语言教学效果不言而喻,当前教学中提高教学效果方式多种多样,教师在教学中应结合实际情况采取最佳教学方法提高学生C语言编程能力,为学生日后更深入的学习以及求职奠定基础。 【参考文献】 [1]刘向阳.C语言程序设计教学方法研究[J].科技信息,2013,(16):264. [2]曾正军.在教学中对学生C语言编程能力的培养[J].南昌高专学报,2004,19(1):76-76,78. [3]李海勝.C语言程序设计的教学思考[J].时代教育,2014,(7):180-180. 【c语言高效编程的几招】推荐阅读: c语言编程心得07-22 大一c语言期末编程题10-07 C语言编程期末试题答案10-08 c语言总结07-15 小学语文高效课堂的几点反思09-30 c语言概念题09-22 C语言教学建议10-25 c语言递归程序11-06 c语言设计程序11-11 关于创建高效课堂的几点心得体会10-04c语言高效编程的几招 篇5
c语言高效编程的几招 篇6
c语言高效编程的几招 篇7
c语言高效编程的几招 篇8