c语言程序设计复习题(精选8篇)
1、考试题型:
选择、操作、填空、改错、编程
2、考试知识点范围:
基本数据类型、表达式
输入输出语句
选择结构
循环结构
数组(一维数组、二维数组、字符数组、字符串)
函数(函数定义、声明、函数调用、函数参数、全局变量和局部变量、静态变量)指针(指针的概念、指针和一维数组)
结构体和联合体(基本概念)
3、主要算法
(1)求和、积
(2)用公式求和
(3)求最大最小值
(4)数列(斐波那契数列)
(5)最大公约数和最小公倍数(6)求素数
《C语言程序设计》作为中职计算机专业学生的必修课程, 被列为江苏省计算机专业对口单招必考学科之一。对于中职阶段的计算机专业的学生, 通过对C语言初步的学习, 培养出了良好的编程思想, 并为以后升入高等院校学习后续专业课程打下良好的基础。使学生在进入高三阶段, 对C语言程序设计的课程内容已经学习完毕。而复习课是以巩固梳理已学的知识, 使之形成知识网络、提高基本技能, 增强解决实际问题的能力为主要任务的。但复习课往往使老师感到难讲, 使学生感到乏味。学生认为是自己学过的知识, 学得没劲, 老师上得累, 学生学得腻, 因此效果往往不理想。而上好复习课, 对学生巩固学过的知识、为后面的学习打下良好基础至关重要。在新理念下, 我们应该调整复习方法, 提高复习效果。应该放手让学生自己去梳理学过的知识, 把复习的主动权交给学生, 并对典型算法作专项练习, 注重上机实践操作。
二、重视学生复习的自主化
复习课要把旧知识进行整理归纳, 这一过程, 就是将平时相对独立的知识点串成线, 连成片, 结成网。如果教师对复习问题面面俱到, 学生会感到乏味, 引不起兴趣, 往往不要深入思考, 张口就来, 被牵着学生鼻子走, 老师成了课堂的主角, 学生被动接受, 老师感到累而学生思维受到限制。学生对已学过的知识都在一定程度上有所了解, 我们应该相信学生, 留给学生较大的探索空间, 发挥他们的聪明才智。因此, 在课堂上我尝试把复习的主动权交给学生, 让学生自己把本节课要复习的内容先进行整理归纳, 然后在课堂上由学生把整理的知识点拿出来进行对比, 结果效果很好。如在复习文本作图的程序时, 先让学生说说学过哪些文本图形, 这些图形各有什么特点又有哪些相同点, 我们要复习相关知识点的哪些内容。学生把这一部分知识整理得井井有条, 形成了一个清晰的知识网络。自己整理得出结果, 这样学生会对知识点的印象更加深刻。
三、重视各章节知识连贯性的梳理
每一门课程的知识体系都具有完整性。在教学过程中要注重知识结构的完整性, 即要让学生对前后知识有连贯性的认识。在复习课中对所复习的知识并不是只局限于本节课的知识点, 因为学生对所有的知识都已经学过, 所以在复习前面知识的同时, 把后面各章节有关的知识点全部联系起来, 从宏观上去复习。如何进行连贯性的复习呢?要引导学生以线索串联内容要点, 形成基本历史知识的网络, 有些学生知识点掌握得较零散, 在记忆方法上多采用机械记忆, 应该教会学生理解其内涵, 并将各个知识联系起来, 在教学阶段加强知识点的衔接, 逐步提高。
四、重视知识点的分类
知识分类教学论是现代认知心理学与现代教育相结合的产物。我国著名的心理学教授皮连生根据现代信息加工心理学的研究, 广义上把知识定义为“主体通过与其环境相互作用而获得的信息及其组织”, 并认为它储存在个体内即为个体知识;储存于个体之外, 乃是人类知识。知识的分类是复习中的重点, 这一过程要完成的任务是把各知识点分类。将知识条理化、系统化, 其间主要应用的思考方法是“分类”, 即根据一定的标准将知识分类化。如复习循环的嵌套, 即双重循环。根据双重循环知识点的应用可分为:文本作图、排序两类。这两类中都是要通过双重循环来实现的。而文本作图又可分为:对称和不对称的两类。排序可分为:顺序比较、选择法、冒泡法、插入法四类。然后根据不同的分类对知识点进行复习。当然, 分类问题应根据学生实际学习的内容学, 分得细好还是粗一些好, 还要看复习内容的多少来定。
五、重视上机实践
对口单招中对学生的技能考核作了很高的要求, 尤其是将程序设计的能力作为了考核的重点。程序设计是一门实际操作性非常强的课程, 上机操作是非常必要的, 在上机过程中, 学生可以进一步理解和掌握知识, 许多学生不清楚或不理解的问题, 通过上机操作可迎刃而解。教材中有些实践性比较强的内容, 不一定在课堂上由老师讲授, 可以指定学生通过上机掌握这些内容。这样做可以把学习的主动权还给学生, 让其真正成为学习的主人, 从而培养学生的自学能力, 启发学生的求知欲望。对于一些实验课的内容, 有时一个程序较大, 往往由于学生初学时对实验内容理解不深, 在上机操作时只是照着课本把例题中的程序机械地编写、调试程序, 并未真正理解程序中每一段程序所完成的功能, 对于程序的结果也似懂非懂。这就要求我们老师在上机实践环节上精心准备实验内容, 让每个实验既有很明确的目的, 同时也要与所学知识有所联系。在实验时, 重点让学生自己动手, 学生有问题, 尽量给予提示, 启发学生自己思考解决问题, 从而提高学生的编程能力。
关键词:教学方法案例教学启发教学教学效果
0 引言
《C语言程序设计》作为计算机专业的基础课,已经成为一门必修的语言课程,在整个语言课程体系中占有非常重要的地位。在C语言教学过程中,从客观上讲,教师的教法和学生的学法的差异,对教学效果都会产生很大的影响。针对教师的教法和学生学习语言类课程的学法,结合近几年来的教学经验和教学体会,把一些经验和方法总结出来,希望能对C语言课程的教学和学习有所帮助。
1 分析教学中存在的问题
《C语言程序设计》是一个逻辑性很强的课程。有些问题是将数学知识转化用c语言来实现,这就要求学生首先要能够理解和掌握数学知识,才能将其转化用c语言来实现。在调试程序时,提示的信息都是用英语给定,那么也就要求学生掌握最基本的英语单词,有些甚至是计算机专业英语,能将英语句子翻译为汉语,才能够对程序加以修改。学生在心里认为c语言难学,没有积极学习的主动性,导致上课时没兴趣,不能专心听讲,布置的作业无从下手,在实践课中,看到要编写的程序题目,理不出头绪。
2 涉及新的知识要有导入
在教学的過程中,要将新的知识点,要有很自然的导入语,引导学生思考问题和解决问题的方法。例如:scanf(“%d”,&a);只能从键盘接受 一个整型数,现在要输入40名学生的成绩,如何通过一个scanf函数来实现,难道是要定义40个变量,那如果要接受100个数呢?更多的呢?为了解决诸如此类的问题我们采用数组来实现。这样也就引导学生思路跟着教师,给他们提出问题,在给出解决问题的办法。
3 举一反三
给定一个例子时,将涉及到的所有内容都要讲到。各种形式,可能出现的错误都要指定。例如:现在要求n!我们可以给定一下几种形式:
(1)main()(2)main()
{ int i=1,n;{inti=1,n;
doubles=1; doubles=1;
scanf("%d",&n); scanf("%d",&n);
while(i<=n) do{ s*=i;
{s*=i;i++;
i++;} }while(i<=n);
printf("%lf",s); printf("%lf",s):
} }
(3)main()(4)main()
{inti,n ; {int i,n;
double s=1;doubles=1;
scanf("%d",&n); scanf("%d",&n);
for(i=1;i<=n;i++)i=n;
s*=i;while(i>=1)
printf("%lf",s); {s*=i;
} i--;}
printf("%lf",s);}
(5)main() (6)main()
{intI,n; { inti=0,n;
doubles=1; doubles=1;
scanf("%d",&n); scanf("%d",&n);
i=n; while(i<=n)
for(i=n;i>0,i--) {i++;
s*=I;s*=i;}
printf("%lf",s);}printf("%lf",s);}
一个例子可以给出多种方法来实现,在这只给出6中形式,从这6种中,就可以看到初值不同,语句的书写顺序不同。通过一个例子,让学生能理解各种形式,遇到诸如此类问题时,就可以迎刃而解。
4 与实践教学相结合
程序设计课程具有很强的实践性,对于计算机语言课程的教授不应仅仅是传授知识,应该以培训能力为主。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序。应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。
参考文献:
[1]朱健,庞倩超.C语言程序设计案例教程.全国高职高专教育精品规划教材:北京:交通大学出版社.
[2]郭芹.对高职高专计算机专业程序设计教学的思考.中国科技信息.2008(1).
[3]谭浩强.C语言程序设计教程.北京:高等教育出版社.
一. 题型:
1.选择题——最基本的知识点,概念——共20分
2.程序运行结果分析——10道程序题——共30分
(来源于课本例题和作业,复习的重点是多看课本程序和作业程序)
3.程序填空题——一个完整的程序挖掉一些空格——共四个程序,10个空格——共30分
4.编程题——有两道——一道课后作业,比较容易,8分——另外一道比较难,12分——共20分
二.
了。
2.第五章到第八章的内容是核心内容,要重点复习,题型覆盖所有题目。
3.第九章主要复习宏定义和宏替换。
4.第十章考的不多,集中在10.2和10.3两节。
第1章 程序设计基本概念
1.1 程序和程序设计
1[单选题] 以下叙述中错误的是()。
A.C语言源程序经编译后生成后缀为.obj的目标程序
B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C.用c语言编写的程序称为源程序,它以ASCIl代码形式存放在一个文本文件中
D.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
参考答案:D
参考解析:并不是源程序中的所有行都参加编译。在条件编译形式下,相关内容只在满足一定条件时才进行编译。选项D)中的非执行语句不在其范围内。
2[单选题] 下列描述中正确的是()。
A.算法是指对解题方案的准确而完整的描述
B.算法的有穷性是指算法程序的长度是有限的
C.算法是否有效与拥有的情报无关
D.算法的基本特征有可行性、确定性和有穷性
参考答案:A
参考解析:算法是指对解题方案的准确而完整的描述。算法具有4个特征:可行性、确定性、有穷性和拥有足够的情报。有穷性指算法必需在有限时间内做完,即算法必需能在执行有限个步骤之后终止。当算法拥有足够的情报时,此算法才是有效的;而当提供的情报不够时,算法可能无效。
3[单选题] 下列数据结构中属于非线性结构的是()。
A.队列
B.线性表
C.二叉树
D.栈
参考答案:C
参考解析:线性结构满足两个条件:有且只有一个根结点;每个结点最多只有一个前件,也最多只有一个后件。栈、队列、线性表都属于线性结构,二叉树是一种非线性结构,因为除叶子结点外,每个结点都有两个后件,不满足线性结构的条件。
4[单选题] 4个元素A、B、C、D依次入栈,入栈过程中允许栈顶元素出栈,假设某一时刻栈的状态是C(栈顶)、B、A(栈底),则不可能的出栈顺序是()。
A.D、C、B、A
B.C、B、D、A
C.C、A、D、B
D.C、D、B、A
参考答案:C
参考解析:栈的特点是先进后出,所以后入栈的最先出栈。在栈的状态是c(栈顶)、B、A(栈底)时,D未入栈,栈顶元素可以出栈,但A不可能比B先出栈,所以c选项错误。
5[单选题] 下面概念中,不属于面向对象方法的是()。
A.对象
B.继承
C.类
D.过程调用
参考答案:D
参考解析:类是指具有共同属性、共同方法的对象的集合,所以类是对象的抽象,对象是对应类的一个实例。继承是指能够直接获得已有的性质和特征,而不必重复定义它们。所以选项A、B、C属于面向对象方法,选项D属于面向过程方法。
6[单选题] 下列选项中属于软件生命周期开发阶段任务的是()。
A.可行性研究
B.需求分析
C.详细设计
D.软件维护
参考答案:C
参考解析:软件生命周期可分为软件定义、软件开发和软件运行维护3个阶段。软件开发期包括概要设计、详细设计、实现和测试4个阶段。
7[单选题] 软件设计中衡量模块独立性的度量标准是()。
A.抽象和信息隐蔽
B.局部化和封装化
C.内聚性和耦合性
D.激活机制和控制方法
参考答案:C
参考解析:耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。
8[单选题] 下列不属于过程设计工具中图形工具的是()。
A.N—S
B.PAD
C.程序流程图
D.DFD
参考答案:D
参考解析:常用的过程设计工具有图形工具(程序流程图、N-S图、PAD图、HIPO)、表格工具(判定表)、语言工具(PDL)。
9[单选题] 下列叙述中错误的是()。
A.数据库管理系统是数据库的核心
B.数据库系统由数据库、数据库管理系统、数据库管理员三部分组成
C.数据共享最好的是数据库系统阶段
D.数据库中的数据独立于应用程序而不依赖于应用程序
参考答案:B
参考解析:数据库管理系统是数据库系统的核心,它位于用户和操作系统之间,属于系统软件。数据库系统由数据库、数据库管理系统、数据库管理员、硬件平台和软件平台五部分组成。数据库技术的发展经历了3个阶段,人工管理、文件系统和数据库系统,数据共享最好的是数据库系统阶段,数据库中的数据独立于应用程序而不依赖于应用程序。
10[单选题] 在下列选项中,哪个不是一个算法一般应该具有的基本特征()。
A.无穷性
B.可行性
C.确定性
D.有穷性
参考答案:A
参考解析:作为一个算法,一般应具有以下几个基本特征:可行性、确定性、有穷性、拥有足够的情报。本题答案为A)。
11[单选题] 下列关于栈的叙述中正确的是()。
A.在栈中只能插入数据,不能删除数据
B.在栈中只能删除数据,不能插入数据
C.栈是先进后出(FILO)的线性表
D.栈是先进先出(FIFO)的线性表
参考答案:C
参考解析:栈是限定在一端进行插入与删除的线性表。栈是按照“先进后出”的或后进先出的原则组织数据的,因此,栈也被称为“先进后出”表或“后进先出”表。本题答案是C)。
//定义学生结构体,st数组。
int score[5];float jqave;int rank;}st[27];
struct kecheng { int num;char kcname[20];
//定义课程结构体,course数组.float xuefen;float biaozhuncha;int youxiu;int lianghao;int zhongdeng;int jige;int bujige;
}course[5];
void readdata1(){
int i,j;
char str1[100];
FILE *f1;
f1=fopen(“c:xinji110213.txt”,“r”);
fgets(str1,100,f1);// printf(“%-s”,str1);
for(i=0;i<27;i++)
{
fscanf(f1,“%d%s”,&st[i].num,st[i].name);
// printf(“%-4d%-10s”,st[i].num,st[i].name);
for(j=0;j<5;j++)
{
fscanf(f1,“%d”,&st[i].score[j]);// printf(“%-9d”,st[i].score[j]);}
// printf(“n”);}
fclose(f1);}
void readdata2(){
int k;
char str2[100];
FILE *f2;
f2=fopen(“c:xj02kc.txt”,“r”);
fgets(str2,100,f2);// puts(str2);
for(k=0;k<5;k++)
{
fscanf(f2,“%d%s%f”,&course[k].num,course[k].kcname,&course[k].xuefen);
// printf(“%-8d%-10s%2.1fn”,course[k].num,course[k].kcname,course[k].xuefen);
}
fclose(f2);} void jqave(){ int i,j;float s=0,sum=0;for(i=0;i<27;i++)
{
for(j=0;j<5;j++)
{
s+=course[j].xuefen;
sum+=st[i].score[j]*course[j].xuefen;
}
st[i].jqave =sum/s;
} }
void ranking()
{ int i,j;
for(i=0;i<27;i++){
st[i].rank=1;
for(j=0;j<27;j++)
if(st[i].jqave st[i].rank=st[i].rank+1;} } void paiminghoudechengji(){ int i,j;FILE *fp;fp=fopen(“c:MC110213.txt”,“w”);printf(“ 名次 学号 姓名 数学分析 高等代数 C语言 大学物理 大学艺术 加权平均分 n”);fprintf(fp,“ 名次 学号 姓名 数学分析 高等代数 C语言 大学物理 大学艺术 加权平均分 n”); for(i=0;i<27;i++) { printf(“%3d%5d%8s”,st[i].rank,st[i].num,st[i].name); fprintf(fp,“%3d%5d%8s”,st[i].rank,st[i].num,st[i].name); for(j=0;j<5;j++) { printf(“%10d”,st[i].score[j]); fprintf(fp,“%10d”,st[i].score[j]); } printf(“%12.2fn”,st[i].jqave); fprintf(fp,“%12.2fn”,st[i].jqave);} fclose(fp);} void xiechengji(){ int j;FILE *fp;fp=fopen(“c:xj1110213.txt”,“w”);fprintf(fp,“ 编号 课程名称 课程学分 标准差 优秀 良好 中等 及格 不及格 n”);printf(“ 编号 课程名称 课程学分 标准差 优秀 良好 中等 及格 不及格 n”);for(j=0;j<5;j++) { printf(“%3d%15s%10.2f”,course[j].num,course[j].kcname,course[j].xuefen);fprintf(fp,“%3d%15s%10.2f”,course[j].num,course[j].kcname,course[j].xuefen); printf(“%10.1f%8d%8d%8d%8d%6dn”,course[j].biaozhuncha,course[j].youxiu,course[j].lianghao,course[j].zhongdeng,course[j].jige,course[j].bujige); fprintf(fp,“%10.1f%8d%8d%8d%8d%6dn”,course[j].biaozhuncha,course[j].youxiu,course[j].lianghao,course[j].zhongdeng,course[j].jige,course[j].bujige); } fclose(fp);} void pingjunfen(){ int i,j; for(j=0;j<5;j++) { float zongfen=0,pingjunfen=0; for(i=0;i<27;i++) zongfen+=st[i].score[j]; pingjunfen=zongfen/27; } } void biaozhuncha(){ int i,j; for(j=0;j<5;j++){ float zongfen=0,pingjunfen=0,x=0; for(i=0;i<27;i++) zongfen+=st[i].score[j]; pingjunfen=zongfen/27; for(i=0;i<27;i++) x+=(st[i].score[j]-pingjunfen)*(st[i].score[j]-pingjunfen); course[j].biaozhuncha=(float)sqrt((x/27)); } } void count(){ int i,j; for(i=0;i<5;i++) { course[i].youxiu=0,course[i].lianghao=0,course[i].zhongdeng=0,course[i].jige=0,course[i].bujige=0; for(j=0;j<27;j++) { if(st[j].score[i]<60) course[i].bujige++; else if(st[j].score[i]<=69) course[i].jige++; else if(st[j].score[i]<=79) course[i].zhongdeng++; else if(st[j].score[i]<=89) course[i].lianghao++; else course[i].youxiu++; } } } void chengjitiao(){ int i,j;FILE *fp;fp=fopen(“c:cjt110213.txt”,“w”);do { printf(“请输入你要查询的编号 退出请按零”); scanf(“%d”,&i); fprintf(fp,“ 编号 姓名 数学分析 高等代数 C语言 大学物理 大学艺术 加权平均分 名次n”);printf(“ 编号 姓名 数学分析 高等代数 C语言 大学物理 大学艺术 加权平均分 名次n”);if(i>=0&&i<=26)fprintf(fp,“%3d%10s”,st[i-1].num,st[i-1].name); printf(“%3d%10s”,st[i-1].num,st[i-1].name);for(j=0;j<5;j++){ printf(“%9d”,st[i-1].score[j]); fprintf(fp,“%9d”,st[i-1].score[j]);} printf(“%12.2f%8dn”,st[i-1].jqave,st[i-1].rank);fprintf(fp,“%12.2f%8dn”,st[i-1].jqave,st[i-1].rank);fclose(fp);} while(i>0&&i<28); } void bujigexueshengmingdan(){ int i,j; printf(“不及格学生名单如下:n”);printf(“ 学号 姓名 不及格课程 分数 n”);for(i=0;i<27;i++){ for(j=0;j<5;j++) if(st[i].score[j]<60) {printf(“%3d%12s”,st[i].num,st[i].name); printf(“%15s%8dn”,course[j].kcname,st[i].score[j]); // printf(“ 平均分”); // printf(“%10.2f 名次%8dn”,st[i].jqave,st[i].rank); } } } void youdeng(){ int i,k;printf(“ 优等生名单如下n”);printf(“编号 姓名 数学分析 高等代数 C语言 大学物理 大学艺术 加权平均分 名次n”);for(i=0;i<27;i++){ // for(j=0;j<5;j++) if(st[i].jqave>=90||st[i].rank<=3) { printf(“%2d%10s”,st[i].num,st[i].name); for(k=0;k<5;k++) printf(“%9d”,st[i].score[k]); printf(“%10.2f%8dn”,st[i].jqave,st[i].rank); } else; } } void caidan() { loop: printf(“ &&简易教学管理系统&&n”); printf(“press 1 for 排名后的成绩表 !n”); printf(“press 2 for 各科成绩情况!n”); printf(“press 3 for 成绩条!n”); printf(“press 4 for 不及格学生名单!n”); printf(“press 5 for 优等生名单!n”); printf(“press 0 for 退出n”); int t; scanf(“%d”,&t); switch(t) { case 1: paiminghoudechengji();break; case 2: xiechengji();break; case 3: chengjitiao();break; case 4: bujigexueshengmingdan();break; case 5: youdeng();break; case 0: exit(0); } goto loop; } void main(){ readdata1(); readdata2(); jqave(); ranking(); pingjunfen(); biaozhuncha();count(); 1“程序设计基础”课程教学内容要点 “程序设计基础”课程教学大纲中明确规定了教学内容,这些内容涵盖的知识单元有:程序设计语言概论,程序设计基本结构,算法与问题求解,事件驱动程序设计,算法策略,基本算法,面向对象程序设计。 一般情况下,一个问题的求解过程可能涉及多个知识点,一个知识点可能会出现多个语法要素,如在求解两个整数的最大公约数问题上,会用到如变量定义、输入输出、数据交换、循环控制结构等知识点,而就单纯循环控制结构中就会出现很多语法要素,如用到的关键词可能有while,for等,运算符有=,%等。 问题空间,知识点和语法要素的对应关系可以用图1表示。 因此对语法内容的选取首先需要确定问题空间,即先确定学习者所能解决的问题范围。对于程序设计初学者来说,用前文所述的十三类常用算法就足够了。 2 C/C++语法特点 从语法的角度看,源程序实际上是一个字符序列。这些字符序列按顺序分别组成了一系列“单词”。这些“单词”包括语言事先约定好的保留字(ReservedWords,如用于描述分支控制的if、else,用于描述数据类型的int等)、常量(Constant)、运算符(Operator)、分隔符以及程序员自己定义的变量名、函数名等。 “单词”的组合形成了语言有意义的语法单位,如变量定义、表达式(Expression)、语句、函数定义等。一些简单语法单位的组合又形成了更复杂的语法单位,最后一系列语法单位组合成程序。下面就以C/C++语言为例,简要说明其最主要的语法要素。 3 C/C++语言的主要“单词” 标识符C/C++语言的标识符规定由字母、数字以及下划线组成,且第一个字符必须是字母或下划线。在C/C++语言中,标识符中的字母大小写是有区别的。最主要的标识符是:保留字和用户自定义标识符。保留字也称关键字,它们是C/C++语言规定的、赋予它们以特定含义、有专门用途的标识符。这些保留字也主要与数据类型和语句有关。如int(整数类型)、float(浮点数类型)、char(字符类型)、typedef(类型定义)、以及与语句相关的if、else、while、for、break等。 自定义标识符:包括在程序中定义的变量名、数据类型名、函数名以及符号常量名。一般来说,为了便于程序阅读,经常取有意义的英文单词作为用户自定义标识符。常量常量是有数据类型的,如,整型常量123、实型常量12.34、字符常量’a’、字符串常量“helloworld!”等。 运算符:代表对各种数据类型实际数据对象的运算。如,+(加)、-(减)、*(乘)、/(除)、%(求余)、>(大于)、>=(大于等于)、==(等于)、=(赋值--assignment)等。绝大多数运算为双目运算(涉及两个运算对象),也有单目(涉及一个运算数)和三目(三个运算数)运算,如C/C++语言中的条件运算“?:”就是一个三目运算。 分隔符:也叫做界符。如:;、[、]、(、)、#等。 4 C/C++语言的主要语法单位 表达式运算符与运算对象(可以是常量、函数、变量等)的有意义组合就形成了表达式。如,2+3*4、i+2 变量定义:变量也都有数据类型,所以在定义变量时要说明相应变量的类型。变量的类型不同,它在内存中所占的空间大小也会有所不同。变量定义的最基本形式是:“类型名变量名;”。如,“inti;”就定义了一个整型变量i。 语句:语句是程序最基本的执行单位,程序的功能就是通过对一系列语句的执行来实现。C/C++语言中的语句有多种形式: 最简单的语句:表达式加“;”。在C/C++语言中赋值也被认为是一种运算,如“i=j+2”(把j加2的结果给变量i)就是一个包含“+”和“=”两种运算的表达式,“+”优先级较高。在上述表达式后加“;”就成了一个执行赋值过程的语句。 分支语句:实现分支控制过程,即根据不同的条件执行不同的语句(或语句模块)。具体有两种形式,即双路分支的if-else语句与多路分支的switch语句。循环语句:C/C++语言实现循环控制的过程具体有三种形式,即while语句、for语句、do-while语句等。 复合语句(Compoundstatement):通过一对大括号“{}”,将若干语句顺序组合在一起就形成了一个程序段。如,前面while语句中的“{sum=…}”。 函数定义与调用:函数是完成特定任务的独立模块,是C/C++语言唯一的一种子程序形式。 以上简单描述了C/C++语言最主要的语法要素,它还有非常丰富的库函数以支持和实现非常庞大的功能。由以上内容可见,语法单位是单词之间通过各种组合方式构成的,如,变量和运算符组合的表达式,关键字中如for,while等构成的语句等。所以,本研究只从“单词”的角度研究基本语法要素构成的语法子集,暂时不考虑语法结构的问题。 5 实验设计 实验主要由以下几个步骤组成: 1)数据采集(数据采样):原始数据主要来源于目前国内用于“程序设计基础”课程的教材,包括国内的许多专家学者所编著的教材和国外原文教材的翻译版本教材。处理数据主要是其中的样例程序和课后习题的实现程序。由于这些教材形式主要包括课件及相关的电子文本,所以首先要解决的问题就是从自然语言文本中抽取样例程序,并生成TXT文本。 2)数据处理:数据处理阶段要解决的问题就是对已经筛选出的符合条件的程序进行分词、标注。分词工作会去除掉程序中多余无用的部分(如注释,多余空格等),标注的信息包括该词的类型(关键字、运算符、界符、标识符、常量),该词所属的程序文件编号,该程序所属的问题范畴。 对采集到的每个源程序文件进行分词标注之后均产生一个单词表,取名为“源文件名_单词表”,其结构如表1所示。 3)数据统计:对数据处理阶段得到的单词表进行统计。以单词出现的频数和在所有文件中出现的比例为统计依据。也就是说,最终得到的是所有程序文件中出现的C/C++语言的单词频数统计表(不包括重复出现的情况)。通过对该表的分析得出最后的结论。 6 数据采集 将目前国内大多数院校所选用的作为计算机及相关专业的“程序设 计基础”课程的教材作为主要分析对象。由于数据量较大,只能选取其中的一些由权威出版社及程序设计方面的专家学者所著的一部分。为了尽量降低采样主观性,体现实验数据的普遍性,主要使用了以下两种方法:一是在搜集到的现有教材中随机采样选三本;二是根据教材的发行量及在各大院校的使用情况选三本。 数据采集的渠道主要有网上搜索,与出版社联系。经过近半年的时间,收集到了大量用于普通高校本科计算机专业教学用C或者C++语言的程序设计教材,但是,这些教材绝大多数是PDG格式,或PDF格式,按照实验设计要求,数据处理阶段的数据源必须是TXT文本文件。这就对教材中例题的提取造成了很大的困难。现将例题转换过程中所用到的相关软件及技术简单总结如下。 1)PDG格式文件转TXT文件:Pdg2Pic软件的格式转化器将PDG文件以三种语言(英语、简体中文、繁体中文)生成TXT文件,生成的TXT文件中,已不再保留教材中文字的原有格式。经过对比实验,将该软件的转换语言选择为英语的时候,生成的TXT文件中的例题错误之处会更少。最后,将生成的TXT文档与源文件进行人工比对,发现例题中的错误,将其改正,并将例题之外的部分删除,就可以得到只含有例题的TXT文件了。 2)PDF文件转换为TXT文件:PDF文件的生成原文件可以是文档文件,也可以是图像文件。有于其原文件的不同,在将PDF文件转换TXT文件的过程中,决定了在转换过程中将采用不同的软件。 参考文献 [1]李炜.计算机高级语言程序设计课程的教学改革与实践[J].安徽师范大学学报:自然科学版,2003(2):24-26,29. [2]杨起帆.C语言程序设计教程[M].浙江:浙江大学出版社,2006. 关键词 C语言 程序设计 教学方法 中图分类号:G648.2文献标识码:A文章编号:1002-7661(2011)09-0028-02 C语言是计算机专业和相关专业一门很重要的专业基础课,学好C语言为数据结构等后继课程有很大帮助。但是对于高职学生,数学、英语等基础知识较差,而C语言又作为他们面临的第一门语言类课程,因而学习C语言具有很大的难度。本文结合本人几年来的教学经验,对怎样提高C语言教学质量,如何让学生掌握好C语言基础知识点提出几点看法。 一、创设情境,激发学生学习兴趣 大多数学生对新课程都很感兴趣,都很想学好这门课,所以上好第一节C语言课是一个很好的开始。C语言有很多语法和知识点需要掌握,但是如果第一节课就开始介绍C语言的知识点,不但得不到好的收效,还会让学生因为知识枯燥,不易理解而失去学习本课程的兴趣。上第一节课,先讲授C语言这门课程的重要性以及在计算机课程中的地位,然后给学生演示几个简单的游戏,比如:小型运算器,俄罗斯方块,贪吃蛇等,告诉他们这些都可以用C语言来编写。通过这些实例的引入,可以让学生了解到C语言的实用性,激起学生学习的兴趣。 二、注重教学过程,采用多种教学手段 在教学过程中,把知识点融合在实例中,加强学生对知识点的理解,本人在教学过程中采用以下相应方法: 1.深入浅出 C语言主要包括C语言语法、结构化程序设计、数组、函数、指针、文件等。教材一般都会归纳,但是如果把每一块放在一起讲,难点就比较多。比如,C语言的数据类型很丰富,如果全部放一起讲,学生肯定很难记住,所以可以先讲3种基本数据类型、运算符及相关表达式,再通过一个简单程序,输入输出数据。这样子,学生就逐渐掌握了基本数据类型、定义变量,以及输入输出函数的基本使用。对于一些比较难以理解的概念,可以借用比喻来解释,比如在讲到变量的时候,包括变量的地址、变量名、变量值,在课堂上借用教室打个比方:10网构班(变量名)在实验楼302(变量地址)有45个学生(变量值)。这样学生在定义变量的时候就不会那么抽象了。 2.画出流程图 做任何事情都有一定的步骤,这些步骤是按一定的顺序进行的,缺一不可,如果你对一个问题没有任何思路的话,那肯定编不出程序。在解题的时候,可以先画出流程图,再编程序。如:将50名学生中成绩高于80分的成绩打印出来,可画出流程图如下: 3.先复习旧知识,再导入新课 新内容的导入方法很重要,新课前先回顾复习学过的知识点,从旧知识的某一个点出发,提出和新内容相关的问题,让学生思考,并可适当提问,这样可激发学生思考的积极性。在课堂气氛活跃的情况下,教师适当引导,导入新的知识,这样的讲法可以激发学生的兴趣,使学生更容易接受和理解新知识。 4.任务驱动 每节课开始的时候,可以根据需要布置一些问题,让学生带着相关的问题听课,也可让学生自己思考、归纳,或者互相讨论,这样学生会更有目的性和方向性地听讲。 如:在循环结构for语句中,可以设置三个驱动任务:(1)for语句的一般形式;(2)for语句的执行过程;(3)for语句三个表达式代表的含义,三个表达式能否省略? 5.讲解实例,举一反三 对于C语言程序设计这门课来说,精心设计一些实例,用实例来使概念形象化,深化理解 ,通过教师的分析讲解,使学生更容易入手。然后我们可以对这个简单实例提出新的问题、新的改善方案,引导学生参与对现有程序的修改中来。对于学生的改进方案,教师可引导全体学生来评价优劣,找出其优点,修改其错误,逐步完善,不断优化。这样可以调动学生自主学习积极性,用实例教学加强师生互动。 比如可以在平常写的实例中设置一些待解决的错误,如:故意将赋值符号“=”和等号“= =”互换,漏写分号“;”和大括号“{ }”,引导学生在编程和调试过程中逐一发现并解决这些问题,不仅能够巩固理论知识、养成编程的好习惯,更能调动学生思考问题和解决问题的积极性。同时在解决问题的过程中使学生有一种成就感,这对学习能力的提高和积极性的培养有很好的作用。 6.总结知识点 在课堂讲解过程中,知识点是比较零散的,学生对每个知识点理解了,但对各个知识点之间的联系并不一定理解,缺少一种知识的连贯性,不利于理解和记忆。所以,在每次课结束之前,用几分钟的时间把本次课内容所涉及的知识点回顾一遍,这种回顾既以复习知识点为主,又要讲解其间的联系。当课堂教学内容以一个整体的形式被串联起来后,学生的理解就会加深。如:在讲运算符的时候,每类运算符都有自己的优先级和结合方向,一个一个比较零散,所以在讲完运算符后,可以归纳所有运算符间的优先级和结合方向。 三、引导学生自主学习,培养学生实践能力 程序设计是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行。对于学生来说,一定要重视实践环节,包括编程和上机。对于教师来说,一定要引导学生自主学习,做好课程设计。 1.上机准备 教师要事先设计好实验内容,内容要尽量引用之前所讲的知识点,避免涉及后续章节的知识,难易适中,由浅入深。课前可先给学生演示一下实验的最终效果,概括本实验包括的知识点,提醒学生对每一个操作的结果仔细观察和详细记录。学生在操作中遇到问题,教师应启发学生独立思考,引导学生去发现问题、分析问题和解决问题,培养学生的动手能力,让学生亲自观察和体验程序设计的成功感受,加深对知识的理解。最后,学生要书写实验报告。上机结束后,教师要督促学生及时总结实践经验,将实验中碰到的问题及解决的方法记录在实验报告上。教师根据每一次上机的整体情况,对学生中出现的共性问题进行讲解。 2.课程设计 可以让学生分组实现一个具体课程设计,在本课程结束的前几周完成课程设计,加深学生对本课程的总体理解。本人认为,在学校中学习程序设计的目的是进行程序设计及基本训练,而不是要求学生立即编写大型程序,或今后一辈子只用这门语言。所以,布置课程设计时,要把精力放在本课程最基本、最常用的内容上,开始时,不要在每个细节上死背死抠,在有一定基础后,再通过实践熟练掌握。 教好C语言是一项艰巨的任务,在教学过程中,要深入浅出,以学生为主体,以教促学,学以致用,引导学生在学习过程中掌握编程技巧,调动学生学习的主动性和积极性。 参考文献: [1]唐淑玲.高职C语言程序设计教学效果探析[J].中国校园导刊,2011,(1). [2]由杨.高校计算机C语言实验教学方法初探[J].中国期刊,2009,(1). 【c语言程序设计复习题】推荐阅读: c语言设计程序11-11 c语言递归程序11-06 c语言程序设计实验11-19 c语言程序设计解析02-17 c语言源程序10-03 c语言程序设计实习报告程序02-22 c语言程序设计作业三06-24 C语言图形程序设计报告10-13 c语言程序设计基础题10-28 c语言程序设计补充题11-17c语言程序设计复习题 篇7
C语言程序设计教学方法探讨 篇8