m0_68362664 2022-04-11 22:51 采纳率: 68.2%
浏览 27
已结题

case9如何修改,能够使main中定义的数组转化为二维并运行case9的程序









#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;
}
  • 写回答

1条回答 默认 最新

  • 非西昂 2022-04-12 13:27
    关注

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 修改了问题 4月11日
  • 创建了问题 4月11日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号