人人范文网 范文大全

C语言编程实训报告

发布时间:2020-03-03 16:37:26 来源:范文大全 收藏本文 下载本文 手机版

设计题目及要求设计题目及要求设计题目及要求设计题目及要求

1.综合应用实例——学生成绩管理 编写一个菜单驱动的学生成绩管理程序。实现如下管理功能:

(1) 能输入并显示 n 个学生的 m 门考试科目的成绩、总分和平均分。

(2) 按总分进行排序。

(3) 按学号进行排序。

(4) 任意输入一个学号,能显示该学生的姓名、各门功课的成绩

(5) 将输入的学生成绩数据保存到文件中。

(6) 从文件中读出学生成绩数据。

具体要求如下:

1 )先用静态的数据结构(结构体数组)来存储和管理 n 个学生的学号、姓名、成绩等信息,进行编程。

2 )排序函数是一个具有多种排序方式的、通用的、排序程序,即不仅可以实现成绩的升序排序,还可以实现成绩的降序排序。

3 )程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型错误)或无效时,不会中断程序的执行,程序具有一定的健壮性。

4 )输出菜单形式如下:

1.输入学生记录

2.浏览学生记录

3.修改学生记录

4.排序 0.退出 请选择(0-4):

5) 排序菜单形式如下: 排序方式:1.按总分升序排序 2.按总分降序排序3.按学号排序 0.返回主菜单 请选择:

二二二

二、、、、算法分析及实现步骤算法分析及实现步骤算法分析及实现步骤算法分析及实现步骤

总体算法分析的思路就是用调用函数来实现每个小程序的作用,首先是确定头文件,定义学生成绩结构体类型,用结构体函数实现。然后在函数执行过程中调用主菜单函数,紧接着被调用函数返回一个值给主函数,由返回来的值确定主函数应该执行下面的哪个步骤,再用一个while语句控制下面的几个步骤的循环,里面再嵌套switch语句来控制对每个小菜单程序的执行。例如:当调用函数返回“1”时,经过switch语句的判断之后就会执行相应的程序,最后,又会返回到主菜单程序中。其它的都一样。当调用函数返回的值是“4”时,此时因为排序里面还有一个排序的子菜单,所以此时这里我又用了一个switch语句来实现对排序程序的控制,也就是说在switch语句里面再嵌套switch语句。对排序程序进行的控制。等到跳出排序程序的时候,其它的都和之前的选择那样。其中,浏览每个学生信息的函数先计算出每个学生的平均成绩然后用for语句来实现每个学生信息的循环输入。修改学生信息的函数里面也用到了for语句,先找到相同的学号,然后在修改后循环执行。后来的排序程序都选用冒泡法来执行。当然一切程序都是从主函数开始执行。

三三三

三、、、、源程序代码源程序代码源程序代码源程序代码

#include

struct student//定义学生成绩结构体类型定义学生成绩结构体类型定义学生成绩结构体类型定义学生成绩结构体类型

{

intno;charname[8];

floateng,phy,math,sum,ave;};

int menu(student s[],int n)//主菜单函数主菜单函数主菜单函数主菜单函数

{

int k;

cout

cout

cout

cout

cout

cout

cout

cout

cout

cin>>k;

returnk;} void Input(student s[],int n)//输输输输入入入入函数函数函数函数

{

int i;

cout

for(i=0;i

{

cout>s[i].no>>s[i].name>>s[i].eng>>s[i].phy>>s[i].math; s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3; s[i].sum=s[i].eng+s[i].phy+s[i].math;}}

void Ave(student s[],int n)//浏览每个学生浏览每个学生浏览每个学生浏览每个学生信息的信息的信息的信息的函数函数函数函数

{

int i; for(i=0;i

{ s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3; s[i].sum=s[i].eng+s[i].phy+s[i].math;

}

cout

for(i=0;i

cout

}

int Sort(student s[],int n)//排序的子菜单排序的子菜单排序的子菜单排序的子菜单函数函数函数函数

{

int y;

cout

cout

cout

cout

cin>>y;

returny;

}

void change(student s[],int n)//修改学生信息的函数修改学生信息的函数修改学生信息的函数修改学生信息的函数

{

int i,j;

cout

cin>>j;

for(i=0;i

{

cout

cout

cout>s[i].no>>s[i].name>>s[i].eng>>s[i].phy>>s[i].math; s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3;s[i].sum=s[i].eng+s[i].phy+s[i].math;

}}

voidzpxs(student s[],int n)// 按总分升序按总分升序按总分升序按总分升序排序排序排序排序的函数的函数的函数的函数

{

int i,j;studenttemp; for(i=0;i

{

s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3;s[i].sum=s[i].eng+s[i].phy+s[i].math;}

for(i=0;i

{ for(j=0;js[j+1].sum)

{ temp=s[j]; s[j]=s[j+1]; s[j+1]=temp;

}}

cout

for(i=0;i

cout

}

voidzpxj(student s[],int n)//按总分降序排序按总分降序排序按总分降序排序按总分降序排序的函数的函数的函数的函数

{

int i,j;studenttemp; for(i=0;i

{s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3; s[i].sum=s[i].eng+s[i].phy+s[i].math;}

for(i=0;i

{ for(j=0;j

for(i=0;i

cout

voidxhpxs(student s[],int n)//按学号升序排序按学号升序排序按学号升序排序按学号升序排序的函数的函数的函数的函数

{int i,j;studenttemp; for(i=0;i

for(i=0;i

{for(j=0;js[j+1].no) {temp=s[j]; s[j]=s[j+1];s[j+1]=temp;}}cout

for(i=0;i

cout

void main()//主函数主函数主函数主函数

{ int i,g; studentstu[3];while (i){i=menu(stu,3); switch(i) {case 1:Input(stu,3);cout

cout

cout

cout

四、、、、实训总结实训总结实训总结实训总结通过这两个礼拜的实训练习,让我收获很多,在实训的第一节课上,老师给我们一个关于学生成绩管理程序的执行文件,然后告诉我们它有什么功能,一一演示给我们看。最后对我们说我们这两个礼拜的实训作业就是运用我们之前所学过的知识来写出这个程序的源程序代码。在此之前我们都惊呆了,都说不会做。可是在老师悉心的教导下,我们先开始写好自己对这个题目的思路,然后一步一步往下做,一个一个程序的写。在做完题后我自己觉得其实正如老师所说的那样,那些知识我们都学过的,只是我们欠缺对知识的整合能力。虽然在完成作业的过程中遇到了很多不懂的地方,但是在老师的殷切指导下以及与同学的交流中,我最后还是完成了实训作业。让我的知识又得到了很大一步的提升,真希望以后多让我们做这种作业。这样的话我觉得学到的知识会更多,动手能力也提升的很快。

单片机C语言编程实训

C语言编程

二级C编程实训报告樊超

c语言综合实训

C语言上机实训

C语言设计课程实训报告

c语言编程题

c语言编程大题

c语言编程练习

数控编程实训报告

C语言编程实训报告
《C语言编程实训报告.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档