c语言源程序(精选8篇)
void main()
{
int driver,mode;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,“");
setcolor(15);
line(66,66,88,88);
lineto(100,100);
linerel(36,64);
getch();
restorecrtmode();
}
--------------
#include
#include
void circlePoint(int x,int y)/*八分法画圆程序*/
{
circle(320 x*20,240 y*20,3);
circle(320 y*20,240 x*20,3);
circle(320-y*20,240 x*20,3);
circle(320-x*20,240 y*20,3);
circle(320-x*20,240 y*20,3);
circle(320-x*20,240-y*20,3);
circle(320-y*20,240-x*20,3);
circle(320 y*20,240-x*20,3);
circle(320 x*20,240-y*20,3);
}
void MidBresenhamcircle(int r)/* 中点Bresenham算法画圆的程序 */
{
int x,y,d;
x=0;y=r;d=1-r;/* 计算初始值 */
while(x { circlePoint(x,y);/* 绘制点(x,y)及其在八分圆中的另外7个对称点 */ if(d<0)d =2*x 3;/* 根据误差项d的判断,决定非最大位移方向上是走还是不走 */ else { d =2*(x-y)5; y--; } x; delay(900000); } /* while */ } main() { int i,j,r,graphmode,graphdriver; detectgraph(&graphdriver,&graphmode); initgraph(&graphdriver,&graphmode,” “); printf(”中点Bresenhamcircle算法画圆的程序n“);/*提示信息*/ printf(”注意 |r|<=11“); printf(”n输入半径值 r:“); scanf(”%d“,&r); printf(”按任意键显示图形...“); getch(); cleardevice(); setbkcolor(BLACK); for(i=20;i<=620;i =20)/*使用双循环画点函数画出表格中的纵坐标*/ for(j=20;j<=460;j) putpixel(i,j,2); for(j=20;j<=460;j =20)/*使用双循环画点函数画出表格中的横坐标*/ for(i=20;i<=620;i) putpixel(i,j,2); outtextxy(320,245,”0“);/*原点坐标*/ outtextxy(320-5*20,245,”-5“);circle(320-5*20,240,2);/*横坐标值*/ outtextxy(320 5*20,245,”5“);circle(320 5*20,240,2); outtextxy(320-10*20,245,”-10“);circle(320-10*20,240,2); outtextxy(320 10*20,245,”10“);circle(320 10*20,240,2); outtextxy(320-15*20,245,”-15“);circle(320-15*20,240,2); outtextxy(320 15*20,245,”15“);circle(320 15*20,240,2); outtextxy(320,240-5*20,”-5“);circle(320,240-5*20,2);/*纵坐标值*/ outtextxy(320,240 5*20,”5“);circle(320,240 5*20,2); outtextxy(320,240-10*20,”-10“);circle(320,240-10*20,2); outtextxy(320,240 10*20,”10“);circle(320,240 10*20,2); outtextxy(20,10,”The center of the circle is(0,0)“);/*坐标轴左上角显示提示信息*/ setcolor(RED);/*标记坐标轴*/ line(20,240,620,240);outtextxy(320 15*20,230,”X“); line(320,20,320,460);outtextxy(330,20,”Y“); setcolor(YELLOW); MidBresenhamcircle(r); setcolor(BLUE);/*绘制圆*/ circle(320,240,r*20); setcolor(2); getch(); closegraph(); } -------------------------#include void main() { int driver,mode; driver=DETECT; mode=0; initgraph(&driver,&mode,”"); setcolor(15); circle(20,20,20); getch(); 关键词:C语言,Fortran语言,混合语言编程,Windows,Linux 随着微型计算机的高速发展和普及,数值模拟或者数值仿真在科研与工程中的应用范围越来越广。物理问题的数值模拟过程必须通过由高级计算机语言(如C,Fortran,C++等等)所编写的计算机程序来实现。Fortran语言因其在数值计算方面具有其特有的优势以及流程简洁,易懂的特点,从而倍受从事数值计算的科研人员的喜爱。在www.netlib.org网站上可以下载到大量成熟的、开放的、以Fortran语言编写的数值计算的源程序。这些程序是从事数值计算的科研人员和工程师的知识宝库。它们可以很容易地向零件装配一样移植到我们自己的程序之中,从而可以节约大量宝贵的时间,避免了不必要的重复劳动。随着计算机技术的不断发展,C、C++等高级计算机语言越来越受到人们的喜爱。尤其当程序中要处理大量的字符串时,这些语言比Fortran语言具有明显的优势。因此,为了兼顾Fortran语言和C语言等的优势,所以现在混合编程得到了越来越多的应用。 Windows操作系统下的混合编程在Compaq Visual Fortran 6.6的帮助文件[1]中有较为详细的介绍。对于初学者来说,仅靠参考该帮助文件而来很好地实现Fortran与C或C++的混合编程还是比较困难的。为此,国内有些学者已经发表了在这方面的研究和体会。肖晓玲等[2]、周振红等[3]以及简建勇等[4]研究了VC与Fortran的混合语言编程。他们详细地描述了VC与Fortran之间的调用约定,命名约定以及参数传递方式。两文中均没有完整的混合语言编程源程序以供参考。黄芝平等[5]研究了VC++6.0与Fortran PowerStation4.0之间的混合语言编程。文中将Fortran语言源程序制作成动态链接库的例子非常具有参考价值,初学者参考后易于实现。在此期间,张向强,陈志英[6]也研究了VC++6.0与Fortran PowerStation 4.0之间的混合语言编程。2006年,章大勇,郑海[7]研究了VC++可执行程序调用Fortran语言编写的可执行程序的混合语言编程方法。该方法并不涉及这两种语言之间的混合程序编写问题。最近,亓雪冬等[8]研究了Linux操作系统下Fortran与C语言的混合编程方法。文中介绍了若干种Fortran与C混合编程的方法。与前面列举的大部分参考文献一样,文中没有给出完整的可直接执行的源程序。 Fortran与VC++或C语言的混合编程应用越来越广泛。随着Linux操作系统被越来越多的人接受以及大规模数值计算的需求,Fortran与VC++或C语言混合编程在Linux操作系统下的应用也越来越多。因为Fortran与VC++和C语言混合编程差别不大,所以这里下面我们仅讨论Fortran与C语言的混合编程问题且仅限于C语言程序调用Fortran语言程序。由于目前有关这类混合语言编程的可以直接运行并且能够清晰地说明混合编程的过程的可参考的源程序比较缺少,因此本文结合所研究的C语言程序在不同操作系统下调用Fortran语言程序的方法的基础上给出了完整的可直接执行的混合语言编程源程序。 1 C与Fortran的混合编程语法 1.1 Windows操作系统下的混合语言编程语法 本文所用的Windows操作系统下的软件环境是在计算机上同时安装了Microsoft Visual C++6.0和Compaq Visual Fortran 6.0(或升级至6.6)。 命名规则:需要注意的是Fortran语言不区分字母的大小写,而C语言中是严格区分字母的大小写的。Fortran语言中的subroutine或function的名字在C语言中声明或调用时是以该名称的全部小写方式实现的。例如,Fortran编写的subroutine Gauss_Integration在C语言中声明时应为extern void gauss_integration();。该例子表明Fortran语言中的subroutine对应C语言中的void函数。Fortran中的函数对应C语言中同类型的函数。不同的是C语言中没有自带复数类型。因此对于Fortran中的复数类型的函数或变量,在C语言中必须自己建立复数结构如下来与Fortran语言中的复数类型匹配。 参数传递:在Fortran语言中所有参数都是以传址的方式传递的。而C语言中默认只有数组是以传址的方式传递的,其它参数都以传值的方式传递。因为C语言对指针操作非常方便,所以我们推荐在C语言调用Fortran语言的subroutine或function时所有的参数都采用传址的方式。这样做的好处是可以减少传递错误的发生。参数传递中特别需要注意的是数组的传递。首先是Fortran中的数组下标默认是从1开始的,而C语言中是从0开始的。其次,Fortran与C语言中的数组在内存中的存储方式是不同的。Fortran中数组是以列为主排列的,而C语言中的数组是以行为主排列的。例如一个二维数组在Fortran语言中该数组在内存中的存储方式为,(11,21,12,22),而在C语言中的存储方式为,(11,21,12,22)。关于这方面的详细描述可以参考文献[3,9]。Fortran中的全局变量传递到C语言中有两种方式。一种方法是利用Fortran语言的common语句,它对应C语言中同名的结构。例如common/examp3/number,对应C语言中的结构extern struct examp3;。另一种方式就是用module的方式。例如,module examp/real rnumber1/end module examp(这里/表示回车换行)对应C语言中的全局变量extern float EXAMP_mp_NUMBER1;。该例子说明两点,一是module方式的全局变量在C语言中除字母mp小写外,其它部分必须大写。二是Fortran中的real类型与C语言中的float相对等,而real*8(或double precision)与C语言中的double类型相对应。 此外,需要补充的是文献[1]中举例说明Fortran中的type类型与C语言中的结构对应。但是遗憾的是作者多次试验都没有成功。至今也没有在文献中或网络上发现有这方面成功的案例。 1.2 Linux操作系统下混合语言编程语法 在Windows操作系统下的Visual Fortran 6.0和VC++6.0编译器中所编写的C语言程序调用Fortran语言程序的混合语言编程程序不能直接在Linux操作系统下运行。针对不同的Linux操作系统混合编程语法也会略有不同。这里以Openuse 10.2,Fedora release 9和Centos release 4.5为例来简要介绍Linux操作系统下C语言程序调用Fortran语言程序的混合语言编程语法。重点是实用性。 首先是Windows操作系统下C语言程序中常用的以下头文件在Linux操作系统下一般是不需要的。 #include 而头文件math.h在两个系统中当用到特定的数学函数时都是需要的 其次,在采用编译器默认选项的情况下Windows操作系统中C语言程序调用的Fortran语言所编写的函数名在Linux操作系统中必须在该函数名后加一下划线。例如,Window操作系统中C语言程序调用的Fortran语言所编写的函数名为gauss_integration,那么该函数在Linux操作系统下的函数名应为gauss_integration_。当C语言程序调用Fortran语言程序时如果所有参数都采用传址方式传递的话,在Linux操作系统下对应函数的参数传递部分与在Windows操作系统下的情形完全相同,不需要做任何修改。 最后,必须注意的是在Linux操作系统下连接C语言程序的目标文件和Fortran语言程序的目标文件时最好使用编译器gfortran。否则的话,将发生Fortran程序中write,read等命令无法识别的错误。 2 C与Fortran混合语言编程实例 Windows操作系统下的源程序 在Windows操作系统下安装编译器Microsoft Visual C++6.0和Compaq Visual Fortran 6.0。然后建立一个win32 console application类型的project,把以上两个源程序文件加入到该project中即可编译运行。运行结果如下: 3 Linux操作系统下的源程序 C语言程序调用的Fortran语言程序c_call_for.f90与上面Windows系统下的文件完全相同,不需要做任何变动。 在Linux操作系统下,作者还没有成功地实现Windows操作系统下已经实现的全局变量传递,例如Windows系统下的number和number1。全局变量在C语言程序和Fortran语言程序间的传递可以间接地通过函数参数传递来实现。即全局变量传递成功与否对C和Fortran语言混合语言编程影响不大。 上面的程序在Openuse 10.2,Fedora release 9和Centos release 4.5三个Linux版本下都成功地运行过。在每个版本下都必须同时安装cc和gfortran编译器。对于本例的编译过程如下, 4 结束语 通过多次数值试验深入探索和研究了Windows操作系统和Linux操作系统下C语言程序调用Fortran语言程序的混合语言编程过程和技巧。文中以完整实例说明了在这两个不同操作系统下实现C与Fortran语言混合语言编程的区别与联系。所编写的完整实例有助于理解和实现混合语言编程,从而提高学习和应用C与Fortran语言混合语言编程的工作效率。该实例具有很好的通用性,只要稍加修改即可被参考者所利用。 参考文献 [1]Programming with Mixed Languages[R].Compaq Visual Fortran Version 6.6 online documentation,2001. [2]肖晓玲,卢正鼎,张翔.VC与Fortran混合语言编程[J].江汉石油学院学报,2000,22(2):71-74. [3]周振红,颜国红,吴虹娟.Fortran与VisualC++混合编程研究[J].武汉大学学报,2001,34(2):84-87. [4]简建勇,曹志宇,燕乔.混合语言编程在有限元法中的应用[J].岩土力学,2003,24(增1):140-142. [5]黄芝平,戴路,杨波.VC++6.0与PowerStation 4.0混合语言编程[J].微计算机信息2001,17-1:67-68. [6]张向强,陈志英.Visual C++与Fortran的混编[J].计算机工程,2001,27(1):160-161. [7]章大勇,郑海.VC++与Fortran混合编程方法研究[J].计算机工程与设计,2006,27(12):2246-2247. [8]亓雪冬,仝兆岐,何潮观.Linux环境中Fortran与C混合编程研究[J].计算机工程与设计,2008,29(9):2378-2380. 关键词:C语言;项目化教学;教学方法 中图分类号:TP312.1-4 文献标识码:A 文章编号:1674-7712 (2014) 18-0000-01 《C语言程序设计》作为计算机专业的基础课,在整个课程体系中占有重要地位。在C语言教学过程中,教师的教学方法和学生的理解接受能力的差异,对教学效果都会产生直接的影响。总结多年来的教学经验和教学体会,结合学生在学习程序设计类课程的思维规律和模式,把一些经验和方法总结出来,希望能对C语言教学有所帮助。 一、现行教学和学习中存在的问题 现行教学中理论课与实践课相对分离,不能相互促进。理论课中往往只注重对教材知识的分析和灌输,而在实践课程中,老师很难监控到每个学生,了解他们是否都在认真编写、调试程序。这就造成理论课没有起到为实践课打基础的作用,实践课也没有起到巩固、应用理论课的作用。《C语言程序设计》是一个逻辑性很强的课程。学生在面对具体的程序设计时遇到的问题与教材中的内容相距甚远,这使大多数同学感到无从下手。这其中的原因可以分成两类:一方面目前高校使用的大多数教材中,结构都基本相同。在每一章介绍完了概念之后,提供一些例题解释相关概念的使用方法,并在章节结束后针对本章中出现的内容提供一些练习题。考试也主要是测试学生对于教材内容的掌握程度,而与实际应用相距较大。这种考试实际上主要是测试学生对书本中的基本知识的掌握程度,而忽略了对学生解决实际问题的能力的培养。另一方面为了应付考试,学生更多注意的是教材中的典型例题与老师指定的重点内容,对于程序的系统概念没有真正理解,特别是没有程序整体设计的概念。这样做的结果就是学生在学习时一切围绕老师讲课的内容,特别是老师讲授的例题。学生在学习的过程中,没有注意如何综合运用相关内容来解决具体问题,导致学生在学完程序设计课程进入应用阶段时,面对具体的专业设计要求无从下手。 二、提高教学效果的方法和途径 (一)明确课程目标。本课程的目标主要是提高学生解决实际问题的能力,适应社会需求。对C语言程序设计课程的教学而言,强调实践性是在教学中特别重要的问题。老师的教学不应仅仅是传授知识,应该以培养学生的实际应用能力为主。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序,一些细节、具体规则和进一步的知识可以让学生在今后的应用中来不断学习和掌握。教师应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。 (二)进行教学改革。1.教学内容改革。高职学校学生的培养就是要直接面对社会需求,招之即能用。因此,程序设计课程要以社会对编程能力的需求和技术发展为依据,调整教学大纲和教学内容,以适应技术岗位能力要求,设计课程体系。在课程设置与建设中,要充分体现教学内容在训练和提高学生实践能力方面的要求,强化学生的实际开发和应用能力。总结本人多年的教学经验,结合其他老师成功的教学方法,采用项目化教学方法可以达到很好的效果。这个项目应具有以下几个特点:(1)实用性。本项目就是一个具体的实际需求,是解决现实性中一个实际问题而设计,这样也能提高学生的兴趣和热情;(2)完整性。本项目的程序设计是系统的、完整的,要能全面运用整个课程学习的知识,案例的设计贯穿整个课程的学习,随着课程的学习不断完善。 2.改变教学思想和方法。培养学生对C语言的兴趣及正确的思维模式。《C语言程序设计》注重由设计算法到书写程序并进行调试的整个过程,显得抽象、复杂,这也是大多数学生抱怨程序设计太难、太深奥、不好学的主要原因。在教学过程中,先介绍项目的整个程序设计框架,目的是使学生先对程序有个初步的印象,再结合教材,简单介绍该例子中用到的语句,让学生对该语言的学习有一个大概的了解,避免学生对学习语言望而生畏。整个教学过程中应该把“解题思路、方法和步骤”当作授课的重点,从而让学生明白如何分析、解决实际问题,逐渐培养学生进行程序设计的正确思维模式。计算机语言程序设计中算法是其灵魂,是教学重点,也是教学难点,而语言只是表示形式。没有正确的算法,计算机将解决不了任何问题。对于C语言所涉及到的算法,应进行部分精讲多练。通过案例分析,重点讲解程序设计的思想和方法,辅以語言知识的介绍,将课程内容分为若干个主题,以项目程序设计为贯穿各主题的主线。每个主题的教学过程由“要点讲解”、“练习/上机实践”和“疑难解答”三个阶段组成,然后提出项目中的问题,以学生独立完成为主,教师只提供必要的辅导,培养学生探索问题和解决问题的能力,更有利于创新能力的培养。整个课程教学围绕一个工程项目进行,通过逐步拓展的实训项目和设计,将每一阶段的学习进行小结性的贯穿与能力提高。将C的知识点都溶化到项目的程序编写中。 3.改革课程考核方式。(1)平时上机训练时给学生留一些编程习题,每次根据学生编写情况进行测评并占据期末总成绩30%;(2)期末前,要求学生完成本课程项目的整体设计,考核学生综合解决问题的能力,占据期末总成绩30%;(3)期末进行理论考试,占期末总成绩的40%。 (三)展示学生作品,激发学生的学习欲望。计算机软件课程具有多样性、复杂性和求异性特点,我们要针对每个学生任务完成的情况,让同学们展示自己的学生成果,及时肯定学生的成绩,这样会有利于激发学生的学习热情,保持学生的学习兴趣,对学生的后续学习将产生强大的动力和自信心。 (四)培养学生的自学能力和创造性。学生学习计算机语言的最终目的是编写满足实际需求的程序,所以在教学中教授的不仅仅是具体语言的语法知识,更重要的是通过这门语言学习,培养学生遇到实际问题自己分析问题、解决问题的能力。我们可以通过给学生布置作业的形式让同学们自学,老师既要要求学生独立思考、自主学习,又要鼓励学生间进行协作学习。教师可以分配一些比较复杂的问题,由几个学生组成一个小组合作解决,这样同学们可以互相探讨学习方法,协作解决一些遇到的问题。通过解决问题,锻炼学生综合应用知识的能力、培养其创造性和合作精神。 参考文献: C语言的非数值处理功能很强,因此它被广泛地应用于数据库管理系统和应用软件。大多数的关系数据库管理系统,如dBASE,Fox$ASE,ORACLE等,都是由C语言编写的。各种不同部门的应用软件也大都是用G语言开发的,C语言在开发数据库应用软件方面应用很广,深受开发者的欢迎。 2.图形图像来统的应用程序方面 C语言在图形图像的开发中也有着广泛的市场。很多图形图像系统,如AutoCAD通用图形系统等,就是使用C语言开发的,并且在这些图形系统中可以直接使用C语言编程,实现某些功能。C语言编译系统带有许多绘图功能的函数,利用这些函数开发图形应用软件十分方便。所开发的应用程序常用C语言编写接口界面,这样既方便又灵活,效果很好。这是因为该语言提供有图形处理功能,便于实现图形图像的各种操作。因此,C语言在图形图像的应用方面很好地发挥了它的作用。 3.编写与设备的接。程序方面 C语言不仅在建立友好界面方面有着广泛应用,如下拉式菜单、弹出菜单、多窗口技术等;而且在编写与设备的接口程序方面也有着广泛应用。这是因为C语言不仅具有高级语言的特性还具有低级语言的功能,因此,在编写接口程序方面十分方便,有时它与汇编语言一起使用,会显示出更高的效率。 4.数据结构方面 由于C语言提供了十分丰富的数据类型,不仅有基本数据类型还有构造的数据类型,如数组、结构和联合等,把它们用于较复杂的数据结构〔例如,链表、队列、伐、树等)中显得十分方便,这方面已有许多成熟的例程供选择使用。 5.排序和检索方面 排序和检索是数据处理中最常遇到并较为复杂的间题。使用C语言来编写排序和检索各种算法的程序既方便又简洁。特别是有些排序算法采用了递归方法进行编程,更显得清晰明了。因此、人们喜欢使用G语言来编写这方面的程序。 上述列举了五个方面的应用,但绝不是说C语言的应用仅限如此,而是说在这几个方面目前使用得更多些。C,语言可以说在各个领域中都可以倪用,并且都会有较好的效果。所以,C语言是当前被用于编程的最广泛的语言之一。 另外,C语言是一种结构化程序设计语言,在编写大型程序中也很方便,特别是该语言又提供了预处理功能,其中文件包含在多人同时开发一个大程序时将带来减少重复和提高效率等好处,因此,越来越多的人喜欢用C语言来开发大型程序。 1.计算机二级C语言程序设计考点:C语言的特点 2.计算机二级C语言程序设计考点解析:C语言程序实例 3.计算机二级C语言程序设计考点:指针 4.计算机二级C语言程序设计考点:数组 5.计算机二级C语言程序设计考点:函数 6.计算机二级C语言考点:字符型数据 7.计算机二级c语言试题 8.计算机二级C语言程序设计考点解析:常用的输人函数 9.计算机二级C语言程序设计考点:单词及词法规则 通过本次教师发展在线的C语程培训中,我受益匪浅,几位教授的精彩演讲,让我找到了自己的不足和日后教学中的改革方向和内容。同时,也让我感觉到了,有今天各位教授的良好教学效果,这其中包含了他们的艰辛、背后的大量付出和无私奉献。 我是一直从事C类语言的教学工作,对C语言的教学已有5年教龄,在这几年的教学过程中,我们也一直在寻找好的教学方法和新的教学理念。通过本次学习,我总结要教好《C语言程序设计》这门课,最基本要把握好以下几个方面: (一)要重视实践环节,上机调试成绩非常重要。 学习一门语言,就是要按照它的语法来编程。要编程,当然就要上机操作来验证你程序的正确性。所以上机非常重要,通过执行你所写的程序,完成你所写程序的目标,最终达到你的目的。而且通过执行程序,你会发现程序中的错误,从而使你了解你所学知识中的不足,同时,要学会根据编译时提示的错误来改正程序中发生的错误,以便下次不会再犯同样的错误。 (二)基本语法学习虽然枯草乏味,但是它相当于高楼大厦的一砖一瓦,一定要下硬功夫让学生掌握熟练。 C语言的语法部分。这部分内容是学好C语言的基础,只有学好了这些语法,才会写程序,看程序。所以对一个初学者来说,这部分内容是非常重要的,所以要扎实地熟悉每一个语法,并能根据这些语法来编程。 (三)学习要抓住重点,难点部分要多讲、多学、多练。 通过这次学习使得我对C语言的重点,难点,以及易出错的地方把握的更精准了。当然,这只是针对我个人而言。在C语言学习过程,重点就是数组,指针,以及结构体了。难点也是它们了,不过数组和结构体还是挺简单,所以在此主要就指针方面谈谈自己的看法。 下面谈谈通过这次学习,结合我们学校的教学情况,打算对该课程的教学进行如下几个方面的改革: (一)理论教学内容的组织 C语言的重点知识包括:结构化程序设计方法、流程图的组织、三种程序设计结构、三种基本数据类型和三种自定义数据类型;难点包括:结构程序设计方法、算法的分析、流程图的组织与设计、函数、指针等。 根据知识内容和每年的新学时安排,我们将理论教学内容分为授课内容和自学内容两大模块。 (1)授课内容 C语言的授课内容分为两阶段:①基础准备阶段 这部分内容确保学生“实用、够用”,主要包括三种基本数据类型(只要求掌握常用的int,float,char);三种常用运算符及其表达式(赋值、算术、逻辑(包括关系));三种程序设计结构(顺序、选择、循环)。②实训项目驱动阶段 这部分内容主要是“实训实战”,主要包括数组、函数、指针和结构体。通过第一阶段的学习,学生已经具备了一些程序设计的基础知识,在这一阶段将通过一个实训项目的完成来熟悉主要内容,同时巩固第一阶段的成果。 (2)自学内容 课本中的内容上课没重点介绍或者说就是没提到的,划为自学内容。但这些内容,我们并不是在课堂要求学生回去自学:要求过高,规矩过多,这样效果不佳。而是让学生在实验中发现问题后,带着问题去学习,去找答案。 例:整型 我们只介绍int基本类型,当学生想计算n!时,学生测试5!=120时,他可能会去测试20!、50!,这时,存放阶乘的变量Factorial再定义为int,结果就是0了,这时问题就来了,他就会去寻找正确的处理方法(long int)。 (二)实验教学的安排与设计 教学改革方案确定后,我们对本课程实验教学上从多方面进行了教学更新。我们考虑到学生处于了解计算机语言及编程的初级阶段,有许多最基础的内容有待掌握,所以本课程的实验教学不太适合完全以项目开发的形式进行,注重的是加强模块化实训。 (1)上好第一节实验课 我们常说“上好第一节课”,那么第一节实验节的重要性也不言而喻。这节课对培养学生的学习兴趣、增强学生的学习信心、锻炼学生的自主学习等多方面影响很大。 第一次实验项目是—熟悉Turbo C的运行环境,主要是掌握一些在TC中的一些键盘操作方式。一般是教师给学生提供程序代码(三个),但我们在学生不知情的情况下,给学生两个有语法错误的和一个正确的程序。这样,当学生运行正确的程序时,知道计算机可以帮我们处理问题,原来程序就是这样写的;当学生运行错误的程序,首先他会诧异(老师给的程序原来是错的),于是要求他们自己修改,尤其是有时一个致命错误导致的10多个errors,被学生修改后,没有了errors或所剩无几,这时学生表现的很兴奋、很有成就感,从而加强了本课程的学习兴趣和信心。 (2)分两阶段进行 实验内容与理论教学内容相互应,在基础准备阶段,这方面教学方法上主要是加强操练。通过各种大小程序、多重训练和一个问题的多种解法来加强语法知识点的掌握和训练,开阔学生编程的思路,掌握编程基础。同时,在这过程中我们严格把关,让学生课后认真准备,每次进实验室时,应有写好的完整代码,上机调试,发现问题同时解决问题,要求认真完成实验内容,并在课后书写实验报告。鼓励学生多写程序,要加强实践环节,首先要从量上有个划分。在实训项目驱动阶段。本阶段实训项目的设计非常重要,原则是既要使学生有切入点能够动手又要使各章的内容之间有联系点。 (三)案例教学法 C语言的教学,教师一般受传统应试教育的影响,狠抓理论考试,忽略了程序设计能力的培养,把授课重点放在程序设计语言的基本语法的讲授和掌握上,所选的编程实例大多用于语法规则的验证和说明,仅从程序设计语言的使用这个单一的角度进行教学,而使得大多数学生在学完本课程后,“吃不透、用不活”,表现为学生在程序调试时,对程序中出现的逻辑错误经常不知所措,在开发较大的应用程序时,不知道如何入手。 采用案例教学法,以程序设计为主线,以编程应用为驱动,通过案例和问题引出教材内容,重点讲解程序设计的思想和方法,穿插讲解相关的语言知识。使教学效果既有深度又有广度,学生实际动手能力大为增强。 7.1.1二维数组的定义 前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量。本小节只介绍二维数组,多维数组可由二维数组类推而得到。 二维数组定义的一般形式是:类型说明符 数组名[常量表达式1][常量表达式2] 其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如: int a[3][4];说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即: a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列,即放完一行之后顺次放入第二行。另一种是按列排列,即放完一列之后再顺次放入第二列。 在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节)。 7.1.2二维数组元素的引用 二维数组的元素也称为双下标变量,其表示的形式为: 数组名[下标][下标] 其中下标应为整型常量或整型表达式。例如: a[3][4] 表示a数组三行四列的元素。 下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。 【例7.6】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。 可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下: main(){ int i,j,s=0,average,v[3],a[5][3]; printf(“input scoren”); for(i=0;i<3;i++){ for(j=0;j<5;j++) { scanf(“%d”,&a[j][i]); s=s+a[j][i];} v[i]=s/5; s=0; } average =(v[0]+v[1]+v[2])/3; printf(“math:%dnc languag:%dndbase:%dn”,v[0],v[1],v[2]); printf(“total:%dn”, average);} 程序中首先用了一个双重循环。在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内循环后再把该累加成绩除以5送入v[i]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v[0],v[1],v[2]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。 7.1.3二维数组的初始化 二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。例如对数组a[5][3]: 按行分段赋值可写为: int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };按行连续赋值可写为: int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85}; 这两种赋初值的结果是完全相同的。 【例7.7】 main(){ int i,j,s=0, average,v[3]; int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}}; for(i=0;i<3;i++) { for(j=0;j<5;j++) s=s+a[j][i]; v[i]=s/5; s=0; } average=(v[0]+v[1]+v[2])/3; printf(“math:%dnc languag:%dndFoxpro:%dn”,v[0],v[1],v[2]); printf(“total:%dn”, average); } 对于二维数组初始化赋值还有以下说明: 可以只对部分元素赋初值,未赋初值的元素自动取0值。 例如: int a[3][3]={{1},{2},{3}};是对每一行的第一列元素赋值,未赋值的元素取0值。赋值后各元素的值为:0 0 0 0 0 0 int a [3][3]={{0,1},{0,0,2},{3}};赋值后的元素值为: 0 1 0 0 0 2 0 0 如对全部元素赋初值,则第一维的长度可以不给出。 例如: int a[3][3]={1,2,3,4,5,6,7,8,9};可以写为: int a[][3]={1,2,3,4,5,6,7,8,9}; 数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。C语言允许这种分解。 如二维数组a[3][4],可分解为三个一维数组,其数组名分别为: C语言是我校学生学习程序设计的入门语言,学生分析问题、解决问题的能力和程序设计思想的形成都与C语言有着密切的联系。C语言既具有高级语言的优点,又具有低级语言的许多特点,既可以用来编写系统软件,又可以用来编写应用软件。C语言语法限制不严格,程序设计自由度大,在使用时会出现一些“副作用”,再加上现行在教学过程中存在的一些弊端,所以在学习中学生普遍反映“难学”、“不懂”、“没兴趣”,这也是在C语言教学中普遍遇到的问题。 2 现行教学过程中存在的问题 2.1 以书本为中心,忽视学生能力的培养 以书本为中心的教学模式,采用从概念到概念的注入式教学,偏重于C语言语法知识的详细讲解,而对程序设计思想、程序设计方法和程序设计风格的介绍很少,对编程能力的培养不足,导致学生学不深、学不透、学不精,不会编写和调试程序,不会测试程序的正确性,编写的程序可读性很差,遇到稍微复杂的程序就读不懂,更不用说运用学到的概念去解决实际问题了。 2.2 以教师为主体,忽视学生的能动作用 以教师为主体的教学方法中,由于片面强调和突出教师的主导作用,忽视和压抑了学生的能动作用;片面地强调知识的传授和灌输,忽视了学生创新能力的培养;注重“知识型”人才,忽略了“智能型”人才的培养。在教学的过程中,教师只注重讲解概念、语法和程序,不注意调动学生的学习热情,学生被动接受灌输的知识,学习热情低,即使掌握了这些内容,也不能灵活运用,达不到举一反三的目的。 2.3 多媒体教学过分强调表现形式,忽略了内容本身 在现代化的教学过程中,利用投影仪、计算机、网络等现代设备开展多媒体辅助教学,具有较好的教学效果。但是在课件制作上过分强调表现形式,忽略了内容本身,往往造成喧宾夺主,达不到预期的效果;另外在课堂上,教师过分依赖课件演示,忽视与学生沟通,影响学生参与教学活动的积极性。 针对以上存在的不足,我们在对C语言教学过程中,开展了一系列的教学改革,在教学中采用案例教学法,强化师生互动,积极培养学生学习兴趣,并合理使用现代教育手段,取得了良好的教学效果。 3 教学改革方法 3.1 采用实例教学,突出能力培养 为了改变以书本为中的注入式教学方式,我们探索采用了实例教学法,以程序设计的需要带动语言知识的学习,在每个知识点上以引例开头,激发学生的好奇心和求知欲,从而促进学生成为教学主体,引导学生进行自主学习、合作学习、研究性学习,增强学生的综合应用能力,从而提高了教学质量,取得了良好的效果。 在实际教学实施过程中,我们采用了项目递进驱动教学法,改变满堂灌的做法,将学生的眼手脑全部调动起来。精心设计实例,给学生一个比较实际的切入点,通过教师的演示使学生感觉能够入手,然后再将此实例不断修改、扩充,引导学生参与到程序的编写过程中,并将学生设计的程序展示,让学生来评判优劣、吸收优点、修改错误,引导学生进行程序优化。比如在进行if语句的教学时,针对符号函数的求解,我们给出多种可能实现的程序段,让学生分析哪些程序段能够完成计算,哪些不能完成计算,对不能完成计算的程序段如何进行修正等。通过这些程序的分析,使他们加深了对if语句的理解,掌握了if与else的配对关系,并灵活运用去解决其他问题。 3.2 强化师生互动,激发学习学习热情,发挥学生主观能动性 在C语言教学中,我们大力强化师生互动,充分发挥学生的主观能动性,注重培养学生独立学习、独立思考、勇于创新的能力。师生互动教学我们采用了“问答式”、“讨论式”等多种形式。每一种方式都有其特点和特定的适用范围,在实际教学中我们根据具体情况加以灵活运用。 “问答式”就是教师事先设计好问题,启发学生思考,引导学生在问题解决中构造算法进而掌握相关的概念、语法、功能及应用。例如:要求学生编程实现输入三角形的三条边a,b,c,计算以这三个数为边长的三角形面积。我们可以适当进行提示提问:(1)输入的三条边能否构成三角形?(2)已知三边长,三角形面积该如何求呢?这就要结合中学时的数学知识,对于问题(1)用数学语言来描述为:两边之和大于第三边。那么用程序语言该如何描述呢,应该采用哪一种程序结构?顺序、选择还是循环?程序结构知道了,下一步就是根据数学公式计算面积。这样,逐步对学生进行提示和引导,可以使学生的思维一直处于活跃状态。 “讨论式”就是教师预先设定讨论题目和要求,由学生分组讨论的一种互动教学方式。它适用于课程中的重点难点问题。如在链表的教学中,我们就如何利用链表实现栈、队列,用链表实现与用数组实现各有什么优劣等问题时就采用“讨论式”教学方法。课前教师将问题提出来,让学生自己去思考。学生自由组合形成若干各小组,每个小组应有一位秘书,负责全程记录讨论过程,最后每个小组要出一份讨论报告,然后由每个小组推选一位学生上台讲解本组的实现方案,其他组的同学可自由提问,最后由教师对方案的可行性、是否有创新、须改进之处一一进行分析讲评。这种方式有利于培养学生的思维能力和协作能力,激发学生学习热情。 3.3 合理使用多媒体,提高教学效率 在教学中结合形象直观的事例或图形讲解概念,可以充分发挥学生的形象思维能力,不但易于理解和掌握,而且印象深刻,能有效地提高学习效率。因此在C语言教学中我们可利用多媒体代替传统的板书,将文本、图像、声音、动画结合起来,使抽象的内容变得形象生动,学生通过多种感官来获取知识,形成相关的概念。但是滥用多媒体教学,不但达不到预期的教学效果,反而会分散学生的注意力,削弱教师在教学过程中的主导作用,甚至影响学生的学习积极性。在C语言多媒体教学实践中,我们着重解决好以下问题。 3.3.1 课件内容与形式的关系 在制作C语言课件时,我们要根据课程的教学内容的性质和特点选择恰当的技术手段和表现形式,充分利用了各种媒体信息为教学内容服务。在课件制作上,不需要花时间、花精力对课件进行包装,刻意追求特技效应。在课堂教学中,过多的画面切换,容易造成学生在学习过程中应接不暇,对所学内容生吞活剥,能力的培养无从谈起。实践证明,附加信息和无关信息过多,虽然从心里上加深刺激了学生的感知能力,但却显得主次部分,容易分散学生的注意力。因此我们要求课件制作要务实,不必特别美观,也不必有很高的技术含量,涵盖的知识点也不必很多,只要能使抽象、难懂的内容变得直观、易懂,有利于学生更好地接受所学的知识就够了。 3.3.2 注意发挥教师的主导作用 虽然教学课件事先已经做好,但不是说在课堂上教师只充当“解说员”、“演示员”就可以了,这样可能会出现学生看了很多,听了很多,却不知道要学什么,什么是重点难点,而事与愿违。其实,多媒体辅助教学作为一种现代化的教学手段,是用来提高课堂教学效率、突破重难点、解决一些传统板书教学不容易理解的问题。作为教师应把握住自己在教学中的主导地位和作用,通过教学过程的设计和灵活多变的操作,使多媒体发挥最佳教学功能。 4 结束语 采用这些教学方法,有提出问题、解决问题、扩展问题、再解决问题、对解决问题方法的评价、优化等几个环节,实际上是一个螺旋式滚动向前的过程,在这个螺旋式不断向前的过程中,能够非常自然地调动学生参与的积极性,而且通过问题的扩展,通过一个问题的多种解决方法,使学生在课堂上真正地成为“主体”,教师扮演“主导”角色。当然,在改进和探索教学方法的同时,我们还要充分利用机房、网络和课外环境,启发和调动学生的学习积极性,培养和提高学生的自学能力。 参考文献 [1]中国高等院校计算机基础教育改革课题研究组.中国高等院校计算机基础教育课程体系2006[M].北京:清华大学出版社,2006. [2]全国高等院校计算机基础教育研究会.高等院校计算机基础教育经验汇编[M].北京:清华大学出版社,2008. 关键词:C语言;程序设计;教学方法 1.前言 C语言是目前最流行的、功能强大的、面向对象的编程语言,在教学过程中发现,学生经常会出现听得懂、编不出程序的现象,影响学生的在专业方面的需求。笔者结合多年教学经验,认为在教学过程中要将学生分为三个不同的阶段,具体为引导入门、基础充实和实践提高三个阶段,分阶段采用不同的教学方法与手段,提高教学效果。 2.引导入门阶段 学生刚开始学习《C语言程序设计》,感觉内容抽象,学习枯燥,失去学习兴趣,因而没有学习动力。入门阶段关键在于激发学生学习C语言程序设计的兴趣,引导学生入门。有些老师恨不得学生一下子掌握自己所有的知识,不知老师的知识是多年积累下来的,学生很难一下子接受,更不用说掌握了。教师对所教内容需精心选择,以简单有趣为主,关键是能够激发学生学习兴趣。可通过多媒体课件,用一些趣味性的程序或者小游戏来调动学生的积极性,提高他们学习编程的兴趣。学生具有差异性,为了让所有学生都能产生浓厚的学习兴趣,适宜采用分层教学法。入门阶段也需注重理论联系实际,但不必要求学生编程,可考虑让学生编辑或修改程序,可以通过给出源代码的、简单的并有详细输入、输出结果的程序,让学生进行编辑并调试,利用输出结果让学生收获成功的喜悦,以轻松愉快的心态学习程序设计。在此基础上,以循序渐进的方式,逐步引导,进行一些简单的修改,让程序得到不同的结果,并解释原因,然后提出新的问题,让学生思考如何修改程序以解决新的问题,培养学生的创造性。 3.基础充实阶段 兴趣是最好的老师,学生经过入门阶段的学习产生了兴趣,就可以进入基础充实阶段了。这一阶段主要是打基础,主要是一些基本概念的讲解和语法的学习,为提高教学质量,也要求老师能够根据不同的概念灵活采用教法,常用的教学方法有类比法、对比法、归纳法和实例教学等方法。 3.1教学方法 相对抽象的概念教学时可选用类比法,例如《数据及其类型》章节中类型的概念,可以采用类比法来进行教学,把C语言中所涉及的数据类型和生活中重量单位做类比,加深概念的认识;可以采用对比法传授《顺序、分支、循环》三种程序设计,通过对比,分清三种程序设计的异同,从根本上掌握三种程序设计。按顺序执行是顺序结构程序设计的特点;分支结构程序设计的特点是需要根据条件而执行不同的操作;而循环结构程序设计中存在重复执行的某种操作。在基础阶段,选取的例题要具有代表性,针对不同的知识点选择典型例题,重点是要学生通过典型例题的掌握,理解程序思想,教师可采用归纳教学法,帮助学生归纳出某一类型程序的程序设计。《指针》是C语言的精华,主要采用实例教学法,参照生活中具体的事例将理论实例化,指针就是地址,学会如何描述地址也就掌握了指针的主要应用(以一维数组和指针为例来进行说明)。一维数组中各元素的地址利用指针法描述,讲解时可以类比第一层教学楼的教室,例如a[O]所在的地址为东1 101,则a[1]所在的地址为东1102,可以假想P为一个人,处于东1101的位置,移动到东1 102即往下走了一个教室,即下一个元素的地址值为P+I。再运用类比的教学方法讲解二维数组和指针,应用类比法可以推广到更加一般的情形。 3.2教学手段 3.2.1科学安排内容,灵活运用多媒体课件 不必所有的内容都讲到,更不必所有内容详细讲,要科学安排内容,可以安排学生在老师的指点下自学简单的内容;如函数、指针等重点内容需要借助多媒体课件详细讲解,最好能够应用一些具有代表性的实例,让学生在理解的基础上掌握概念与思想。 3.2.2成立兴趣小组,培养学生的合作能力。 对一些学习能力较好的同学,以四到五人为单位,按照自愿的原则组织起来成立兴趣小组,通过小组内同学之间互相帮助,培养学生的团队合作精神;通过小组之间相互竞争,锻炼学生的竞争意识。还可以指导兴趣小组参与实际项目的开发,或者组织兴趣小組成员参加一些软件开发竞赛,进一步提高学生的实际动手能力。 3.2.3构建网络平台,加强学生学习的能力。 如今计算机网络已经走进校园,构建网络教学资源平台,构建一个学生可以在任何时候、反复进行互动学习的平台,提供一个师生互动的教学环境。分章节将知识重点、难点放在网站上,让学生通过网络自行解决实践课上那些出现的错误。学生利用网络把每次实践课上程序编写和调试中所犯的错误进行交流、总结,加强学生学习的能力。 4.实践提高阶段 实践提高阶段,采用最适合计算机软件应用课的教学方法项目教学法。通过实施一个完整的项目工作而进行的教学活动,采取小组讨论、协作学习的方式,学生学习的过程就是一个探究的过程。在C语言程序设计课程中应用这种方法的目的在于培养学生综合运用所学知识解决实际问题的能力。它将以往以传授知识为主的传统教学理念,转变为以解决问题、完成任务为主的多维互动式的教学理念;将再现式教学转变为探究式学习,使学生处于积极的学习状态,每一位学生都能根据自己对当前问题的理解,运用共有的知识和自己特有的经验提出方案、解决问题。改变过去单纯讲理论的现状,运用项目引导的方法,学生在分组解决项目的过程中学会语法的使用,逐步过渡到独立的编写简单小程序,通过项目训练多模块程序的编写,最终实现开发一定规模的大型程序。 5.结束语 【c语言源程序】推荐阅读: c语言递归程序11-06 c语言设计程序11-11 汉诺塔c语言程序07-15 c语言程序期末试卷09-22 c语言程序设计实验11-19 c语言程序设计作业三06-24 C语言图形程序设计报告10-13 c语言程序设计基础题10-28 c语言程序设计补充题11-17 c语言程序设计大作业11-21c语言源程序 篇2
浅探《C语言程序设计》教学 篇3
c语言源程序 篇4
C语言程序设计心得 篇5
c语言源程序 篇6
《C语言程序设计》教学实践 篇7
C语言程序设计教学方法探讨 篇8