c语言实验报告结构体

2024-08-06

c语言实验报告结构体(精选9篇)

c语言实验报告结构体 第1篇

(设计人:教育技术11D 布鲁斯·李)

各位老师,各位同行大家好:

今天我说课的内容是《结构体》,我将从以下六个方面来说课:

1、说教材

2、说教学目标

3、说重点难点

4、说教学对象

5、说教法学法

6、说教学过程

一、说教材理解:

本课程选自21世纪普通高校计算机公共课程规划教材《C程序设计实例教程》第四章数据组织的第三节。

本教材通过固定模式引导入门:用“输入—处理—输出”模式强化入门训练;

使用任务驱动语法学习,用实例讲解语法,同一个问题用不同的知识点分别实现。

二、说教学目标:

1、知识与技能

(1)学会和掌握结构体类型的定义方法和结构体变量的定义及初始化。

(2)学会和掌握结构体数组的定义、初始化以及使用。 2、过程和方法

(1)通过程序半成品修改实现结构体,帮助掌握结构体语句的语法格式。

(2)通过程序设计编写,体验并归纳结构体语句解决问题的基本思想。

3、情感态度与价值观

(1)培养学生对新事物的认知能力和解决实际问题的能力。

(2)初步在学生心中建立数据存储效率的思想。

三、说教学对象:

大一学生已经有很强的独立思考能力、抽象思维能力和认识新事物的能力,而且已经学习了C语言的基础知识。前面已经学过基本数据类型──整型、浮点型、字符型,也介绍了一种构造类型──数组,并且会引用构造出的数组类型来实现程序的编写。

四、说教法学法:

首先根据上节课所学知识提出问题,快速自然的引出本节课主题(结构体),采用任务驱动法提出任务,紧接着教师引导学生共同分析问题、修改程序以实现对结构体的认识。中途可以适时向学生提出问题,让学生自己对程序做出修改,教师在进行判断给与学生反馈。“编写程序”环节中要注意引导学生对照格式来编写程序,以降低学习难度,逐步提高学生的编程能力。

五、说教学流程:

c语言实验报告结构体 第2篇

简单的来说

结构体就是一个可以包含不同数据类型的一个结构 它是一种可以自己定义的数据类型 它的特点和数组主要有两点不同

首先结构体可以在一个结构中声明不同的数据类型 第二相同结构的结构体变量是可以相互赋值的 而数组是做不到的

因为数组是单一数据类型的数据集合 它本身不是数据类型(而结构体是)数组名称是常量指针

所以不可以做为左值进行运算

所以数组之间就不能通过数组名称相互复制了 即使数据类型和数组大小完全相同

定义结构体使用struct修饰符 例如:

struct test { float a;int b;};

上面的代码就定义了一个名为test的结构体 它的数据类型就是test 它包含两个成员a和b 成员a的数据类型为浮点型 成员b的数据类型为整型

由于结构体本身就是自定义的数据类型

定义结构体变量的方法和定义普通变量的方法一样

test pn1;

这样就定义了一test结构体数据类型的结构体变量pn1 结构体成员的访问通过点操作符进行

pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作

注意:结构体生命的时候本身不占用任何内存空间

只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存

结构体

同样是可以定义指针的

那么结构体指针就叫做结构指针

结构指针通过->符号来访问成员

下面我们就以上所说的看一个完整的例子: #include #include using namespace std;

struct test//定义一个名为test的结构体 { int a;//定义结构体成员a int b;//定义结构体成员b };

