正文内容
c语言课程实践报告范文
来源:盘古文库
作者:莲生三十二
2025-09-17
1

c语言课程实践报告范文第1篇

一、PBL教学模式概述

以问题为导向的PBL教学, 是基于现实的以学生为中心的教育教学方式。这种教学方法强调以学生的主动学习为主, 将学习与任务或问题挂钩、以预习为先导、以问题为基础, 以学生为主体, 以教师为导向的启发式教育, 以培养学生自学能力, 提高学生解决问题能力为教学目标, 最大化的调动学生学习的主动性和积极性。

让学生有效地将预习和解决问题相结合, 问题解决了, 自然就完成了有效的课程预习。

二、PBL教学法在《C语言程序设计》课程中的应用

(一) 医学院校在程序设计课程开展PBL教学法的现实需要

医学院校的科目设置有其专业特点, 课程专业性强, 学习科目繁多;学生的学习任务繁重, 在学习过程中也更倾向于被动接受知识、背诵知识, 久而久之, 学生的逻辑思维能力会降低, 进而影响医学生临床思维能力的培养。所以有必要在医学院校开展有利于保持和提高医学生逻辑思维能力和创造性思维能力的课程。而程序设计课程的开展恰好可以弥补这一短板。

我校针对影像技术专业开设《C语言程序设计》课程, 课时量为32理论学时和32上机实习学时。任课教师面对教学任务重, 课时少的实际, 尝试进行了PBL教学模式。

(二) PBL教学法实施环节与教学实例

PBL教学的教学准备主要由任课教师来完成。根据教学内容, 教师通过问卷星手机端发出待解决的具体问题, 让学生利用课余零散时间, 通过教材和教师推荐的慕课进行有效预习, 预习完成后, 再针对问题, 采用“写流程写代码”的方法给出问题的初步解决方案, 并通过问卷星反馈给教师。教师接到学生的反馈后, 针对学生解决方案中存在的问题, 在本班级课程微信群发布微课进行讲解, 课上再进行系统完整的串讲, 圆满解决问题后, 再进行知识点的深入拔高。

下面, 结合笔者在《C语言程序设计》课程中“循环结构”知识点教学实例阐述应用PBL教学的实践。

(1) 提出问题针对以往循环结构知识点讲解过程中总结的知识重点或难点, 提出几个问题, 并分难易程度给出应用该知识点的三个小程序, 通过问卷星软件发布给学生。

(2) 推荐网络慕课通过微信群给学生推荐针对该知识点和问题的慕课, 让学生利用课余时间进行知识点的预习。

(3) 完成预习学生利用教材和慕课完成预习, 不明白的问题可以通过微信和教师沟通, 教师针对学生预习中出现的问题给出文字、图片、音频或视频解答。

(4) 完成初步设计在有效预习的基础上, 学生完成解决问题的初步算法方案和代码。

(5) 反馈问题解决方案学生针对不同问题, 写出算法, 并初步用代码实现, 通过问卷星反馈给教师。

(6) 教师对学生上传的问题解决方案给予初步判定, 指出不足和需要改进的地方, 通过班级课程微信群发布微课, 进行知识点细节讲解。

(7) 课上串讲在完善算法和代码过程中, 教师一定要对每个问题所涉及的知识点进行总结串讲, 让学生更系统、完整的理解和掌握知识。对表现优异的学生给予肯定和表扬, 这样能进一步提高学生参与的积极性, 使得PBL教学法顺利实施下去。

(8) 教师课上对相关知识点进行深入讲解, 进行知识点的拔高, 并针对拔高的知识点开展实例教学。

三、总结

通过三年的教学实践, PBL教学方法应用在《C语言程序设计》课程的教学活动, 可以有效提高学生课下预习的质量, 实现在有限的学时内最大化完成教学任务的要求, 更重要的是, 培养了学生分析问题、解决问题的能力, 拓展了学生的思维能力, 使学生深切体会到自我解决问题的成就感, 大大激发了学生的学习兴趣;同时, 使学生从单纯使用手机的娱乐通讯功能转换为利用手机进行学习。

但是, 在实施PBL教学的实践过程中, 笔者也发现了需要注意的问题。

(1) 医学院校的程序设计课程在教学过程中, 问题选定工作很重要, 在符合教学要求的前提下, 要注意和医学相结合, 这样既让学生学到知识, 又能满足日后学习、工作的需要。

(2) PBL教学法在实施过程中, 单个问题所涉及的知识点有限, 学生在自主学习过程中能力和学习方法也存在区别, 掌握的知识比较零散、不系统。因此需要在课上拿出一定的时间来系统完整地进行串讲, 课堂时间略显紧张, 需要教师预先根据学生掌握情况机动灵活安排课上内容。

值得肯定的是, PBL教学法在医学院校计算机教学任务重但课时少的现实情况下, 从时间和空间上给教师和学生提供了完成教学最有力的支持。虽然在应用PBL教学法的过程中, 出现了一些问题, 但是, 随着经验的积累, 通过教师的摸索和总结, 这些问题将会得到比较圆满的解决。PBL教学法也会在以后的教学活动中成为解决任务重、课时不足等实际问题的一种高效教学模式。

摘要:针对医学院校计算机教学课时少、任务重的现状, 本文结合教学实际, 开展PBL教学, 提升学生自我学习和解决问题的能力, 同时提高了教师的授课质量。本文就实践中应用的理论依据、实施环节以及在PBL教学实践中发现的几个问题, 进行了探讨, 希望能对以后的《C语言程序设计》教学提供一些参考。

关键词:PBL教学法,慕课,《C语言程序设计》

参考文献

[1] 张晓瑛.PBL教学法在《计算机应用基础》教学中的应用[J].太原城市职业技术学院学报, 2012 (2) :150-151.

c语言课程实践报告范文第2篇

1 C语言程序设计课程教学存在的问题

1.1 教材选用不足、内容陈旧

教材是教学活动的范本,它揭示了教学活动的内容、程序和方法[2]。高职院校采用的教材应该具有它的职业性,实践性,适应性和科学性。目前,大多数高职院校采用的教材是谭浩强教授著的《C语言程序设计(第2版)》,清华大学出版社。此教材出版时间较早,不适用于现在高职的教学。

1.2 经费投入不足、教学手段落后

