您的位置:首页 > 其它

提高第27课时,实践4,查找成绩

2015-05-19 13:32 337 查看
/*
*Copyright(c) 2015/5/19 CSDN博客
*All rights reserved.
*文件名称:main.c
*作    者:金叶
*完成日期:2015/5/19
*版本号:V1.0
项目4 - 查成绩
*/
#include <stdio.h>
#include <stdlib.h>

int readData(int num[],int score[]);
int search(int num[], int count,int  key);
void sort(int num[], int score[], int count);

int main()
{
int num[200], score[200];  //分别保存学号和成绩
int count;  //代表学生人数
int index;  //代表查找到的学生的下标
int key;
int yn=1;
count = readData(num, score);   //将成绩数据从文件中读到数组中
sort(num, score, count);   //将保存学号和成绩的两个数组按学号排序
while(yn)   //从文件中读出数据,就是要多次使用的,排序花的代价,也值了
{
printf("请输入要查找的学生学号:");
scanf("%d",&key);
index = search(num, count, key);  //在count个学生中查找学号为key的学生对应的下标
if(index < 0)
printf("不存在学号为%d的同学\n",key);
else
printf("学号为%d的同学的成绩是:%d\n", key, score[index]);
printf("输入1继续,输入0结束...");
scanf("%d", &yn);
}

return 0;
}

int readData(int num[],int score[])
{
FILE *fp;
int i=0;//i计算人数
if ((fp=fopen("score1.txt","r"))==NULL){
printf("score1 file cannot open!");
exit(0);}
else {
while(fscanf(fp,"%d%d",&num[i],&score[i])!=EOF) //读入学号和成绩
i++;
}
fclose(fp);
return i;
}

void sort(int num[], int score[], int count)
{
int i,j,t;
for(i=0; i<count-1; i++)
for(j=0; j<count-j-1; j++)
if (num[j]>num[j+1])   //根据学号升序排序
{
t=num[j]; //交换学号
num[j]=num[j+1];
num[j+1]=t;
t=score[j]; //同步交换成绩
score[j]=score[j+1];
score[j+1]=t;
}
return;
}

int search(int num[], int count,int  key)
{
int low=0,high=count-1,mid,index;
while(low<=high){
mid=(low+high)/2;
if (num[mid]==key){
index=mid;
break;
}
else if (key>num[mid])
low = mid + 1;
else
high = mid - 1;
}
if (low>high)
index=-1;
return index;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: