代码练习

#include<stdio.h>

/*
 本程序功能:
 1.通过键盘为二位数组元素赋值,显示二维数组
 2.求出二维数组中最大元素和最小元素的值和对应的数组下标
 3.把二位数组转换为另一个二位数组并显示
 
 
 */

int main ()

{
    int a[2][3],b[3][2]; //定义两个数组
    int max,min;//最大值==最小值
    int h,l,i,j;//控制循环的变量
    int m,z;    
    //通过键盘为数组元素赋值
    for(i=0;i<2;i++)// 0 1 两次循环
    {
        for(j=0;j<3;j++) //0 1 2 三次循环
        {
            printf("a[%d][%d]=",i,j); //
            scanf("%d",&a[i][j]);
        }
    }
    printf("输出二维数组:\n");
    
    //显示刚才用键盘给二位数组的赋的值
    for(i=0;i<2;i++)//外层循环 0 1 控制行
    {
        for(j=0;j<3;j++)//内层循环  0 1 2  控制列
        {
            printf("%d \t",a[i][j]);
        }
        printf("\n");
    }
    //求出数组中最大元素和最小元素的下标
    max=a[0][0];
    min=a[0][0];
    m=0;
    z=0;
    h=0;
    l=0;//如果当前max为最大值就不会进入到if语句中 需要事先记录好它的下标
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            if(max<a[i][j]) //将a[0][0]依次和a数组中元素进行比较 最大值放在max中
            {
                max=a[i][j];
                h=i;
                l=j;
            }
             if (min>a[i][j]) //这里的if 不能和前面的if组成else if 因为那样判断了max就会漏掉min 组成了级联的if else语句 就只能执行其中一条if中的语句 
             {
                min=a[i][j];
                m=i;
                z=j;
             }
        }
    }
    printf("数组中a[%d][%d]最大:%d\n数组中a[%d][%d]最小:%d\n",h,l,max,m,z,min);

    //对数组a进行转换 结果存放在数组b中
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            b[j][i]=a[i][j];
        }
    }

    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            printf("%d\t",b[i][j]);
        }
        printf("\n");
            
    }

    return 0;
}

 总结:程序中牵扯到数组的程序一般都跟循环有很大的关系 因为要对数组进行操作的话 一般是用循环的方式访问每个数组的元素 练的多了 就习惯了 就感觉不复杂了 这道题目的难点在于 数组之间的倒置 我明白了%60左右 剩下的不明白也没关系 常练就好


原文地址:https://www.cnblogs.com/dire/p/4988758.html