1.求二维数组中的第二大值,以及行标列标
//代码
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a[3][3] = {12,35,19,100,17,78,56,54,36};
int max1 = a[0][0],h1=0,l1=0;
int max2 = a[0][0],h2=0,l2=0;
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
//求最大的两个数,a[i][j]至少比第二个大
if(a[i][j]>max2)
{
if(a[i][j]>max1) //当a[i][j]最大时,把原最大给第二大
{
max2 = max1;
h2 = h1;
l2 = l1;
max1 = a[i][j];
h1 = i;
l1= j;
}
else //当a[i][j]比max小时,把其值给第二大
{
max2 = a[i][j];
h2 = i;
l2 = j;
}
}
}
}
printf("最大值为%d,位于第%d行%d列\n",max1,h1,l1);
printf("第二大值为%d,位于第%d行%d列\n",max2,h2,l2);
return 0;
}
//运行结果
最大值为100,位于第1行0列
第二大值为78,位于第1行2列
2.定义一个二维数组int arr[3][3]={{34,97,6},{90,81,7},{13,5,79}};对其进行进行冒泡排序
//代码
#include<stdio.h>
int main(int argc, const char *argv[])
{
int arr1[3][3] = {{34,97,6},{90,91,7},{13,5,79}};
int arr2[9] = {0};
int i,j,temp;
//将二维数组转换成一维数组
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
arr2[3*i+j] = arr1[i][j];
}
//将一维数组冒泡排序
for(i=0;i<8;i++)
for(j=0;j<8-i;j++)
{
if(arr2[j]>arr2[j+1])
{
temp = arr2[j];
arr2[j] = arr2[j+1];
arr2[j+1] = temp;
}
}
//将一维数组转换成二维数组
for(i=0;i<3;i++)
for(j=0;j<3;j++)
arr1[i][j] = arr2[i*3+j];
//打印结果
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",arr1[i][j]);
putchar('\n');
}
return 0;
}
//运行结果
zzy@zzy-vm:~/c_program/day6$ ./test8
5 6 7
13 34 79
90 91 97