m0_68362664 2022-03-26 19:43 采纳率: 68.2%
浏览 15
已采纳

case5排序的值会出现-1和0,case6求的中值不是正确的结果,如何修改

#include <stdio.h>
#include <stdlib.h>
#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 //降序

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]赋初值。
    unsigned int i,hold,pass;

 
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 swap(int *a, int *b){

int t;

t = *a;

*a = *b;

*b = t;

}    

float countMedian(int array[], int len)
{
    float median;
    //冒泡排序
    for(int i=0;i<len;i++)
    {
        median=array[13];
        printf("median:%d\n",median);
    }
    return median;
}
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\n");
        printf("请选择功能:");
 
        scanf("%d", &choiceNum);
        fflush(stdin);//清除键盘缓冲区的数,否则当输入字符时会出现死循环
 
        switch (choiceNum)
        {
        case 0:
            gameStatus = GAMEOVER;
            
            break;
        case 1:
            for(i=0;i<=24;i++){
            printf("%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( "\nData items in ascending order\n" );

 
   for ( i = 0; i < SIZE; i++ ) {
      printf( "%4d", score[ i ] );
   } /* end for */
            break;
        case 6:
             countMedian(score,len);
             break;
        default:
            printf("输入错误,重新输入!\n");
            break;
        }
    }
    while(1);
    return 0;
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-03-26 22:57
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #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 //降序
    //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]赋初值。
    //修改,数组score[] 主函数里已经定义了局部的,这里就没必要再定义一个全局的。
    unsigned int i,hold,pass;
    
    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 swap(int *a, int *b){
        int t;
        t = *a;
        *a = *b;
        *b = t;
    }
    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 个一行
    }
    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\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;
            default:
                printf("输入错误,重新输入!\n");
                break;
            }
        }
        while(gameStatus == CONTINUE);//修改 while(1)
        system("pause");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 4月7日
  • 创建了问题 3月26日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效