C语言实现基于查找和排序算法的学生成绩分析
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语言实现基于查找和排序算法的学生成绩分析相关推荐
- 查找和排序算法的学生成绩分析实验
基于查找和排序算法的学生成绩分析实验 一.实验内容 二.实验原理 三.实验代码记录 四.实验结果 一.实验内容 编写程序将自己学号后面的8位同学的学号.姓名以及数学.英语和数据结构的成绩信息保存到学生 ...
- 【数据结构基础应用】【查找和排序算法】
代码参考<妙趣横生的算法.C语言实现> 文章目录 前言 1.顺序查找 2.折半查找 3.直接插入排序 4.选择排序 5.冒泡排序 6.希尔排序 7.快速排序 8.堆排序 9.排序算法性能比 ...
- 基于使用学习排序算法的Web服务学习的个性化的决策战略
摘要----为了从类似的服务列表中进行功能上的选择,用户往往需要根据多个QoS准则做出他们的决定,它们需要对目标服务.在这个过程中,不同的用户可能遵循不同的决策策略,有些是补偿性的,在这个补偿中在所有 ...
- 我们一起来排序——使用Java语言优雅地实现常用排序算法
破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...
- 实验四 查找和排序算法实现
广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼418A) 学院 计算机科学与网络工程学院 实验课程 数据结构实验 实验项目 实验四 查找和排序算法实现 一.实验目的: 1.各种排序算法 ...
- 七、基于比较的排序算法总结
1 问题 至此,总结一下已经研究过的排序算法: insertion sort,Θ(n2)\Theta(n^2)Θ(n2) merge sort, Θ(nlogn)\Theta(nlogn)Θ(nlog ...
- 查找和排序算法的js实现
查找和排序算法的js实现 查找和排序算法的js实现 二分查找(适用于有序述组) 选择排序 快速排序 归并(合并)排序 查找和排序算法的js实现 学习算法时,将算法手写实现,加深记忆. 二分查找(适用于 ...
- C语言中的几种排序算法
C语言中的几种排序算法 在编程练习时,我们经常会遇到一些将一串乱序的数字排列成有序的数列(递增,递减)的问题,以此起到解决问题的效果.目前我使用的比较熟练的有三种排序算法,冒泡排序法,快速排序法,另外 ...
- 排序算法-冒泡排序的时间复杂度分析
冒泡排序算法是一种基于比较的排序算法,每次冒泡过程,都会有一个数据确定位置.经过n次冒泡后,就有n个数据确定了位置. 如图所示,对数组[4,5,6,3,2,1]进行冒泡排序. 起初,按照最原始的想法 ...
最新文章
- 【.NET开发之美】如何提高.NET DataMap中的加载速度
- java框架之Spring 核心框架体系结构
- libcurl 域名解析分析
- 学习笔记(十五)——MySQL(查询)
- 即刻—你的私人消息定制
- 理解计算机网络的拓扑结构,认识计算机网络拓扑结构
- PHP判断浏览器类型和浏览器语言(附各国语言简写代码)
- 文件描述符file descriptor与inode的相关知识
- 【产品体验】echo回声
- 【王道计组笔记】总线(2):性能指标分析
- Cmake构建_设置debug与release不同名字
- Beetle简单构建TCP服务
- C#开发Android应用程序的流程
- amd k14主板参数_R5 1400配什么主板好?R5-1400主板搭配与参数详解 (全文)
- 美团王兴怒卸百度 App
- BlueCoat ProxySG Attack Detection功能
- 请领导过目文件怎么说_职场干货|领导说“辛苦了”该怎么回?
- 2021年10月世界编程语言排行
- 微软内部泄露的 XP的KEY和无限次激活码
- 工业视觉检测入门——如何设计一个合适的检测方案?(需求分析+光学设计+检测算法+UI交互+后端数据)
热门文章
- 南京“宁满意”工程为云创大数据企业发展加油助力
- RUL论文复现:深度卷积神经网络在预测剩余寿命估计中的应用
- 使用AS3.0开发FC超级马里奥
- matlab调制解调开题报告,基于MATLB的数字调制与解调设计与仿真开题报告.doc
- 与机房收费系统重相见
- 【PYLTP】pyltp(SentenceSplitter、Segmentor、Postagger、NamedEntityRecognizer、Parserr)个人理解(含可执行代码)
- 安装 ABAQUS2020时出错
- android内核名修改工具,修改手机内核绕过ptrace
- windows10搭建CUDA环境并运行示例
- 复旦大学NLP实验室《自然语言处理导论》 网络初版发布