问题求解在C程序设计实验教学中的应用

时间:2022-06-29 04:09:57

问题求解在C程序设计实验教学中的应用

摘要:在程序设计实验教学中,一直以来“难学”、“难教”成为师生共识,实验效果不够理想。本文通过引入问题求解法,改变传统实验教学模式,以达到更好的教学效果。

关键词:C程序设计;实验教学;问题求解

中图分类号:G642 文献标识码:A

1引言

“程序设计基础”是高校计算机专业重要的专业基础课,是一门理论与实验同步教学的课程。其中,实验在整个程序设计教学中起着非常重要的作用,学生只有通过上机实验,亲自动手设计、编写程序,才能真正掌握程序的逻辑设计及语言的基本规则,加深对理论知识的巩固、锻炼程序设计的逻辑思维,提高软件开发能力。

传统的程序设计实验教学是以教师传授为中心,教师在教学过程中的占主导作用,学生往往是被动的参与者,并不起主体作用。大多数学生都认为程序设计艰涩难懂、学难致用,程序设计常常处于一种机械、被动的状态,设计水平徘徊不前,更有甚者,做完实验还不知道为什么要做这个实验,“难学”、“难教”成为师生的共识。如何有效地开展程序设计实验教学,探讨实验教学的新思想、新方法,成为程序设计实验教学改革中亟待解决的问题。

作者在多年程序设计实验教学的基础上,引入以问题求解为中心的实验教学方法。该方法顺应学生的认知规律,注重学生的主体性,教师在其中主要起“导”的作用,引导学生从问题着手,启发学生分析问题,进而解决问

题。这样不仅能培养学生的学习兴趣,还能提高学生的实际编程能力,成为真正的问题解决者。

2问题求解法简述

问题是学生学习的引导者,是最好的老师,没有问题便没有深入。今天的大学生所面对的是一个高度发展、变化迅速的信息时代,他们每一个人时刻面临着各种各样的问题,解决问题将是他们生活的重要组成部分,问题解决能力也无疑成为他们的生活是否成功的关键因素。而程序设计也正是以解决问题为根本目的。

以问题求解为中心的实验教学模式从问题入手,启发学生思考、分析问题,引导学生在问题解决中构造算法,进而掌握相关的概念、语法、功能及应用,真正达到实验教学目的。以问题求解为中心的实验教学模式可分为以下步骤。

(1) 问题引入:通过问题来展开教学,创设问题解决的情境,引导学生思考程序需求,对需求有个清晰的了解,找到根本问题所在。

(2) 分析问题:分析题意,弄清要解决什么样的问题,即程序要实现什么样的功能。具体为确定问题的输入(要处理的数据)、问题的输出(希望的结果)、以及解决方案的附加需求或约束条件;同时,规划好存储结构,即如何存放数据和中间结果,确定要使用的变量、函数等,并把简单情况描述出来。本阶段还应同时列出问题的变量及其相互关系,这些关系也可用公式的形式来表示。

(3) 算法设计:设计算法来解决问题,按照结构化的思想,先粗后细,逐步画出求解问题的N-S流程图。具体可采用自顶向下的方法将问题描述成几个子问题或子功能,然后再根据具体情况将子问题进一步细化、逐步深入,直到所有子问题或子功能都能用语句描述为止,通过解决每一子问题最终解决原始问题。

值得一提的是,在此阶段,教师不光要引导学生解决问题,还应鼓励学生寻求不同的解法,使一题多解,积极尝试新的方法,拓宽逻辑编程思路,并在此基础上分析最简捷解法(考虑经济性、复杂度等),引导学生对算法进行优化。

(4) 算法实现:编写程序,用具体的语言将算法的每一步转换成一个或多个语句。根据N-S流程图,用程序设计语言编写程序,实现算法。此阶段要注意准确表达与语言逻辑,为了使编写的程序正确,编写程序时必须要遵循该程序设计语言的基本规范和表达逻辑,恪守程序语句和函数等的书写格式,比如函数头的格式、字母的大小写、标点符号放置、花括号的使用等。同时,避免语言表达的二义性和非语法错误,学生在编制程序的过程中会出现各种错误,对于语法错误,不难依靠编译工具或解释工具给出的错误信息进行修改,但是要纠正非语法性错误,就不那么容易了,比如有效数字限制、数字溢出、隐含条件的限制引起的调用或循环次数有异问题等等。因此在程序编写阶段,指导学生不光要掌握基本语法,还得研究非语法性错误的出错特征,提高编制程序质量及运行结果和效率。

(5) 编译调试:在编写好源程序的前提下,接着要测试程序是否能够实现算法设计的目的,所以必须调试程序。程序调试是当程序发生错误时,分析错误并改正错误,作为程序写作的最后一个环节,它不仅是保证程序开发质量的重要手段,也是实验教学的重要环节。此阶段不光是为了“验证程序的正确性”,还要掌握分析、解决不同的错误及异常,进而掌握编程的方法与技巧,提高分析问题和解决问题的能力。一般程序错误有以下几种。