教学手段是师生教学相互传递信息的工具、媒体或设备。近几年来,教学经费拨款总额虽然逐年有所增加,但增长幅度却远远不能满足高职院校发展的需求[3]。由于建设经费投入不足,造成对教学设施的投入有限,从而导致教学还是沿用传统教学手段的方式一部教科书、一支粉笔、一块黑板。

1.3 理论与实践脱节

在职业教育实践中,实验和实训是将知识转化为学生能力素质的主要途径,将实践教学有机的贯穿于整个教学体系是教学取得成效的关键因素之一,这在以培养劳动技能为主的高职教育中体现的更加明显。C语言程序设计课程是一门独立性较强的课程,需要实验活动。然而,现在多数高职院校由于教学经费紧张,教学设备更新速度较慢,无法满足学生上机实验要求。

1.4 考核机制不健全

课程考核是高校教学活动中的重要环节,它既有反馈功能,即对教师的教学效果和学生的学习结果进行评价和检验:又有导向功能,不同的考核方法会促使教师对教学内容和方法做出不同的安排和选择学生也会根据考核方式调整学习方法。公平合理且科学有效的考核机制不仅会对教学效果做出真实、客观的反馈和评价,而且会调动学生学习的积极性和主动性[4]。现行C语言程序设计课程依据平时作业成绩、期末考试成绩评定,分别占30%、70%,而期末考试方式采用闭卷笔试方式。

2 解决方法探讨

2.1 教学内容现代化

教学内容现代化主要体现在教材上。谭浩强教授著的《C语言程序设计(第2版)》教材出版时间较早,且对象主要面向的是高等学校本科生,而高职院校的学生知识底子薄、自学能力较差,所以此教材不太适用于高职院校。高职院校应该根据自身的特点,编写相应的教材。

2.2 教学手段现代化

教学内容的现代化依托于教学手段的现代化。以传统教学论为基础的传统教学法已经不能适应该课程的教学要求。授课教师可以使用现代化教学手段和传统教学手段相结合的方法,通过创设问题情景并提供解决问题的帮助指导,让学生在解决问题的过程中实现对知识体系的建构,达到培养能力和提高素质的目的。高职院校可以通过建立网上教学系统、制作多媒体CAI光盘、测试评价与操作练习课件、教学VCD等途径改善教学手段。

2.3 考核手段现代化

现行课程考核虽然不再是以往模式单一的考核方法,能够比较合理地进行学生学习效果的评价,但是在教学实践中发现,学生的能力有差别,在这种情况下,若采用同样的方式对学生进行考核,虽然能起到全面、公平地考核的目的,但不能因材施教、甚至会挫伤部分学生的积极性。对于学生成绩的评定,建议采取平时作业成绩+期末考试成绩+实践的考核方式。平时成绩占20%,平时成绩根据学生的到课率、上课布置的作业完成情况组成;期末考试成绩占40%,实践成绩占40%。这种考核方式不仅注重学生实践技能的考核,而且能使学生的学习积极性得到大幅度地提高、能培养学生良好的实践操作和应用开发能力的培养,有利于提高学生的学习学效果。

教学过程是实现人才培养目标的主要途径,高职教育应紧围绕提高学生的实践技能为目的。因此,高职院校应鼓励教师发挥其主观能动性,进行教学改革。

摘要:近几年来我国高等教育事业迅速发展,许多高职院校为提高教学质量加大了专业教学改革建设的力度。本文着重分析了高职C语言课程教学中存在的问题,对如何解决这些问题进行了探讨。

关键词:C语言程序设计,高职教育,课程教学

参考文献

[1] 高宏欣,韩茜.浅谈高职院校《C语言程序设计》教学改革[J].金色年华,2010(11).

[2] 李惠斌.成人高校教材建设中存在的问题及其对策[J].北京市总工会职工大学学报,2003,18(3):22~27.

[3] 粱爽,宋艳华,邹前.浅谈高职院校发展与办学经费筹措途径[J].陶瓷研究与职业教育,2008,6(4):45~47.

c语言课程实践报告范文第3篇

第1次实验: 时间 2010-9-15

项目名称:创建第一个C语言程序

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0

实验程序:

1、 单击“开始”“程序”“Microsoft Visual Studio 6.0”“Microsoft Visual C++ 6.0”,打开VC++。

2、 在菜单中选择“文件”“新建”,在“工程”选项卡中选择“Win32 Console Application”,

输入一个名称,点“确定”,新建一个新的工程。

3、 再选择“文件”“新建”命令,在“文件”选项卡中选择“C++ Source File”,输入一个

名称,点“确定”,新建一个C++源文件。由于C++全面支持C,因此可以在此输入C语言的源代码,进行实验。

4、 在代码框中输入如下代码:

#include

void main ( )

{

int a,b,sum;

a=123; b=456;

sum=a+b;

printf ("sum is %d ", sum);

}

5、 编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中

选择“构建”最后在“编译”中选择“执行”。

实验结果:

sum is 579

讨论:本实验让我们了解了如何创建一个C语言的控制台应用程序,并学会了C语言程序的基本构架和个别特殊语句如“main”“printf”等。

实验地点:3B-20

3第2次实验:时间:2010-10-6

项目名称:顺序结构程序设计实验

(书89页4.9题,先把题抄下来)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0

实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:

