在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;
}
}
才好做多了呀!