该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
路过!自取不谢!
/*
1)程序的功能说明
(1) 成绩录入:由键盘输入10个学生c语言课程的成绩;
(2) 成绩排序:请使用冒泡法对10个学生的成绩进行由高到低排序;
(3) 排序之后的成绩输出:将学生按照成绩由低到高输出;
(4) 利用折半查找法查询成绩为90 的名次
(5) 输出这10个学生的平均分(保留一位小数)。
2)要求:排序功能、查找功能和平均分计算均使用函数实现。
2013-12-19
by wk
*/
#include
void Swap(int *a,int *b);
void Sort(int *p); //冒泡排序(降序)
int Find(int *p,int k); //折半查找,k为需要查找的元素,成功则返回元素下标
//否则返回-1
float Average(int *p); //返回平均成绩
int main()
{
const int requstscore=90; //需要查找的元素是90
int score[10];
int i;
for (i=0; i<10; i++) //读入成绩
scanf("%d",&score[i]);
Sort(score);
printf("After sorting:\n");
for (i=0; i<10; i++) //输出排序后的成绩
printf("%d ",score[i]);
printf("\n");
if (Find(score,requstscore)==-1) printf("No student gets 90!\n");
else printf("The student who gets 90 is Num.%d!\n",Find(score,requstscore)+1);
printf("The average score is %.1f.\n",Average(score));
return 0;
}
void Swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void Sort(int *p)
{
int i,j;
for (i=0; i<9; i++)
for (j=0; j<9-i; j++)
if (*(p+j)
Swap(p+j,p+j+1);
}
int Find(int *p,int k)
{
int l=0,r=9,mid;
if (*(p+l)==k) return l;
else if (*(p+r)==k) return k;
while (l<=r)
{
mid=(l+r)/2;
if (*(p+mid)==k) return mid;
if (*(p+mid)>k) l=mid+1;
else r=mid-1;
}
if (l>r) return -1;
}
float Average(int *p)
{
int i;
float sum=0;
for (i=0; i<10; i++)
sum+=*(p+i);
return sum/10;
}