#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <iostream>
#include <string>
#define SIZE 30 //成绩数组总长度
#include <stdio.h>
#include <stdlib.h>
#define SIZE 30 //成绩数组总长度
#define SEGMENTSIZE 11 //分数段总共有0-10,总计11个段
#define FAILURE -1 //返回失败结果
#define SUCCESS 1 //返回成功结果
#define ASCEND 1 //升序
#define DECEND -1 //降序
using namespace std;
void swap( int *element1Ptr, int *element2Ptr );
unsigned int i,hold,pass;
int h;
int countStuNum(int array[], int length)
{
int i, stuNumber = 0;
for (i = 0; i < length; i++)
if (array[i] != -1)
stuNumber++; //因为数组的结尾是-1,统计非-1的个数
else break;
return stuNumber;
}
int countMaxScore(int array[], int len)
{
int max = 0;
for(int i = 0; i < len; i++)
{
if(array[i] >= max)
max = array[i];
}
printf("MAX:%d\n", max);
return max;
}
int countMinScore(int array[], int len)
{
int min = 101;
for(int i = 0; i < len; i++)
{
if(array[i] <= min)
min = array[i];
}
printf("MIN:%d\n", min);
return min;
}
float countAverageScore(int array[], int len)
{
float ave, sum = 0;
for(int i = 0; i < len; i++)
{
sum += array[i];
}
ave = sum / len;
printf("AVE:%f\n", ave);
return ave;
}
void bbsort(int array[],int len,int order) //修改
{
int i,j;
for (i = 0;i < len - 1;i++){
for (j = 0;j < len - 1 - i;j++){
if (order ? array[j] > array[j+1] : array[j] < array[j+1])
swap(&array[j],&array[j+1]);
}
}
}
float countMedian(int array[], int len)
{
float median;
//冒泡排序
bbsort(array,len,0); //修改
//for(int i=0;i<len;i++) //修改
//{
median=(float)array[len/2]; //修改
printf("median:%f\n",median);//修改
//printf("median:%d\n",median);
//}
return median;
}
void print(int array[],int len) //修改
{
int i;
for (i=0;i < len;i++)
{
printf((i+1)%10 == 0 ? " %d\n" : (i % 10 == 0 ? "%d" : " %d"),array[i]);
} //10 个一行
}
void bubble(int work[],size_t size,int (*compare)(int a,int b));
int ascending(int a,int b);
int descending(int a,int b);
void bubble( int work[], const int size,
int (*compare)( int a, int b ) )
{
int pass; /* pass counter */
int count; /* comparison counter */
/* loop to control passes */
for ( pass = 1; pass < size; pass++ ) {
/* loop to control number of comparisons per pass */
for ( count = 0; count < size - 1; count++ ) {
/* if adjacent elements are out of order, swap them */
if ( (*compare)( work[ count ], work[ count + 1 ] ) ) {
swap( &work[ count ], &work[ count + 1 ] );
} /* end if */
} /* end for */
} /* end for */
} /* end function bubble */
/* swap values at memory locations to which element1Ptr and
element2Ptr point */
void swap( int *element1Ptr, int *element2Ptr )
{
int hold; /* temporary holding variable */
hold = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = hold;
} /* end function swap */
/* determine whether elements are out of order for an ascending
order sort */
int ascending( int a, int b )
{
return b < a; /* swap if b is less than a */
} /* end function ascending */
/* determine whether elements are out of order for a descending
order sort */
int descending( int a, int b )
{
return b > a; /* swap if b is greater than a */
} /* end function descending */
void bubble(int a[][2],size_t size,int(*compare)(int a,int b))
{
int i;
int j;
for(i=1;i<SIZE;i++){//对于行的比较次数
for(j=0;j<SIZE-1;j++){//对于一行里面的两个数组的比较次数
if((*compare)(a[j][1],a[j+1][1])){
swap(&a[j][1],&a[j+1][1]);
swap(&a[j][0],&a[j+1][0]);
}//end if
}//end in for
}//end out for
}
int in(int a,int b)
{
return a>b;
}
int de(int a,int b)
{
return a<b;
}
int main()
{
//注:数组中有25个学生分数,其中最一个-1表示该元素之前的数组元素值为有效分数。
int score[SIZE] = { 78, 65, 23, 34, 56, 87, 90, 99, 45, 88, 54, 95, 63, 66, 89, 54, 64, 77, 63, 56, 5, 86, 97, 94, 30,-1}; //给score[1]到score[25]赋初值。
int i;
int stuNumber, maxScore, minScore, searchArrayPosition;
int searchScore, appendScoreNum, insertScoreNum, result, arrayPossition;
int order;//排序方向
float averageScore, medianScore;
enum Status { GAMEOVER, CONTINUE };
int choiceNum;
enum Status gameStatus;
int sortOrder;
int len = countStuNum(score , sizeof(score)/sizeof(int));
do
{
gameStatus = CONTINUE;
printf("\n\t\t学 生 成 绩 管 理 系 统 1.3 \n\t\t\tDesigned by HuangX\n");
printf("\n\t0.退出程序\t\t\t1.显示所有成绩\n\n");
printf("\t2.统计最高分\t\t\t3.统计最低分\n\n");
printf("\t4.统计平均分\t\t\t5.冒泡排序\n\n");
printf("\t6.成绩中值\t\t\t7.柱状图\n\n");
printf("\t8.排序\t\t\t9.二维数组学号对应成绩排序\n\n");
printf("请选择功能:");
scanf("%d", &choiceNum);
fflush(stdin);//清除键盘缓冲区的数,否则当输入字符时会出现死循环
switch (choiceNum)
{
case 0:
gameStatus = GAMEOVER;
break;
case 1:
print(score,len); //修改
//for(i=0;i<=24;i++){ 修改
//rintf("%d\t",score[i]);
//if(i%5==0)
// puts("");
//}
break;
case 2:
countMaxScore( score, len);
break;
case 3:
countMinScore( score, len);
break;
case 4:
countAverageScore(score, len);
break;
case 5:
//for ( pass = 1; pass < SIZE; pass++ ) { 修改
/* loop to control number of comparisons per pass */
//for ( i = 0; i < SIZE - 1; i++ ) {
/* compare adjacent elements and swap them if first
element is greater than second element */
//if ( score[ i ] > score[ i + 1 ] ) {
// hold = score[ i ];
// score[ i ] = score[ i + 1 ];
// score[ i + 1 ] = hold;
//} /* end if */
//} /* end inner for */
//} /* end outer for */
printf("请选择排序方式[0:降序 ,1:升序]:"); //修改
scanf("%d", &order);
bbsort(score,len,order); //修改
printf( "\nData items in ascending order\n" );
print(score,len); //修改
//for ( i = 0; i < SIZE; i++ ) { 修改
// printf( "%4d", score[ i ] );
//} /* end for */
break;
case 6:
countMedian(score,len);
break;
case 7:
for(i=0;i<=24;i++)
{
printf("%4d ",score[i]);
for(h=0;h<=score[i];h++)
{
printf("%s","*");
}
puts("");
}
break;
case 8:
scanf("%d",&order);
if ( order == 1 ) {
bubble( score, len, ascending );
printf( "\nData items in ascending order\n" );
} /* end if */
else { /* pass function descending */
bubble( score, len, descending );
printf( "\nData items in descending order\n" );
} /* end else */
for ( i= 0; i< len; i++ ) {
printf( "%5d", score[ i ] );
} /* end for */
printf( "\n" );
break;
case 9:
void bubble(int a[][2],size_t size,int(*compare)(int a,int b));
int student[3][2] = {{1,20},{2,55},{3,99}};
printf("输入1是升序,2是降序:");
scanf("%d",&order);
if(order==1){
bubble(student,SIZE,in);
}
if(order==2){
bubble(student,SIZE,de);
}
/*else{
printf("错误输入!");
}*/
for( i=0;i<SIZE;i++){
printf("学号:%d 成绩:%d\n",student[i][0],student[i][1]);
}
break;
}
}
while(gameStatus == CONTINUE);//修改 while(1)
system("pause");
return 0;
}