数组

北城以北 提交于 2019-12-17 02:17:36
#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])(先输出谁的就把谁放到一维数组里面去),画图解比较容易搞清楚
}
}
*/

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!