(自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。

实验结果:

讨论:

实验地点:3B-20

3第3次实验:时间:2010-10-27

项目名称: 选择语句switch的使用

(书111页5.6题,先抄题)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:

(自己写代码)

2、 编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。 实验结果: 讨论: 实验地点:3B-20

3第4次实验:时间:2010-11-17 项目名称:循环语句for的使用(书129页6.1,先抄题)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:

(自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行” 实验结果: 讨论:

实验地点:3B-20

3第5次实验:时间: 2010-12-8 项目名称: 数组的应用(书134页例题7.3,先抄题)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下: (自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行” 实验结果: 讨论:

实验地点:3B-20

3第二学期实验:

第1次实验: 时间 2011-2-25 项目名称:编写函数

(在主函数中输入两个数,分别调用四个自定义函数,实现两个数的加、减、乘、

除并输出结果。)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

6、 打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下: #include void main() {

int add(int x,int y); int sub(int x,int y); int mul(int x,int y); float div(int x,int y); int c,a,b; float d;

scanf("%d,%d",&a,&b); c=add(a,b);

printf("%d+%d=%d ",a,b,c); c=sub(a,b);

printf("%d-%d=%d ",a,b,c); c=mul(a,b);

printf("%d*%d=%d ",a,b,c);

d=div(a,b);printf("%d/%d=%f ",a,b,d); }

int add(int x,int y) {

return x+y;

}

int sub(int x,int y) {}

return x-y;

int mul(int x,int y) {} {

return x*y;

float div(int x,int y)

return (float)x/(float)y;

}

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。 实验结果: 讨论:。

实验地点:3B-20

1第2次实验:时间:2011-3-11 项目名称:指针的应用(书278页10.3,先抄题)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下: (自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。 实验结果: 讨论:

实验地点:3B-20

3第3次实验:时间:2011-4-8

项目名称:顺序结构程序设计实验(书318页11.3题,先把题抄下来)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:

(自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。 实验结果: 讨论:

实验地点:3B-203

9.1

#include

#define S(A,B,T) T=A;A=B;B=T void main(){} 9.6

#include #define PR printf #define NL " "

int a,b,t;

scanf("%d,%d",&a,&b); S(a,b,t);

printf("%d,%d ",a,b);

#define F "%6.2f"

#define F1 F NL #define F2 F F NL #define F3 F F F NL void main() {

float a,b,c; a=1;b=2;c=3; PR(F1,a);

PR(F2,a,b);PR(F3,a,b,c); }

作业:

#include

#include

void main() {

void fun1(float a,float b, float c);void fun2(float a,float b ,float c);void fun3(float a,float b, float c);float a,b,c,disc;

scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c; if(disc>0)fun1(a,b,c); else if(disc==0)fun2(a,b,c); else

fun3(a,b,c); }

void fun1(float a,float b,float c) {

float d=b*b-4*a*c; float x1,x2;

x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); printf("%f,%f ",x1,x2); }

void fun2(float a,float b,float c) {

float d=b*b-4*a*c; float x1,x2;

x1=x2=(-b)/(2*a);

printf("%f,%f ",x1,x2); }

void fun3(float a,float b,float c) {

printf("此函数无解"); } P278

#include void main() {void aa(int x[],int n);int i,a[10];

for(i=0;i<10;i++)scanf("%d",&a[i]);

printf("交换前: ");

for(i=0;i<10;i++)printf("%d,",a[i]);printf(" ");aa(a,10);

printf("交换后: ");for(i=0;i<10;i++)

printf("%d,",a[i]);printf(" ");

}

void aa(int x[],int n) {

int

temp,max=x[0],min=x[0],max_n=0,min_n=0,i;//假设第一个数是最大和最小的数,那么max,min的下标就=0for(i=1;i

max=x[i];max_n=i;}

if(min>x[i]){min=x[i];

min_n=i;

}}

if(min_n!=0){temp=x[0];x[0]=x[min_n];

x[min_n]=temp;

}

if(max_n!=n-1){temp=x[n-1];x[n-1]=x[max_n];x[max_n]=temp;

}

} eee:

#include

void main() {void jiaohuan(int *pt1,int *pt2);int a,b;

scanf("%d,%d",&a,&b);printf(" 交换前: ");printf("a=%d,b=%d ",a,b);jiaohuan(&a,&b);printf(" 交换后: ");printf("a=%d,b=%d ",a,b);

}

void jiaohuan(int *pt1,int *pt2) {int temp;temp=*pt1;*pt1=*pt2;*pt2=temp;

}

习题11.3 方法一: #include void main() {int i;

struct student{int num;

char name[10];int score[3];

}stu[5]={{101,"A",50,60,80},{102,"B",9

0,67,45},{103,"C",30,40,50},{104,"D",90,80,70},{105,"E",60,70,80}};

