C语言程序设计综合实训(共9篇)
1.C语言程序设计综合实训 篇一
昆明理工大学城市学院
课程设计报告
课 程 名 称: 课程设计题目: 姓
名:
系:
专
业: 年
级: 学
号: 指 导 教 师:
C语言设计课程设计
万年历
信息工程系
计算机科学与技术
2012
2013 年月 12 日
任 务 书
实训的目标
1.进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。
2.针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
3.掌握C语言的编程技巧和上机调试程序的方法。4.掌握程序设计中的常用算法。
任务名称:万年历
项目功能:
1、能够显示当前月的日历以及标志出当前日期。
2、可以翻页、翻年。
3、可以输入年月日查看输入的年月的日历。
4、拥有记事本的功能。
教师签名:
目录
一、实训要求:................................................................................................................4 1.掌握时间函数的运用。................................................................................................4 2.掌握在WinTC下的动画制作。...................................................................................4 3.掌握bioskey和随机函数的运用。.............................................................................4 4.学会边界的判断。........................................................................................................4 5.掌握链表和文件。........................................................................................................4 6.综合所学内容编写一个程序。....................................................................................4
二、实训题目:.......................................................................................................................4 1.①给出时间计算与几天的差值;②给出天数计算日期;③给出两个日期计算差值。4
2.①让一个圆在屏幕上动起来;②制作一个太阳、地球、月亮的动画。................4 3.①区域内有障碍物使方块不能穿过;②小球在区域内运动,碰到边界后随机改变方向继续运动。...................................................................................................................4 4.①创建一个结构体;②创建链表并输出;③删除已有链表中的一个节点;④在已有链表中增加一个节点。...................................................................................................4 5.万年历............................................................................................................................4
三、实训过程:.......................................................................................................................4 1.时间函数:....................................................................................................................4 思考过程:.......................................................................................................................4 2.动画制作:....................................................................................................................4 思考过程:.......................................................................................................................4 障碍物(边界判断)...........................................................................................................4 思考过程...........................................................................................................................4 链表及文件:.......................................................................................................................4 思考过程...........................................................................................................................4 1.课程设计:万年历(带记事本功能)........................................................................5 ① 思考过程.....................................................................................................................5 ②源代码:.......................................................................................................................5 ③ 运行结果...................................................................................................................10
四、实训心得:.....................................................................................................................11
一、实训要求:
1.掌握时间函数的运用。
2.掌握在WinTC下的动画制作。3.掌握bioskey和随机函数的运用。4.学会边界的判断。5.掌握链表和文件。
6.综合所学内容编写一个程序。
二、实训题目:
1.①给出时间计算与几天的差值;②给出天数计算日期;③给出两个日期计算差值。2.①让一个圆在屏幕上动起来;②制作一个太阳、地球、月亮的动画。
3.①区域内有障碍物使方块不能穿过;②小球在区域内运动,碰到边界后随机改变方向继续运动。
4.①创建一个结构体;②创建链表并输出;③删除已有链表中的一个节点;④在已有链表中增加一个节点。5.万年历
三、实训过程:
1.时间函数:
a)思考过程: 第一小题:先把系统当前时间用time函数转换成秒,再把输入的天数用24乘3600秒转换成秒,再与系统当前的秒数相加减,最后用ctime函数以字符串输出。第二小题:调用localtime取得系统当前年月日,然后把当前年月日提取出来用自己输入的年月日进行替换,用mktime把该年月日转换成秒,然后再把系统当前时间转换成秒,两个秒数进行相加减,把加减后的结果除以(24*3600)就得到相差的天数。第三小题和第二小题同理,输入两个日期、转换成秒以后相加减,最后除以(24*3600),就得到了两个日子相差的天数。
2.动画制作:
思考过程:做个循环,先用白色画一个圆,然后再用背景色画一个圆把当前圆覆盖,然后改变圆心,然后在画圆再覆盖~最后循环完之后,再用白色在用位置画个圆,因为不这样干的话,屏幕上就没有最好运行的位置了…第二小题同理~ 障碍物(边界判断);
① 思考过程:第一小题:判断出上下左右移动的时候能运动的范围(即控制外边界),然后再把范围内的某些不能通过的点的范围找出来,把他们分别排除在外,其他的坐标点就是可以任意移动的了,用bioskey计算按下的键的键值,然后判断可以移动之后,就在当前位置用背景色画一个方框,然后在移动之后的位置用白色画方框和障碍物等。第二小题划定一个匡,然后在匡的范围再把小球的半径减去,就是最后小球能运动的范围了…然后我设置的是让小球逆时针转动,然后用随机函数(系统时间做种子)来控制小球偏移的位置(或者说角度)。
链表及文件: ① 思考过程:第一个问题需要做的是结构体的认识并运,定义一个结构体,然后输入内容,然后再输出之前输入的内容。第二个问题则是创建链表并输出,将一个节点分成了两份,一边是指针域,一边是数据域,而指针域,指针域是下一节点的地址,我把头结点不存储数据,以方便之后两题的操作;第三个问题是删除链表,首先定义一个空的字符串,P,P1,P2,把头指针赋值给P,随后让用户输入要删去数据的名字,储存在字符串中,利用strcmp函数进行查找,随后如果第一个有数据的节点就符合要求,就把第二个节点的地址赋值给头节点的指针域后跳出循环,如果不是第一个节点符合要求就执行循环,让P赋值给P2,再把p->next赋值给P,这时P就到了下一个节点,再把p->next赋值给P1,也就是让P1得到第三个节点的首地址,P指向第二个节点,P2指向第一个节点,再进行循环,还是没找到就把P,P1,P2同时向后移动一个节点,如果找到了,就把P2的值赋给p->next,再把p->next的值赋给P,这时P就回到了上一个节点,再把p->next直接指向P1,就把中间的那个节点跳过,完成了删除功能;第四个问题则是增加节点,同样定义一个整型数据(即学号),P,P1,P2,P3,让用户键入想要添加的位置,之后让头指针赋值给P,p->next就赋值给P1,也就是让p1指向下一个节点,随后执行循环,让用户输入想学号和每个节点内的学号比较,如果找到了,就创建一个新的链表,并让P3指向它,让用户输入添加的信息,并且把p->next赋值给P2和P,这是P就到了下一个节点,再把p->next赋值给P1,也就是让P1指向第二个,P和P2都指向第一个,返回循环,如果符合要求就让p3->next指向P1,p2->next指向P3,这样,新的节点就进入了链表中,满足要求,最后在主函数中先输入数据,然后执行一个死循环,让用户选择功能,如果选择1就删除一个节点,选择2就增加一个节点,选择0就跳出循环结束程序。1.课程设计:万年历(带记事本功能)
① 思考过程:用localtime取得当前的系统时间,并且提取出年月日,然后把公元元年到今年一月一日前的天数计算出来,把这个天数除7取余为a,然后就获得了今年元旦前的一天是星期几。然后循环、从一月循环到当前月的上一月的最后一天,在这个循环中,循环一次a+1;当a=7时a置零,这个是用来计算当前月的上一月的最后一天是星期几,然后从新在次循环外另开一个循环来输出当前月的日历,并标记出今天用()标记,然后用bioskey读取用户按下的键值,并实现相应的翻页、标记特殊日子、记事本、从新输入年份等功能…
②源代码:
#include
/*计算公元元年到某年某月的时间*/ void f1(long int t,long int n,int y,int r);
/*按日历模式输出要得到的那个月的日历*/ void w();
/*当前月的日历*/ void s();
/*输入某个年份和月份*/ void m(long int n,int y,int r);
/*记事本功能的函数*/
struct jishiben
/*记事本的结构体定义*/ {
long int a;
char name[100];};
void w()
/*输出当前月的日历*/ {
int y,r,a,b,c;
/*分别定义月份日期以及记录键值记录日期以及某月最后一天*/
long int n;
/*定义年份的变量*/
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);/*取得当地时间*/
printf(“%d--%d--%d n”,(1900+p->tm_year),(1+p->tm_mon), p->tm_mday);/*输出当前的年月日*/
n=(1900+p->tm_year);
/*获得当前年份*/
y=(1+p->tm_mon);
/*获得当前月份*/
r=p->tm_mday;
/*获得当前的是几号*/
for(;;)
{
printf(“jin tian shi %d--%d--%d n”,(1900+p->tm_year),(1+p->tm_mon), p->tm_mday);
/*输出当前年月日*/
f(n,y,r);
/*调用函数f获得某年某月的日历*/
printf(“an fang xiang jian ke tiao jie nian huo yuen”);
printf(“ru xu shu ru nian fen qing an hui ge jian n”);
printf(“ruo xu shi yong ji shi ben qing an hui chen”);
if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)c=31;
if(y==4||y==6||y==9||y==11)c=30;
if(y==2&&(((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0))))c=29;
if(y==2&&((n%4!=0)||((n%100==0)&&(n%400!=0))))c=28;
/*判断月份及最后一天*/
a=bioskey(0);
/*取得按下的键值*/
if(a==18432)n=n-1;
/*按方向键向上则年份减一*/
if(a==20480)n=n+1;
/*按方向键向下则年份加一*/
if(a==19200){y=y-1;if(y==0){y=12;n=n-1;}}
/*按方向键向左则月份减一*/
if(a==19712){y=y+1;if(y==13){y=1;n=n+1;}}
/*按方向键向右则月份加一*/
if(a==18488){b=r;r=r-7;if(r<1)r=b;}
/*按小键盘8则上一周*/
if(a==19509){b=r;r=r+7;if(r>c)r=b;}
/*按小键盘5则下一周*/
if(a==19252){b=r;r=r-1;if(r<1)r=b;}
/*按小键盘4则上一日*/
if(a==19766){b=r;r=r+1;if(r>c)r=b;}
/*按小键盘则下一日*/
if(a==7181)m(n,y,r);
/*调用m函数 进行记事本功能*/
if(a==3592)s();
/*按回格键调用函数s 出入年份和月份*/
if(a==283)exit(0);
/*按esc键 直接退出程序*/
system(“CLS”);
} } void f(long n,int y,int r)
/*计算公元元年一月一号到某年的天数n y r为年月日*/ { long int i,t;
/*定义 i为循环变量
t为天*/ t=0;for(i=1;i if(((i%4==0)&&(i%100!=0))||((i%100==0)&&(i%400==0)))/*判断闰年*/ t=t+366; if((i%4!=0)||((i%100==0)&&(i%400!=0))) /*判断平年*/ t=t+365; if(t%7==0) /*为防止数据过大 所以当t除7的余数是0的时候,让t=0;*/ t=0;} f1(t,n,y,r); /*调用函数f输出某月的日历*/ } void f1(long int t,long int n,int y,int r) /*按日历模式输出某月的日历n y r为年月日*/ { int i,j,k,a; /*a为记录星期的*/ a=t%7;for(i=1;i /*循环到某月的前一个月*/ { for(j=1;;j++) { a=a+1; if(a==7)a=0; if((i==1||i==3||i==5||i==7||i==8||i==10||i==12)&&j==31)break; if((i==4||i==6||i==9||i==11)&&j==30)break; if(i==2&&(((((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0)))&&j==29)||(((n%4!=0)||((n%100==0)&&(n%400!=0)))&&j==28)))break; } } printf(“%ld nian %d yue ri lin”,n,y);printf(“ 1 n”);printf(“MON TUE WED THU FRI SAT SUNn”);for(k=0;k ”);for(j=1;;j++) /*按日历模式输出某月*/ { if(j==r)printf(“(%2d)”,j); /*标记出当前的日子以及特殊的日期*/ else printf(“ %2d ”,j); a=a+1; if(a==7){a=0;printf(“n”);} /*当循环一个星期以后,输出一个换行符*/ if((y==1||y==3||y==5||y==7||y==8||y==10||y==12)&&j==31)break; if((y==4||y==6||y==9||y==11)&&j==30)break; if(y==2&&(((((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0)))&&j==29)||(((n%4!=0)||((n%100==0)&&(n%400!=0)))&&j==28)))break;/*判断这个月的最后一天时跳出循环*/ } printf(“n”);} void s() /*输入年月的函数*/ { long int n;int y,r,a;for(;;){ printf(“qing shu ru nian he yuen”); scanf(“%ld%d”,&n,&y); if(y<12&&y>0)break; /*判断输入的月份是否正确*/ else printf(“yue fen shu ru cuo wun”);} for(;;){ r=0; /*这里不需要标记处某天,所以令r=0*/ f(n,y,r); /*调用函数f来输出需要的某月的日历*/ printf(“an fang xiang jian ke tiao jie nian huo yuen”);printf(“ru xu shu ru nian fen qing an hui ge jian n”);printf(“an r jian fan hui dang qian yuen”);a=bioskey(0);if(a==18432)n=n-1; /*按方向键上键 则年份减一*/ if(a==20480)n=n+1; /*按方向键下键 则年份加一*/ if(a==19200){y=y-1;if(y==0){y=12;n=n-1;}} /*按方向键左键月份减一*/ if(a==19712){y=y+1;if(y==13){y=1;n=n+1;}} /*按方向键右键 月份加一*/ if(a==283)exit(0); /*按esc退出程序*/ system(“CLS”); /*清屏*/ if(a==4978)w(); /*按小写的r 则调用函数w显示当前月的日历*/ if(a==3592)s(); /*按回格键 调用它自己 从新输入一个年月*/ } } void m(long int n,int y,int r){ long int c; /*c是用来计算结构体长度的*/ long int s=r+100*y+10000*n; /*转换年月日 例如2013-7-10 就转换成20130710*/ struct jishiben kefu; /*定义结构体*/ FILE *fp; /*定义文件指针*/ c=sizeof(struct jishiben);/*计算结构体需要的长度*/ system(“CLS”); /*清屏*/ if((fp=fopen(“qw2.txt”,“a+”))==NULL) /*判断这个文件是否存在*/ {printf(“da kai shi bai qing xian chuang jian gai wen jiann”);exit(-1);} else { for(;!feof(fp);){fread(&kefu,sizeof(kefu),1,fp);if(kefu.a==s)break;} /*筛选数据*/ if(kefu.a==s) { printf(“ri qi %ld---%s n”,kefu.a,kefu.name);} /*若得到了需要的数据 则显示出来*/ else /*否则录入数据*/ { /*录入前先把文件关闭掉 然后再从新以追加方式打开*/ fclose(fp); fp=fopen(“qw2.txt”,“a”); fseek(fp,-c,2); printf(“qing shu ru xing xi n”); kefu.a=s; /*令长整型变量等于s 方便筛选*/ printf(“qing shu ru nei rongn”); printf(“%ldn”,kefu.a); gets(kefu.name); /*输入字符*/ fwrite(&kefu,c,1,fp); /*把数据写入*/ } getch(); fclose(fp); /*关闭文件*/ } w(); /*返回w函数再进行相应的操作*/ } int main(){ w(); /*调用函数w来开始第一次运行*/ getch();} ③ 运行结果 按回车实现记事本功能: 按回车返回记事本: 在特殊日子下按回车,查询是否有要做的事情: 四、实训心得: 通过为期三个星期是实训,让我收获很多,比之前在课堂上的对c语言的理解更加的深刻了。在第一周学习了时间函数的使用和用c语言来画动画;第二周学习了怎么创建和使用链表、并且学习了文件的操作,虽然在文件操作方面我学习的还是不是很熟练,但是还是能够自己写个记事本了~最后一周,我们自己写了自己的课程设计,在课程设计的过程中,不断加强自己的程序的功能,这对我们来说虽然有些难度,但是经过自己的努力,还是实现了一些曾经自己都不敢接触的东西。这次的实训,让的对c语言有了更加深刻的理解、增加的对c语言的兴趣,并且比之前更加的能够熟练的使用c语言了;我相信在以后对c的更深入的学习和c++、java的学习中,我也能够通过实训加强自己的~ 2012年1月10日, 教育部、中宣部、财政部等七部门联合下发了《关于进一步加强高校实践育人工作的若干意见》, 意见明确指出:各高校要坚持把社会主义核心价值体系融入实践育人工作全过程, 把实践育人工作摆在人才培养的重要位置。实践活动是本科生创新能力培养的根本途径, 只有实践才能检验和发展人们的创新能力。 综合设计性实验是教师给定实验目的、要求和实验条件, 学生运用某一课程或多门课程的综合知识, 自行设计实验方案, 并加以实现的实验。其目的在于激发学生学习的主动性、创新性, 培养学生分析、解决复杂问题的能力, 同时提高学生的组织能力、创新意识和团队精神。这是时代发展的需要, 社会发展的需要, 更是教育自身发展的需要。实践教学作为教学的重要组成部分, 要在实践教学过程中取得较好的教学效果, 就必须根据教材内容、学生认知水平和实验教学条件, 不拘一格地灵活选择设计各种综合设计性实验, 对学生实施全面的素质教育。 2. C语言程序设计课程的教学特点 “C语言程序设计基础”课程是我校测绘、地理信息系统、建筑环境与设备、给排水、机械工程及自动化、工业工程等专业学生的一门公共必修课, 课程以Visual C++6.0作为开发平台, 以C语言为背景, 向学生介绍结构化程序设计的基本思想和方法。本课程的主要内容包括:程序设计的基本概念、结构化程序设计思想和基本方法、顺序结构程序设计、选择结构程序设计、循环结构程序设计、数组、函数、指针、结构体、文件等。本课程理论学时32学时, 上机32学时。通过学习, 使学生初步掌握程序设计的基本方法, 编程技能和上机调试简单应用程序的能力, 使学生能够综合应用各种基本数据结构和程序结构编制结构化程序, 为学生后续专业课程、毕业设计及将来实际工作的相关应用打下基础。 作为一门实践性和工程性很强的技术基础课, C语言程序设计课程不仅要重视理论教学, 更应注意实践技能的培养和训练。本课程的上机实验在机房进行。通过上机实践, 可以巩固课堂讲授的基本理论和知识, 训练学生编写程序和调试程序的能力, 提高学生的逻辑思维能力。为了配合这个实践环节, 课程组编写了上机指导书。指导书90%以上是综合设计性实验。在内容编写上, 上机指导书遵循启发为主的原则, 既有详细的上机实习过程, 又并非让学生按部就班, 学生在上机实习过程中既有章可循, 又通过随时提出问题让学生思考, 引导学生进行相关实践。这样学生带着问题上机, 通过上机实践解决问题;同时教师答疑辅导时不是包办代替, 而是采取指出问题解决途径来启发、引导学生学习的方式, 有助于培养学生解决实际问题的能力。 3.“C语言程序设计”综合设计性实验的基本思路和步骤 “C语言程序设计”综合设计性实验其基本过程是: (1) 教师提出实验题目; (2) 学生设计算法, 上机调试程序; (3) 学生撰写实验报告, 总结实验体会; (4) 教师审定学生提交的程序代码和实验报告给出实验成绩。 3.1 实验题目 选择合适的实验题目, 让学生有一个思维想象的空间, 并具有一定的趣味性是非常重要的。遵从初学者的认知规律, 按照循序渐进的原则, 我们把实践教学内容分为基础实验、选做实验和大型综合设计型实验。 (1) 基础实验 基础实验共有16个, 每个实验由学生在课内2学时完成, 编写调试5-8个程序。一个学期学生共需调试110多个程序。基础实验的完成情况计入学生平时成绩。实验内容见表1:基础实验指导。 (2) 选做实验 “选做实验”列出17个趣味实验, 供学生在程序入门之后进行提高。每独立完成一个“选做实验”, 学生平时成绩计一次加分。详见表2:趣味选做实验。 (3) 综合设计型实验 大型综合设计型实验具有课程设计性质, 共安排了八个实验。题目包括:职工信息管理系统设计、职工工作量统计系统、学生信息管理系统设计、通讯录程序、图书信息管理系统设计、模拟时钟转动程序、成绩管理系统、学生管理系统。实验要求如下: 1) 采用模块化程序设计; 2) 代码书写采用缩进格式。 设计报告按照以下格式: 1) 设计目的; 2) 总体设计 (程序设计组成框图、流程图) ; 3) 详细设计 (模块功能说明 (如函数功能、入口及出口参数说明, 函数调用关系描述等) ; 4) 调试与测试:调试方法, 测试结果的分析与讨论, 测试过程中遇到的主要问题及采取的解决措施; 5) 源程序清单和执行结果:清单中应有足够的注释。 3.2 实验过程的指导 实验过程是综合设计性实验重要的部分。在实验机房, 学生不仅要编写代码, 实现自己的算法方案, 获得预期的程序功能, 而且要在实验过程中及时修正程序中的语法错误和逻辑错误, 优化算法, 因此教师的指导和监督非常重要。 (1) 上机过程中全程辅导答疑 任课教师在上机过程中全程进行辅导答疑, 并充分利用多媒体教学手段进行操作演示及讲解。 (2) 流媒体动画视频教程辅助实践教学 课程组通过录制流媒体动画视频教程, 加强对学生实践环节的指导。该项工作将文字性实验指导与多媒体技术相结合, 提供上机操作过程的视频操作演示及讲解, 把操作过程和主要思路以更加形象直观的方式呈现给学生, 使学生在课上和课下都可以得到辅导并可以重复观看, 从而加强实践教学, 提高教学效果。目前课程组已录制27个视频文件, 并发布到课程网站。 (3) 课程网站辅助教学 课程网站的“实践教学”栏目提供了与课程相关的丰富的资源链接, 资源表现形式包括文本、图片、动画等。丰富的教学资源构建了一个强有力的教学支持环境, 开拓了学生的学习思路, 提高了学生的学习效果。此外, 师生之间可以通过网络进行双向交流, 包括讨论、答疑、提交作业等。网络教学突破了时间和空间的限制, 解决了课程知识点多、知识更新快、学生基础不均衡以及学时少等实际问题。 教师在辅导过程中一方面可以帮助学生解决实验中出现的问题, 另一方面可以启发、引导学生注意观察实验中的各种现象, 进一步去思索和解决新问题, 在实践中寻找答案。特别是对于实验中的失败, 要帮助学生寻找原因, 鼓励学生动脑筋、想办法, 自己解决问题。 3.3 实验报告的撰写 实验报告包括:实验目的、实验要求、实验环境、程序代码、测试数据及运行结果、实验小结等。实验报告的撰写是对实验过程、思维方式的再认识与提高的过程。撰写报告前, 学生必须对自己的工作进行归纳、分析和总结。实验小结侧重总结本次实验中出现的各种错误及解决办法, 因此撰写实验报告有助于学生对实验中遇到和发现的问题进一步深入思考。由于知识、经验的不足, 学生在综合设计性实验中难免会遇到问题, 出现各种各样的错误, 对问题的处理才是真正培养学生科学的思维和处理问题的能力, 这也是吸引学生的地方。通过尝试用不同的方法来解决出现的问题, 有助于提高了实验能力和应变能力。实践表明:这种学习档案和学习日志形式的实验报告, 培养了学生的学习反思力, 有助于对学生的学习进行真实性评价。 4. 总结 我们把“C语言程序设计”综合设计性实验分为基础实验、选做实验和大型综合设计型实验三种类型, 以主要知识点为主线设计实验题目, 实验程序兼具趣味性和实用性特点。学生按照循序渐进的任务驱动方式, 完成从小型程序到代码较长的实验程序的设计。 实践表明:综合设计性实验对培养学生的实践能力、合作意识、创新思维等方面具有重要的作用, 因此在“C语言程序设计”课程的教学中开展综合设计性实验对提高学生的综合素质是十分必要的。 参考文献 [1]黄秀海, 滕清秀.教学改革效果的实证研究[J].当代教育理论与实践, 2012, 4 (1) :111-113. [2]毛明.全面抓好教学建设, 努力构建质量工程保障体系[J].中国高教研究, 2007 (9) :42-43. [3]冯玉芬, 马宁.C程序设计教学方法研究[J].教育探索, 2009 (12) :62-63. [4]俞庆英, 刘莉, 陈传明.非计算机专业C程序设计教学方法创新[J].计算机教育, 2010 (20) :118-121. [5]陆继远, 刘跃峰, 李天博.电气信息类专业C语言课程设计的改革研究与实践[J].中国电力教育, 2010 (34) :108-109. [6]张冬梅, 何兴恒, 郭晓兰.非计算机专业高级程序设计语言课程教学模式探讨[J].中国地质教育, 2006 (2) :89-91. 【摘 要】实训课程作为实践教学的重要内容,是人才培养过程中的一个重要环节,对社会的发展和进步起到了非常重要的作用,为社会输送了大量人才,但是实训教学中仍存在很多问题。本文主要从教学内容、教学方法、考核方式三个方面进行探讨。 【关键词】实训;教学内容;教学方法;考核方式 0.引言 C语言程序设计实训这门课程要求学生掌握计算机程序设计语言的基本知识和程序设计的方法与技术,培养学生应用计算机解决实际问题的能力,重视学生实际编程能力和程序思维能力的培养,通过学生上机编写程序来提升学生的编程能力,培养学生的学习兴趣和创新能力。 C语言程序设计为其前导课程,是对其前导课程知识的巩固、实践与提升,是ACM程序设计课程的基础,通过此次实训为程序设计比赛和ACM大赛输送人才,使更多的学生在全国的各种编程比赛中取得好成绩,同时为学生毕业后从事编程工作打下良好的基础,为企事业单位输送程序设计人才。 本人根据C程序设计实训课程教学中存在的问题对教学内容、教学方法,考核方式进行了改革,并以本校2010级软件班学生为试点进行教学,总结了一些经验。 1.教学中存在的问题及解决对策 1.1实训内容单一 实训教学内容应该首先根据C语言的特点对知识进行整合,然后引入针对性较强的典型综合实例,从程序整体向各个核心知识点渗透。教师可以根据学生的实际情况设计实训项目,内容应覆盖学生所学的知识,突出实用性,内容最好为学生所熟悉领域或学生感兴趣的领域。如果学生层次不一,可以根据学生对基础知识的掌握情况设置不同的实训内容。 1.2教学方法单一 在实训教学过程中,应将重点放在分析程序设计过程上,培养学生良好的编程习惯,逐步提高学生编程能力。单一实训手段要达到这一目标是很困难的,这就要求运用多种实训教学方法,让学生对编程有个很好的理解过程。 可以引入多种教学方法。以前的实训课程不能激发学生的学习兴趣,主要是因为课堂是由老师主载,学生是被动的学习,不能成为课堂的主人。我们将采用多种教学方法来激发学生的兴趣,转变老师和学生的课堂角色。 (1)基于ACM模式的教学方法。ACM的教学模式是结合具体的问题讲授概念与理论,辅以课堂讨论,做习题等多项教学手段。在教学过程中,安排学生深入有关实际问题进行研究,加深对所学理论的认识,利用网站进行程序设计。以往的教学是按照基础知识、循环结构语句、结构体语句等知识点的顺序进行讲解。基于ACM的教学方式是按照习题所属知识类别进行理论讲解,离散数学、初等数论、数值计算、人工智能、动态规划算法、图算法等知识点进行讲解与练习。ACM的教学模式在一定程度上将基础学科很好地运用于程序设计当中,有利于知识的融合,可以提高学生的思维能力,在做练习时举一些趣味习题,激发学生的兴趣。 基于ACM的教学方法的优点如下: ①知识分类讲解可以加深学生对知识的理解,更加系统。 ②ACM所选的题目趣味化生活化,可以激发学生的学习兴趣。 ③题目所含知识面广泛,有利于知识的巩固。 ④分组培养大家的团队协作精神。 ⑤学生讲解培养学生的表达能力与思维能力。 (2)讨论式教学法。由于每一道程序题可以有不同的编写方法,答案不唯一,所以很适合使用讨论式教学方法。将学生以三人为一个团体进行分组,在组内讨论编程方法,上机编写程序并进行验证,由组内推举成员向大家进行讲解和演示,有不同编程方法的组可以继续演示,最后由老师进行总结,并选出时间和空间复杂度最小的程序,同时也可以发现学生在编程过程中出现的常见错误,发挥学生的团队精神,提高学生的表达能力。 (3)任务驱动法。在实训课堂上,学生需明确要完成的任务,依照实训任务完成实训。题目由易到难,知识点由单分支到多种分支情况的应用,这样适合学生学习特点及编程由易到难的编写过程。 1.3考试一锤定音 这门课程主要是培养和检验学生的编程能力,所以不能以一次考试来决定学生的最终成绩,检验过程应该贯穿整个学习过程。引入过程性考核思路,总成绩分部累加。采用平时计分和最终考核相结合的方式,以每节课的发言演示情况来给出平时等级,一学期进行累计,按累计成绩进行排名,前三分之一学生可以免去最后的考核,以平时成绩作为最终成绩,这样也可以激励大家踊跃发言,剩下的学生参加最终考核,最后成绩由平时成绩和最后一次考核的成绩各占一部分比例来组成。通过实践检验,课程考核方法改革后,考核出了学生的实际操作水平,用过程性考核思想后,在学习过程中时刻检验学生的学习接受掌握情况,加大了课程全程质量监控力度,课程考核结果基本能够反映学生学习后真正的计算机应用能力水平。考核结果公平、有效,这也是现在倡导的全过程考试。 2.总结 通过对C程序设计实训课程的教学内容、教学方法、考核方式的改革,并对2010级软件班学生进行试点后,使学生理解模块化程序设计的基本思想,掌握结构化程序设计的基本方法,掌握C语言的数据结构、程序结构、语句以及控制结构的使用方法,能用程序设计技术解决一定难度的实际问题,掌握在实际开发环境下进行编辑、编译、连接、调试和运行的方法;综合训练学生分析问题的基本方法,提高解决实际问题的能力,培养学生的专项技能和职业能力。 【参考文献】 [1]王嵩.C语言程序设计.教学探索与实践[J].教书育人,2006,(35). [2]王美娜.C语言程序设计.教学方法探析[J].科教文汇(下旬刊),2007,(04). [3]曾鸿.基于项目的软件工程综合实训教学模式[J].中国职业技术教育,2008,(12). [4]王丽娟.C语言程序设计教学分析与探索[J].中国校外教育(理论),2008,(S1). [5]刘斌,瞿新南.浅谈《C语言》项目教学[J].新课程研究(中旬刊),2009,(12). 为了进一步增强实践教学效果,提高学生计算机编程能力,更好的理论联系实际,根据我院计算机专业专科实践性教学环节中的实践部分的要求,计算机教研室组织2011级计算机专业学生于2012年7月5日至7月12日进行了C语言课程设计实训,对2010级计算机专业进行了网页设计课程实训,须取得了较好的效果。现将本次实训总结如下: 一、课程设计实训的教学安排 1.实习内容安排 指导2010级学生分组开放一个关于书城的网站,2011级学生用C语言开发一个应用系统,实训以集中授课形式,首先由教师提供实训题目,指导学生,期间由指导教师管理、督促、指导,按照要求及实训的规定完成实训任务。 根据学生的实际情况,进行分组选题,五人一组。C语言的主要的课程设计题目如下(学生也可自主选题): 1、图书管理系统 2、学生信息管理系统 3、学生成绩管理系统 4、学生通讯录管理系统 5、职工信息管理系统 6、学生试卷分数统计 课程设计采用学生自主设计和指导老师辅导相结合的方式。 各组在中加学院机房完成编程题目,写出实验报告,程序要调试通过,最后指导教师根据所编程序以及实验报告的优劣给予评分。 2.教师安排及备课安排 通过实训,使学生了解网站开发工具Asp和编程语言C语言的基本语法知识和编程要点,通过这次实训可以进一步加强对计算机语言理论知识的消化吸收,通过编程将课本知识融会贯通。 在实训中,请了计算机企业的王皓然经理讲解了一些C语言在企业中的应用案例和C语言的编程技巧等内容。在课程设计过程中,由高琴和杨焕海老师对学生设计过程中提出的问题进行解答指导,并督促学生按时完成程序设计和实验报告的书写。 二、课程设计实训的实施 1.备课过程 本着对学生负责的态度,指导教师做了大量的前期准备工作。首先指导教师根据学生学习情况和学生的特点,精心选择实训内容,尽量选择应用性较强,对学生知识点考查将全面的系统让学生去实现。在将实训题目发给学生之前先自己分析实训题目的设计流程和编程思路,更好的为学生的课程设计题目提供合理的建议。 2.教学过程 在指导学生实训时,首先介绍所提供设计题目的目的及要求,使学生对自己要开发的系统有一个总体的、明确的认识;然后要求学生分组并确定每组开发的系统;指导学生对所选系统进行分析,设计流程图,并合理划分各个模块;指导小组成员进行各个模块设计;设计过程中对学生的系统随时检查,尽早发现程序的错误并指导学生改正;程序设计完成后,对学生最终的系统进行调试验收,运行不能通过的程序指导学生进行调试修改;最后指导学生完成实训报告。 三、课程设计实训的效果 本次实训达到了实践教学的预期目的,学生普遍感到应用计算机语言的编程能力有很大的提高,同时也激发了大家对计算机语言的学习兴趣;大多数学生认为通过具体的程序设计能学以致用,将理论专业知识紧密联系实际,这样的实训非常有必要,取得了非常好的效果。 四、课程实训教学存在的问题 在实训教学指导中,出现的问题也很多,基本上是随时发现问题随时加以解决。通过教师和学生两方面的反馈意见来看,较为突出的问题是: 1.理论教学课时少,讲解内容不够全面 有学生反映,实训中用到的部分内容在课程理论教学中没有涉及到,尤其是C语言由于课时较少,而内容较多,很多内容在课堂教学中没能讲到。C语言是计算机专业的基础课程,对学生计算机语言的学习是一个重要基础。计算机学院将C语言课程放到两个学期来讲,课时较多,将C语言的知识点全面覆盖,对以后学生学习“数据结构”、“数据库原理”等计算机核心课程有很大帮助。建议加大C语言的课时。 2.实训课程内容应提前提供给学生 大部分学生建议将课程设计内容在课程教学期间提供给他们,他们可以提前 准备。在实训的期间,完成一个大系统的设计,从需求分析、总体设计、模块设计、详细设计,以及代码的逐行调试,时间比较仓促,学生实训完成的质量不高,采纳学生的建议,以后教师在讲课过程中题目提供给学生,让他们提供准备,高质量完成实训任务。 实验名称:学生管理系统的设计与实现 实验类型:综合性实验 一、实验目的强化学生对C语言的基本语法和基本编程技能的熟练掌握,并在此基础上,重点培养学生对实际应用问题进行抽象分析的能力和综合运用C语言知识进行具体实现的编程能力。 二、实验内容 综合应用C语言中讲授的流程控制语句、模块化程序设计方法(函数)和丰富的数据类型(指针、数组、结构体等)完成“学生管理系统”的设计与实现。 三、实验环境 Windows XP系统,C语言开发环境:Win-TC、Turbo C3.0、VC等。 四、实验要求 1、总体要求:系统功能齐全,运行结果正确,用户界面友好,使用简单方便。 2、系统数据要求:学生信息如下:学号、姓名、年龄、所在系、3门课程名称及成绩、总分、平均分。 3、系统功能要求: ⑴输入至少10个学生的自然信息(学号、姓名、年龄、所在系、成绩)。 ⑵计算每个学生的总分、平均分,并输出每个学生的学号,姓名,总分,平均分。 ⑶根据学生的总分进行排序输出。 ⑷针对课程不同科目进行排序输出。 ⑸统计输出每门课程的平均分。 ⑹实现多种查询功能(例如:根据学号或姓名或所在系等,查询一个或多个学生信息)。 ⑺对于已输入的学生信息进行储存。 ⑻能实现学生信息的增、删、改操作。 五、实验结果 实验完成要求上交全部源程序代码(包括存盘数据)和完整的综合性实验报告(包括系统设计、实验过程中出现问题的分析与修改、代码打印、运行结果拷屏打印)。 六、考核形式 什么是程序设计: 编译环境 程序设计就是用户告诉计算机按程序员的思路一步一步的去工作 而C语言程序设计就是,通过c这门语言与计算机通信,并告诉计算机应如何工作 在微机上广泛使用的C语言编译系统有Microsoft C、Turbo C、Borland C等。虽然它们的基本部分都是相同的,但还是有一些差异,所以请大家注意自己所使用的C编译系统的特点和规定(参阅相应的手册)。我们所有使用的环境是WIN-TC(WINDOWS2000操作系统)。 简单的C程序 例1.1 main(){ printf(“This is a c program.n”);} 本程序的作用是输出一行信息: This is a c program 注意: 每一个C程序都必须有main()函数 函数体内由大括弧{ }括起来 大括弧内每条语句后必须有一个分号 符号和字母,都要用半角格式的(必须切换到英文输入法输入符号字母)Printf()输出函数 n 转义字母,代表换行(回车) /* */注释符 试一试: 参照例题,编写一个C程序,输出以下信息: * * * * * * * * * * * * * * * * * * * very good!* * * * * * * * * * * * * * * * * * * Printf(“******n”);n转意字符,代表换行 数据类型 1.2.3.整型:12, 0 ,-3 实型:4.6 ,-1.23 字符型:’a’ , ‘b’ 算术运算符 1.2.3.4.5.+ 加法运算符-减法运算符 * 乘法运算符 / 除法运算符 % 求余运算符 算术运算符的优先级同数学:先括号,后乘除,再加减 题目:求两个数的余数的程序 什么是变量 : 其值可改变的量称为变量,也把变量看成用来装数据的容器 变量的作用 : 增加程序的灵活度,可以说任何一个程序基本上都用到了变量度 如何定义变量: 数据类型 变量名; int a;数据类型 变量名1,变量名2,„变量名N;float a,b,c;char c1,c2;变量命名规则: 只能以字母、数字、下划线三种字符组成,且第一个字符必须为字母或下划线。 在C语言中,变量名是区分大小写的。 int a=3 int A=4 变量命名的良好习惯──见名知意: 例如:年龄 intAge/intNl 变量数据类型: int 代表整型类型 范围:-32768~32768 float 代表实型 范围:-3.14×10-38~ 3.14×1038 有效数字:6~7 char 代表字符型 该类型变量只能容纳一个字符 变量的赋值: int a=3 int a=3.4 错误 float a=3.4 char a=’c‘ 或:int a =3,b=4;注意:定义什么类型的变量就赋什么类型的数据 %d 以整型的形式输出 printf()输出函数 : 例: printf(“this is what?”)直接把双引号内的字符串原样输出 printf(“this is what? n ”)n 转意字符 不原样输出该字符串,而是起到换行作用,将当前位置移到下一行开头 b 退格 „„„ Printf(“this is %d ”,i)%d 用来代替“,”后面的变量,并指定该变量以什么类型输出 %d 按整型输出 %f 按实型输出 %c 以字符形式输出,只输出一个字符 例: scanf(“%d%d”,&a,&b)让用户输出两个整放,放到变量a,b中.注意: 变量前一定要加& 输入多个变量时,可用空格或回车间隔,但不能用”,” 1.用户输入圆半径,输出圆的周长和面积 2.用户输入两个整数,求两个数的和,差,积,余 3.用户输入两门成绩,输出总分,平均分 1.2.3.4.5.6.每一个C程序都必须有main()函数 函数体内由大括弧{ }括起来 大括弧内每条语句后必须有一个分号 符号和字母,都要用半角格式的 Printf()输出函数 n 转义字母,代表换行 /* */注释符 7.C语言结构化程序设计的三种基础结构介绍 8.关系运算符和关系表达式 9.逻辑运算符和逻辑表达式 10.if语句 11.条件运算符 选择结构是根据条件有选择的执行程序代码!如果(用户输入的密码是:123)输出:“密码正确” 否则 输出:“密码错误” if(判断式){判断式成立时所执行的语句} else {判断式不成立时所执行的语句} 说明: 只有当判断式成立时才会执行语句块1 否则执行语句块2 两者不会同时执行或不执行 关系运算符 所谓的“关系运算”实际上是”比较运算” C语言提供如下6种关系运算符 < 小于 <= 小于等于 > >= == 是否等于 != 是否不等于 优先级 前四种关系运算符优先级相同,后两种也相同,但前4种大于后2种 关系运算符的优先级低于算术运算符 关系运算符的优先级低于赋值运算符 试一试: 用户输入密码,如密码是123,则输出恭喜你,登录成功,否则输出不要试我密码哦.!注意知识点: 提示: If语句和}后都没有分号结束符 else 后没有条件表达式 如果IF或ELSE后的语句块只有一句的话,{} 可省略! 如果不满足IF后面的条件,什么都不做的话,可以省略else 题目: 根据上网用户输入的年龄,决定弹出信息,如年龄小于18则弹出“你太小了,还不能到网吧上网哦”否则弹出“OK,没问题祝你玩的愉快”; : 用户输入数,判断输出是奇数还是偶数 逻辑运算符 C 提供的三种逻辑运算符 && 与(相当于and 且) || 或(相当于or 或) !非(相当于not 取反) 例: a&&b 若a,b为真,则a&&b为真 a||b 若a,b之一为真,则a||b为真 !a 若a为真,则!a为假 运算符优先级!(非)算术运算符 关系运算符 && 和 || 赋值运算符 由高往低 条件运算符 若if 语句中,在表达式为”真”,和”假”时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理,例:若有以下if语句: if(a>b)max = a;else max =b;可以用下面的条件运算符来处理 max =(a>b)? a:b;多分支选择结构 如果用IF ELSE的话。虽然可以做出徕,但要用到众多的IF ELSE非常的烦琐。像这种多分支的选择,我们一般采用下面的语句 switch(变量){ case 值1: 代码; break; „„„..case 值n: 代码; break;default:语句 N;//当变量不等于上面所有值时,执行default后的语句; } 注意: 1.break退出{} 2.case 后只能跟一个值,而不能是一个表达式 3.switch(变量)后没有”;” {}前后都没有”;” 三种选择语句的比较 If //只有条件成立时执行 I f else //适用于只有两种情况出现,要么执行A,要么执行B Switch //适合多种情况,且变量是精确值时 注意 关键词:灵活,创新,趣味性,考核 《C语言程序设计》是目前最常用的结构化程序设计语言,功能强大,历史悠久。其显著特点有:(1)C语言是架构式语言,所谓架构式就是代码与数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立,从而使得程序的结构清晰,便于使用、维护与调试。(2)C语言功能齐全,它具有各种各样的数据类型,并引入了指针概念,可使程序运行效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器,且计算功能、逻辑判断功能也比较强大。目前已经逐步成为各高校尤其是理工科专业的程序设计课程的主流。通过本课程的学习,学生不仅要熟练掌握高级程序设计语言的知识、编程技术、调试方法和基本算法等,更重要的是在实践中逐步掌握程序设计的思想和方法,并能灵活应用该语言进行程序设计,最终具备利用计算机求解实际问题的基本能力。 1 教学方法探讨 C语言牵涉的概念比较复杂,规范繁多,内容都比较抽象,使用灵活(同一功能可以有多种表达方式容易出錯不少初学者都感到困难因此教好《C语言程序设计》,让学生轻松学好这门课,是一个很值得探讨的课题。 在教学工作中,要认真研究制订专业培养方案,明确高等技术应用型人才的培养目标,紧紧围绕着高等技术应用型人才培养的主线,在认真分析和研究的基础上设计教改方案。教学内容的改革本着突出基础理论知识的应用和实践能力培养的原则,以应用为目的,以“必需、够用”为度,加强针对性和实用性。在教学设计时,要坚持“以程序设计为主线,以编程应用为驱动”,将理论课和实验课作为一个整体通盘考虑。这样才能提高学生的学习积极性,取得显著教学效果,主要方法有以下几点。 1.1 拓宽视野,改变偏见 对于程序设计语言的学习来说,由于许多学生在以前并未接触过,通常会认为计算机语言是很深奥、很难学的,有很多学生在还没有正式开始学习程序设计语言时就失去了信心因此任课教师在开始的几个课时应采取适当的方式引导学生,激发学生的积极性和自信心。由于C语言是面向过程的程序设计语言,就有学生认为C语言过时了,不值得学,应该学习面向对象的C++语言或VC++语言,从而在学习过程中,积极性不高,甚至带点抵触情绪。因此学习C语言的第一步应该是拓宽学生的视野,针对C语言的具体特点,以及该门语言在学生今后的学习与工作中的重要性,尤其是后续的专业课程的应用上,从实用性和专业性的角度根本改变学生的偏见。否则课堂内容再精彩也无法吸引学生,更无法促使学生学好这门课。 1.2 精心设计,理论教学与实践紧密结合 教学内容与教学方法的得当与否是整个教学成功的关键,有些教师在教学过程中,只是机械地讲授C语言的语法,而C语言语法的学习比较单调与枯燥,教学内容组织不好,课堂气氛比较沉闷,教学效果就不理想,从而容易让学生产生厌学情绪;还有一些教师在讲课过程中,只是读预先备好的课件,讲课内容生硬,没有一点变化,学生反响很大,极大地挫伤了学生的学习积极性[1]。为了消除程序语言对学生的神秘性,教师应该对所讲的例题从分析到设计都在课堂现场实现,并当场演示。 课堂教学积极采用现代化的教学手段,采用Flash为主要开发工具制作了一套完整的多媒体演示课件。按照教学大纲的要求,本着“以人为本”的设计思想,注重科学性、教育性、启发性原则,将内容和形式统一起来。以课程内容讲解为中心,结合生动形象的例题解析,结构严密,构思精巧,通过直观的图形、动画动态传播演示效果,达到提高学生的综合思维能力、创新意识和创新技能,提高教学效率的目的。 C语言的教学过程应充分发挥其解决实用问题的导向作用,有机地将理论与实践紧密结合,将枯燥的理论演绎运动起来,通过设计巧妙的教学内容,充分调动学生的积极性,让学生的思维围绕教师的思维而运动。要让学生感觉所学知识能解决实际问题,通过一些有趣实用的题目去诱导学生学习,给学生的思维中留下一定的期望与神秘感,促使学生驱动自己的好奇心,从而充分调动学生主动学习的欲望。 1.3 以问题为核心,以数据类型的发展为主线来组织教学 课堂教学内容如何组织是教师备课的重要步骤,教学内容组织是否恰当对教学效果有着直接的影响。教师必须对教材仔细分析,充分理解课程的特点采用最合适的方式来组织教学 刚开始学习C语言时,要记忆的知识点比较多,且存在着如何使用这些知识的问题。在理论教学过程中,除了必要的说明外,大部分知识点从实际问题引入,通过解决实际应用问题而运用,因实际问题的需要,有利于加深记忆,同时也解决了在何种情况下使用与如何使用该知识点的问题。学生在学习环节中,对程序设计的认识包括两方面,首先是对课程内容的理解;其次是应用,即如何在自己的程序中对知识点加以应用,应用是学生学习程序设计语言的目的。教学不仅是教会学生掌握语言的语句和结构,最关键的还要让学生自己去实践。因此,要给学生提供各种不同的场景(问题),让学生体会在不同的场景中该如何与机器进行交流,即如何写出能与计算机进行沟通的程序,让计算机帮助用户解决问题。通过对各种不同问题的尝试解决,不但有利于对计算机语言的熟练掌握,而且对计算机的工作流程以及特点也会有更深的体会。 1.4 教学方法灵活多变 要使精心设计的教学内容达到较好的效果,灵活多变的教学方法是关键。教师在教学过程中,要充分调动学生的积极性,让学生参与教学过程中。具体做法有以下两方面。 (1)教学过程中,在讲程序设计例题时,并不一次性的将正确的程序写出来,而是将结果有偏差的程序给出来,然后运行得到一个结果,让学生观察结果,通过对照给定程序的结果与要求的结果之间的差异,来修改给出的程序,对于最快找到问题症结的学生,给予平时成绩一次加2分的奖励,从而大大活跃了课堂气氛。 (2)编写程序代码时,适当故意输入一些错误的代码,对于及时发现错误代码的学生实行每发现一个错误奖励0.5分的激励机制,从而最大限度的激发了学生的参与性与积极性。采用这两种方法时,课堂气氛活跃,思想开小差的学生很少。 另外还要布置一些具有一定难度的题目,留给学生课后思考。如果有学生在下一次课的课堂上能将程序设计好,给出正确的结果,并能将正确的思路的讲出来,通常会给予3分的平时成绩奖励,从而有效的调动了学生的创造性与后积极性。 2 实验内容精心设计 C语言是一门实践性非常强的课程,教材上的例题、习题基本以算法设计为主,内容枯燥不易编写,学生上机积极性不高,程序设计过程的成就感不强[2]。本着培养学生理解能力、思考能力、动手能力与创新能力的原则对传统的实验进行了大幅度拓展,将实验内容按理解实验、验证实验与提高实验为主线贯穿整个实验环节。在实验过程中,采用循序渐进的思路,先做基本的理解实验,通过理解实验来理解课堂上所讲的理论知识点;再通过验证实验将书上的例题与老师课堂上的例题进行验证,理解并掌握程序设计的步骤,进而能自己设计书本上的习题的程序;最后布置一个算法设计与过程设计相结合的提高性实验,一步一步的提高学生的实践应用能力。 对每一个知识点,尽可能的先不布置算法方面的作业,而是设计一些紧扣知识点的趣味性的小程序题,学生在实验时,越做越有趣,每次上机后都有一定的成就感。再布置算法方面的实验时,学生由于通过前面的趣味作业对每个知识点和程序设计的过程已经有一定的了解与应用,就不再有畏惧感。 当然趣味性的题目只是培养学生兴趣的一个手段,要真正让学生学好程序设计C语言,关键还是让学生掌握运用C语言解决实际问题的能力。因此无论在课堂上讲的例题,还是课后布置的作业,我们都设计一些与专业相关的实用的题目,来培养学生的创新能力。通过这方面的培养,每年都能培养出一批程序设计优秀的学生来,这点在好多学生后来通过国家计算机等试三级、四级、程序员考试方面所取得的成绩,及参加各类与计算机相关的比赛中都得到很好的体现。 3 强化课程设计,加强学生能力培养 课程设计是整个课程学习的总结与提高,通过必要的课程设计,切实加强学生的能力培养,通常课程设计贯串整个教学环节,设计内容以具体的软件系统的开发为基础,重点让学生掌握软件开发的基本思路与方法。课程设计必须以学生为主,教师的指导重点放在总体方案设计、制定进度上。教师在课程设计过程中应经常到学生中去答疑,检查学生设计进度与设计方案、设计结果的正确性,及时发现问题并辅助解决。课程设计尽量做到每个学生的设计有所差别,并要求学生独立完成设计环节。对学生的设计方案不追求最优,只要合理就支持学生坚持完成,最后在考评阶段进行重点点评。 课程设计结束时学生必须上交课程设计说明书,同时还要进行答辩。学生答辩结束教师给予正确引导,指出设计中存在的问题,并指导学生如何完善。答辩前学生要事先准备大量的知识点,答辩过程不但锻炼学生的表达能力,还能使学生认识到自己的设计的优缺点也了解了别人的设计思想开阔了视野。 通过课程设计,学生普遍反映良好。学生对课程设计的好评主要有三个方面:(1)对所学内容有了较深的感性认识和系统性了解;(2)增强了动手能力,提高了独立解决问题的水平;(3)拓宽了知识面,增强了创新意识[3]。 4 改革评价方式,提高综合素质 《C语言程序设计》课程由理论与上机实践两个方面组成,只注重哪一个环节都不能达到好的教学效果;只有将理论与实践紧密结合,改革传统课程考核方式,才能使效果向良好的方向发展,教学的各个环节都要以学生的创造性思维与应用能力的培养为主要方向。在实际操作过程中,采用的方式是:理论部分的考核占总成绩的50分,重点考核学生对基本知识和理论知识的掌握程度;上机实验成绩占20分,70分钟的时间主要由一道改错题、二道程序设计题目组成,其中改错题重点考核学生的语法与思维分析能力;程序设计题主要考核学生的算法和解决实际问题的能力;课程设计部分占总成绩的20分,平时作业成绩占10分,主要考查学生对平时作业的完成情况与对待平时作业的态度。采取这种考核方法,不但可以避免在考核学生时的片面性,兼顾了学生学习过程的整个环节,更主要的是充分调动了学生的积极性与创造性,从而对培养高素质、应用能力强的学生创造了条件[4]。 5 结束语 任何一门课程的教学,都包含教与学两个方面,只有较好地组织这两个环节,才能切实提高教学效果,才能让学生学到更好的有用的知识,才能避免理论与实践脱钩,也才能充分调动学生的积极性。 由于《C语言程序设计》课程是很多理工科的专业基础课,因此如何更好地组织好课程的教学与实践环节,还有很多方面值得人们努力去探索,只有不断努力,精心组织实施,才能使这门课程的教学取得长足的进展也才能使教学改革工作取得更大进步 参考文献 [1]徐大华.程序设计语言教学方法探讨[J].高等理科教育,2007,71(1):36-38. [2]周龙昌,陈小鹏,王琳琳,等.精心设计实习内容,提高认识实习教学质量[J].实验室研究与探索,2008,27(4):113-115. [3]杨忠.仪器仪表类课程教学改革的研究与实践[J].电气电子教学学报,2001,23(6):20-22. 一、课程设计目的 1.复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握。 2. 提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。3.培养学生在项目开发中团队合作精神,创新意识及能力。 4.本课程设计主要以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,作出设计报告。 二、课程设计内容 第一题:背单词软件开发(学号为单号的必须作) 1.录入单词 China 中国 Japan 日本 …….使用文件存放。 2.随机测试 系统随机显示单词(用户可以选择中译英,或英译中),对回答错误的单词应该可再回答一次。能够统计回答的正确单词的个数。3.顺序测验 4.查找单词的汉语或英语意思(输入中文查对应的英语意思,输入英文查对应汉语意思) 第二题:小学数学四则运算(学号为双号的必须作)12+56=? 1.要求系统随机生成0~100之内的整数。2.对回答错误的题目应该可重新回答一次。3.能够统计回答的正确题目的个数。 4.回答错误的题目写入“error_record.txt”文件中。 第三题:学生成绩管理系统 要求:1.学生的信息用结构体来表示。 struct stu{ int sno; //学号 char name[8]; //姓名 char sex[3]; //性别 char inclass[8]; //班级 float math; //数学成绩 float English; //英语成绩 float computer; //计算机成绩 } 2.能够按学号、按性别、按班级查询。查询方式可以自己补充。3.能够统计每个学生的平均成绩、总成绩、并可以按平均成绩和总成绩进行排序,并在屏幕上打印排序结果。 4.能够修改、删除、添加学生的信息。 5.系统的各个功能模块要求用函数的形式实现。6.在主函数里通过菜单来调用各个函数。 7.用链表或数组来存储班级学生(思考用数组和链表的异同)。 8.学生的信息能够保存在文件里(思考用二进制文件和文本文件的异同)。如果用文本文件存储,则文件格式如下: 学号 姓名 性别 班级 数学 英语 计算机 1001 王鹏 男 一班 68.5 58 1002 李云 女 一班 68.5 88 1003 王海 女 一班 78.5 98 …….2001 赵亚男 女 二班 58.5 48 2002 刘飞 男 二班 68.5 78 提示: 文本文件读写------fscanf,fprint 二进制文件读写----fread,fwrite 9.能够对文件进行读写、修改、删除。 第四题:中文分词器软件(选做题—加分) 与英文的以空格作为分界符不同,在中文中词与词之间没有明显的区分标记,中文信息处理中的一个重要的基础就是词的切分,也称中文分词。本题目是开发一个简单的中文分词器软件。 提示算法: 基于字符串匹配的分词方法这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,字符串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配。 建议采用最大正向匹配算法。 例如:对一个字符串S,从前到后扫描,对扫描的每个字,从词库中寻找最长匹配.比如假设S=“我是中华人民共和国公民”,词库中有“中华人民共和国”,“中华”,“公民”,“人民”,“共和国”......等词.当扫描到“中”字,那么从中字开始,向后分别取1,2,3,......个字(“中”,“中华”,“中华人”,“中华人民”,“中华人民共”,“中华人民共和”,“中华人民共和国”,“中华人民共和国公”),词库中的最长匹配字符串是“中华人民共和国”,那么就此切分开,扫描器推进到“公”字。 S的分词结果为:我/是/中华人民共和国/公民 提供的词典是7个文件:chivoc2.txt,chivoc3.txt,„„,chivoc8.txt,分别存储2字词,3字词,„„,8字词。 三、课程设计要求: 1.对系统进行功能模块分析,控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善,合理。2.系统设计要实用,编程简练、可用、功能全面。3.说明书、流程图要清楚。 4.记录设计情况(备查,也为编写设计说明书作好准备)。 5.设计成果:设计说明书一份(包含源代码的详细注释说明)。 四、补充 1.程序=算法+数据结构 一个好的程序应该有好的算法和好的数据结构。 指导教师:潘惠勇 李国伟 一、影响教学效果的关键问题及相应对策 1. 学生学习兴趣不高。 学生对难以理解的概念、术语及语法规则、枯燥无味的例题感觉找不到头绪,认为C语言枯燥、难学,有厌倦心理。部分学生不知学为何用而不感兴趣,部分学生觉得它难学而厌学,还有部分学生学而不得法,不知如何学,教学效果和学习效果均不甚理想。 如何激发学习兴趣,增强学生信心,成为该课程教学设计的关键。首先用应用程序展示C语言的结构、特点,讲明学习C语言是掌握编程能力的必由之路。授课过程中应采用互动式教学,多举一些有趣、实际的例题,每一个例题都与新知识、新概念相关联,完成一个任务也就学到了新知识、新概念。这种“练——学——练一—学”的循环过程让学生学得轻松、学得愉快,使枯燥乏味的理论在生动多样的实际问题中逐步为学生理解、接受和掌握。 2. 传统教学方法的局限性。 计算机语言课一直是“讲概念——分析概念——例题讲解——上机操作”的教学模式。以教师“教”为中心,学生处于被动的接受状态,这种“填鸭式”使师生之间交互少,学生“做”得更少,理论与实践脱节,表现于学生“听得懂,不会编”的现象。“很难培养学生在程序设计上的创新能力和逻辑思维能力,这就给后续课程的教学、毕业设计乃至学生日后从事的工作留下了隐患。” 要突出对学生编程能力的培养,应把解题思路当作授课重点,理解如何用程序设计方法分析、解决问题,建立正确的思维模式。教学内容的组织形式应该是“提出问题——介绍解决问题的方法——归纳出概念或一般规律”,教会学生如何运用C语言编写程序,一些细节、具体规则可以让学生自学,结合提问将问题层层剖析、逐步深入,达到师生互动的效果,充分发挥学生的想象力,以学生自学为主,以教师指导为辅。 3. 实验、考核环节。 不重视实验、考试环节,会使实验只是走过场,无人监管,达不到实验的目的;而单一的考试形式,无法真正测评出学生对所学知识的掌握,二者都影响对学生编程能力的培养。 该课程实践性强,只靠听讲,难以记住,必须多阅读、编写、调试程序才能自然地、熟练地掌握。实验可设计为例题验证、程序修改、独立编程三个层次。例题验证使学生进一步理解基本概念和语法,并树立信心;程序修改是让学生根据课堂中讲过的知识点填充,给予学生发挥的余地;独立编程则要求学生阅读教材和相关资料掌握实验所涉及到的知识,独立完成实验项目。教师只起答疑、解惑的作用,引导和激发学生程序设计欲望和创新动力。 考试应采用机考,以综合性、应用型题目为主,并应增加学生平时实践操作能力所占分值的比例。 二、将软件工程思想、项目驱动教学法融入教学中 1. 注重程序设计风格的培养。 编写程序只有正确性远远不够,必须是可维护的、健壮的、并具有良好的界面风格,要求代码简单、清晰、添加适当的注释,使程序具有可读性;用缩进、空行增加层次感,使程序逻辑清晰,好理解,可维护。现在的程序都是程式化、团队式的开发,每个程序员都按照统一的要求编写程序,保证程序清晰、易维护。学习C语言也是一个养成书写程序习惯的过程,在这个阶段如果养成了不好的习惯,以后将很难改掉,教学中要特别予以重视。 2. 教学中期采用项目驱动教学法。 项目驱动教学法是指在教学过程中以一个项目为主线来展开教学,把相关的知识点融入到项目的各个环节中去,层层推进项目。通过对问题的深化或功能的扩充,来拓宽知识的广度和深度,直至得到一个完整的项目解决方法,从而达到学习知识、培养能力的目的。 学生初步掌握了C语言的数据类型、运算符、表达式三种基本结构后,引入一个精心选择的项目,如学生成绩管理系统。先对项目进行需求分析、设计,而不是急于编代码,避免一边想,一边修改;用流程图、N-S图、PAD图等工具描述模块算法,然后编码。采用项目驱动教学法,把课程的主要知识点分解到各个具体模块,例如,项目初期采用一维数组存放学生成绩,用数组名调用排序函数,随着教学的深入,采用结构数组存储信息,用结构指针调用函数,使教学内容前后衔接,运用自如;随着函数定义、调用、参数传递、变量作用域等概念的学习,运用指针、数组、结构体、文件读写等操作完成项目各个任务,并将软件生命周期各个阶段的任务穿插到教学中,循序渐进、潜移默化地把软件工程思想贯穿教学全过程,使学生在学习程序设计的同时,也掌握了软件工程思想,对培养和提高学生编程能力有极其重要的作用。 3. 培养学生程序调试、测试的能力。 在测试项目各个模块功能时,介绍白盒测试和黑盒测试的概念,使学生懂得测试用例设计不仅要有合理的输入数据,还要有不合理的输入数据;随着教学的不断深入,将各个模块逐个添加到系统中,符合自顶向下增量集成的测试方式,减少了错误数量和测试难度,可向学生灌输集成测试、确认测试的概念,这是完成大型项目开发的必要环节;引导学有余力的学生编写新的模块来完善系统功能,发挥他们的想象力和创造力,使学生始终保持浓厚的学习兴趣。完成一个相对完整的应用程序开发,会有一种“从一盘散沙到一串珍珠”的感觉,既培养了学生自学能力和独立分析、解决问题的能力,又使其了解了软件工程思想,在其后续学习中达到事半功倍的效果。 对于综合型项目,将学生每3-5人分为一组,从需求分析、系统设计、代码编写到程序调试、运行,整个过程都在小组内协作完成,他们一起研究、探讨、设计,再经过思考、改进,不断完善,教师只起一个点拨和指导作用,选出成功的小组经验在全班讲评,促进整体编程能力提高。 三、结束语 【C语言程序设计综合实训】推荐阅读: c语言程序设计实例06-19 c语言模拟迷宫程序07-07 c语言源程序结构08-03 c语言程序设计试题库07-01 c语言程序设计第10章07-07 c语言程序设计第五章09-15 c语言程序设计夏宽理10-20 C语言程序稳定性08-20 C语言程序设计实验指导及报告07-26 C语言程序设计教学大纲72du09-292.C语言程序设计综合实训 篇二
3.C语言程序设计综合实训 篇三
4.C语言课程实训总结 篇四
5.C语言程序设计综合实训 篇五
6.C语言程序设计笔记 篇六
7.C语言程序设计教学探讨 篇七
8.C语言课程设计 篇八
9.C语言程序设计课程教学探析 篇九