| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 我是个汉子 于 2019-2-21 20:58 编辑  
 
- 好像移动有问题,但我没有找出来
 
 - /*-------------------------------------------------------
 
 - 【程序设计】
 
 - ---------------------------------------------------------
 
  
- 题目:找出二维整型数组a[4][4]中每行元素的最大值,并将该元
 
 -       素移动至该行首列。
 
  
- 编写程序:
 
 -       1、编写void findmax(int a[][N], int n[])函数:找出
 
 -          二维数组a中每行元素的最大值,并将该元素的列下标
 
 -          存入数组n中,即第0行元素最大值的列下标存入n[0],
 
 -          ...,第3行元素最大值的列下标存入n[3]。
 
  
-       2、编写void move(int a[][N],int n[])函数:根据数组
 
 -          n中保存的数据,将a数组中每行最大值元素移动到该
 
 -          行首列,要求移动后该元素与该行其他元素的相对位
 
 -          置不变。
 
  
- 例如:
 
 -       a数组的初始数据为:
 
 -          -2  13   6    9
 
 -          25   4   0   11
 
 -          -8   3  10   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[][N], 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[i][j])
 
 -                 {
 
 -                         max=a[i][j];
 
 -                         n[i]=j;
 
 -                 }
 
 -         }
 
 - }
 
 - /**********  End  **********/
 
 - }
 
 - void move(int a[][N],int n[]){  //  0   1   2    3
 
 - /**********Program**********/   // -2  13   6    9
 
 - int i,j,k;
 
 - for(i=0; i<N; i++)
 
 - {
 
 -         while(a[i][0] != a[i][n[i]])
 
 -         {
 
 -                 k=a[i][0];
 
 -                 for(j=0; j<N-1; j++)
 
 -                         a[i][j]=a[i][j+1];
 
 -                 a[i][N-1]=k;        
 
 -         }
 
 - }
 
 - /**********  End  **********/
 
 - }
 
  
- int main(){
 
 -   int i,j;
 
 -   int a[N][N]={{-2,13,6,9},{25,4,0,11},{-8,3,10,16},{4,7,5,20}},n[4];
 
 -   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[i][j]);
 
 -       printf("%d\t",a[i][j]);
 
 -     }
 
 -     fprintf(fp,"\n");
 
 -     printf("\n");
 
 -   }
 
 -   fclose(fp);
 
 - }
 
  复制代码 
 
63行 -         while(a[i][0] != a[i][n[i]])
 
  复制代码
对于一个确定的i而言,n[i]是一个定值,n[i]=2(以数组第一行为例) 
只要a[i][0]和a[i][2]的值不相等,那么进入死循环(因为退出循环条件a[i][0] == a[i][n[i]]恒不成立) 
可以先定义一个中间量g将最大值赋给中间量g,然后用while循环这样写: while(a[i][0] != g) 
找最大值的函数没问题,两个函数我都看了,就移动的这有一点小问题 
如有疑问,请跟帖  
 
 
 |   
 
 
 
 |