第一篇:ACM程序设计培训总结
C语言篇
学生信息管理系统 #include “stdio.h” #include “stdlib.h” #define LEN sizeof(struct student)struct student
/*结构体类型*/ { int num;float score;struct student *next;};int n=0;
/*记录链表结点个数*/ struct student *head;
/*链表头指针*/ void menu();
/*DOS菜单函数*/ struct student *creat();
/*链表创建函数*/ void prin(struct student *head);
/*链表输出函数*/ struct student *insert(struct student *head);/*链表添加函数*/ struct student *del(struct student *head);
/*链表删除函数*/ struct student * paixu(struct student *head);/*排序函数*/ struct student *xiugai(struct student *head);/*修改函数*/ void seach();
void menu(){
int i;
printf(“n t 1t创建学生表n”);printf(“n t 2t添加学生数据n”);printf(“n t 3t显示学生信息n”);printf(“n t 4t排序学生记录n”);printf(“n t 5t修改学生记录n”);
printf(“n t 6t删除学生记录n”);
printf(“n t 7t查找学生记录n”);printf(“n t 0t退出n”);
printf(“n t 请输入你的选择(0-4):”);
scanf(“%d”,&i);switch(i){
case 1: head=creat();break;
case 2: head=insert(head);break;
case 3: prin(head);break;
case 4: head=paixu(head);break;
case 5: head=xiugai(head);break;
case 6: head=del(head);break;
case 7: seach();break;
case 0: exit(0);
default:printf(“n选择错误!请按照下面提示选择。”);}
menu();} void main(){
menu();}
struct student *creat()
/*此函数带回一个指向链表头的指针*/ {
struct student *head,*p1,*p2;n=0;head=NULL;p1=(struct student *)malloc(LEN);/*创建第一个结点*/ printf(“请输入第1个学生学号及成绩(学号与成绩以空格隔开,'0 0'结束):”);scanf(“%d%f”,&p1->num,&p1->score);p1->next=NULL;while(p1->num!=0)
/*应该将结点加入链表*/ { ++n;if(n==1)head=p1;
/*是第一个结点,作表头*/ else p2->next=p1;
/*不是第一个结点,作表尾*/ p2=p1;p1=(struct student*)malloc(LEN);/*开辟下一个结点*/ printf(“请输入第%d个学生学号及成绩(学号与成绩以空格隔开,'0 0'结束):”,n+1);scanf(“%d%f”,&p1->num,&p1->score);p1->next=NULL;} free(p1);
/*释放最后一个结点所占的内存*/ return(head);/*返回链表的头指针*/ }
void prin(struct student *head)
/*链表输出函数*/ {
struct student *p;
if(head==NULL)
printf(“链表不存在,请先创建!”);
else
{
p=head;
for(;p!=NULL;)
{
printf(“%d号学生成绩:%fn”,p->num,p->score);
p=p->next;
}
} }
struct student *insert(struct student *head){ struct student*p0,*p1,*p2;int i;char ch='y';p1=head;
/*p1指向第一个结点*/
if(head==NULL)printf(“链表不存在,请先创建!”);else
{
while(ch=='Y'||ch=='y'){ p0=(struct student*)malloc(LEN);
printf(“请输入新结点的数据,输入'0 0'放弃插入:”);
scanf(“%d%f”,&p0->num,&p0->score);p0->next=NULL;
if(p0->num==0)
{ free(p0);
}
else
{ printf(“输入结点插入的位置:”);
scanf(“%d”,&i);
if(i==0)
/*作为表头*/
{
p0->next=head;
head=p0;
}
else
{
while(i>1&&(p1!=NULL))
{
p2=p1;
p1=p1->next;
i--;
}
/*找插入点*/
p0->next=p1;
/*插到p2指向的结点之后*/
p2->next=p0;
}
++n;
/*结点数加1*/
}
printf(“n数据添加成功!是否继续(y或Y继续,任意键退出):”);
getchar();
ch=getchar();} } return(head);}
struct student *del(struct student *head)/*形参num为需删除的学号*/ { int i;
char ch='y';struct student *p1,*p2;
while(ch=='Y'||ch=='y'){ if(head==NULL){ printf(“n链表不存在!n”);break;
/*链表为空*/ } else {
p1=head;
/*从头结点开始查找*/
printf(“请输入要删除的学生学号:”);
scanf(“%d”,&i);
getchar();
while(i!=p1->num&&p1->next!=NULL)
/*p1指向的不是所要找的结点,并且没有到表尾*/
{
p2=p1;
p1=p1->next;
/*后移一个结点*/
}
if(i==p1->num)
/*找到了需删除的结点*/
{
if(p1==head)
/*p1指向的是头结点*/
head=p1->next;/*第二个结点成为新的头结点*/
else
p2->next=p1->next;/*后继结点的地址赋给前一结点*/
printf(“%d号学生已经被删除n”,i);
free(p1);
/*释放结点所占的内存*/
n--;
/*链表结点数减1*/
printf(“n数据删除成功!是否继续(y或Y继续,任意键退出):”);
ch=getchar();
}
else
{
printf(“%d 号学生不存在或已经被删除!n”,i);/*找不到删除结点*/
printf(“n是否继续(y或Y继续,任意键退出):”);
ch=getchar();
} }
}
return(head);}
struct student * paixu(struct student *head)
/*排序函数*/ {
struct student *p0,*p1,*p2,*pt;
/*p0代表p1的前个结点*/
/*p1代表当前正排序的结点*/
/*p2用来取p1后面的每个结点来与P1比较*/ int i;
/*i=1表示头结点排序*/ if(head==NULL)
{
printf(“链表不存在,先创建!n”);
}
else if(n>1)
{
p0=p2=p1=head;
for(i=1;p1->next!=NULL;i++)
/*选择法排序算法*/
{
for(;p2->next!=NULL;)
if(p1->num>p2->next->num)
{
pt=p1;
p1=p2->next;
p2->next=p1->next;
p1->next=pt;
}
else p2=p2->next;
/*若不要交换,则p2指针后移*/
if(i==1)p0=head=p1;
/*对第一个结点排序时处理*/
else
/*其他结点排序时处理*/
{ p0->next=p1;
p0=p1;
}
p2=p1->next;
p1=p1->next;
}
prin(head);
/*调用输出函数*/
}
return(head);}
struct student *xiugai(struct student *head)
/*修改函数*/ { struct student *p;
int m;
printf(“n请输入要修改数据的学号(0退出):”);
scanf(“%d”,&m);
while(m!=0)
{ p=head;
for(;p->num!=m&&p->next!=NULL;)
p=p->next;
if(p->num==m)
{ printf(“n请输入新的数据(学号 成绩):”);
scanf(“%d%f”,&p->num,&p->score);
printf(“n修改成功!”);
printf(“n若继续修改,请输入学号(0退出):”);
}
else
printf(“n该学生不存在,请重新输入学号(0退出):”);
scanf(“%d”,&m);
}
return(head);}
void xuehao(struct student *head)
/*按学号查找函数*/ { struct student *p;
int m,leap;
printf(“n请输入要查找的学号:”);
scanf(“%d”,&m);
while(m!=0)
{ p=head;
leap=0;
for(;p->next!=NULL;)
{
if(p->num==m)
{printf(“n你要查找的学生信息为: 学号 %d 成绩 %fn”,p->num,p->score);
leap=1;
}
p=p->next;
}
if(leap==1)
printf(“n若继续查找,请输入学号(0退出):”);
else
printf(“n该学生不存在,请重新输入学号(0退出):”);
scanf(“%d”,&m);
}
}
void chengji(struct student *head)
/*按成绩查找函数*/ { struct student *p;
int leap;
float m;
printf(“n请输入要查找的成绩:”);
scanf(“%f”,&m);
while(m>=0)
{ p=head;
leap=0;
for(;p->next!=NULL;)
{
if(p->num==m)
{printf(“n你要查找的学生信息为: 学号 %d 成绩 %fn”,p->num,p->score);
leap=1;
}
p=p->next;
}
if(leap==1)
printf(“n若继续查找,请输入成绩(负数退出):”);
else
printf(“n该学生不存在,请重新输入成绩(负数退出):”);
scanf(“%f”,&m);
}
}
void seach()
/*查找子菜单*/ {
int i;
printf(“n t 1 按学号查找n”);printf(“n t 2 按成绩查找n”);printf(“n t 0 返回上级菜单n”);printf(“n t
请输入你的选择:”);scanf(“%d”,&i);switch(i){
case 1: xuehao(head);break;
case 2: chengji(head);break;
case 0: menu();break;
default:printf(“n选择错误!请按照下面提示选择。”);} seach();}
数据结构篇
//huffman.cpp 求Huffman编码 #define UNIT_MAX 65535
//函数结果状态代码
#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0
#define INFEASIBLE-1 #define OVERFLOW-2
#include
//Status 是函数的类型,其值是函数结果状态代码 typedef int Status;
//Huffman树&Huffman编码的存储表示
typedef struct{ unsigned int weight;unsigned int parent,lchild,rchild;}HTNode,*HuffmanTree;//动态分配数组存储Huffman树 typedef char **HuffmanCode;/* int min(HuffmanTree t,int i){ //函数void select()调用
int j,flag;unsigned int k=UNIT_MAX;for(j=1;j<=i;j++)
if(t[j].weight { k=t[j].weight; flag=j; } t[flag].parent=1; return flag;} void select(HuffmanTree t,int i,int &s1,int &s2){ //s1为最小的两个值中序号小的那个 int j;s1=min(t,i);s2=min(t,i);if(s1>s2){ j=s1; s1=s2; s2=j;} } */ void select(HuffmanTree t,int i,int &s1,int &s2){ int j;s1=0;s2=0; unsigned int small1,small2; small1=UNIT_MAX;small2=UNIT_MAX; for(j=1;j<=i;j++) //选出两个权值最小的根结点 { if(t[j].parent==0) if(t[j].weight { small2=small1; //改变最小权、次小权及对应的位置 small1=t[j].weight; s2=s1; s1=j; } else { if(t[j].weight { small2=t[j].weight;//改变次小权及位置 s2=j; } } } } void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n){ // 算法6.12 // w存放n个字符的权值(均>0),构造哈夫曼树HT,// 并求出n个字符的哈夫曼编码HC int m,i,s1,s2;unsigned c,cdlen; HuffmanTree p;char *cd; if(n<=1)return;m = 2 * n1, 2n consecutively in clockwise order on the ground to form a circle, and then, to draw some straight line segments to connect them into number pairs.Every number must be connected to exactly one another.And, no two segments are allowed to intersect.It's still a simple game, isn't it? But after you've written down the 2n numbers, can you tell me in how many different ways can you connect the numbers into pairs? Life is harder, right? 卡特勒数 import java.math.*;import java.util.*;public class Main{ public static void main(String args[]) { Scanner as=new Scanner(System.in); int n,i; BigDecimal[] a=new BigDecimal[101]; a[0]=BigDecimal.valueOf(1); for(i=1;i<101;i++) { a[i]=a[i-1].multiply(BigDecimal.valueOf(4*i-2)); a[i]=a[i].divide(BigDecimal.valueOf(i+1)); } while(i>0) { n=as.nextInt(); if(n==-1) break; System.out.println(a[n]); } } } 筛选法 七夕节 除了筛选素数外,还能筛选因子(倍数的运用)#include for(j=i+i;j<=max;j+=i) a[j]+=i; scanf(“%d”,&t); while(t--) { scanf(“%d”,&n); printf(“%dn”,a[n]); } return 0;} 母函数 Ignatius and the Princess III “Well, it seems the first problem is too easy.I will let you know how foolish you are later.” feng5166 says.“The second problem is, given an positive integer N, we define an equation like this: N=a[1]+a[2]+a[3]+...+a[m];a[i]>0,1<=m<=N;My question is how many different equations you can find for a given N.For example, assume N is 4, we can find: 4 = 4;4 = 3 + 1;4 = 2 + 2;4 = 2 + 1 + 1;4 = 1 + 1 + 1 + 1;so the result is 5 when N is 4.Note that ”4 = 3 + 1“ and ”4 = 1 + 3“ is the same in this problem.Now, you do it!” Input The input contains several test cases.Each test case contains a positive integer N(1<=N<=120)which is mentioned above.The input is terminated by the end of file.Output For each test case, you have to output a line contains an integer P which indicate the different equations you have found.#include int n,i,j,k; while(cin>>n) { for(i=0;i<=n;i++) { c1[i]=0; c2[i]=0; } for(i=0;i<=n;i++) c1[i]=1; for(i=2;i<=n;i++) { for(j=0;j<=n;j++) for(k=0;k+j<=n;k+=i) { c2[j+k]+=c1[j]; } for(j=0;j<=n;j++) { c1[j]=c2[j]; c2[j]=0; } } cout< } return 0;} 贪心算法(排序函数)#incluide ACM程序设计大赛策划书 一、目的和意义 为提高我院学生的创造力、团队精神以及在程序设计和软件开发中的能力.二、承办单位 计算机科学学院acm协会 三、比赛时间 报名时间: 比赛时间: 四、参赛对象 计算机学院全体学生 五、比赛地点:钟楼 六、参赛要求.报名方式.比赛形式 (1)本届比赛采取现场答题形式。参赛集体报名后在规定的时间内可以到比赛场地试机。进入决赛的参赛集体在规定的地点使用配置相同的机器进行比赛。 (2)本届竞赛设 5 道题目,比赛时间都为 3小时,超过规定时间,提交的答案将无效。(3)参赛集体答题时可以选择 C、C++ 语言答题,每道题目将以最后提交的代码为准。3 .比赛要求 (1)参赛团体在规定答题场所不得竞赛组委会指定工作人员以外的人交谈。系统支持人员可以回答和系统相关的问题,例如解释系统错误信息。 (2)参赛团体有权提交解释请求,针对题目描述中的不明确或错误的部分提问。如果评委确认题目中确实存在不明确或错误的部分,将会通告所有参赛队伍进行声明或更正。(3)参赛团体不能携带任何电子设备,例如手机、电脑、U盘、MP3、好易通等;允许携带纸质材料,包括源代码,参考书,字典。 (4)当参赛团体出现妨碍比赛正常进行的行为时,诸如擅自移动赛场中的设备,未经授权修改比赛软硬件,干扰他人比赛等,都将会被竞赛组委会取消参赛资格。 七、评选办法:.评判采取现场评判的方式,评委当场对提交的程序进行评判,并对提交的时间进行记录,经运行测试后由评委判为正确或者错误,判决结果由系统自动反馈给参赛队伍;2 .比赛结果由团体解决的题目以及解决时间来决定,解题多者获胜,如果有队伍解题数量相同,则根据所用时间多少进行排名。最后,完成的题目的多少,淘汰50%的团体。 ACM程序设计大赛策划书 一、目的和意义 为提高我校学生的创造力、团队精神以及在程序设计和软件开发中的能力,同时选拔优秀的选手代表我校参加 广东省大学生程序设计大赛(ACM)。 二、承办单位 数学与信息科学学院、计算机科学学院 三、比赛时间 报名时间: 即日起到2011年4月17日 比赛时间: 2011年4月23日 四、参赛对象 凡我校在籍的本、专科生均可参赛。 五、比赛地点:信工楼319 六、参赛要求.报名方式 有意参赛的个人将个人姓名、系别、和手机号码发至指定邮箱:sguacm2011@163.com2 .比赛形式 (1)本届比赛采取现场答题形式。参赛个人报名后在规定的时间内可以到比赛场地试机。进入决赛的参赛个人在规定的地点使用配置相同的机器进行比赛。 (2)本届竞赛设 6 道题目,比赛时间都为 3小时,超过规定时间,提交的答案将无效。(3)参赛个人答题时可以选择 C、C++ 语言答题,每道题目将以最后提交的代码为准。3 .比赛要求 (1)参赛个人在规定答题场所不得竞赛组委会指定工作人员以外的人交谈。系统支持人员可以回答和系统相关的问题,例如解释系统错误信息。 (2)参赛个人有权提交解释请求,针对题目描述中的不明确或错误的部分提问。如果评委确认题目中确实存在不明确或错误的部分,将会通告所有参赛队伍进行声明或更正。 (3)参赛个人不能携带任何电子设备,例如手机、电脑、U盘、MP3、好易通等;允许携带纸质材料,包括源代码,参考书,字典。 (4)当参赛个人出现妨碍比赛正常进行的行为时,诸如擅自移动赛场中的设备,未经授权修改比赛软硬件,干扰他人比赛等,都将会被竞赛组委会取消参赛资格。 七、比赛流程 12:30——13:00 信工楼319门口集中签到,进入赛场并按照编号就坐于相应的位置; 13:00——13:25 负责人宣布比赛规则、注意事项和相应的程序上传操作; 13:25——13:30 工作人员为选手发比赛试题; 13:30——16:30 比赛开始,同时记录每位选手上传程序所花的时间; 16:40——17:00 公布比赛结果,颁发证书与奖金,并与指导老师合影留念; 17:00——17:30指导老师与选手经验交流。 八、评选办法:.评判采取现场评判的方式,评委当场对提交的程序进行评判,并对提交的时间进行记录,经运行测试后由评委判为正确或者错误,判决结果由系统自动反馈给参赛队伍;2 .比赛结果由个人解决的题目以及解决时间来决定,解题多者获胜,如果有队伍解题数量相同,则根据总用时加上惩罚时间进行排名。总用时和惩罚时间由每道解答正确的试题的用时加上惩罚时间组成。每道试题用时将从竞赛开始到试题解答被判定为正确为止,期间每一次错误的运行将被加罚 20 分钟时间,未正确解答的试题不计时。 九、奖项设置 一等奖: 1 名 150元+证书; 二等奖: 2 名 100元+证书; 三等奖: 3 名 50元+证书。 赛后总结 虽然已经是大二第二学期了,这却是我的第一真正的ACM比赛经历,赛后感觉自己水平很差,感觉很不好,或许只有受到了了打击,才会有成长,也只有在一次次的打击中吸取经验,成为自己前进的动力。 这次比赛总结起来发现了我们的好多不足之处,第一个就是我们经验的缺失,毕竟是我们第一次参加这样的比赛,还有就是对做题顺序的把握不好,对题目难易程度判断不准确,如果做一个题发现思路错了,我们应该要及时改变思路,跳过去,先去做下面容易的题,等回过头来在做,要用尽量短的时间把我们知道做的题做出来,有些题,我们有思路,不敢保证完全做出来,就放到后面再去做,还有就是比赛的时候心态不好,中间做的时候就比较焦急,这样对自己的思路也会有影响,要调节好自己的情绪,还有就是要及时改变策略,多看榜,看到有很多人a的题目,我们肯定要去看一下,一开始我们就应该把题目全部都看一遍,最重要的是我们的实力还是不行,对于有些简单的题目还是不够熟练,思路不够清晰,下阶段要进一步有针对的加强训练! 比赛结束,我们真的是百感交集,有过遗憾,有过不甘心,有过失望,本来这次比赛应该是很好拿奖的,但最终我们还是与奖状擦肩而过,可能与经验的缺乏有关,我想更多的应该还是实力的差距,自己的实力不行,做什么都是白搭。所幸的是,我们明年还有一次机会,再努力一年,我想我们明年再战的时候,一定可以取得一个很好的成绩。 14物联网 贾文彪 摘要:从分析当前高校在程序设计类专业课程教学中存在的问题及问题产生的原因出发,阐述利用acm竞赛来促进计算机专业教学体系特别是程序设计类课程的教学改革。在调研acm竞赛模式和特点的基础上,通过改革课程开设计划、改革课程实践教学模式、开发资源网站、建设学生梯队、建立激励机制、改革考核手段等方式来实施课程教学改革,并在实际教学应用中取得了一定的成效。 关键词:acm竞赛;程序设计;课程;教学改革 中图分类号:tp3-4 文献标识码:a 文章编号:1007-9599(2012)19-0000-02 引言 计算机软件技术的发展日新月异,给高等院校相关专业的教学带来了很大的挑战,为了更好地适应不断变化的社会就业需求,就必须在传统的计算机专业教学模式的基础上开辟出一条新路。 在这样的背景下,乐山师范学院计算机科学学院早在2005年就开始开展校企合作办学,与企业联合培养校企合作方向的学生,至今已是第八届。相比普通班,校企合作教改班所开设的专业课程更符合于当前计算机人才市场的需求,典型的特点就是注重对学生的专业技能尤其是程序设计和软件开发能力的系统性培养,严格按照软件工程师的培养模式来开展相关的理论和实践教学环节,这在很大程度上改变了以往只注重专业理论教学的局限性。 在对近几年教改学生的就业情况进行分析以后,明确肯定了校企合作教学模式为我院本科人才培养体系的改革起到了决定性的促进作用,学生的专业技能有了明显的增强,也大大提高了毕业生的就业率。 但与此同时也认识到存在的一些问题:首先,传统的以程序设计语言语法描述为主线的教学方式,以及模式化的实验内容,使教师在教学过程中容易将重点偏向理论,降低了对学生实践能力的锻炼和考核;其次,我们的软件工程师主要是在教室和机房这样的环境下培养出来的,缺乏真刀真枪的实践锻炼机会;最后,虽然校企合作人才培养方案的整体实施效果不错,但也很难培养出高层次的计算机专业人才。 如果以上几点不能有效地解决,那么校企合作办学的成效和前景将受到限制,因此迫切地需要一种途径去驱动程序设计类专业课程的教学模式改革,经过长期、反复的思考和摸索,我们认为通过开展学科专业竞赛活动来推动课程教学改革是比较可行的。而在种类繁多的计算机学科专业竞赛中,最权威、级别最高的就是《acm/icpc国际大学生程序设计竞赛》。 本教改项目结合acm竞赛来促进计算机专业教学体系特别是程序设计类课程的教学改革,教改实施对象主要为计算机科学学院软件工程专业方向的学生。首先针对程序设计类课程教学存在的问题以及问题产生的原因进行分析,然后在acm竞赛模式和特点的基础上,尝试通过结合acm竞赛来改革课程开设体系和课程教学模式,最后提出了解决问题的具体措施,并在实际教学应用中取得了一定的成效。 当前程序设计类课程教学存在的问题 2.1 人才培养模式陈旧,实践教学比例不足 在传统的被动教学模式中,学生缺乏学习主动性、创新性和行业竞争力。而计算机专业课程大多属于实践型课程,强调动手能力。为了加深对理论知识的理解,必须提高实践教学质量,理论和实践教学的学时分配要作适当调整。 2.2 实践内容模板化,缺乏创新能力的培养 首先,设计性、综合性实验偏少,很难培养学生的创造性思维;其次,实验内容严重脱离了现代软件工程过程,更谈不上对综合型应用问题的解决;最后,在实践教学过程中,教师干预太多,学生处于被动完成实验任务的角色。 2.3 缺乏互助学习能力,团队协作意识较差 当前软件项目的开发都是以团队形式实施的,团队成员之间需要合理分工和无障碍沟通。但在传统教学模式中,以项目组为单位来开展教学活动的机会非常少,更谈不上互助学习和团队协作了。 2.4 课程考核模式单一,缺乏激励机制 课程考核主要采用传统考核模式,考核内容受限于教材知识点,缺乏对学生知识结构与实践技能的综合考察,不利于学生综合实践能力和创新能力的培养,最终形成“高分低能”的现象。改革措施 本教改项目主要通过以下几个方面来实施以acm竞赛促进程序设计类课程教学改革的方案。 3.1 改革课程开设计划 全面分析了目前程序设计类专业课程教学中存在的一些问题(比如教法和学法等方面),结合acm的竞赛大纲和竞赛模式来调整开课计划,把原计划一学期的《程序设计基础》课程的教学时间调整为一学年,第一学期是程序设计的入门教学,主要介绍高级程序设计语言编程基础;第二学期是程序设计的进阶教学,主要介绍算法设计与分析。 3.2 改革课程实践教学模式[1] (1)实验内容分级化: 将实验内容分成知识型(单一算法)、应用型(算法和实际问题结合)和综合型(若干小算法的综合,用于解决一个较大规模的问题)。不同级别题型的权值不同,每一级别中又包含若干个相同权值的题目,学生可以根据自身情况选择不同级别的题型和题目数量,这样既考虑到了不同层次学生的学习需求,又达到了统一的实验目的。 (2)实验题目趣味化: 传统的程序设计类实验题目普遍比较枯燥,难以调动学生的学习兴趣和设计思路。参考acm的海量题集,由任课教师将实验题目生活化和趣味化,使学生自主选择合理的数据结构和算法来解题,这样可以充分激发学生的学习主动性和积极性,将被动学习转化为主动学习,更好地达到了实践教学的目的。 (3)实验时间分散化: 考虑到实验课时非常有限,可参照acm竞赛平台来构建“程序设计在线评测系统”,功能包括用户管理、题库管理、在线提交、在线排名、在线讨论等。学生注册后可在任何时间登陆该系统进行选题、提交、评测和讨论等自主学习环节,将有限的课内练习时间延续到课外。 3.3 开发资源网站 3.4 建设学生梯队 依托于乐山师范学院第二课堂课程《acm程序设计》的开设,以乐山师范学院三星级社团“程序员协会”为活动主体,在全校范围内吸纳对计算机编程和竞赛感兴趣的学生,成立“acm竞赛兴趣小组”,通过举办专业讲座、学生科研、协会内部竞赛、协会沙龙等活动,为本专业学生提供一个进一步增强职业技能的交流和学习的平台,同时也要在兴趣小组中发现适合参加acm竞赛的后备人才,面向各年级构建acm竞赛梯队。 3.5 建立激励机制 增设创新学分,设置创新环节,搭建创新实践的平台,让学生有更多的机会展示自己的专业特长。将参加acm等学科竞赛纳入学生的综合测评,通过设立竞赛奖学金制度来引导学生积极参加课外科技活动、不断提高自身的创新素质。 3.6 组织参赛 在本教改项目的实施过程中,还要积极组织学生参加各个级别的acm赛事。对于每一次竞赛,首先成立竞赛领导小组,分析官方公布的竞赛大纲,及时、准确地改革专业教学体系目标和课程开设计划;其次根据往届参赛经验,结合本次竞赛的具体情况制定出竞赛活动方案,将竞赛的宣传、组织、选拔、培训、参赛、奖励等环节制度化;然后选拔acm参赛队伍,指派经验丰富且取得过优异成绩的教练对参赛队员进行长期、深入、全方位的强化培训和指导;最后通过对竞赛成绩的分析再次调整专业课程开设计划和教学模式。[2] 3.7 改革考核手段 acm模式的重要特色之一是完善而严谨的考核机制,所以我们大胆尝试将acm的考核方式借鉴到程序设计类课程的考核环节中,采用acm模式的黑箱测试,将学生在“程序设计在线评测系统”中获得的成绩以50%的权重加入到课程考核指标当中。这一方面减少了教师的工作量,降低了考核错误率,另一方面做到了客观、公正,更好地发掘了学生的创新能力,提高其对知识点的掌握程度。 要解决的关键问题 4.1 课程教学形式的改革,特别是如何处理实践教学和理论教学的比重关系,以及如何让学生能够真正地解决问题,而不是按照设定好的思路去模仿着解决问题。 4.2 课程评价体系的改革,尤其是目前的实践环节评价机制弊端明显,严重束缚了学生的创新能力,错误地引导学生把自己改造为一个受制于理论教材的傀儡。 4.3 差异化教学,考虑到acm竞赛的难度较大,所以必须考虑到在将acm融入到专业课程教学过程之后,如何确保整体教学质量并解决好部分学生学习能力较差的问题。 4.4 在acm竞赛中取得更好的成绩,必须建立有效的组织、选拔、培训、参赛、总结等相关机制。 结语 acm竞赛对程序设计类专业课程的教学改革起到了积极的推动作用,从教学队伍建设的角度来看,它在提高教师的教学水平、科研能力、促进专业的对外交流等方面都起到了重要的作用;从学生培养的角度来看,它在提高学生的学习兴趣、自学能力、创新能力、求真务实的科学态度上有很大的帮助。 总之,通过合理的应用acm竞赛这个平台,可以使我们的计算机专业教学更趋科学化、规范化,可以让我们的学生开拓视野,促进实践型、创新型人才的培养,提高学生的就业竞争力。 参考文献: [1]常子楠.基于acm模式的程序设计类课程实践教学探索[j].计算机教育,2010(16):144-146.[2]项炜.以学科竞赛促进计算机专业教学改革的探索[j].改革与开放,2009(12):207.[作者简介] 项炜,男,讲师,研究方向为自然语言处理;陈建国,男,副教授,研究方向为人工智能;苏炳均,男,副教授,研究方向为自然语言处理。 基金项目:乐山师范学院教育教学改革研究项目(jg11-yb26)。第二篇:acm程序设计竞赛策划书
第三篇:2011年ACM程序设计大赛策划书
第四篇:ACM赛后总结
第五篇:以ACM竞赛驱动程序设计类专业课教学改革