二位数组的应用

来源:互联网 发布:java源码解析视频教程 编辑:程序博客网 时间:2024/04/29 11:40

在c语言中才学习了数组,还需多多练习,找一个自言自语的地方也挺好的吧!有这样一个题目来做做吧,7.9找出6乘6矩阵中每列绝对值最大的元素,并且与同行对角线元素交换。我知道逻辑性很重要的,所以我还是先来分析分析吧!

1.最先的问题是比较问题,既然要最大的数,就一定要比较啊,而且还是要每列中最大的数,首先在列数中循环,找到最大的数,并且进行标记。2.接下来就是交换问题了,第二次循环就是在行数中循环,将标记的数与该行对角线元素交换就好了。3.还有这样一个疑问了,如果有负数存在怎么办?在不知道有数学函数库的情况下,只能将最小的数求绝对值再与最大的数进行比较了。第一次我写这个程序的过程中我没有应用下标的绝对优势了,是这样做的,于是进入了死胡同了!

#include <stdlib.h>

#include <stdio.h>

main()

{    int i,j,k,l,max,t;

     int a[3][3]={4,7,10,-9,3,2,6,-11,5};

           for(j=0;j<3;j++)

           {  k=a[0][j];

               l=a[2][j];

                     for(i=0;i<3;i++)

                            if(a[i][j]>k)

                                       k=a[i][j];

                              else

                                       l=a[i][j];

                            if(k<-l)

                                     max=l;

                            else

                                     max=k;

                            printf("%d",max);

                            printf("\n");

           for(i=j;i<=j;i++)

                     {  t=a[i][i];

                         a[i][i]=;

                             =t;

                    }

           }

     for(i=0;i<3;i++)

           {     for(j=0;j<3;j++)

                              printf("%4d",a[i][j]);

                   printf("\n");

           }

}

我不知道怎样做下去了!a[i][j]根本无法对应啊!这个地方就要用下标了!尴尬

#include <stdlib.h>

#include <stdio.h>

main()

{    int i,j,k,m,n,q;

     int a[3][3]={4,7,10,-9,3,2,6,-11,5};

           for(j=0;j<3;j++)

           {  m=a[0][j];

               k=0;

                     n=a[2][j];

                     q=0;

                     for(i=1;i<3;i++)

                     {  

                              { if(a[i][j]>m)

                              {     k=i;

                                  m=a[i][j];

                              }

                         else

                              {  q=i;

                                  n=a[i][j];

                              }

                              }

                              if(m>-n)

                             {

                              a[k][j]=a[k][k];

                              a[k][k]=m;

                              }

                              else

                              {

                              a[q][j]=a[q][q];

                              a[q][q]=n;

                              }

                     }

           }

                           

            for(i=0;i<3;i++)

           {     for(j=0;j<3;j++)

                              printf("%4d",a[i][j]);

                   printf("\n");

           }

}

首先将每列第一个元素付给一个变量m,每列最后一个元素付给变量n,再设两个变量k,q,方便将每列中最大的数的横行下标记录下来,如果是最大的数就赋给k,如果是最小的就赋给q,这里这个最小的数有可能是负数,因此要将它的绝对值与最大的数进行比较了,将其最大者与行对角线元素交换了!然后就会有结果了。

然而最后我知道了数学函数库了

#include <stdio.h>
main()
{        int a[6][6];
int i,j,m=0,t;
for(i=0;i<6;i++)
{     m=0;
      for(j=0;j<6;j++)
 {     if(abs(a[m][j])<abs(a[i][j]))
         m=i;
 }
 t=a[m][j];
 a[m][j]=a[i][j];
 a[i][j]=t;
}
}

才好做多了呀!

0 0