1.编写程序将自己学号后面的8位同学的学号、姓名以及数学、英语和数据结构的成绩信息保存到学生成绩表中。如果学号后面没有8位同学,就用学号在班级最前面的学生依次补齐,例如学号为189000248号张二同学,后面只有2位同学,那再表中就存入如下几条学生信息。

学号

姓名

数学

英语

数据结构

189000249

张三

80

75

86

189000250

李四

55

63

72

189000201

王一

88

75

85

189000202

王二

79

96

83

189000203

王三

87

45

77

189000204

王四

66

56

50

189000205

王五

35

55

68

189000206

王六

89

98

96

2.用顺序表插入算法,将自己的学号信息插入到表的第一个位置;再应用删除算法删除现在表中第五位同学的信息,然后输出表里面所有数据信息。

3.用顺序查找算法,查找自己的学号在表中是否存在,如果存在请输出学号、姓名以及各科成绩信息。

4.用直接插入排序算法,对学生成绩表里面信息,按照数学成绩升序排序,并显示输出排序结果。然后用二分查找,查找数学成绩为80的同学是否存在,如果存在,请输出该学生的学号和姓名。

5.用冒泡排序算法,对学生成绩表里面信息,按照英语成绩升序排序,并显示输出排序结果。然后用二分查找,查找英语成绩为90的同学是否存在,如果存在,请输出该学生的学号和姓名。

6.用直接选择排序算法,对学生成绩表里面信息,按照数据结构成绩升序排序,并显示输出排序结果。然后用二分查找,查找数据结构成绩为50的同学是否存在,如果存在,请输出该学生的学号和姓名。

7.分别统计数学、英语、数据结构三门课程的最低分、最高分以及平均分,并输出结果。

直接插入排序算法

基本思想:插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 ,如此重复,直至完成序列排序。

