C语言提高-27讲: 编写查找和排序函数(查成绩)
来源:互联网 发布:暖通设计软件 编辑:程序博客网 时间:2024/05/03 00:10
任务和代码:
/* *All rights reserved *文件名称:main.c *作者: Osseyda 完成日期:2017.10.24 *版本号:v2. *问题描述:score1.txt提供了某大学两个班某次测验的数据,包括每位同学的学号及成绩。请编程序,输入学号,查找出该同学的成绩。*设计要求:①在调用readData(num, score);读入数据后,立即调用自定义函数sort对两个数组进行排序(注意在排序需要交换时,应该同时交换两个数组中对应的值,以保证同一下标,对应的是同一个学生的学号和成绩);②这样,search函数可以实现为二分查找了;③改造main函数,支持多次的查找。*/ #include <stdio.h>#include <stdlib.h>int readData(int*,int*);int binary_search(int*,int,int);void sort(int*,int*,int);void saveData(int*,int*,int);int main(){ int num[200], score[200]; //分别保存学号和成绩 int count; //代表学生人数 int index; //代表查找到的学生的下标 int key; count = readData(num, score); //将成绩数据从文件中读到数组中 sort(num,score,count); //由学号顺序排序,学号对应的成绩跟着排序 saveData(num,score,count); //将排序后的数组元素保存到文件中 printf("请输入要查找的学生学号:"); while(scanf("%d",&key)!=EOF){ index=binary_search(num,count,key); //对排序后的数组二分查找学号为key的学生对应的下标 if(index<0) //输入的学号不存在时,index的值要求返回-1 printf("不存在学号为%d的同学\n",key); else printf("学号为%d的同学的成绩是:%d\n", key, score[index]); printf("\n请输入要查找的学生学号:"); } return 0;}//将成绩数据从文件中读到数组中int readData(int *p1,int *p2){ int i=0,j=0; FILE *fp; if((fp=fopen("score1.txt","r"))==NULL){ printf("data cannot be opened"); exit(0); } while(fscanf(fp,"%d %d",&*(p1+i),&*(p2+j))!=EOF){ i++; j++; } fclose(fp); return i;}//查找学号为key的学生对应的下标int binary_search(int *p,int n,int k){ int i=-1; int low=0,high=n-1,middle; while(low<=high){ middle=(low+high)/2; if(*(p+middle)==k){ i=middle; break; } else if(*(p+middle)>k) high=middle-1; else low=middle+1; } return i;}//依据学号大小重新排序,学号的下标改变,原下标对应的成绩的下标也跟着变化void sort(int *p1,int *p2,int n){ int i,j,t,k; for(i=0;i<n-1;i++){ for(j=0;j<n-i-1;j++){ if(*(p1+j)>*(p1+j+1)){ t=*(p1+j); //交换学号数组单元所存的元素 *(p1+j)=*(p1+j+1); *(p1+j+1)=t; k=*(p2+j); //同时交换(和学号数组相同的)成绩数组单元所存的元素 *(p2+j)=*(p2+j+1); *(p2+j+1)=k; } } }}//将排序后的数组元素保存到文件中void saveData(int *p1,int *p2,int c){ int i; FILE *fp; if((fp=fopen("score2.txt","w"))==NULL){ printf("score2 cannot be opened"); exit(0); } for(i=0;i<c;i++) fprintf(fp,"%d\t%d\n",*(p1+i),*(p2+i)); fclose(fp);}score1.txt
运行结果:
知识点总结:
将数据从文件读入数组元素;将数组元素保存到文件;调用冒泡法排序函数和二分法查找函数;
根据要求修改冒泡法排序函数;多次读入数据的表达
心得:
除了编写速度,其他还好!
阅读全文
0 0
- C语言提高-27讲: 编写查找和排序函数(查成绩)
- C语言提高-第26/27讲: 实现线性表基本操作的函数/编写查找和排序函数
- C语言及程序设计提高例程-27 编写查找和排序函数
- 第7周 C语言及程序设计提高例程-27 编写查找和排序函数(有疑问)
- C语言:编写查找和排序函数(二分查找,冒泡排序,选择排序法)
- C语言提高-30讲:字符和字符串处理函数
- C语言提高-第24/25讲: 数组名【指针】作为函数参数(成绩处理函数版)
- C语言排序和查找
- C语言库函数中的排序和查找函数
- c语言:编写折半查找函数
- 【C语言】编写一个折半查找函数
- C语言:编写折半查找函数
- 【C语言】编写函数实现二分查找
- C语言提高-第18讲: 一维数组应用二三例(成绩处理)
- C语言提高-第8讲: 函数的声明、定义和调用(歌手大奖赛计分函数版)
- C语言 冒泡排序和二分查找
- C语言提高-第20讲: 经典:查找的艺术(有几个)
- C语言提高-第20讲: 经典:查找的艺术(有序数组中插入数据)
- MySQL字段类型到JAVA类型的对应及转换
- Activity Handler 使用 WeakReference
- 盘点遭遇WannaCry勒索病毒影响的几大受害者
- spring cloud sidecar
- 配置JNDI(坑爹货)
- C语言提高-27讲: 编写查找和排序函数(查成绩)
- 安卓开发框架(MVP+主流框架+基类+工具类)--- 基类
- 使用本地域名 访问本地项目,本地host文件配置
- Linux 下网络配置
- Node VS C#
- 《了不起的盖茨比》:梦想的力量与方向
- Intel/美光的3D Xpoint能够撑起未来存储的一片天吗?
- 极简工作法 第一章
- android 收不到ACTION_MEDIA_MOUNTED 广播