鱼C论坛

 找回密码
 立即注册
查看: 2795|回复: 3

好心人能给我解释一下这段代码么?

[复制链接]
发表于 2017-12-10 22:14:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #define _CRT_SECURE_NO_WARNINGS

  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <time.h>

  5. using namespace std;

  6. #include "student.h"

  7. int readStructsIntoList( student* & stu ) {
  8.    char  buffer[256]; //缓冲区
  9.    int k = 0;
  10.    for ( ; gets( buffer ); k++ ) { //逐行读入不超过n条记录
  11.       student* ta = new student;
  12.       sscanf( buffer, "%d\t%s\t%s\t%s\t%s\t%s\t%I64d",
  13.          &ta->id,
  14.          ta->name,
  15.          ta->dept,
  16.          ta->group,
  17.          ta->type,
  18.          ta->email,
  19.          &ta->cell);
  20.       ta->pts = 56 + rand() % 45; //成绩随机分布于(55, 100]
  21.       //print( *ta );
  22.       ta->next = stu; stu = ta; //串接到链表前端
  23.    }
  24.    return k;
  25. }

  26. void selectionsort( student* s ) { //按成绩(选择)排序
  27.    for ( student* ta = s; ta; ta = ta->next ) {
  28.       student* tm = ta;
  29.       for ( student* tb = ta; tb; tb = tb->next ) //选出下一个(最小者)
  30.          if ( tm->pts > tb->pts ) tm = tb;
  31.       swap( *ta, *tm ); //通过交换将其前移就位
  32.       student* next = tm->next; tm->next = ta->next; ta->next = next; //别忘了,next指针要再次交换以复原
  33.    }
  34. }

  35. void bubblesort( student* s ) { //按班级(起泡)排序:正向稳定
  36.    while ( 1 ) {
  37.       bool sorted = true; //有序标志
  38.       for ( student* ta = s; student* tb = ta->next; ta = ta->next )
  39.          if ( strcmp(ta->group, tb->group) > 0 ) {
  40.             sorted = false; //仍有逆序
  41.             swap( *ta, *tb ); //通过交换将其前移就位
  42.             student* next = ta->next; ta->next = tb->next; tb->next = next; //别忘了,next指针要再次交换以复原
  43.          }
  44.        if ( sorted ) break; //直至有序
  45.    }
  46. }

  47. void insertionsort( student* & s ) { //按班级(插入)排序:反向稳定
  48.    student* t = s;
  49.    while ( student* x = t->next ) { //sorted prefix = [s, t] = [0, x)
  50.       if ( strcmp(x->group, s->group) <= 0 ) { //[x] <= [s]
  51.          t->next = x->next; x->next = s; s = x; //太空舞步
  52.       } else {
  53.          student* p = s; //predecessor of x
  54.          while ( strcmp(x->group, p->next->group) > 0 ) p = p->next;
  55.          if ( p->next == x ) //[s, t] < [x]
  56.             t = x;
  57.          else {
  58.             t->next = x->next; x->next = p->next; p->next = x; //太空舞步
  59.          }
  60.       }
  61.    }
  62. }

  63. int main( int argc, char* argv[] ) {

  64.    srand ( ( unsigned int ) time ( NULL ) ); //设置随机种子

  65.    student* fpcStu = NULL; //灵活:既足够,也不浪费
  66.    int n = readStructsIntoList( fpcStu ); cout << n << " record(s) read\n";

  67.    selectionsort( fpcStu ); cout << "\n" << n << " record(s) sorted by score\n";
  68.    for ( student* ta = fpcStu; ta; ta = ta->next ) { //逐条输出,以验证排序无误
  69.       cout << "[" << --n << "]\t" << ta->name << "\t" << ta->group << "\t" << ta->pts << "\n";
  70.    }
  71.    //bubblesort( fpcStu ); cout << "Resorted by group\n";
  72.    insertionsort( fpcStu ); cout << "Resorted by group\n";
  73.    for ( student* ta = fpcStu; ta; ta = ta->next ) { //逐条输出,以验证排序无误
  74.       cout << "[" << n++ << "]\t" << ta->name << "\t" << ta->group << "\t" << ta->pts << "\n";
  75.    }

  76.    while ( fpcStu ) { //逐条释放各记录
  77.       student* ta = fpcStu; fpcStu = fpcStu->next; delete ta;
  78.    }

  79.    return 0;
  80. }
复制代码


我第一个问题就是:
1.#include "student.h"是什么意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-10 22:25:52 From FishC Mobile | 显示全部楼层
写了另外一个文件,将它包含进来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 22:26:26 | 显示全部楼层
你的第一个问题应该是一个student.h的头文件在别的地方有定义,这里只是宏替换,你应该还可以找到另一个文件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 01:18:06 | 显示全部楼层
挺简单的把...大体是读取一行学生信息,然后分类排序,并输出...应该是学生管理系统的代码.c++的.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-2 10:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表