西南石油大学实验报告
、实验目的
1、掌握使用VC6.0上机调试线性表的基本方法;
2、掌握线性表的基本操作:插入、查找、操作等运算在顺序存储结构上的操作
二、实验内容
输入某个班每个学生的所有学生的所有课程的成绩,对所有成绩作如下处理:
1)求每门课的平均分;
2)输出所有有不及格的课程的学生的学号、全部课程的成绩、平均成绩。
三、算法描述
要求:说明程序设计的基本思想,原理和算法描述(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
例如:
以每个学生为对象建立一个单链表,其中每个学生为一个结构体。
学生结构体中包含学号、姓名、学生所有课程的成绩、课程平均分等多个域。
设每个学生学习的课程数目为4,则其结构可用下图所示。
学号姓名课程1 课程2 课程3 课程4平均分指针域
typedef struct stnode
{ int id;/*学号*/
char name[16];/*姓名*/
int class[4];/课程成绩数组
float ave;〃学生个人所有课程的平均成绩
struct stnode *next; //指针域
}students;
首先创建一个包含所有学生的单链表,输入每个学生各门功课的成绩,同时求出每个学生个人所有课程的平均成绩。
然后设计一个累加器sum令其初始值为0,对单链表从表头到表尾进行一次完整的访问,可求得各门课程所有学生得分的平均值。
四、算法实现
#include<stdio.h>
#include<stdlib.h>
#define m 4/* 每个学生所学课程数*/
#define NULL 0 typedef
struct stnode {
int id;
char name[16];
int class[4];
float ave;
struct stnode
*next; }students; students *head; int n; averge()
{
int i,j;
float sum,aver;
/*学号*/
/* 姓名*/
/所有课程成绩分别放存储在
students *p;
printf("Class Average result\n"); printf("********Class********Class Average********\n"); for(i=0;i<m;i++) {
j=0;
sum=0;
p=head;
while(p->next
) {
sum=sum+p->class[i];
p=p->next;
j++;
main()
{ students *p,*q; int i,j; float sum; printf("Please student num!\n");
scanf("%d",&n);
head=(students *)malloc(sizeof(students)); q=head;
for(i=0;i<n;i++)
printf("input student%d ists ID,name\n",i+1); p=q;
scanf("%d\n",&p->id);
scanf("%s",&p->name);
printf("\n");
printf("input student %i its score\n",i+1);
aver=sum/j;
printf("* Class%d %16.2f\n",i+1,aver);
printf(
■ ********************** **\n\n"); nopass()
{
int i;
students *p;
p=head;
printf("No Pass
result\n"); printf("***** ******Name************** ************Average***\n" );
while(p->next)
{
i=0;
while(i<m)
{
if(p->class[i]<60)
{
printf("%8d%10s",p->id,p->name)
; for(i=0;i<m;i++)
printf("%6d",p->class[i]);
printf("%8.2f\n",p->ave);
break;
} else
i++;
} p=p->next; printf( ************************************* **\n\n");
for(j=0;j<m;j++) scanf("%d",&p->class[j]);
q=(students*)malloc(sizeof(students));
q->next=p;
p=head;
while(p->next)
{
sum=0;
for(j=0;j<m;j++)
sum=sum+p->class[j]; p->ave=sum/m; p=p->next;
}
averge();
nopass();
}
}
(写出算法实现的程序源代码以及相应的注释)
五、运行结果
(粘贴出VC6.0 运行结果的截图)
六、心得体会
在实验过程中…… 通过此次实验…….
(要求:写出实验过程中存在的问题及采取的措施,对算法的讨论、分析,改进设想,其它经验教训或心得体会)
蓝色部分为举例说明文字,红色为实验要求说明部分,大家在写实验室报告时候删除或者用实际内容取代即可
标题统一用宋体四号字,正文用小四,行间距为1.5 倍行间距。