void dirInsertSort(){for(int i = 1;i < count;i++){student[0] = student[i+1];    //将student[0]当作中间变量int j = i;while(j > 0 && student[0].math < student[j].math){student[j+1] = student[j];student[j] = student[0];student[0] = student[j];j--;}}

冒泡排序算法

基本思想:从待排序序列中找出一个最大值或最小值,这样的操作执行 n-1 次,最终就可以得到一个有序序列。

void bubbleSort(){int flag = 1;            //设置flag在于监测排序是否完成for(int i = 1;i < count && flag == 1;i++){flag = 0;for(int j = 1;j < count-i+1;j++){if(student[j].english > student[j+1].english){flag = 1;student[0] = student[j];student[j] = student[j+1];student[j+1] = student[0];}}}
}

简单选择排序算法

基本思想:每次从左至右扫描序列,记下最小值的位置。然后将最小值与当前位置的值交换

void directSelectionSort(){int small;                  //记录最小值的位置for(int i = 1;i < count;i++){small = i;for(int j = i+1;j <= count;j++){if(student[j].dataStructure < student[small].dataStructure)small = j;}if(small != i){         //若small == i则表示当前small位置的值为最小值student[0] = student[i];student[i] = student[small];student[small] = student[0];}}
}

完整代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define Max 10
struct Student{char num[20];char name[20];int math;int english;int dataStructure;
}student[Max];int count = Max-2;
int min = 0,max = 0,sum = 0;
double avg = 0;void print(int i);
void init();
void insert(Student stu,int location);
void del(int location);
void sequentialSearch(char a[]);
void dirInsertSort();
void twoPointSearchMath(int math);
void bubbleSort();
void twoPointSearchEnglish(int english);
void directSelectionSort();
void twoPointSearchDataStructure(int dataStructure);
void calculate();
void minSwap(int value);
void maxSwap(int value);
void avgSwap(int value,int i);void main(){init();strcpy(student[0].num,"209000630");strcpy(student[0].name,"杨帆");student[0].math = 100;student[0].english = 100;student[0].dataStructure = 100;insert(student[0],1);printf("-----------------------分隔符-----------------------\n");del(5);printf("-----------------------分隔符-----------------------\n");sequentialSearch("209000630");printf("-----------------------分隔符-----------------------\n");dirInsertSort();twoPointSearchMath(80);printf("-----------------------分隔符-----------------------\n");bubbleSort();twoPointSearchEnglish(90);printf("-----------------------分隔符-----------------------\n");directSelectionSort();twoPointSearchDataStructure(50);printf("-----------------------分隔符-----------------------\n");calculate();system("pause");
}void print(int i){printf("%s\t%s\t%d\t%d\t%d\n",student[i].num,student[i].name,student[i].math,student[i].english,student[i].dataStructure);
}void init(){strcpy(student[1].num,"189000249");strcpy(student[1].name,"张三");student[1].math = 80;student[1].english = 75;student[1].dataStructure = 86;strcpy(student[2].num,"189000250");strcpy(student[2].name,"李四");student[2].math = 55;student[2].english = 63;student[2].dataStructure = 72;strcpy(student[3].num,"189000201");strcpy(student[3].name,"王一");student[3].math = 88;student[3].english = 75;student[3].dataStructure = 85;strcpy(student[4].num,"189000202");strcpy(student[4].name,"王二");student[4].math = 79;student[4].english = 96;student[4].dataStructure = 83;strcpy(student[5].num,"189000203");strcpy(student[5].name,"王三");student[5].math = 87;student[5].english = 45;student[5].dataStructure = 77;strcpy(student[6].num,"189000204");strcpy(student[6].name,"王四");student[6].math = 66;student[6].english = 56;student[6].dataStructure = 50;strcpy(student[7].num,"189000205");strcpy(student[7].name,"王五");student[7].math = 35;student[7].english = 55;student[7].dataStructure = 68;strcpy(student[8].num,"189000206");strcpy(student[8].name,"王六");student[8].math = 89;student[8].english = 98;student[8].dataStructure = 96;
}void insert(Student stu,int location){for(int i = count;i >= location;i--){student[i+1] =student[i];}student[location] = stu;count++;printf("插入成功!\n");
/*  for(int i = 1;i < Max;i++){           //测试交换顺序与否print(i);}*/
}void del(int location){student[0] = student[location];for(int i = location;i <= count;i++){student[i] = student[i+1];}printf("%s数据已被删除!\n",student[0].name);print(0);count--;
}void sequentialSearch(char a[]){for(int i = 1;i <= count;i++){if(strcmp(student[i].num,a) == 0){print(i);break;}else if(i == count){printf("没有找到你的信息");}}
}void dirInsertSort(){
/*  for(int i = 1;i < Max;i++){           //测试交换顺序与否print(i);}printf("-----------------------分隔符-----------------------\n");printf("%d\n",count);*/for(int i = 1;i < count;i++){student[0] = student[i+1];int j = i;while(j > 0 && student[0].math < student[j].math){student[j+1] = student[j];student[j] = student[0];student[0] = student[j];j--;}}
/*  for(int i = 1;i < Max;i++){print(i);}*/
}void twoPointSearchMath(int math){int low = 1,high = count,mid = (low+high)/2;while(1){if(student[mid].math > math && mid-1 >= low){high = mid-1;mid = (low+high)/2;}else if(student[mid].math < math && mid+1 <= high){low = mid+1;mid = (low+high)/2;}else if(student[mid].math == math){print(mid);break;}else{printf("没有找到信息\n");break;}}
}void bubbleSort(){int flag = 1;for(int i = 1;i < count && flag == 1;i++){flag = 0;for(int j = 1;j < count-i+1;j++){if(student[j].english > student[j+1].english){flag = 1;student[0] = student[j];student[j] = student[j+1];student[j+1] = student[0];}}}
/*  for(int i = 1;i < Max;i++){           //测试交换顺序与否print(i);}*/
}void twoPointSearchEnglish(int english){int low = 1,high = count,mid = (low+high)/2;while(1){if(student[mid].english > english && mid-1 >= low){high = mid-1;mid = (low+high)/2;}else if(student[mid].english < english && mid+1 <= high){low = mid+1;mid = (low+high)/2;}else if(student[mid].english == english){print(mid);break;}else{printf("没有找到信息\n");break;}}
}void directSelectionSort(){int small;for(int i = 1;i < count;i++){small = i;for(int j = i+1;j <= count;j++){if(student[j].dataStructure < student[small].dataStructure)small = j;}if(small != i){student[0] = student[i];student[i] = student[small];student[small] = student[0];}}
/*  for(int i = 1;i < Max;i++){           //测试交换顺序与否print(i);}*/
}void twoPointSearchDataStructure(int dataStructure){int low = 1,high = count,mid = (low+high)/2;while(1){if(student[mid].dataStructure > dataStructure && mid-1 >= low){high = mid-1;mid = (low+high)/2;}else if(student[mid].dataStructure < dataStructure && mid+1 <= high){low = mid+1;mid = (low+high)/2;}else if(student[mid].dataStructure == dataStructure){print(mid);break;}else{printf("没有找到信息\n");break;}}
//  printf("low = %d,mid = %d,high = %d\n",low,mid,high);
}void calculate(){//数学结果int i;min = student[1].math;max = student[1].math;sum = 0;for(i = 1;i <= count;i++){minSwap(student[i].math);maxSwap(student[i].math);avgSwap(student[i].math,i);}printf("数学最低分:%d\n最高分:%d\n平均分:%lf\n",min,max,avg);//英语结果min = student[1].english;max = student[1].english;sum = 0;for(i = 1;i <= count;i++){minSwap(student[i].english);maxSwap(student[i].english);avgSwap(student[i].english,i);}printf("英语最低分:%d\n最高分:%d\n平均分:%lf\n",min,max,avg);//数据结构结果min = student[1].dataStructure;max = student[1].dataStructure;sum = 0;for(i = 1;i <= count;i++){minSwap(student[i].dataStructure);maxSwap(student[i].dataStructure);avgSwap(student[i].dataStructure,i);}printf("数据结构最低分:%d\n最高分:%d\n平均分:%lf\n",min,max,avg);
}void minSwap(int value){if(min > value){min = value;}
}void maxSwap(int value){if(max < value){max = value;}
}void avgSwap(int value,int i){sum += value;avg = sum/i;
}

C语言实现基于查找和排序算法的学生成绩分析相关推荐

  1. 查找和排序算法的学生成绩分析实验

    基于查找和排序算法的学生成绩分析实验 一.实验内容 二.实验原理 三.实验代码记录 四.实验结果 一.实验内容 编写程序将自己学号后面的8位同学的学号.姓名以及数学.英语和数据结构的成绩信息保存到学生 ...

  2. 【数据结构基础应用】【查找和排序算法】

    代码参考<妙趣横生的算法.C语言实现> 文章目录 前言 1.顺序查找 2.折半查找 3.直接插入排序 4.选择排序 5.冒泡排序 6.希尔排序 7.快速排序 8.堆排序 9.排序算法性能比 ...

  3. 基于使用学习排序算法的Web服务学习的个性化的决策战略

    摘要----为了从类似的服务列表中进行功能上的选择,用户往往需要根据多个QoS准则做出他们的决定,它们需要对目标服务.在这个过程中,不同的用户可能遵循不同的决策策略,有些是补偿性的,在这个补偿中在所有 ...

  4. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

  5. 实验四 查找和排序算法实现

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼418A) 学院 计算机科学与网络工程学院 实验课程 数据结构实验 实验项目 实验四 查找和排序算法实现 一.实验目的: 1.各种排序算法 ...

  6. 七、基于比较的排序算法总结

    1 问题 至此,总结一下已经研究过的排序算法: insertion sort,Θ(n2)\Theta(n^2)Θ(n2) merge sort, Θ(nlogn)\Theta(nlogn)Θ(nlog ...

  7. 查找和排序算法的js实现

    查找和排序算法的js实现 查找和排序算法的js实现 二分查找(适用于有序述组) 选择排序 快速排序 归并(合并)排序 查找和排序算法的js实现 学习算法时,将算法手写实现,加深记忆. 二分查找(适用于 ...

  8. C语言中的几种排序算法

    C语言中的几种排序算法 在编程练习时,我们经常会遇到一些将一串乱序的数字排列成有序的数列(递增,递减)的问题,以此起到解决问题的效果.目前我使用的比较熟练的有三种排序算法,冒泡排序法,快速排序法,另外 ...

  9. 排序算法-冒泡排序的时间复杂度分析

    冒泡排序算法是一种基于比较的排序算法,每次冒泡过程,都会有一个数据确定位置.经过n次冒泡后,就有n个数据确定了位置. 如图所示,对数组[4,5,6,3,2,1]进行冒泡排序.  起初,按照最原始的想法 ...

最新文章

  1. 【.NET开发之美】如何提高.NET DataMap中的加载速度
  2. java框架之Spring 核心框架体系结构
  3. libcurl 域名解析分析
  4. 学习笔记(十五)——MySQL(查询)
  5. 即刻—你的私人消息定制
  6. 理解计算机网络的拓扑结构,认识计算机网络拓扑结构
  7. PHP判断浏览器类型和浏览器语言(附各国语言简写代码)
  8. 文件描述符file descriptor与inode的相关知识
  9. 【产品体验】echo回声
  10. 【王道计组笔记】总线(2):性能指标分析
  11. Cmake构建_设置debug与release不同名字
  12. Beetle简单构建TCP服务
  13. C#开发Android应用程序的流程
  14. amd k14主板参数_R5 1400配什么主板好?R5-1400主板搭配与参数详解 (全文)
  15. 美团王兴怒卸百度 App
  16. BlueCoat ProxySG Attack Detection功能
  17. 请领导过目文件怎么说_职场干货|领导说“辛苦了”该怎么回?
  18. 2021年10月世界编程语言排行
  19. 微软内部泄露的 XP的KEY和无限次激活码
  20. 工业视觉检测入门——如何设计一个合适的检测方案?(需求分析+光学设计+检测算法+UI交互+后端数据)

热门文章

  1. 南京“宁满意”工程为云创大数据企业发展加油助力
  2. RUL论文复现:深度卷积神经网络在预测剩余寿命估计中的应用
  3. 使用AS3.0开发FC超级马里奥
  4. matlab调制解调开题报告,基于MATLB的数字调制与解调设计与仿真开题报告.doc
  5. 与机房收费系统重相见
  6. 【PYLTP】pyltp(SentenceSplitter、Segmentor、Postagger、NamedEntityRecognizer、Parserr)个人理解(含可执行代码)
  7. 安装 ABAQUS2020时出错
  8. android内核名修改工具,修改手机内核绕过ptrace
  9. windows10搭建CUDA环境并运行示例
  10. 复旦大学NLP实验室《自然语言处理导论》 网络初版发布