printf("NUM

NAME SCORE ");for(i=0;i<5;i++)

printf("%4d%8s%8d,%2d,%2d ",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

}

方法二 : #include void main() {int i;

struct student{int num;

char name[10];

int score[3];}stu[5];for(i=0;i<5;i++){

printf("

学号:");scanf("%d",&stu[i].num);printf("姓名:");scanf("%s",&stu[i].name);printf("成

");scanf("%d,%d,%d",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);}printf("NUMNAME SCORE ");for(i=0;i<5;i++)

c语言课程实践报告范文第4篇

一、培养课程兴趣

兴趣是最好的老师。兴趣, 使人不怕吃苦;兴趣, 使人废寝忘食;兴趣, 使人执着而愿意付出努力。所以培养学生对C语言程序设计的兴趣异常重要。[2]教学前期, 尽量多花些时间介绍计算机编程语言的历史、用途、趣事等, 有时费点劲把一些道理讲好了, 能收到意想不到的效果。比如给学生演示一些用C语言开发的常见小游戏, 如“俄罗斯方块”、“推箱子”、“扫雷”等, 通过游戏界面和游戏过程激起学生浓厚的学习兴趣。再比如可以向学生提出一些针对性的问题:鼠标的左右键功能不一样, 这是怎么实现的;计算器是怎样实现运算功能的等;一些简单的手机游戏又是怎么设计的等等, 让学生发现C语言就在身边。通过教师的一些准备工作, 学生的学习兴趣在课程前期已经被充分调动起来。虽然如此, 教师在中后期的教学过程千万不要忽视对学生兴趣的培养这一原则。尤其C语言语法多且乱, 教师如果在课堂上一遍遍地强调语法、灌输知识点学生很快就会失去学习兴趣。所以在教学过程中就需要教师改变教学方式, 提高学生学习的兴趣。

二、理论课教学方法

理论课教学是教师传播知识的主要手段, 也是学生获得知识的主要途径。[4]现在C语言理论课教学中, 教师的讲授通常采用PPT展示, 虽然增加了信息量, 优化了教学过程, 但是先进的教学手段并不代表良好的教学效果。为了真正提高C语言课程的教学效果以及培养学生学习的兴趣, 就需要教师结合多种教学方法开展理论课教学。

(一) 探究式教学

指学生在学习概念和原理的时候, 教师只是提出一些问题, 让学生自己通过观察、实验、思考、讨论等方式主动去探究, 由被动接受知识变为主动探索。比如在讲授“两个变量交换”的算法时, 先让同学思考如何完成两个纸杯里面物品的互换。分组讨论、观察、模拟后同学们自行发现必须借助第三纸杯才能完成两个物品交换。这时候教师在讲解该算法是, 学生就明白两个变量交换时要使用第三个变量作为载体。整个教学过程学生积极主动得参与而且易于理解。

(二) 现场编程演示教学

此方法得益于本学校优越的计算机软硬件资源, 即上课时教师和学生的面前均有一台计算机, 教师可以把自己教师机正在呈现的内容投射到每个学生的计算机上。比如数组是C语言程序设计的重点和难点, 教师利用数组知识现场编程输出fibonaci数列的前20项的值。通过现场编程演示, 学生可以近距离的参与整个程序的思路, 编写, 编辑, 调试和运行的全过程, 打破编程的神秘感。

(三) 互动式教学

即教师作为主导, 学生作为主体参与到课堂当中。互动式教学不但可以提高学生的参与热情, 而且可以避免学生上课疲劳、注意力不集中的现象。比如学生完成问题的编程后, 请几位学生阐述自己的编程思路并演示程序和设计方法, 其他学生就同学的演示提出看法并进行讨论, 对比各种方法的优缺点, 鼓励大家再提出新方法, 解决普遍性的问题。事实证明, 这种教学方法效果显著, 课堂气氛非常活跃, 学生的参与积极性比较高。同时教师在此过程中也可以发现学生的问题, 及时修正并给与指导。

三、实践课教学方法

C语言是一门实践性很强的计算机编程语言, 所以学生上机实践操作环节尤其重要。理论知识讲的再好, 学生听得懂、看得懂却不会编写程序, 也只能算是一知半解, 更谈不上实际运用了。

(一) 重视上机实践

没有上机实践和编程训练的C语言的学习只能是纸上谈兵。为此必须充分利用有限的上机时间, 让学生编写程序, 并对程序进行编译、调试和运行实践。C语言上机实验是把自己所学的知识应用于实践的过程, 当学生自己动手编写出一个程序, 调试并运行成功时会有一种成就感, 从而激发学习兴趣。

(二) 精心设计上机实验内容

授课教师要精心设计上机实验内容, 注意与所学的理论知识结合起来, 便于学生对知识的理解和消化。同时因材施教, 针对层次不同的学生设计不同的上机作业, 除了准备简单、基础的题目外, 还要准备具有一定挑战性的题目。另外实验教学要循序渐进、题型多样, 课程初期可以采取代码填空或者程序改错等出题方式, 让学生完善程序, 避免由于无法编写程序而产生的挫败感。随着课程的进行, 学生掌握了一定的编程技能, 逐渐增加上机难度。

(三) 让学生互助学习

每次实践课教师在班级中随机选择几位同学作为教师的助手, 学生任务包括维持上机纪律、上机程序的指导、调试或其他突发状况等。学生与学生之间互相帮助、互相学习, 教师与学生、学生与学生主动交流, 及时发现和解决遇到的各种问题, 不仅提高了上机效率, 而且锻炼了学生解决问题的能力、团队协作能力和沟通能力。

(四) 引入课外实践

鼓励学生参加全国计算机等级考试和ACM、蓝桥杯等各种计算机程序设计大赛, 以培养学生的实践能力以及解决问题的能力。更重要的是, 此项为C语言课程考核的内容之一, 希望学生以为契机, 锻炼学生的实践操作技能并激发学生的编程兴趣。

四、考核方式

期末考试成绩并不是检测学生的唯一手段, 对于应用型本科院校的学生, 不仅要检验学生的对基础知识的掌握程度, 还要加强对学生实践操作技能的考核。传统的考核方式重笔试、轻实践, 导致学生不注重平时学习, 过多寄希望考前突击, 甚至死机硬背一些常考题目和答案, 编程能力培养远远不够。因此, 我们强调加强过程考核, 在学习过程中始终穿插着考核, 这样有利于提高学生对课程学习的重视程度, 还能反映学生的实践操作能力;既考查了学生综合运用知识的能力, 又避免出现高分低能的现象。

考核形式、考核要求及考核比重可参考表1。

五、结束语

C语言的教学重点是引导学生进入计算机程序设计的广阔空间、培养学生的逻辑思维能力、抽象能力和基本的计算机程序设计能力, 这些能力的养成对第一次接触编程语言的大学生来说困难重重。本文是我在应用型本科院校承担C语言教学过程中针对“学生难学”的问题在课程兴趣培养、教学方法和考核方式等方面提出的一些建议。在以后的工作中, 我会继续关注并解决C语言课程中学生将会遭遇到的问题, 使C语言不再“难学”。

摘要:C语言是应用型本科院校计算机相关专业学生接触到的第一门计算机编程语言, 对第一次接触计算机编程语言的学生来说难度大且抽象, 针对学生普遍认为C语言难学的问题, 本文将从培养课程兴趣、理论课教学方法、实践课教学方法和考核方式等几个方面进行探究, 给出一些可行性的建议。

关键词:C语言,课程兴趣,教学方法,考核方式

参考文献

[1] 王燕, 周恺, 潘雷.《C语言程序设计》课程教学改革探讨[J].电脑知识与技术, 2018 (9) :99-100.

[2] 冯晓辉.高职院校C语言教学改革探索[J].辽宁高职学报, 2014 (4) :30-31.

[3] 邱慧丽.应用型本科高校C语言教学改革与探究[J].阴山学刊 (自然科学版) , 2016, 30 (4) :30-34.

c语言课程实践报告范文第5篇

1 C程序设计实验课存在的问题

由于C语言牵涉到的概念比较复杂, 规则繁多, 使用灵活, 容易出错, 不少初学者感到学习困难, 具体存在以下问题: (1) 学生对C语言认识不足, 缺乏主动性和积极性, 实验目的不明确, 部分学生存在“听得懂, 编不出”现象, 导致对该课失去信心。 (2) 实验教学内容有待优化, 现有教材和资料有待完善, 其中上机实验大多立足于C语言本身的一些语言规则, 和实际开发脱节, 比较死板、枯燥, 很难培养上机兴趣, 缺乏对学生分析问题和解决问题的能力的训练[2]。 (3) 实验教学方法有待创新, 实验课上, 学生缺少独立思考、尝试的机会, 主动性得不到发挥, 创新思维的训练无从谈起。 (4) 实验考核方面缺乏科学的考核方法和严格的管理制度, 实验成绩的考核标准不统一、不全面、不客观, 这样导致学生轻视实验教学, 不利于激发学生对实验教学的兴趣。

2 实验教学方法的改革和实践

实验教学以理论教学为基础, 要求学生熟练运用所学的理论知识对实际问题的求解进行分析、设计, 使理论与实践相结合, 提高综合能力, 笔者根据该门课程的特点, 结合我院信系管理专业学生的实际情况, 提出“C语言程序设计”实验课的一些教学改革的思路和方法。

2.1 强调实验教学的重要性[3]

C语言是一门实践性很强的学科, 实验教学在教学过程中占有很重要的地位和作用。结合我院课程设置, 实验教学在整个教学过程中的比例目前还不够 (实验18学时理论54学时) 。因此, 强调实验的重要性, 建议学生利用课外时间多上机实践, 通过上机调试程序提高理性认识, 培养学生的观察能力、思维能力、动手能力和创新能力没有实验教学的质量, 整体教学质量也无从谈起, 因此, 必须强调实验教学的重要性。

2.2 改进实验教学内容的设计

根据教材内容, 将实验分为以下两种类型:基础实验, 又称为验证/设计型实验其目的是使学生通过训练, 加深对某个知识点的理解, 每讲完一个知识点, 安排学生进行一次编程练习, 使学生经历“模仿、改写、编写”的过程, 逐步训练学生调试程序的能力。综合实验, 其目的是针对多个知识点进行综合训练, 加深学生对课程内容的整体认识, 培养解决复杂问题的能力, 实验中的题目要由浅入深、由易到难, 教师在综合实验教学过程中启发、引导学生独立完成程序。

2.3 重视实验教学过程[4]

将实验教学过程划分为实验前、实验中、实验后三个阶段, 明确每个阶段应完成的任务以及应达到的目标。实验前:应该从知识上为编程做准备, 教师为学生布置一些单项练习题, 让学生从基本概念方面进行训练, 发现并纠正自己在概念理解上存在的问题。实验中:教师应注意激发、训练学生的创造性思维, 教会学生排查错误的方法, 启发、引导学生掌握编程技巧, 从而独立思考和解决问题, 实验过程中遇到普遍遇到的问题, 可以随时作简短的统一讲解、提示, 与课堂上单向地向学生讲授枯燥的语法、抽象的原理相比, 这样可即学即用, 立竿见影。实验后:学生完成实验后, 认真要整理实验报告, 分析实验结果, 总结编程经验, 教师要注意总体上把握学生的实验情况, 并适时引导学生对实验题目进行拓展, 鼓励学生从多角度、多方位思考, 使他们探索性地解决所面临的问题。

2.4 注重实验兴趣小组的作用

开课前, 对选修该课的所有信息管理专业学生进行摸底, 了解学生掌握计算机基础知识的情况, 根据不同层次分组, 不同组安排不同的实验内容, 根据实际情况, 分设不同的题目, 学生在完成必做题目以后根据各自的兴趣爱好, 从中选择某些选做题目来实验, 这样做可给予学生足够的自主选择权, 不仅提高了学生的学习积极性也实现了学生互帮互助。当然, 这种区别对待不同兴趣小组的方式, 并非一味强调特性而忽略共性, 各个兴趣小组还是有一些基础的、共同的题目。

2.5 采用任务驱动教学法的教学模式

“任务驱动”教学法符合计算机系统的层次性和实用性, 提出了由表及里、逐层深入的学习途径, 便于学生循序渐进地学习知识和技能, 适用于培养学生的创新能力和独立分析问题、解决问题的能力。本课程中体现“任务驱动”教学法, 就是让学生在一个个典型的“任务”的驱动下展开教学活动, 引导学生由简到繁、由易到难、循序渐进地完成一系列“任务”, 从而得到清晰的思路、方法和知识的脉络, 在完成“任务”的过程中, 培养分析问题、解决问题以及用计算机处理信息的能力, 在这个过程中, 学生不断获得成就感, 求知欲望增强, 从而培养独立探索、勇于开拓进取的自学能力。

2.6 改变实验课核方式

经过多年的教学, 笔者发现实验课程的考核若以实验结果正确度和实验报告为准, 并不能测出学生的全面素质, 相反, 这有可能助长拷贝别人的结果等虚假行为, 考核应注重学习态度、实验过程、分析问题和解决问题的能力以及实验结果等多种因素在成绩评定中的影响, 综合各种因素共同决定学生的实验课成绩。

3 结语

实践教学是提高学生实践能力和创新能力的重要环节, 对实践教学的方法、内容、考核方式等进行研究非常必要。笔者通过“C语言程序设计”实验课的改革与实践, 激发了学生学习的积极性, 调动了学生学习的主动性, 全面提高了他们的综合实践能力。通过几届学生观察发现, 学生更容易掌握该课程的基本内容、教学中的重点、难点, 取得了良好的教学效果。

摘要:C语言是一门实践性很强的课程, 要学好C程序设计, 实验教学非常重要。本文结合教学实践, 分析了目前应用型本科专业学生C语言程序设计实验教学中存在的实际问题, 通过从实验内容、教学方法等方面对实验教学进行了改革, 并在实际教学中取得了良好的效果。

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

参考文献

[1] 陈世基.C语言程序设计实验教学方法的改革与创新[J].福建电脑, 2007, 5:207.

[2] 万其中, 李文生.高校实验教学改革与创新人才培养[J].当代教育论坛, 2007 (4) :103~105.

[3] 寻亚利.计算机实验教学新论[J].科技信息, 2007 (33) :183.

[4] 刘梅彦.“C语言程序设计”实践教学的研究与探索[J].中国电力教育, 2009, 1:136.

c语言课程实践报告范文第6篇

20142015学年第1学期

学 院: 计算机学院 专业班级: 软件工程5班 学 号: 130202051006 学生姓名: 陈洪阳 指导教师: 戴俊雅

成 绩:

时 间:

2015年 1月5日

实践1.猜数游戏 题目概述:

编程先由计算机“想”一个1~100 之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10 次,如果猜了10 次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

程序设计概要与分析:

在源程序的开头中包含stdlib和time库函数,这样我们就可以调用srand()和rand()函数,其中调用srand()提供一个种子,它是一个unsigned int类型,取值范围是0~65535,然后调用rand(),根据提供给srand()的种子值返回一个随机数,我们用rand()%100就把随机决定的数值范围确定在1~100之间,然后定义一个num,记录这个随机产生的随机数,定义input,来储存用户输入的猜数值,用times来记录猜的次数,用do while循环来执行用户猜的次数有10次,用if else条件语句来判断用户是否猜中,或猜得太大、太小,用一个while循环来做总嵌套,设置n的值一开始不为零,while循环的条件是当n的值不等于0,最后用户就可以修改n的值来决定是否退出。

程序代码:

#include #include #include

int main() {

int n=1; while(n!=0) {

srand((unsigned)time(NULL)); int num,input; int times=0; num=(rand()%100)+1; printf("在1~100间猜一个数 "); scanf("%d",&input); do{

if(input==num){

} else if(input>num){

} else if(input

}

}

} printf("你猜的数太小了,请再猜一个 "); scanf("%d",&input); times++; }while(times<9); if(times>=9)printf("你已经猜了10次都猜不中,你输了 "); printf("继续下一轮新的猜数请按1,退出请按0 "); scanf("%d",&n); return 0; 运行结果示例:

选择继续下一轮新的猜数,猜了10次都没猜中

心得体会:

要懂得如何生成一个随机数,并且要确定它的范围在1~100之间,同时我们还要用do while循环体把猜数的次数控制在10次,每当我们输入猜想的数时就要做出判断,看看是否猜中,或者猜得太大或太小,输出提示信息。也懂得了通过修改while判断循环里面的条件,使得循环体里面的程序受我们修改的条件控制,可以继续循环执行或者不再继续执行。

实践2.成绩排名次 题目概述:

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30 人参加考 试,学号可以用输入的序号代替。考试后要求: (1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分; (4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

程序设计与概要:

定义存储学生信息的结构体,包括学生编号,姓名,各科成绩,总分,平均分还有名次。该结构体命名为student,然后定义结构体数组student s[],首先输入准备录入学生信息的人数,用amount来记录人数,用一个for循环,从0~amount-1,依次输入每个学生的各种信息,如学号,姓名,数学、英语和物理成绩。用grade[]数组来存这三科的成绩,如grade[0]存储数学成绩,grade[1]存储英语成绩。输入之后,再用一个for循环把每个同学的总分求出来,总分再除去3求出该名同学的平均分。按总分成绩由高到低排出名次,用两个for循环嵌套,第一个循环从0~amount,表示从第一个同学开始拿出来比较,第二个循环从1~amount,表示除了之前取出的同学以外的每一个同学,如果前一位同学的总分小于后一个同学的话,就交换两人的信息,第二个循环比较之后,便会把总分最高的同学的信息储存在第一个,然后我们设置排名rank的值为1,rank++,进行筛选第二名的,之后对应地把rank的值设给学生的总分排名

打印学生信息,输出表格的基本框架后,用一个for循环,依次输出每个学生的信息,最后还有根据学号查询学生信息,用户输入要查询的学生学号,在for循环里面依次比较,如果找到学号与用户输入相同的,便输出该名学生的信息。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title();

void list(student s[]); int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; } //要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; }

void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 "); for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } }

void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { //n表示人数

int i;//rank=1; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

确定录入人数之后,依次输入每个学生的信息

打印出名次表:

输入学生的学号,查询学生信息:

心得体会:

懂得了用结构体将不同的数据类型结合在一起,然后定义结构体数组,使得每个数组中的成员都具有不同的数据类型变量。而且同属于一个数据类型,也可以定义数组来表示相同的类型但是有多个不同值,比如成绩这个变量。也懂得了用for循环语句求总分,用for循环语句将数组从头到尾输出。

实践3.单科成绩统计 题目概述:

学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实

现下列功能:(1)统计不及格人数并打印不及格学生名单;

(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下: 分段 人数 图形 <60 3(10%)*** 60‐69 8() ******** 70‐79 7() ******* 80‐89 8() ******** >=90 4() ****

程序设计与概要:

定义一个结构体stu,里面有学生的姓名和成绩,然后定义一个s[]数组存放每个学生的姓名和成绩,输入函数中用一个for循环来依次输入每个学生的姓名,还有输入成绩,用if条件语句判断输入的成绩是否为负数,如果是就退出整个输入函数,同时,我们还用if条件语句来判断输入的成绩处于哪个分数阶段,定义n

1、n

2、等整形变量来存储各个分数段的总人数,变量num来存放输入的学生共有多少人,变量sum是将每个学生的成绩都加在一起,最后用sum/num就等于全班该门成绩的平均分,我们用一个for循环语句,判断每个学生的成绩是否小于60分,如果是就输出他的姓名,这样就可以打印出不及格学生的名单了。同样的,用一个for循环语句,判断每个学生的成绩是否大于等于平均分,如果是就变量count+1,用来记录成绩大于或等于平均分的学生人数,同时可将成绩大于平均分的同学姓名输出,这样就打印出了成绩在大于等于平均分的学生名单了。最后是输出分数段,用前面记录各个分数段人数的n值除以总人数再乘以100%就得出比例,每一个分数段都用一句for循环语句,根据n值的大小输入对应数目的*。

程序代码:

#include #include #define M 30 struct stu { char name[20]; int score; }; stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0; int count=0; void input(stu s[]); void getnotpass(stu s[]);

void getavg(stu s[]); void percent(stu s[]); int main() { /*stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0;*/ input(s); getnotpass(s); getavg(s); percent(s); return 0; } void input(stu s[]) { for(i=0;i

printf("请输入第%d个学生的姓名和成绩 ",i+1);

scanf("%s%d",&s[i].name,&s[i].score);

if(s[i].score<0)

break;

if(s[i].score>=0&&s[i].score<60)

n1++;

if(s[i].score>=60&&s[i].score<70)

n2++;

if(s[i].score>=70&&s[i].score<80)

n3++;

if(s[i].score>=80&&s[i].score<90)

n4++;

if(s[i].score>90)

n5++;

num++;

sum+=s[i].score; } printf("学生信息录入完毕 "); } void getnotpass(stu s[]) { printf("不及格人数为:%d ",n1); printf("不及格人员名单如下: "); for(i=0;i

if(s[i].score>=0&&s[i].score<60)

printf("%s ",s[i].name); } printf(" "); ave=sum/num; } void getavg(stu s[]) { for(i=0;i

if(s[i].score>=ave)count++; } printf("成绩在全班平均分及平均分之上的学生人数为:%d ",count); printf("成绩在全班平均分及平均分之上的学生名单如下: "); for(i=0;i

if(s[i].score>=ave)

printf("%s ",s[i].name); } printf(" "); } void percent(stu s[]) { printf("各分数段的学生人数及所占的百分比如下: "); printf("分段 人数 图形 "); printf("<60 %d(%.0f%%) ",n1,(float)n1/(float)num*100); for(i=0;i=90 %d(%.0f%%) ",n5,(float)n5/(float)num*100); for(i=0;i

运行结果示例:

依次输入每个学生的姓名和成绩,当输入成绩为负时,便退出整个输入:

统计不及格人数还有打印不及格学生名单:

统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单:

以直方图方式统计各分数段的学生人数及所占的百分比:

心得体会:

懂得了在for循环体内用if条件判断语句判断输入的值为负值时退出循环体。用变量计数器把符合要求的计数起来,最后可以得出符合要求的值共有多少个,也懂得了用for循环从所有值里进行筛选符合条件的值出来,更懂得了在求百分比时候要强制类型转换,把int类型的计算结果给转换为float单精度类型。

实践4.函数与文件训练 题目概述:

将实践练习2 中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中

包含结构体数组或指针。输出到ASCII 文件的信息包括每个学生的学号、三门成绩和名次,每人一行。

程序设计与概要:由于我的实践2中就已经用了函数,所以我只需要把学生的成绩等信息输出到文件中。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title(); void list(student s[]); int save();//输出到文件中 int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; }

//要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } save(); //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 C语言 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; } void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 ");

for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } } int save() {

FILE *fp; fp=fopen("f:student.txt","w"); if(!fp) {

printf("can not open file! ");

exit(1); } char c[]="学号 数学 物理 英语 排名 "; fputs(c,fp); for(int i=0;i

fprintf(fp,"%u %d %d %d %d ",s[i].num,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].rank); } fclose(fp); } void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { int i; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

首先输入准备录入的学生人数,然后依次输入每个学生的信息:

打印出按总成绩排序后的学生信息表,以及根据学号查询:

在f盘中找到文件并打开:

心得体会:

懂得了用如何运用文件,把向程序中输入的数据全部输出到文件中去。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

实践5. 实践4(1)(2) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

1. 定义至少包含以上学生信息和学院代码的结构体类型和指针(或数组)变量。 2. 函数实现从文件中输入信息到定义的数据中。

程序设计与概要:

定义一个结构体,名为student,里面的内容有学生的学号,姓名,性别,还有那个学院,以及10门成绩,构造结构体数组,student stu[100],用于存储100名学生的信息。定义读取文件中内容的函数,FILE *fp代表文件,调用fopen函数,通过文件所在位置以及文件名打开特定的文件,r表示只对文件进行读取,接着调用fscanf函数,把第一个位置的数据赋给学生的学号,用while循环体,循环的条件是调用feof判断文件是否读取结束,如果没有则返回0,用!feof()来让没读取结束的文件继续读取,接着再把同一行后面的数据分别赋给学生的姓名,性别代码和所属学院代码,再用一个for循环,把同一行后面10个数据分别赋给学生的10门成绩。一行读取完毕后,意味着已经读取完一个学生的所有个人信息,定义一个I值来存储已经读取学生的人数,每读完一人就i+1,再读取下一行的第一个数据赋给下一个学生作为他的学号。通过while循环把文件中的全部信息读取出来赋给所有学生,函数最后返回的是读取学生的人数i。定义结构体名为sxy,用于存储性别代码和代码对应的性别,可以在后面输出的时候,把对应的性别代码转变为用中文表示性别。定义一个结构体名为scode,用于存储学院代码和代码对应的学院名称,可以在最后输出的时候,把学院代码对应的学院名称输出。再定义一个输出函数,通过for循环,从0~i-1,把i个学生的全部信息输出,所以我们在主函数里面先调用读取文件中内容的函数之后再调用输出函数即可。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); struct student { int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; float ave;

}; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k; n=readData("f:StudentInfo.txt",stu); m=readDataxy("f:SexInfo.txt",s1); k=readDataco("f:CodeInfo.txt",s2); if(n==-1||n==0)

return 0; if(m==-1||m==0)

return 0; if(k==-1||k==0)

return 0; printStudent(stu,s1,s2,n,m,k);

system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; fp=fopen(filename,"r"); if(!fp) {

printf("error1");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

fscanf(fp,"%d",&stu[i].scores[j]);

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); }

return i; } void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

printf("%4d",stu[i].scores[j]);

printf(" "); } }

运行结果示例:

心得体会:

懂得了从文件中输入信息到定义的数据中。就是要先构造与文件信息中相对应的结构体数组,然后用打开文件,需要知道文件的具体位置还有文件名,”r”就是表示只采取读取操作,用while循环,循环条件的判断标准就是用feof来判断文件是否读取到文件尾部,用fscanf把每个数据赋给对应的变量。其中最难解决的就是一开始学生文件里面的信息,学生性别用代号表示,学生所在学院也用代码显示,这样一来我们把文件中的信息赋给定义好的结构体

数组之后,用for循环把结构体数组一个一个输出后,显示的是性别代码和学院代码,我们要把代码都改为相对应的值,所以我们同样定义性别的结构体数组,学院的结构体数据,之后用for循环把性别数组里面的代号和学生数组中的性别代码想比较,用strcpy函数,相同的就把代码对应的性别赋给学生数组里面定义好的性别字符数组。同理的,学院代码相对同的就把代码对应的学院名称赋给学生数组里面定义好的学院字符数组。

实践6.实践4(3)(4)(5) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

3. 函数实现排序(1):学生平均成绩的降序排序,并输出所有信息到显示屏。 4. 函数实现排序(2):学生姓名的升序排序,并输出所有信息到显示器。

5. 函数实现查询(1):根据学号查询学生信息,并输出该生信息,并输出所有信息到显示器。

程序设计与概要:

同上个实践一样构造结构体名为student,用来存储学生的信息,如学生姓名,性别代号,学号,学院代号和成绩等。构造结构体名为sxy用来存储性别代号和性别名称,构造结构体名为scode用来存储学院代号和学院名称。用三个不同的函数来实现读取三个不同文件中的内容,把文件里面的内容放到以上构造的三个结构体里面去,定义输出函数,用for循环把每个学生的性别代号同sxy结构体数组中的代号对应,把代号对应的性别名称赋给每个学生的性别sex属性值中,把每个学生的学院代号同scode结构体数组中的代号对应,把代号对应的学院名称赋给每个学生的学院sdept属性值中,最后再用一个for循环把从第一个学生到最后一个学生的全部信息输出。实现要求3中的根据学生平均成绩的降序排序,要求在从文件中读取成绩之后要计算出总分然后再除以10门成绩得出平均分,然后定义一个函数,用双重for循环,把第一个学生同其他学生比较平均分,如果比下一个同学的平均分低就交换两个的位置,否则就继续与下一个同学比较,直到第一层的for循环结束退出为止。再用for循环把排序后的学生信息从第一位到最后一位输出即可。实现要求4中的根据学生姓名的升序排序,要求也是用双重for循环,用函数strcmp比较两个学生的姓名,把第一个学生的姓名同下一个同学比较,如何比下一个同学大,就交两个学生的位置,否则就继续与下一个同学比较,直到第二层的for循环结束,意味一个同学的位置确定,继续第一层for循环的下一个同学,直到第一个层的for循环结束,就意味所有同学比较完毕,再用for循环语句把从第一个位置的同学到最后一个位置的同学,把他们的信息输出。实现要求5的查询要求,需要我们从键盘上输入要查询的学生的学号,然后用for循环从我们的学生结构体数组中遍历一遍,如果有找到学号同输入的学号相同的学生,便把他的所有信息输出,否则则输出不存在该名学生。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); void search(struct student *stu,int n); void sortbyname(struct student *stu,int n); void sortbyave(struct student *stu,int n); struct student

