我是个汉子 发表于 2019-2-21 20:47:36

求助 C语言 关于数组的移动

本帖最后由 我是个汉子 于 2019-2-21 20:58 编辑


好像移动有问题,但我没有找出来
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:找出二维整型数组a中每行元素的最大值,并将该元
      素移动至该行首列。

编写程序:
      1、编写void findmax(int a[], int n[])函数:找出
         二维数组a中每行元素的最大值,并将该元素的列下标
         存入数组n中,即第0行元素最大值的列下标存入n,
         ...,第3行元素最大值的列下标存入n。

      2、编写void move(int a[],int n[])函数:根据数组
         n中保存的数据,将a数组中每行最大值元素移动到该
         行首列,要求移动后该元素与该行其他元素的相对位
         置不变。

例如:
      a数组的初始数据为:
         -213   6    9
         25   4   0   11
         -8   310   16
         4    7   5   20

      经过处理后a数组中数据为:
         13   6   9   -2
         25   4   0   11
         16-8   3   10
         20   4   7    5

---------------------------------------------------------
注意:请勿改动主函数main()中的任何语句。
-------------------------------------------------------*/

#include <stdio.h>
#include <stdlib.h>
#define N 4
void findmax(int a[], int n[]){
/**********Program**********/
int i,j,k,max;
for(i=0; i<N; i++)
{
      max=0;
      for(j=0; j<N; j++)
      {
                if(max<a)
                {
                        max=a;
                        n=j;
                }
      }
}
/**********End**********/
}
void move(int a[],int n[]){//0   1   2    3
/**********Program**********/   // -213   6    9
int i,j,k;
for(i=0; i<N; i++)
{
      while(a != a])
      {
                k=a;
                for(j=0; j<N-1; j++)
                        a=a;
                a=k;      
      }
}
/**********End**********/
}

int main(){
int i,j;
int a={{-2,13,6,9},{25,4,0,11},{-8,3,10,16},{4,7,5,20}},n;
FILE *fp;
findmax(a,n);
move(a,n);
if((fp=fopen("data.txt","w"))==NULL){
    printf("open file error\n");
    exit(0);
}
for(i=0;i<N;i++){
    for(j=0;j<N;j++){
      fprintf(fp,"%d\t",a);
      printf("%d\t",a);
    }
    fprintf(fp,"\n");
    printf("\n");
}
fclose(fp);
}

910201513 发表于 2019-2-22 00:17:02

63行      while(a != a])
对于一个确定的i而言,n是一个定值,n=2(以数组第一行为例)
只要a和a的值不相等,那么进入死循环(因为退出循环条件a == a]恒不成立)
可以先定义一个中间量g将最大值赋给中间量g,然后用while循环这样写: while(a != g)
找最大值的函数没问题,两个函数我都看了,就移动的这有一点小问题
如有疑问,请跟帖

我是个汉子 发表于 2019-2-22 20:31:10

910201513 发表于 2019-2-22 00:17
63行
对于一个确定的i而言,n是一个定值,n=2(以数组第一行为例)
只要a和a的值不相等,那么进入 ...

可以,很详细。
页: [1]
查看完整版本: 求助 C语言 关于数组的移动