语法错误:当代码中违反了一条或多条C语法规则时出现,可在编译阶段检出。如缺分号、未声明变量、或书法遗漏等。

运行时错误:在程序执行阶段被检测并显示出来。如非法num/0,此时会停止程序执行,并显示诊断消息,指出在哪一行检测到了运行错误。

未检测到的错误:许多错误执行可能并不会阻止程序完成运行,而仅仅是得出不正确的结果。因此,预先知道一些不正确的结果并去检查实际的输出是否正确是很重要的。如scanf函数在对格式参数%d和%c的处理上有所不同,前者会忽略输入的空白和回车,而后者则不会忽略。

逻辑错误:当程序遵循了一个有缺陷的算法时会发生。逻辑错误不会导致运行错误,而且不会显示错误消息,所以该种错误比较难以检测到。只能采用程序调试功能中的断点设置和单步调试相结合,进行“分段检查”,实时检测有关变量的变化情况,逐段往下查,直到找到在某一段中代码不对为止。

(6) 测试:在调试成功的基础上,需要测试所编写程序是否按预期方式完成任务。此阶段不能只根据一次测试就确定,应使用不同的数据集合来多次运行程序,从而确保该程序在算法所提供的所有情况下都正常工作并得到正确结果。

3案例分析

下面以程序设计基础课程实验教学中“选择结构程序设计”项目中的一个设计性实验为例,设计问题求解步骤。

(1) 问题引入:设计一实现公园售票功能的程序,具体要求:计算购票人应付金额,其中每张票零售价为20元,团体价为12元,一次购票超过20张(包含20张)时按团体票售出。

(2) 问题分析:通过对该问题的分析,明确了程序要求通过对输入票数的判断,确定票价是以团体价还是以零售价进行计算,进而利用计算公式求出应付金额,问题描述为:

程序变量:团体票价,零售票价,购票数量,应付金额

问题输入:购票数量

问题输出:应付金额

相关公式:应付金额=购票数量*团体票价(购票数量

应付金额=购票数量*零售票价 (购票数量

(3) 算法设计:根据问题分析结果,按照结构化的思想,画出求解问题的N-S流程,如图1所示。

(4) 算法实现:根据上述N-S图,算法代码编写如下:

#include <stdio.h>

void main()

{ int price1,price2,num,total;

char c;

price1=20;

price2=12;

c='y';

while(c!='n')

{

printf("请输入购买票数:");

scanf("%d",&num);

if(num>=20)

total=num*price2;

else total=num*price1;

printf("\n应付金额:%d",total);

printf("\n继续吗?(y/n)");

getchar();

scanf("%c",&c);

}

}

(5) 调试测试:在VC++ 6.0环境中编辑、编译、调试源程序,程序调通后进行数据测试,我们设定购票数20

和10分别测试结果,进行正确性验证。

4总结

在程序设计实验教学中,以问题求解来驱动教学可以更好地发挥学生的主体性,有效地培养了学生的学习兴趣,提高了学生分析问题、解决问题的能力,其优势是明显的,但也存在一些问题。由于教师主要是进行方法的引导,学生有更多时间自主学习,而学生的学习能力是不同的,因而在同一课堂内,全班同学所掌握的知识会有所不同,容易造成学生成绩两极分化和教学知识点的疏漏。这就需要教师在教学中加强课堂或阶段小结和知识点的交流或回顾,使学习能力差的同学或操作有疏漏的同学能通过教师的总结和回顾跟上教学进度,全面掌握知识点,达到教学目标,促进同步发展。

参考文献:

[1] Hanly,J.R.,Koffman,E.B..问题求解与程序设计C语言版[M]. 4版. 朱剑平,译.北京:清华大学出版社,2007.

[2] 沈建英.计算机程序设计实验教学改革探索[J]. 实验技术与管理,2003,20(4):105-107.

[3] 吴冬芹.大学生程序设计学习心理研究与教学对策探讨[D].扬州大学硕士论文,2006.

[4] 关忠仁. C 语言教学质量的思考与实践[J]. 计算机教育,2007(6):56-57.

[5] 张晓慧,乔成立,等.问题式教学法在综合性和设计性实验教学中的研究与实践[J]. 教育探索,2008(11):81-82.

The Application of Problem Solving Method in C Language Programming Experiment Teaching

HUA Guan-ping

(College of Information Science, Zhejiang Shuren University, Hangzhou 310015, China)

Abstract: It is a common view in experiment teaching of programming that “hard to learn” and “hard to teach”. The experiment effect is not very ideal. This text introduces problem solving method to change traditional experiment teaching model and achieve the better teaching effect.

Key words: C language programming; experiment teaching; problem solving

上一篇:西北工业大学“操作系统”课程改革实践 下一篇:“操作系统”精品课程建设