{ int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; double ave; }; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k,b; while(1) {

system("cls");

printf("1.显示学生信息 ");

printf("2.姓名升序排序 ");

printf("3.平均成绩降序 ");

printf("4.学号查询学生信息 ");

printf("0.退出 ");

printf(" 输入需要查询的序号:");

scanf_s("%d",&b);

switch(b)

{

case 1:

n=readData("f:StudentInfo.txt",stu);

m=readDataxy("f:SexInfo.txt",s1);

k=readDataco("f:CodeInfo.txt",s2);

if(n==-1||n==0)

return 0;

if(m==-1||m==0)

return 0;

if(k==-1||k==0)

return 0;

printStudent(stu,s1,s2,n,m,k);

break;

case 2:

sortbyname(stu,n);

break;

case 3:

printf("按平均成绩降序排序如下:");

sortbyave(stu,n);

printStudent(stu,s1,s2,n,m,k);

break;

case 4:

search(stu,n);

break;

case 0:

return 0;

} system("pause"); } system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; double sum; fp=fopen(filename,"r"); if(!fp) {

printf("error");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

{

fscanf(fp,"%d",&stu[i].scores[j]);

sum=stu[i].scores[j];

}

stu[i].ave=sum/10;

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); } return i;

} void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

printf("%4d",stu[i].scores[j]);

