第17周报告2:
实验目的:理解结构体的概念,并学会结构初步的应用
实验内容:利用结构体解决问题
/* 程序头部注释开始(为避免提交博文中遇到的问题,将用于表明注释的斜杠删除了)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:动态链表的建立
* 作 者: 2011级114-3张宗佳
* 完成日期: 2011 年 12月19日
* 版 本号: vc.0
* 对任务及求解方法的描述部分
* 输入描述:无
* 问题描述:建立动态链表输出成绩
* 程序输出:.....
* 问题分析:……
* 算法设计:由于内容较少可以不用定义函数,直接写main函数
*/
#include<iostream>
#include<fstream>
using namespace std;
struct student
{
char num[12];
char name[20];
float grade[4];
struct student*next;
};
student stu[180];
student *head=NULL,*p,*q;
int num = 180;
int main()
{
int i;
float sum = 0, ave;//下面导入文件
ifstream infile("score.txt",ios::in);
if(!infile)
{
cerr << "open error!" << endl;
exit(1);
}
for(i = 0;i < num; i++)//将数据导入结构体内,并建立动态链表
{
p = new student;
infile >> p->num >> p->name >> p->grade[0] >> p->grade[1] >> p->grade[2];
p->grade[3] = p->grade[0] + p->grade[1] + p->grade[2];
sum = sum + p->grade[3];
p->next = NULL;
if(i == 0)
{
head = p;
}
else
{
q->next = p;
}
q = p;
}
ave = sum/num;//求平均值
infile.close();
p = head;
cout << "总分高于平均分且没有挂科的同学有:" << endl;
cout << "学号" << "\t" << " " << "姓名" << "\t" << "\t" << "总分" << endl;//下面输出成绩
while(p!=NULL)
{
if(p->grade[3] > ave&&p->grade[0] > 60&&p->grade[1] > 60&&p->grade[2] > 60)
{
cout << p->num << "\t" << p->grade[3] << endl;
}
p = p->next;
}
return 0;
}
经验积累:
1.导入文件的时候一定要在前面标出#include<fstream>
2.建立动态链表时要在结构体内定义struct student*next;
3.在输出时要明确在哪里判断,p=p->next;要写在判断条件之后的
上机感言:任务二写起来不想任务一那么难,可只是照着例题写上了,还有几处不太明白...