void main(){ test pn1;//定义结构体变量pn1 test pn2;//定义结构体变量pn2

pn2.a=10;//通过成员操作符.给结构体变量pn2中的成员a赋值 pn2.b=3;//通过成员操作符.给结构体变量pn2中的成员b赋值

pn1=pn2;//把pn2中所有的成员值复制给具有相同结构的结构体变量pn1 cout<

test *point;//定义结构指针

point=&pn2;//指针指向结构体变量pn2的内存地址 cout<

a=99;//通过结构指针修改结构体变量pn2成员a的值 cout<

a<<“|”<

b<

总之

结构体可以描述数组不能够清晰描述的结构 它具有数组所不具备的一些功能特性

下面我们来看一下 结构体变量是如何作为函数参数进行传递的

#include #include using namespace std;

struct test { char name[10];float socre;};

void print_score(test pn)//以结构变量进行传递 { cout<

void print_score(test *pn)//一结构指针作为形参 { cout<

name<<“|”<

socre<

void main(){ test a[2]={{“marry” 88.5} {“jarck” 98.5}};int num = sizeof(a)/sizeof(test);for(int i=0;i

void print_score(test *pn)的效率是要高过void print_score(test pn)的 因为直接内存操作避免了栈空间开辟结构变量空间需求 节省内存

下面我们再说一下 传递结构引用的例子

利用引用传递的好处很多 它的效率和指针相差无几

但引用的操作方式和值传递几乎一样

种种优势都说明善用引用可以做到程序的易读和易操作 它的优势尤其在结构和大的时候 避免传递结构变量很大的值 节省内存 提高效率

#include #include using namespace std;

struct test { char name[10];float socre;};

void print_score(test &pn)//以结构变量进行传递 { cout<

void main(){ test a[2]={{“marry” 88.5} {“jarck” 98.5}};int num = sizeof(a)/sizeof(test);for(int i=0;i

#include #include using namespace std;

struct test { char name[10];float socre;};

void print_score(test &pn){ cout<

test get_score(){ test pn;cin>>pn.name>>pn.socre;return pn;} void main(){ test a[2];int num = sizeof(a)/sizeof(test);for(int i=0;i

//------例程2--

#include #include using namespace std;

struct test { char name[10];float socre;};

void print_score(test &pn){ cout<

void get_score(test &pn){ cin>>pn.name>>pn.socre;} void main(){ test a[2];int num = sizeof(a)/sizeof(test);for(int i=0;i

第一:

例程1中的 test get_score(){ test pn;cin>>pn.name>>pn.socre;return pn;}

调用的时候在内部要在栈空间开辟一个名为pn的结构体变量 程序pn的时候又再次在栈内存空间内自动生成了一个临时结构体变量temp 在前面的教程中我们已经说过 它是一个copy 而例程2中的:

void get_score(test &pn){ cin>>pn.name>>pn.socre;}

却没有这一过程 不开辟任何新的内存空间 也没有任何临时变量的生成第二:

例程1在mian()中

必须对返回的结构体变量进行一次结构体变量与结构体变量直接的相互赋值操作

for(int i=0;i

而例程2中由于是通过内存地址直接操作 所以完全没有这一过程 提高了效率

for(int i=0;i

函数也是可以返回结构体应用的 例子如下:

#include #include using namespace std;

struct test { char name[10];float socre;};

test a;

test &get_score(test &pn){ cin>>pn.name>>pn.socre;return pn;}

void print_score(test &pn){ cout<

void main(){ test &sp=get_score(a);cin.get();cout<

调用get_score(a);结束并返回的时候 函数内部没有临时变量的产生

返回直接吧全局结构变量a的内存地址赋予结构引用sp

最后提一下指针的引用

定义指针的引用方法如下: void main(){ int a=0;int b=10;int *p1=&a;int *p2=&b;int *&pn=p1;cout <

pn就是一个指向指针的引用 它也可以看做是指针别名

总之使用引用要特别注意它的特性 它的操作是和普通指针一样的

c语言实验报告结构体 第3篇

关键词:C语言,程序设计,教学,结构体,实验

《C语言程序设计》这门课一般是计算机专业学生入学时所接触到的第一门程序设计课程,这门课程需要学生掌握程序设计的方法,用C语言编程解决问题。在现实问题求解时,往往用简单数据类型描述问题对象时可能不是很方便和准确,例如,描述职工信息这样不同类型的数据组合时,这时就需要定义一种构造类型的数据结构来描述,这就是结构体。而且,本文认为结构体是实现了数据的封装,在一定程度上体现了封装的特性,对后续课程的教学有一定的启发性。所以,结构体教学是C语言程序设计的一个重要的部分,同样,在实验课教学中结构体的实验教学也是重要的一个环节,特别是链表方面的实验教学对后续课程,如《数据结构》起着基础性的作用。本文主要是对结构体的实验教学的设计进行探讨。

1 结构体实验教学的设计

结构体实验教学在教学时设计了3个实验题目,这三个实验题目的难度由易到难,试图让学生掌握结构体变量、结构体数组和链表的使用。

1.1 结构体变量的实验设计

结构体变量的实验属于结构体实验中比较简单的实验,这个实验就是让学生练习如何根据实际问题,用结构体定义自己所需的类型,再使用这种类型定义变量,编写程序去解决问题。

在实验教学中,教师要求学生解决如下的问题:要求用户输入三个点的坐标,编程判断这三个点是否可以构成一个三角形,如果可以则输出三角形的类型,即直角三角形、锐角三角形或者钝角三角形。这个题目在实验课上是以程序填空题的形式提供,这样既可以引导学生初次使用结构体进行编程,在填写缺失的代码过程中,锻炼学生的程序阅读能力。在题目设计中尽可能的考察学生以前的所学知识点,比如,函数形参、函数调用、选择结构编程等等。

这个程序填空题首先要求完成图1中所示的点的结构体的设计,从而让学生掌握如何根据实际需要来定义结构体这种类型。再要求学生完成图1中input函数和len函数的填写,让学生掌握如何使用结构体变量的成员分量,并注意函数的类型;judgeexist函数用于判断三个点能否构成三角形,在这个函数中强调逻辑运算符的使用,同时让学生注意函数的返回值类型,强调C语言的数据类型没有逻辑型,若想表示真假这样的逻辑型值可以用1和0这样的数值型数据来表示。

图2中的qcos函数在设计填空时主要考察的是指针的使用,让学生加深指针作为函数形参传递的是地址值这一个概念的理解。这个函数在编写时并不是很难,就是三角形余弦函数的使用,关键在于形参变量中指

针变量的引用,即诸如*cos A的赋值。而图2中judgetype函数就是依据三个角的余弦值来判断三角形是直角三角形、锐角三角形,还是钝角三角形。这个函数在设计填空时,主要是考察学生关系运算符的使用,以及嵌套的选择if语句的理解和应用。图3中主函数的设计填空主要是考察学生是否了解上述用户自定义函数的功能,并通过填写函数调用语句能正确的使用这些函数,此外,还考察了switch多分支语句的使用。

这个题目总体来说设计的并不是很难,当学生完成程序填空后,要求学生必须完成4种情况,即无法构成三角形、构成直角三角形、锐角三角形和钝角三角形的数据测试,通过输出的结果与预期结果作比较,从而检查程序是否编写正确。

1.2 结构体数组的实验设计

结构体数组的实验在结构体实验中是中等难度的实验,这个实验题目的设计主要是让学生掌握结构体数组的定义,让学生了解结构体数组元素的访问和其他基本数据类型的数组元素访问是类似的,如若要访问某个数组元素的成员分量时,需要在结构体数组元素后加上“.成员分量名”。

在实验课时,布置了如下的实验题目:输入职工的职工号、姓名、工资和出生年、月、日,按职工工资由高到低输出职工的职工号、姓名和周岁年龄。注意:输入“#”表示输入结束,假设最多只处理200个职工记录。此题在定义职工信息这种数据类型时,涉及到了出生年、月、日这种日期类型,而C语言的基本类型中没有这种类型,因此,教师可以引导学生先写出如图4(a)所示的日期类型struct date,再引导学生思考职工类型如何定义,提示学生职工信息包含出生日期这样的日期型数据,建议定义出如图4(b)所示的职工信息类型struct zg。一般地,学生会依据题目要求定义出struct zg的数组,其数组的大小为200。这个题目之所以这样设计就是希望通过这个练习让学生了解结构体类型中的成员分量没有具体类型要求,完全根据需要而设。

此题的另一个设计要点是排序算法在结构体数组中的应用,在课堂练习时,有的学生使用的是冒泡排序法,有的则使用选择排序法,但是在交换两个struct zg的数组元素时,有部分学生会注意交换结构体数组元素的成员分量,那么这时就需要声明交换结构体数组元素和交换整型数组元素的方法类似,将结构体数组元素看作一个整体。这个设计要点在于复习数组章节中所提到的排序算法。

此题最后一个设计要点是由已知的职工出生年、月、日求出该职工的周岁年龄,此处要求学生使用计算机的系统时间计算出职工的周岁年龄。为了能成功获取计算机的系统时间,则要求学生在帮助菜单或者网上查找C中“time.h”所定义的time_t这个数据类型,让学生了解typedef的用法;了解函数time()和localtime的用法,并能在程序中正确的使用;了解结构体struct tm,掌握该结构体中关于年、月、日表示的成员分量,让学生特别注意每个成员分量所表示的意义及其取值的范围,例如,成员分量tm_year表示的是年份,但是它的取值是从1900开始的一个整数,若想正确获得当前的年份值,应该是tm_year+1900。当学生能正确地完成获取系统时间的年、月、日的程序代码设计后,引导学生思考如何计算周岁年龄,实际上就是用if嵌套语句完成多分支结构的设计。这个设计要点是希望学生了解C程序设计过程中可能会出现书本上所未介绍过的知识,这就需要学生通过其他方式,例如查阅工具书或者上网等手段来获取所需的知识,同时,也复习了多分支结构的程序设计。

此外,在编程时要求学生尽量不要程序中只有一个main()函数,要尽量根据需要编写用户自定义函数。

1.3 链表的实验设计

链表实验的题目主要是让学生熟悉结构体与指针相结合,对链表有个初步认识,了解链表中的一些操作。题目与1.2中结构体数组的题目非常类似,但是要求必须用链表来完成,从而让学生熟悉链表这种结构。实验题目是:输入学生的学号、姓名和年龄,要求按学号由小到大输出学生的学号、姓名和年龄,要求输入“#”表示输入结束。这个题目解决的方法很多,因为学生初次接触链表,因此实验教学时没有提出任何方法的限制,只是要求学生用单链表求解,在求解过程中要求学生注意链表的创建算法,链表的输出算法,以及链表修改结点指针的一些操作。

首先,教师要引导学生正确的完成链表结点的定义,即指针与结构体相结合,学生信息结点的定义可以如图5所示。在求解问题时,需要学生注意结点指针的操作。实验课上,有的学生在输入学生信息时,即建链表时采用插入排序的思想,将待插入的学生信息的结点插入到已建好的且有序的链表中,用这种方法创建链表后,链表本身就是有序的,那么只需用循环结构输出链表就可以完成问题的求解。在实验课上,会发现有的学生有了这个想法但是算法编写有问题,教师在指导的过程中可以建议学生在建链表过程中,每插入一个结点后就完成当前链表的输出,从而有助于发现算法设计出错之处。

在实验课上,有的学生则先是创建链表,即将学生信息结点按输入的顺序插入到链表中,此时链表中的学生信息结点是无序的,再采用冒泡排序法或者选择排序法对链表中的结点调整顺序,最后编写循环完成链表输出。在调整结点时有的学生会出现算法思路不够清晰,有点混乱这种现象,这时教师可以建议学生在草稿纸画出链表结点的调整草图,再依据图示编写代码。在实验课上,有的学生采用排序算法调整结点时直接交换图5所示结点的no、name和age值,这种方法很便捷,但是达不到链表练习的目的,因此,教师可以鼓励学生再换一种算法。

2 结束语

本文给出了结构体实验教学的三个实验题目,这三个题目有各自的重点,而且题目有程序填空,也有程序设计,让学生由浅入深地逐步掌握结构体的定义,使用结构体变量和数组编程求解实际问题。并且实验题目中有的内容是对课本上的知识进行一定的扩展,力图培养学生的自学能力,因为在实际解决问题时,有的知识可能是课堂上没有提到的,因此,学生要学会查阅资料进行自学。

参考文献

[1]胡明,王红梅.程序设计基础——从问题到程序[M].北京:清华大学出版社,2011.

[2]孙燮华.C程序设计导引实验与习题解答[M].北京:清华大学出版社,2011.

[3]罗永龙,方群.C语言程序设计[M].北京:科学出版社,2013.

[4]罗永龙,方群.C语言程序设计辅导及实验指导书[M].北京:科学出版社,2013.

C语言实验教学方法探讨 第4篇

C语言结构体的对齐原则 第5篇

A:首先先不讨论结构体按多少字节对齐,先看看只以1字节对齐的情况:

#include

#include

#define PRINT_D(intValue) printf(#intValue“ is %dn”, (intValue));

#define OFFSET(struct,member) ((char *)&((struct *)0)->member - (char *)0)

#pragma pack(1)

typedef struct

{

char sex;

short score;

int age;

}student;

int main

{

PRINT_D(sizeof(student))

PRINT_D(OFFSET(student,sex))

PRINT_D(OFFSET(student,score))

PRINT_D(OFFSET(student,age))

return 0;

}

输出:

sizeof(student) is 7

OFFSET(student,sex) is 0

OFFSET(student,score) is 1

OFFSET(student,age) is 3

可以看到,如果按1字节对齐,那么结构体内部的成员紧密排列,sizeof(char) == 1, sizeof(short) == 2, sizeof(int) == 4.

修改上面的代码, 去掉#pragma pack语句,代码如下:

#include

#include

#define PRINT_D(intValue) printf(#intValue“ is %dn”, (intValue));

#define OFFSET(struct,member) ((char *)&((struct *)0)->member - (char *)0)

typedef struct

{

char sex;

short score;

int age;

}student;

int main()

{

PRINT_D(sizeof(student))

PRINT_D(OFFSET(student,sex))

PRINT_D(OFFSET(student,score))

PRINT_D(OFFSET(student,age))

return 0;

}

运行结果:

sizeof(student) is 8

OFFSET(student,sex) is 0

OFFSET(student,score) is 2

OFFSET(student,age) is 4

此时,各个成员之间就不像之前那样紧密排列了,而是有一些缝隙,这里需要介绍下对齐原则:

此原则是在没有#pragma pack语句作用时的原则(不同平台可能会有不同):

原则A:struct或者union的成员,第一个成员在偏移0的位置,之后的每个成员的起始位置必须是当前成员大小的整数倍;

原则B:如果结构体A含有结构体成员B,那么B的起始位置必须是B中最大元素大小整数倍地址;

原则C:结构体的总大小,必须是内部最大成员的整数倍;

依据上面3个原则,我们来具体分析下: sex在偏移0处,占1字节;score是short类型,占2字节,score必须以2的整数倍为起始位置,所以它的起始位置为2; age为int类型,大小为4字节,它必须以4的整数倍为起始位置,因为前面有sex占1字节,填充的1字节和score占2字节,地址4已经是4的整数倍,所以age的位置为4.最后,总大小为4的倍数,不用继续填充,

继续修改上面的代码,增加#pragma pack语句:

#include

#include

#define PRINT_D(intValue) printf(#intValue“ is %dn”, (intValue));

#define OFFSET(struct, member) ((char *)&((struct *)0)->member - (char *)0)

#pragma pack(4)

typedef struct

{

char sex;

short score;

int age;

}student;

int main()

{

PRINT_D(sizeof(student))

PRINT_D(OFFSET(student,sex))

PRINT_D(OFFSET(student,score))

PRINT_D(OFFSET(student,age))

return 0;

}

运行结果:

sizeof(student) is 8

OFFSET(student,sex) is 0

OFFSET(student,score) is 2

OFFSET(student,age) is 4

具体分析下:

有了#pragma pack(4)语句后,之前说的原则A和C就不适用了。实际对齐原则是自身对齐值(成员sizeof大小)和指定对齐值(#pragma pack指定的对齐大小)的较小者。依次原则,sex依然偏移为0, 自身对齐值为1,指定对齐值为4,所以实际对齐为1; score成员自身对齐值为2,指定对齐值为4,实际对齐为2;所以前面的sex后面将填充一个1字节,然后是score的位置,它的偏移为2;age自身对齐值为4,指定对齐为4,所以实际对齐值为4;前面的sex和score正好占用4字节,所以age接着存放;它的偏移为4.

Q:关于位域的问题,空域到底表示什么?

A:它表示之后的位域从新空间开始。

#include

#include

#define PRINT_D(intValue) printf(#intValue“ is %dn”, (intValue));

#define OFFSET(struct, member) ((char *)&((struct *)0)->member - (char *)0)

typedef struct

{

int a : 1;

int b : 3;

int : 0;

int d : 2;

}bit_info;

int main()

{

PRINT_D(sizeof(bit_info))

return 0;

}

运行结果:

sizeof(bit_info) is 8

c语言实验报告结构体 第6篇

(1)先定义结构体类型再定义变量名

先定义一个结构体类型,一般形式为:

struct结构体名{成员列表};

(2)在定义类型的同时定义变量:一般形式为:

struct结构体名

{

成员列表

}变量名列表;

(3)直接定义结构类型变量:一般形式:

struct

{

成员列表

}变量名列表;

即不出现结构体名。

2.结构体类型变量的引用:在定义了结构体变量后,可以采用下列方法引用结构体类型的变量:

结构体变量名.成员名

这里″.″是成员(分量)运算符,它在所有的运算符中优先级最高。

3.共用体类型变量的定义形式为:

union共用体名

{成员列表

}变量列表;

4.共用体变量的引用:可以用下面的形式引用共用体变量:

共用体变量名.成员名

14.2用指针和结构体构成链表,单向链表的建立、输出、删除与插入

1.链表是一种常用的重要的数据结构,它是动态地进行存储分配的一种结构。

2.所谓建立链表是指从无到有地建立起一个链表,即一个一个地输入各结点数据,并建立起前后相链的关系。

3.所谓输出链表就是将链表各结点的数据依次输出。

4.所谓删除链表事实上就是删除链表中的某个结点。

5.所谓插入链表就是在链表中某个位置插入一个或几个结点。

1.计算机二级C语言程序设计考点:数组

2.计算机二级C语言程序设计考点:指针

3.计算机二级C语言程序设计考点解析:运算

4.计算机二级C语言程序设计考点:函数

5.计算机二级C语言程序设计考点解析:C语言程序实例

6.计算机二级C语言程序设计考点:C语言的特点

7.计算机二级C语言程序设计考点:C语言的应用

8.计算机二级C语言程序设计考点解析:程序设计基本

9.计算机二级C语言程序设计考点解析:常用的输人函数

实验1-C语言实验报告 第7篇

(2011-2012-1)

实验报告1

教学班级: 机械094 学号: 01 姓名:谭亮恩 课程教师:

曹瑛

实验辅导教师:

曹瑛

江西理工大学

P6-4:/*P6-4

表示第6页 第四题*/

int main(){ float r,s;r=15.5;s=2*3.14*r;

printf(“r=%4.2f,s=%f”, r, s);return 0;}

结果是:r=15.5

s=97.34

P32-3-1: /*P32-3-1

表示第6页 第四题 第一小题*/ #include int main(){ printf(“thististcbCtprogram.rTn”);return 0;} 结果是: This is C program.P32-3-2: /*P32-3-2

表示第6页 第四题 第二小题*/ #include int main(){ printf(“*abdbctr*ABCD105x46*”);return 0;}

结果是: *ABCDEF*

c语言实验报告结构体 第8篇

1、知识逻辑结构

知识逻辑结构是通过知识逻辑结构图的形式给出相关知识系统的总体框架,表示了其中各知识子系统间的内在联系。在C语言程序设计的实验教学之初,将C语言的框架或结构进行阐述,把课本知识变“薄”,使得学生对所学知识全貌一目了然,有一个宏观的认识,并理清知识总体条理;然后在框架中填充知识,也就是把相关C语言知识充实起来。

2、C语言程序设计实验教学的重要性

C语言程序设计是一门实践性很强的学科,在教学过程中实验教学占有很重要的地位和作用,如果实验教学效果不佳,会使学生失去继续学习的兴趣,并进而影响到后续课程的学习。结合我校信息学院的计算机专业课程设置,C语言程序设计实验教学在整个教学过程中的比例很大 (实验54学时,理论54学时) 。通过实验教学才能让学生从朦胧到清晰地体会C语言程序的内涵和精髓。同时,实验也是不断认识事物及其发展变化规律的重要手段。C语言程序设计的实验教学是用理论指导实践,同时通过实践加深对理论的认识。学生的观察能力、思维能力、动手能力和创新能力都需要通过实验教学来培养。

3、“C语言程序设计”课程的知识逻辑结构

C语言程序设计的关键是掌握结构化程序设计的思路。C语言程序都可以归结4个步骤组成:数据声明定义、输入数据(input)、数据计算、数据输出(output)。在前几次次实验课的时候,给学生引导出如下程序进行讲解:

类似的程序对初学C语言的学生来说很难,因为该程序中的绝大部分语句是学生在初学C语言时无法触及的,但是该程序中包含了C语言程序中的四个步骤:

3.1 数据定义就是要定义数据存储的结构,以上程序中int i, j;语句即为数据定义,在C语言中有最初的基本数据类型 (int、float、double等) ,并可以借此提出数组和指针等更高一级的数据结构。

3.2 示例程序调用基本输入输出流scanf进行数据的输入,并在相应实验中从基本的直接赋值输入,到数组的输入方法特别是其中字符数组的输入,最后还有从文件中输入数据。

3.3 数据计算是关键、核心、难点。示例程序中的计算gcd函数就是为了实现合理的计算而设。在实验课上利用示例程序将计算的关键部分恰当地用结构控制如顺序、选择、循环等相关语句表示了出来,使学生对C语言程序设计中的计算大概有个了解。具体语句的书写,常用的由运算符和表达式组成的表达式语句,子程序 (函数) 的写法可以在后续课程中持续讲解。

3.4 输出数据方法与输入数据方法相对应,这里不再累述。

以上程序的讲解虽然内容很多很难,但它几乎囊括了C语言程序设计的整个知识逻辑结构(图一),同学可以通以相关的程序实验课内容作为引导,在吃透课上内容之余,利用课余时间通看教材,完成相应实验内容和报告,走到理论课程的前面,使自己在理论课中能更好地接受并吃透老师教授的知识。

4、利用“知识逻辑”框架实验教学的效果

在实验课开始之初就将C语言程序设计的整个知识逻辑结构教授于学生,可以培养学生利用课余时间自主学习。并对相应课程进行预习。由知识逻辑机构向外衍生,直至学习并掌握C语言这门课程。我校信息技术学院2013年级学生在入学之初即对C语言程序设计这门课程的大体内容进行学习,已部分学有余力的学生在同学当中脱颖而出,在刚刚结束的我校2013年程序设计竞赛的初赛中,共有13位同学(本部+二级学院)挤入比赛的前60名,而另外的同学也取得了相应不俗的成绩。

摘要:本文分析C语言程序设计实验的特点, 通过把握C程序设计语言课程知识逻辑结构及其规律, 提出C语言程序设计课程的实验教学机制, 将其知识内容按逻辑结构化传授给学生, 使学生可以更快速地融入C语言程序设计的学习中。

关键词:C语言程序设计,知识逻辑结构,实验

参考文献

[1]侯建花, 杨长青.“C语言程序设计”实验教学的改革与实践.计算机教育2010 (1) :114-115.

[2]傅川C语言教学的探索与实践.浙江中医药大学学报2007 (7) :516-517

[3]谭浩强.C语言程序设计[M].3版.北京:清华大学出版社, 2006

C语言实验教学改革初探 第9篇

关键词:C语言;实验;教学改革

作者简介:吕风杰(1973-),男,山东沾化人,滨州学院计算机科学技术系,讲师;马士明(1983-),男,山东滨州人,滨州学院计算机科学技术系,助教。(山东滨州256600)

基金项目:本文系滨州学院教学研究资助项目(项目编号:BZXYJYXM200737)的研究成果。

中图分类号:G642.423     文献标识码:A     文章编号:1007-0079(2012)10-0118-02

C语言以其结构化、灵活性好、可移植性强、效率高等优点被广大院校理工科专业选为程序设计的入门课程。[1]随着应用型人才培养改革的不断深入,学生培养目标和教育教学理念也不断更新,但自进入高校课堂20余年来,受传统应试教育的引导,大都将授课重点放在C语言的基本语法的理论讲授上,而实验教学大多用于C语言的语法规则的验证和说明,这种教学模式仅从语言的使用这个单一的角度进行教学而使得大多数学生在学完之后吃不透、用不活所学语言知识。面对这种形势,原先的实验教学计划已远不能满足要求,如何从培养学生能力的角度出发优化实验教学内容,使实验教学与理论教学形成一个目标明确、由浅入深、紧密联系的有机整体已成为当前C语言教学中的迫切性问题。本文从C语言的特点出发,对如何在当前课时、实验资源有限的情况下,通过实验教学促进、完善课堂教学效果,培养学生实践能力、创新能力和应用能力进行了深入的探讨与实践。

一、改革实验教学内容

在应用型人才培养模式下,实验教学的组织要兼顾实践性与创新性。我们在原有教学大纲的基础上,根据电子信息类专业的特点重新修订了实验大纲,教学内容中提高了设计性和综合性实验的比例。

1.改革实验内容组织结构

为了不影响专业教学计划,又能保证实验教学改革的顺利进行,我们结合理论教学进度,编写了相对开放的实验教学大纲和讲义,将实验分为基础性实验、设计性实验和综合性实验三个层次,又将每个层次的实验内容分为必做和选做两类,以供不同专业按要求进行灵活选择。根据理论教学进度安排基础性实验,让学生熟悉编程、调试环境,掌握基本指令并学会简单编程,加深对课堂理论教学内容的理解;在单元章节之后安排设计型实验,采用任务驱动教学法,验证性与应用性实验相结合,在完成基础性实验的基础上,逐步丰富功能要求,并要求学生在实验报告中加以总结归纳,培养学生的综合思维能力;综合型实验其实是一个开放性试验,安排于每个知识单元或模块(从知识的角度出发,独立于理论教材编排)完成之后,每一个项目只给出具体的功能及性能要求,对具体方法不作要求和指导,并将一个实验课题分为设计、调试、总结、改进等几个进程,先由学生根据题目要求完成功能设计并通过调试,再由教师根据学生的设计从功能及性能方面进行有针对性的分析讲解,进而提出设计建议,然后由学生完成设计改进并写出实验报告及分析总结,以达到实践性与创新性的同步提高。

2.创新实验内容

目前,高校教學过程中所用教材及参考书大都以普教为目标,极少有针对专业或行业的例题和习题出现,而各高校开设的C语言实验教学内容恰恰大多为所用教材或参考书的习题。这类经典习题专业针对性差,对学生来说缺乏趣味性,用以进行功能验证尚可,但对于能力提高或创新教育的确是勉为其难了。而且随着网络等学习资源的普及使得问题的解决极为简单,学生仅需上网搜索一下即可得到完整答案,于是实验课程就成了简单的验证,很难起到锻炼和提高的作用。

为此,我们专门针对电子信息类专业的特点精心设计了实验内容,基础性实验采用经典案例,针对性强,利于学生的入门学习;设计型和综合型实验尽量选择与学生专业相关的项目,如数字滤波的实现、数据分析与验证等。这样一方面能够贴近学生所学专业,使学生不但学会了C语言,而且使得C语言有了“用武之地”;另一方面,在实际学习过程中,能够将学过的其他专业知识融入进来,提高了学生的兴趣及学习积极性,对其他专业课程的学习以至学生的学习风貌与学习态度起到了积极的推动作用。

二、改革实验教学模式

随着各高校对高等教育应用型人才培养改革的不断深入,各专业的教学内容有了较大幅度的修改和增加,在实际教学安排中“C语言程序设计”的理论与实践课时都进行了一定程度的压缩,为保证实践教学效果,在组织教学时进行了一些改革。

1.推行任务推动教学

随着计算机技术的应用与发展,C语言作为各理工科专业的程序设计入门课程,其培养方向应该是掌握程序设计及调试的一般方法,所以在实验教学组织中应以程序设计为主线,有意识地淡化C语言本身语句、语法的介绍,并积极推行典型算法与案例教学相结合的方法,通过精心设计与编排,将复杂枯燥的语法知识分解到每个生动、有趣、实用的程序实例中,把软件工程学的思想贯穿于算法分析和程序设计的过程中。例如,在每个知识单元开始之前先提出一个典型问题,如“业绩提成计算”、“数据排序”等,从问题入手,然后循循善诱,通过任务的分解、解决、综合逐步加以解决,这样不但使学生在程序分析与解决中掌握了相关语法,而且程序设计和解决问题的能力也得到了极大的提高。[2-3]

2.突出结构化程序设计特点

结构化程序设计是C语言程序设计的一大特点,而在当前的教材中却极少涉及到相关的实例,从而使得结构化程序设计在C语言教学中成了一句实实在在的空话。有些学生平时学得很认真,对语法、语句等细节也很熟悉,但碰到稍微复杂一点的编程则无从下手。在教学中,教师应该将现代程序设计的相关理念传授给学生:一般来讲,一个较复杂的软件常可以按功能分割为若干个典型的小模块,每个小模块最终都成为功能单一、结构清晰、接口简单、容易理解和编写的小程序,而加工对象——“数据流”就是将这些模块串接起来的“主线”,只要让学生掌握了典型的算法就可将这些算法变成像搭积木一样组装成相应软件的算法。

如在学过数组部分后,教师给出一个由计时函数GetTickCount()、格式输出函数printf()函数、格式输入函数scanf()一起构成的能够测试人的反应时间的“反应计时器”函数。在此基础之上布置学生设计主函数和相关函数,通过调用“反应计时器”函数完成两个个体各一组样本的采集(如各采集并存储10个独立的反应时间),并计算各自平均值、标准差等指标;进而进行t检验,对个体差别进行分析验证。这样不但使学生学会了相应的算法实现,而且对结构化程序的灵活性和易于扩展等特点及工程应用中的程序设计方法有了较为深刻的理解,同时对工程数学中较为“死板”的统计与检验内容的实际应用有了一个感性的认识,达到了实践能力与创新能力共同提高的培养目标。

另外,在教学过程中,教师还应有意识地总结归纳一些典型算法,并作为验证型实验内容,要求学生熟练掌握,如累加、累乘、查找、排序等,在后续设计型和综合型实验中将相关内容加入,使得学生能够用会、用活,为以后的程序设计奠定基础。同时,典型算法的熟练掌握也可增加学生学习计算机语言的信心,并提高学习兴趣。[4]

3.充分利用多媒体及网络教学平台

多媒体课件具有演示直观、动态性强等特点,易于被学生所接受和理解,尤其对于实践教学,多媒体课件能够进行直观的演示与模拟,满足了实验教学的要求,把难以理解的内容或不容易观察到的事物用多媒体充分显示出来,调动学生的视觉直观功能,为突破难点创造出良好的氛围,有效地弥补传统教学的不足。

運用网络教学平台进行课后习题的布置与讨论,引导学生提出问题并找寻解决方案。一方面,充分节约了课堂教学时间,缓解了课时不足带来的影响;另一方面,能够将更多的学生吸引到问题的分析与讨论中,“讨论出真知”——相对课堂教学而言,网络讨论扩大了讨论的参与面,能够最大限度地穷尽并纠正学生在问题理解过程中可能出现的问题,极大地提高了学生的学习积极性与学习效果。

4.强化实验教学过程管理

C语言是一门实践性很强的课程,除了要把理论知识学好外,上机实践也是相当重要的一个关键环节。学习中存在的疑点或难点,学生可通过上机调试得到明确解答,同时也加深对学习内容的理解。对学生而言,在每一次的上机前应做好充分准备,编写好上机内容;对上机中出现的问题应能调试分析,编写实验报告,分析程序结果。学生只有反复上机操作才能对C语言有更深、更全面的认识和理解,逐步提高实际操作和学习的能力。对教师而言,应精心设计上机实验内容。设计上机内容时,尽量把所学的内容综合起来,达到知识的系统化。同时,也可布置一些趣味性较浓的内容,以提高学生的学习兴趣,变学生的被动学习为主动学习。另外,上机内容尽量结合学生专业,让学生觉得学有所用。

三、改革实验教学评价模式

注意综合素质的培养与评价,在“C语言程序设计”期末考核中采用实验与理论考核相结合、平时成绩与期终考核成绩相结合的综合考核评价方式,并采用实验教学成绩一票否决的形式,从而改变学生在以往课程学习中“重理论,轻实践”的思想,激发学生学习的积极性与自主性,尤其在创新性培养上。具体做法是摒弃原先那种以对错判分的一刀切的评价方式,在平时教学中对学生实验完成的成绩评判要采用个案分析的方法,在充分理解学生设计意图的基础上因势利导,对设计中的创新之处或闪光点要给予充分的肯定;对不足和错误之处要帮助学生仔细分析,然后由学生自己总结改正,以提高学生的自信心,保护其学习兴趣,最后根据学生的完成情况及钻研态度进行综合评判。

四、总结

任何一种程序设计语言都有其独有的语法特点,作为程序设计入门课程的“C语言程序设计”也不例外,但是,应该认识到在高校C语言教学中,学习语法不是学习程序设计语言的真正目的,而是应该在掌握语法的基础上,通过学习与实践,真正地学会使用C语言来解决各种实际问题,进而使学生掌握程序设计思想,真正成为学生进入程序设计领域的“敲门砖”、“导航灯”。通过对近两年的学生期终理论考试成绩对比分析发现,改革前后对于语法部分的得分率没有明显变化,而综合编程题的得分率比以前有了大约25%的提高,且学生学习的积极性比以前有较大的提高,课程结束后不少学生又通过计算机等级考试等各种形式进行了进一步的学习与提高,C语言实践教学改革取得了理想的效果。

参考文献:

[1]谭浩强.C程序设计[M].北京:清华大学出版社,2006.

[2]郑人杰,马素霞,殷人昆,等.软件工程概论[M].北京:机械工业出版社,2001.

[3]敖志广,吕振辽,高克宁.非计算机专业本科生C语言的教学实践[J].计算机教育,2007,(1):53-54.

[4]林向宝.C语言教学探讨[J].黑龙江交通科技,2007,(4):120-121.

(责任编辑:王祝萍)

上一篇:权志龙语录下一篇:全民健身促健康倡议书