C语言程序设计中函数实验教学设计与应用
2018-07-13鱼涛黄宏博方炜炜
鱼涛 黄宏博 方炜炜
摘 要:文章根据作者多年的教学经验,对C语言程序设计中函数实验教学设计进行研究探讨,阐述了函数实验的设计思想、实验要求、实验辅导、实验成绩的评定以及实验目的,便于培养学生逻辑思维能力和综合编程能力。同时研究了函数实验应用,设计了实验题目,更好地为学生全面学习掌握函数实验的程序设计提供了编程思路。
关键词:函数实验教学设计;实验应用;提高编程能力
中图分类号:G642 文献标志码:A 文章编号:2096-000X(2018)03-0095-03
Abstract: This paper explores the experiment teaching in C language programming according to the author's teaching experience, analyzing the design idea, experimental requirements, experimental guidance, evaluation of experimental results and experimental purposes of functional experiments so as to effectively cultivate students' logical thinking and programming ability. Meanwhile, the application of the function experiment and the experiment topic is discussed, providing an idea for students to better learn the program design of function experiment.
Keywords: function experiment teaching design; experimental application; improve programming ability
《C语言程序设计》课程是一门实践性很强的课程,其教学目标是要求学生掌握设计程序的思路,学会C语言编写程序,以实现所需处理的任务。在C语言程序设计中函数是后续内容的一个基础,是教学的重点之一,也是难点之一。首先,在实验题目设置上,以学生掌握基本知识为基础,应精心设置必做与选做题,以满足各个层次学生的需要;其次在设计符合学生实际教学及实验重点方面应放在学生的解题的思路上,通过大量的实验让学生学会怎样设计一个算法,构造一个程序,从而较好地实现教学目标,帮助提高学生编程能力,使学生尽快掌握函数编程。
一、设计思想
函数实验是C语言程序设计实验教学中的一个难点,绝大部分学生对函数编程无从下手,首先,实验内容的设计应满足不同专业的需求,并符合我校学生的实际,太高或太低的要求以及用同一个实验要求学习情况不同的学生都将导致实验教学的失败。所以应在C语言实验教学中启发并训练学生的编程思维,在程序结构、算法设计方面循循善诱、深入浅出,才能收到较好的效果。另外在实验教学设计中应考虑如何充分调动学生的学习积极性和主动性,激发学生的学习兴趣。
1. 制定指导性实验。引导学生完成实验内容。既从已知到未知,从易到难,循序渐进。
2. 实验形式多样化。应有验证性实验、设计性实验和综合提高实验。
3. 实验的设计应尽可能使实验结果多样化。在实践环节中,我们只对学生提出目标,提供指导性意见,不限定学生的实现方法,鼓励学生用不同的方法实现,从而拓宽学生的思路,提高学生创新意识。
4. 实验内容模块化。将实验分为基础实验和提高实验。实验内容应丰富,教师根据不同专业和学生的实际情况规定必做内容和选做内容。学生也可根据自己的实际在课外选做。但要对学生提出明确的实验要求。
二、实验要求
实验分为三个步骤:
1. 上机前的准备。分析题目,选择适当算法编写程序,仔细检查程序直到找不到错误。准备几组测試程序的数据和预期的正确结果,以便发现程序中可能存在的错误。
2. 上机输入和编辑程序,并调试运行程序。除了编辑、编译、运行外,特别要求学生要在单步跟踪程序时会设置并观察变量,并要求学生记录实验结果。
3. 整理上机实验结果,写出实验报告。实验结束后,要整理实验结果并认真分析和总结,根据教师要求写出实验报告。实验报告一般包括实验目的、实验内容、程序清单、运行结果、分析与思考。
三、实验辅导
不同的学生采用不同的辅导方法,对掌握较好的学生主要辅导算法思想,在逻辑思维上进行指导,并引导他们一题多解,以拓展思路,巩固知识;对掌握一般的学生,思考问题不够全面,调试程序的能力也较弱,应帮助他们避免因一个小小的错误而浪费很多时间;对掌握较差的学生,应主动关心、鼓励他们,并在学习方法上给予耐心指导,让他们大胆的提问,帮助他们尽快入门。另外组织并鼓励学生共同探讨解决问题,形成良好的编程氛围以提高学生的学习兴趣和自主学习的能力。
四、实验成绩的评定
实验课的成绩应从三方面给出:
1. 实验前的准备。实验前的准备是做好实验的关键,通过检查学生实验前准备的程序清单,并给出成绩,可督促学生积极准备。
2. 实验课上给出程序调试能力的成绩。根据学生实验任务完成情况、了解完成效果、回答问题、规范性及创新性以及在上机辅导过程中对学生的学习情况及学习态度的了解等方面当堂课给出上机成绩。实践证明,在实验课上评定学生成绩,可以调动学生调试程序的积极性、主动性,并加快学生调试程序的速度。
3. 实验报告成绩。批改实验报告,给出成绩,作为实验成绩的一部分。
五、实验目的
掌握C程序函数的定义和调用方法,学会编写通用程序模块,掌握程序设计的基本方法并编写出具有清晰模块结构的C程序。
六、实验应用
实验题1:
设计目的:
对已经解决的问题,因势利导,来解决与之相关联的问题。并引导学生从分析程序过渡到修改程序再到编写程序。学会归纳并掌握同一类问题的解题方法,培养学生在程序设计方面的发散思维,提高程序设计中的应变能力。让学生明白:问题是活的,但程序是有章可循的。
实验题目:
1. 读懂并编辑、调试如下程序。要求掌握函数的设计框架:a函数的定义 b函数的声明 c函数的调用 。
题目:编写函数求m~n的累加和。在主函数中完成输入、输出。
#include
void main()
{
int s,m,n;
int sum(int m,int n); //函数的声明
scanf("%d%d",&m,&n);
s=sum(m,n);//函数的调用
printf("%d~%d的累加和为:%d\n",m,n,s);
}
|int sum(int m,int n)//函数的定义
{
int i,su=0;
for(i=m;i<=n;i++)
su=su+i;
return su;//返回结果
}
2. 修改以上程序求m~n的乘积。(即:m*(m+1)*(m+2)*…*n)
3. 修改以上程序,求1!~m!的和。(即:1!+2!+3!+…+m!)
实验题2:
设计目的:
在1中,给出了程序的整体框架,可使初学者对函数设计的关键问题有清晰的认识,可培养学生的全局思维和算法的整体设计能力,并体现了程序设计“逐步求精”的思路。本题4为分析并修改错误的题型。对初学编程时容易出现的典型错误,以错例分析的形式引出,可加深学生对程序的理解,并培养正确的编程理念。
实验题目:
1. 编程判断一个数是否为素数。判断素数用函数完成。
main( )
{
int n;
读入n;
if(prime(n)返回1)
n是素数;
否则
n不是素数
}
int prime(int x)
{
设标志位flag;
如x是素数
flag=1;
否则
flag=0;
返回flag;
}
2. 修改上述程序找出区间p~q之间的素数。
3. 修改上述程序验证区间p~q的正偶数都能分解为两个素数之和。
提示:
判断一个数m是否为素数的方法是用2到sqrt(m)的值依次去除m,若能整除,即余数为0,则m除了1和它自身之外,还有其它的因子,m不是素数,标志变量为0,否则m是素数,标志变量为1。
4. 调试下列程序,使之具有如下功能:fun函数是一个判断整数是否为素数的函数,使用该函数求1000以内的素数平均值。指出所给程序的错误并写出正确的源程序。
#include "stdio.h"
#include "math.h"
void main( )
{
int a=0,k; /* a保存素数之和 */
int fun(int n);
float av; /* av保存1000以内素数的平均值 */
for(k=2;k<=1000;k++)
if(fun(k)) /* 判斷k是否为素数 */
a+=k;
av=a/1000;
printf("av=%f\n",av);
}
int fun(int n)/* 判断输入的整数是否为素数 */
{
int i,y=0;
for(i=2;i
实验题目:
若开发一个学生成绩管理系统,该系统包括很多模块,其中要求编写一个学生成绩统计和初步处理程序。
程序的功能要求如下:
1. 从键盘输入学生成绩数据到程序中;
2. 对输入的学生成绩进行降序排序、输出;
提示:
2.1 从键盘输入学生人数;
2.2逐个输入学生成绩放在数组中;
2.3将刚刚输入的学生成绩,输出给用户;
2.4对学生成绩进行降序排序,要求将实现排序算法的函数单独声明和编码;
2.5输出排序后的学生成绩;
选做题:
设计目的:
选做题主要引导学生用多种方法求解问题,开拓思路,巩固知识,激发兴趣,培养学生严密的逻辑思维能力、自学能力和创新意识,并为进一步学习计算机专业知识打下基础。
选做题1:
编写程序实现:从键盘输入10个数,查找某一给定值。编写一函数,实现查找,并写出主函数调用该函数。(可用多种方法实现)
提示:
算法1:顺序查找:
数据从下标为1的单元开始存放,要查找的数据放在下标为0的单元中,从最后一个数据开始向前比较,若相等则返回下标,当下标为0时,查找失败,否则查找成功。
算法2:折半查找:(要求10个数必须递增有序)
将要查找的数据与当前查找范围内位置居中的数据的值进行比较,若相等,则查找成功,给出被查到数据在数组中的位置,查找结束。若要查找的数据小于位置居中的数据,则到当前查找范围的前半部分重复上述查找过程,否则,到当前查找范围的后半部分重复上述查找过程,直到查找成功或者失败。若查找失败,则给出信息0。
选做题2:
编写程序实现:从键盘输入10个数,按由大到小的顺序排序。排序算法用函数完成。(用多种方法实现)
提示:
算法1:
冒泡法排序的思想是:将相邻的两个数进行比较,小的冒泡浮上去,大的沉下来,即将小的调到前头去。若有5个数(8、5、9、3、1),第一次比较8和5,对调后为5和8;第二次比较8和9,不对调;第三次比较9和3,对调后为3和9;第四次比较9和1,对调后为1和9,则第一轮比较结束后的顺序为(5、8、3、1、9),则大的9沉到底,小的1上浮一个位置,得到最大的数。第二轮比较对余下的4个数进行操作,方法一样。
算法2:
选择排序法的思想:第一轮先找出10个数中的最小值,然后与第一个数a[0]进行交换,即a[0]中存入最小值;第二轮找出剩余9个中的最小值,与第二个数a[1]进行交换,即a[1]中存入次小值;依此类推,直到按从小到大的顺序排好。用外层for循环控制9轮比较,内层循环控制每一轮比较,将每一轮比较得到的最小值的对应下标先存放在变量k中,再将a[k]与a[I]比较,将较小的放在a[I]中。
五、结束语
通过函数实验教学设计的研究探讨和实验编程的应用,从易到难,逐步深化,使学生循序渐进地掌握了函数编程,提高了学生综合编程的能力,提高了学生解決实际问题的能力,更好地掌握编程思想,实现教学目标。
参考文献:
[1]王培培,刘芳.计算机课程的“任务驱动教学法”研究[J].新课程研究,2009,6:64-66.
[2]牛熠,董阿妮.C语言教学中学生兴趣的培养[J].东莞理工学院学报(自然科学版),2006(1).
[3]谭浩强.C语言程序设计教程[M].北京:清华大学出版社,2005.