关键词 实验教学;教学质量;程序设计;多媒体
“C程序设计”是一门重要的计算机基础课程,通过本课程的学习,使学生在程序设计和应用软件的开发两个方面都得到锻炼。C是学习高级语言编程的首选语言,通过对C的基本特点、语法规则、程序设计等内容的讲解,使学生逐步掌握程序设计的基础知识和面向过程的结构化程序设计方法,培养良好的程序设计风格,为进一步学习计算机相关课程或从事软件开发奠定基础。
“C程序设计”是一门实践性很强的课程,只有通过大量的上机实验,才能真正掌握C。因此,除了注重课堂教学外,重视和搞好实验教学,加强学生的动手能力培养,是提高课程教学质量的关键。在实验教学中,学生应是在教师事先设定好的“实验任务驱动”下进行上机操作,这样,学生的实验目的性强,有利于培养学生的计算机实际操作能力。
1 注重实验环节,锻炼编程能力[1]
通过有针对性的上机实验,逐步加深学生对课堂讲授内容的理解,培养学生灵活运用所学知识分析、解决一般问题的能力,真正了解程序在计算机中的执行过程以及计算机软件的基本开发过程。要求学生能使用程序控制的三种基本结构(顺序结构、选择结构、循环结构)和相关语法熟练编写应用程序,掌握常用的典型算法和编程技巧。实验应涉及数组、函数、指针、结构体、文件等核心知识点。
⑴ 前期准备
上机前的准备工作包括复习和掌握与本次实验有关的教学内容。对实验问题进行认真分析,设计相关算法,编写纸上代码,给出初步解决方案。
⑵ 实验过程
在Turbo C 2.0(TC)的集成开发环境中编辑和调试程序,使用多组数据对程序进行测试,使输出数据与预期结果相符。若条件许可,打印程序和运行结果,以备检查。
⑶ 实验报告
编写与整理实验报告是上机实验的基本要求,也是培养严谨科学作风的重要途径,实验报告的主要内容包括:
① 实验目的
实验之初,必须明确实验目的,以保证达到所指定的基本要求。在撰写实验报告时,要进一步确认是否达到预期目的。
② 实验内容
根据教学进度、上机学时、学生基础等因素,选择与课堂讲授内容相关的多个实验题目。在每一个实验题目中,均提出一些具体要求。特别值得一提的是,这些实验题目应具有一定的知识性和趣味性。
③ 程序设计
程序设计应包括算法设计、必要的N-S流程图、根据算法或流程图编写的源程序、函数模块说明、代码注释等。
④ 调试运行
采用各种测试数据,特别是可能导致程序产生错误结果的数据调试程序,以检查程序的“健壮性”。经调试正确的源程序应具有良好的“可读性”,并符合结构化程序设计原则。
⑤ 实验总结
实验过程中的大量工作是程序调试,在调试过程中会遇到各种各样的问题,每解决一个问题都将有益于编程能力的提高。因此,对实验的总结,最主要的是程序调试经验的总结。分析实验中遇到的问题,并给出合理的解决方法。确认本次实验是否达到实验目的。
2 针对知识结构,精心策划选题
学习C,算法分析与设计是核心,而新颖的选题又能促使学生主动地探寻问题的求解算法。因此,针对实验环节,精心选题对培养学生的编程能力、激发学生的编程热情是极其重要的。如果单纯列出几个复习相关语法的练习题,学生势必感到编程的枯燥无味,从而产生消极、甚至畏惧的心理,长此以往,必将挫伤学生的学习积极性。这里精心编选了供教学同行作为上机参考内容的两个典型问题(程序均在TC下调试通过),每个问题由题目、选题背景、主要语法、算法描述、程序清单、运行结果、上机指导组成。
[题 目 一] 求以下定积分的近似值[1][2]:
、 、 。
[选题背景] 数学与计算机是联系十分紧密的两门学科,许多数学问题需要借助计算机来解决。求定积分是“微积分”的一个重要内容,选择这一题目可以将数学知识与计算机编程有机地结合起来,培养学生利用C去解决数学问题的能力。
[主要语法] 函数、函数指针
[算法描述] 连续函数f(x)(假设f(x)>0)在[a,b]上的定积分等于x=a、x=b、y=0及y=f(x)所围成的曲边梯形面积。典型的定积分近似计算方法有梯形数值积分法(梯形法)和Simpson法(抛物线法)。从数学知识得知[3],
对梯形法,面积近似值为((f(a)+f(b))/2+f(a+h)+ f(a+2*h)+...+f(a+(n-1)*h))*h 其中,h=(b-a)/n。
对抛物线法,面积近似值为
h/3(f(a)+4f(a+h)+2f(a+2h)+4f(a+3h)+2f(a+4h)+...+2f(a+(n-2)h)+4f(a+(n-1)h)+f(b))
其中,h=(b-a)/n。(n为偶数)
我们可以编写一个可共用的函数f,接收来自主程序的实际参数(积分下限、积分上限、被积函数)即可求出对应的面积近似值。这里,函数指针作为形式参数,函数名作为实际参数。
[程序清单]
double f1(double x1) { double g1; g1=1+x1*x1; return(g1); }
double f2(double x2) { double g2; g2=1+x2+x2*x2+x2*x2*x2; return(g2); }
double f3(double x3) { double g3; g3=x3/(1+x3*x3); return(g3); }
double f(double a,double b,double (*p)()) /* 梯形法 */
{
int n,i; double s,h,y; s=((*p)(a)+(*p)(b))/2;
n=100; h=(b-a)/n; for (i=1;i<n;i++) s+=(*p)(a+i*h); y=s*h; return(y);
}
main()
{
double y1,y2,y3; y1=f(0.0,1.0,f1); y2=f(0.0,2.0,f2); y3=f(0.0,3.5,f3);
printf("y1=%5.2lf,y2=%5.2lf,y3=%5.2lf\n",y1,y2,y3);
}
[运行结果] y1= 1.33,y2=10.67,y3= 1.29
将函数f改为如下代码,即为抛物线法,程序其余代码不变。
double f(double a,double b,double (*p)())
{
int n,i; double s,h,y; s=(*p)(a)+(*p)(b); n=100; h=(b-a)/n;
for (i=1;i<n;i++) if (i%2!=0) s+=4*(*p)(a+i*h); else s+=2*(*p)(a+i*h); y=s*h/3; return(y);
}
[上机指导] 根据数学知识设计利用梯形法求解定积分近似值的算法,程序的关键代码是通过函数指针实现可共用的求面积的函数。将梯形法改为抛物线法,比较两种算法的运行结果。体会函数指针在处理此类问题中的重要作用。
[题 目 二]
1) 删除字符串中的指定字符[1][2]。
2) 键入两个串,从第一个串中删除所有与第二个串中相同的字符,并输出第一个串。
免费论文下载中心
[选题背景] 代码重用是一种重要的程序设计技术,可以避免不必要的重复编码,提高程序设计效率。面向对象的C++,主要通过继承实现代码重用[4]。而面向过程的C,我们可以通过自定义的头文件实现代码重用。这里的两个类似问题都涉及了删除串中指定字符这一共同操作,因此,可以将这一操作独立出来,以函数形式包含在自定义的头文件中,这样,两个问题都可以调用头文件中的函数,从而实现代码重用。
[主要语法] 自定义头文件
[算法描述] 对第一个问题,设计两个下标指示在串中待比较和待移动的位置,利用循环结构即可实现删除字符串中的指定字符,这个操作以函数形式包含在自定义的头文件(user.h)中。对第二个问题,利用二重循环,针对第二个串中的每个字符,在第一个串中进行扫描,找到后,并不急于删除这个字符,而是将其替换为字符“*”,最后,通过调用user.h中的函数,一次性删除所有“*”,即可巧妙解决问题,提高运行效率。
[程序清单]
f(char str[],char ch) /* 自定义头文件user.h */
{ int i,j; for (i=j=0;str[i];i++) if (str[i]!=ch) str[j++]=str[i]; str[j]='\0'; }
#include "user.h" /* 问题1 */
main()
{ char str[80]; char ch; printf("str=?"); gets(str); printf("ch=?"); scanf("%c",&ch); f(str,ch); puts(str); }
[运行结果] str=?abcdefgc
ch=?c
abdefg
#include "user.h" /* 问题2 */
main()
{
char *p="a1b11cd513e",*q="135",*r,*s;
for(s=q;*s;s++) for (r=p;*r;r++) if (*r==*s) *r='*'; f(p,'*'); puts(p);
}
[运行结果] abcde
[上机指导] 首先编写删除指定字符的函数,并以文件名user.h存盘。通过调用user.h中的函数,编写第一个问题的源程序。类似地,通过调用user.h中的函数,编写第二个问题的源程序。从中体会自定义头文件,实现代码重用的优越性。
3 运用现代教学手段,促进实验教学改革
实验教学手段的改革是提高计算机课程教学水平的重要途径。随着教育信息化的不断深化,多媒体技术已广泛应用于教学实践之中。多媒体技术以其动态多样化的图、色、声、影等元素,突出信息的形象性及感染力。将多媒体技术应用于教学过程,已成为教学手段现代化的重要标志之一。多媒体教学具有很多优点。第一,它使得教学内容形象、生动、直观地展示在学生面前,给学生以极大的吸引力。第二,大大增加了教学的信息量,提高了教学效率。第三,利用多媒体教学可以集中教师的智慧与教学经验,使教学内容更加规范有序。第四,可以充分利用计算机网络的优势。
我们应当不断探索和改进教学方法,采用先进的多媒体实验教学模式,以促进教学质量的提高。这些教学模式可以大致归纳为如下几个方面。
⑴ 基于计算机字表处理平台的直接投影教学
这是指利用Word等字表处理软件作为教学平台,将上机实验的教学文档直接投影用于教学。这种方法具有简单易行、图文并茂、动态修改、适应性强等优点。
⑵ 基于课程课件操作平台的多媒体投影教学
这是指利用PowerPoint等演示文稿软件制作出CAI实验课件,然后通过投影进行教学。这种方法具有整体页面规划紧凑,页面链接方便,学习界面美观生动、多媒体元素的组织功能强大等优点。
⑶ 基于课程内容软件平台的投影教学
这是指通过对课程内容软件平台(TC)的实时投影操作进行教学。其优点是通过集中式的现场教学,使学生掌握上机编程解决各种问题的基本方法。
⑷ 基于课程内容软件平台的实验教学
这是指通过教师示范操作,学生同步进行实验。其优点是学生可以在老师的引导下,实时解决上机编程中可能出现的各种问题。
⑸ 基于网络平台的多媒体资源发布和课后辅导教学
随着网络技术的成熟和Internet的普及,利用网络平台进行多媒体教学已成为一种发展趋势。网络可以作为一种多媒体资源发布平台,各种多媒体资源(CAI课件、电子文档、授课视频等),都可以发布于Internet上,教师和学生可以随时随地共享这些资源进行教、学,因而极大地延伸了教学空间,增大了学生的学习自由度。实验教学的课后辅导可以通过网络平台来实现,其主要方式有三种,一是建设教师个人网站,在网站中发布信息,建立留言板或论坛,上传作业或下载资料。二是借助Internet上的诸多公共论坛和个人留言板实现简易的辅导教学。三是通过电子邮件进行针对性的辅导教学。若条件允许,可以充分利用校园网平台,发布电子课件、教学资料,并向学生推荐优秀的程序设计网站,供学生课外自主学习使用,以拓展知识面,激发编程热情。
4 结束语
随着现代教育技术的不断成熟,“C程序设计”实验教学改革必将引向深入,并在实践中完善。只有重视和深化实验教学,才能取得良好的整体教学效果,促进教学质量的提高。
参考文献
[1] 谭浩强.C程序设计题解与上机指导(第三版) [M].北京:清华大学出版社,2005.
[2] 谭浩强.C程序设计(第三版) [M].北京:清华大学出版社,2005.
[3] 赵树源主编.微积分 (修订本) [M].北京:中国人民大学出版社,2004.
[4] 吕凤翥.C++语言基础教程[M].北京:清华大学出版社,2004. 免费论文下载中心