第17周报告2:动态链表

简介: 任务:数据来自score.txt,在程序中建立一个动态链表:每读入一个同学的数据,计算总分,分配结点的存储空间并赋值,并建立起前后相链的关系。在建立链表的同时,要进行统计,以便于求出所有同学总分的平均成绩。动态链表建立后,从头结点开始,依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。   实验目的:学会动态链表的建立和输出 实验内容:动态链表的定义、建立、输出  /

任务:数据来自score.txt,在程序中建立一个动态链表:每读入一个同学的数据,计算总分,分配结点的存储空间并赋值,并建立起前后相链的关系。在建立链表的同时,要进行统计,以便于求出所有同学总分的平均成绩。动态链表建立后,从头结点开始,依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。

 

实验目的:学会动态链表的建立和输出

实验内容:动态链表的定义、建立、输出 

/* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright(c) 2011, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称:  link.cpp                           
* 作    者:  贺利坚                           
* 完成日期:  2011 年 12 月 19 日
* 版 本 号:  v1.0       
 
* 对任务及求解方法的描述部分
* 输入描述:score.txt
* 问题描述:在程序中建立一个动态链表:每读入一个同学的数据,计算总分,分配结点的存储空间并赋值,并建立起前后相链的关系。在建立链表的同时,要进行统计,以便于求出所有同学总分的平均成绩。动态链表建立后,从头结点开始,依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。
* 程序输出:所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。
*/
#include  <iostream>
#include  <fstream>
usingnamespace std;
struct Student
{
   char num[13]; //尽管都是由数字构成,但看作为字符更合适。
   char name[10]; //每个汉字占两个字节,中国人的名字,5个汉字够用
   int cpp;
   int math;
   int english;
   int grade;
   struct Student *next;   //指向下一节点的指针
};
const intN=180;
 
int main( )
{
   Student *head=NULL,*p,*q;
   int i;
   int sum=0,ave;   //用于求平均
   ifstreaminfile("score.txt",ios::in);       //以输入的方式打开文件
   if(!infile)                         //测试是否成功打开
   {
          cerr<<"open error!"<<endl;
          exit(1);
   }
   //下面从文件中读取数据,同时建立动态链表,并为求总分之和
   for(i=0;i<N;i++)
   {
          p = new Student;
          infile>>p->num>>p->name>>p->cpp>>p->math>>p->english;
          p->grade = p->cpp + p->math +p->english;
          sum+=p->grade;
          p->next=NULL;
          if (i==0)
                 head=p;   //是第一个节点
          else
                 q->next=p;   //用q记录刚刚产生的结点,如果有下一个,需要q将之连起来
          q=p;
   }
   infile.close();
    
   //求平均成绩
   ave=sum/N;
   cout<<"总分平均为:"<<ave<<endl;
  
   //依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。
   p=head;
   i=1;
   while(p!=NULL)
   {
          if(p->grade>=ave&&p->cpp>=60&&p->math>=60&&p->english>=60)
          {
                 cout<<i<<""<<p->num<<" "<<p->name<<""<<p->grade<<endl;
                 i++;
          }
          p=p->next;
         
   }
   return 0;
}

总结:

1. 本题体验了动态链表,在数据结构课程里,还有大量的算法需要用链表完成。本题做的是单向链表,还有双向链表、循环链表等,操作涉及插入、删除、查询等。再进一步,树、图的存储大量用到类似的操作,期待以后的内容……

2. 链表也是一个需要在思维方式上有大转变的一个内容,不免开始时不习惯。逐渐熟悉了,也不是那么难,要有信心,继续多看书,多练习,多实践。

 

感言:上课前,认真地看了讲义,唯独忘记检查模板,恰巧上周忙,没有提前做模板,当时想周三上机前做好就行。发现模板不对后,心一横,本周无模板,同学们应该学着自己写完整的报告了。担心有人就光秃秃地交个源代码了事。看到不少同学提交的报告,担心多余了。当然也有一些同学,真的“裸交”了。带学生一段,就让他们自己走好了。不带,起步不了;总带着不放,走远不了,时机要把握好,为自己没有有计划放手惭愧。

目录
相关文章
|
C语言
第十四周:*链表
第一遍没看明白也没关系,慢慢来,会慢慢看懂的。C语言的基础到这里你就都了解了,配套的课程移步去中国大学慕课看浙江大学翁恺老师的课程,那是梦的开始
103 0
如何写周报告
        在日常工作中,我们每个礼拜在项目上都会有周报需要编写提交,那么我们如何来写周报呢?到底该怎么才能写好周报?       首先我们得明确周报的概念,在周报中我们需要体现什么样的内容给领导。
1191 0
第12周 上机报告 1之练习3 回文日
题目:很诱人的一个题目:2011年11月02日是一个回文日:2011 1102,我们刚刚度过!请列出近80年和近60年还有多少个回文日(假如我们能活到百岁,你和我的……)。注意:一年只有12个月。 2012年11月30日新发的程序: #include &lt;iostream&gt; using namespace std; int main( ) { int year,month,day
866 3
|
C++
2014秋C++ 第15周项目 指针基础
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。  【项目1-打入“内部”寻“内幕”】下面是一段使用了指针的程序。请利用“单步”执行的方式运行程序,深刻理解“指针变量存储的是地址值”、“通过指针变量间接访问”等概念。将在执行过程中留下深刻映像的界
1045 0
|
C++ iOS开发
C++第2周项目4——动态链表初试
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8635385 【项目4-动态链表初试】数据依然来自score.txt,在程序中建立一个动态链表:每读入一个同学的数据,计算总分,分配结点的存储空间并赋值,并
1404 0
|
C++ iOS开发
C++第2周项目3——用结构体数组作计算
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8635385 【项目3-用结构体数组作计算】接项目2,(1)从文件中读出数据,存放到你定义的结构体数组中,即项目2(1);(2)求出每名同学的总分(可以在读
1200 0
|
人工智能 C++ JavaScript
C++第17周项目6——指针版多科成绩计算
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 【项目6(选做)- 指针版多科成绩计算】(接15周项目4)用二维数组score[][4]保存同学们的高数、英语、C++成绩及总成绩。在此基础上,尽量用指针法访问数组,完成下面的操作:(1)设计输入成绩的函数,输入3科成绩后可以自动求出总分,并将数据全保存到数组中;(2)
1206 0
|
C++
C++程序设计-第17周指针上机实践项目
回到课程主页,链接:C++程序设计课程主页-2012级   本次上机对应的教学内容:第6章 指针 指针和数组,指针和字符串等 【项目1-体会函数参数传递】1、下面三段程序都试图通过定义函数,实现实际参数在必要时的交换,哪些能够实现,哪些不能实现?通过运行程序和单步执行,让自己对这一过程更加清楚,然后请在博文中给出明确的回答,并用你自己的话展开描述(自己的话,但要用术语,用术语讲技术的事,是必须
1274 0
|
存储 数据安全/隐私保护 C++
C++程序设计-第14周数组上机实践项目
回到课程主页,链接:C++程序设计课程主页-2012级   本次上机对应的教学内容:第5章   数组 - 一维数组 【项目1 - 数组大折腾】创建一个长度为20的整型数组,通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入,使后10个元素获得值,将所有元素值加倍后保存在数组中,最后由前往后输出数组中所有元素的值,再由后往前输出数组中所有元素的值,再输出数组中的所有偶数,以及下标为3
1102 0