printf(" "); } } void search(struct student *stu,int n) { int m,col=0; printf("请输入你要查询学生的学号: "); scanf("%d",&m); for(int i=0;i

if(stu[i].id==m)

{

col=1;

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf("%4d",stu[i].scores[j]);

}

} } if(col==0) printf("不存在该名学生信息 "); } void sortbyname(struct student *stu,int n) { student temp; for(int i=0;i

for(int j=0;j

{

if(strcmp(stu[i].name,stu[j].name)>0)

{

temp=stu[i];

stu[i]=stu[j];

stu[j]=temp;

}

} } printf("按姓名的升序排序如下! "); for(int i=0;i

printf("%8d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf("%4d",stu[i].scores[j]);

}

printf(" "); } } void sortbyave(struct student *stu,int n) { int i,j,flag; student s; for (j=0;j

flag=0;

for (i=0;i

{

if (stu[i].ave

{

s=stu[i];

stu[i]=stu[i+1];

stu[i+1]=s;

flag=1;

}

}

if(flag==0) break; } }

运行结果示例: 开始的菜单界面:

输入1便会显示文件中所有学生的信息:

输入2便会实现学生姓名升序排序,且把排序后的学生所有信息输出:

输入3便会实现学生平均成绩降序排序,且把排序后的学生所有信息输出:

输入4便会实现根据学号查询学生信息:

心得体会:

懂得了运用双重for循环比较全体成员,如题目中所要求的姓名升序排序还有平均成绩降序,比较平均成绩可以用值的大小进行比较,但是比较姓名的大小就要用strcmp函数进行比较,如果有需要交换位置的,就定义一个同类型的中间值,作为交换的协助者,帮助完成两个值的交换,完成整个过程之后,把交换完成后的全体成员从头到尾用for循环输出即可。

参考文献:

相关文章
财务工作实习报告范文

财务工作实习报告范文

财务工作实习报告范文第1篇财务自查报告本学期,本人担任学校财务及报账员,为了严肃财务制度,加强财务监督和管理,提高学校资金使用效益...

1
2025-09-19
纯文本外链的作用范文

纯文本外链的作用范文

s("wzfz");上一篇:财务工作实习报告范文下一篇:财务部岗位职责全范文

1
2025-09-19
财务部岗位职责全范文

财务部岗位职责全范文

财务部岗位职责全范文第1篇前 言为加强公司正规化管理,强化对员工的管理,使各项工作有章可循、有据可依,特制定本《内部规章制度》,各...

1
2025-09-19
村务公开内容目录范文

村务公开内容目录范文

村务公开内容目录范文第1篇2、党组织任期目标和近期目标; 3、党组织班子成员责任分工情况; 4、党费收缴情况; 5、发展党员情况;6、党员示...

1
2025-09-19
餐厅经营工作计划范文

餐厅经营工作计划范文

餐厅经营工作计划范文第1篇在筹备期的前10天里,请保持清晰的头脑,将组织形态(预计是多少人的组合)、组织名称(就是贵公司宝号)、股东人数...

1
2025-09-19
初三语文综合训练范文

初三语文综合训练范文

初三语文综合训练范文第1篇第一阶段:9月-10月本阶段约2个月,主要进行速度、力量、弹跳、耐力和灵敏等身体素质的全面综合训练,为形成较全...

1
2025-09-19
长途运输工作计划范文

长途运输工作计划范文

长途运输工作计划范文第1篇2 汽车司机应持有有效驾驶证、行车证;不得驾驶与证件不相符合的车辆。不得私自将车辆交给他人驾驶。3 车辆不得...

1
2025-09-19
财务个人事迹材料范文

财务个人事迹材料范文

财务个人事迹材料范文第1篇XXX同志,男,现年XX岁,大学学历,XX职称,现任XXXX,主要负责XXXXX。该同志自2014年8月份进入该岗位工作以来,...

1
2025-09-19
付费阅读
确认删除?
回到顶部