#include<stdio.h>
int main()
{
int a[100][100];
int m,n;
int i,j;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a[j][i]);
}
printf("\n");
}
}
//一维数组声明的时候a[4]表示这个数组
由四个元素大小组成,而引用数组元素的时候下标是从一开始引用的
//所以在循环录入或输出时都从零开始
//录入输出数组都用for循环,不能用变量定义数组大小,即使变量的值已知
//二维数组声明的时候列数不能省略,也就是第二个下标,应用数组元素时注意对应的行列下标从0开始
//录入的时候遵循先把第一个行数x填满,再填下一个行数,用两次嵌套循环输入输出
/*
一维数组二维数组传参都一样,传数组名,结果是什么由主函数决定,按值传递,函数内部改变即改变
三种基本应用:
1.找到数组内部元素最值
假设max=a[0];
for循环从一开始
若新的a[i]>max
则执行max=a[i]
2.冒泡法排序
嵌套循环,总共比较的次数时n-1次
外层确定比较的次数,以及参与比较的第一个数
内层从外层后面的一个数开始比较
交换数值
内层循环结束之后,再次进入外层循环寻找下一个较大的数据
3.选择法排序
外层循环和冒泡法排序一致
for(i=0;i<n-1;i++)
{
k=i;放在第一层循环内部,表明每次外层循环都从i=0开始
for(j=i+1;j<n;j++)
{
if(a[j]>a[i])
{
k=j;记录下标位置
}
}
if(k!=i)
{
交换第一个属于最大数的位置;
}
}
查找:
顺序查找,如果找到,返回相应值(角标或者具体数据)
引用数据或者是输出数组的时候,注意把行还是列放在外层循环
比如说此题:
可以举例a[3][4]
1 2 3 4
5 6 7 8
9 1 3 4
输入的时候先存行所以外层为行,内层存列数数据
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
…scanf("…",&a[i][j]);
}
}
横向求和或者是输入输出的时候都是这样
如果要竖向输入输出求和时
外层循环就改变(把数组竖起来看)
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
printf("…",a[j][i])(先输出谁的就把谁放到一维数组里面去),画图解比较容易搞清楚
}
}
*/
来源:CSDN
作者:zhengrui23751
链接:https://blog.csdn.net/zhengrui23751/article/details/103569263