码迷,mamicode.com
首页 > 编程语言 > 详细

第三十二课 二维数组及其定义 【项目1-2】

时间:2016-04-12 17:28:22      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:

第三十二课  二维数组及其定义


项目一 【折腾二维数组】
创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后:
  • 通过键盘输入,使后两列的10个元素获得值;
  • 按行序优先输出数组元素;
  • 将所有元素值乘以3后保存在数组中;
  • 按列序优先输出(输出的第一行是数组中的第一列……,其实输出的就是“转置”);
  • 将数组“倒”着输出(即最后一行最后一列的最先输出,第0行第0列的最后输出);
  • 输出数组中的所有偶数;
  • 输出所有行列下标之和为3的倍数的元素值。
  1. #include <stdio.h>  
  2. int main( )  
  3. {  
  4.     int i,j;  
  5.     //创建数组,为数组中的前两列的10个元素赋初值  
  6.     int a[5][4]= {{0,1},{4,5},{8,9},{12,13},{16,17}};  
  7.   
  8.   
  9.     //键盘输入后两列10个元素的值  
  10.     printf("请输入10个整数:\n");  
  11.   
  12.   
  13.     //按行序优先输出  
  14.     printf("数组中的值为:\n");  
  15.   
  16.   
  17.     //将所有元素值乘以3后保存在数组中  
  18.     printf("现在将所有元素乘以3倍...";  
  19.   
  20.   
  21.     //按行序优先输出  
  22.     printf("行序优先输出:\n");  
  23.   
  24.   
  25.     //按列序优先输出(见题目描述)  
  26.     printf("列序优先输出:\n");  
  27.   
  28.   
  29.     //将数组“倒”着输出(见题目描述)  
  30.     printf("倒着输出:\n");  
  31.   
  32.   
  33.     //输出数组中的所有偶数  
  34.     printf("数组中的偶数:\n");  
  35.   
  36.   
  37.     //输出所有行列下标之和为3的倍数的元素值  
  38.     printf("行列下标之和为3的倍数的元素:\n");  
  39.   
  40.   
  41.     return 0;  
  42. }  
    提示:编程时,可以做一点,调一点。参考的运行界面如图:
技术分享


代码:
#include <stdio.h>
int main( )
{
    int i,j;
    int a[5][4] = { {0,1}, {4,5}, {8,9}, {12,13}, {16,17} };

    printf ("请输入10个整数:\n");
    for (i=0;i<5;i++)
    {
        for (j=2;j<4;j++)
        {
            scanf ("%d", &a[i][j]);
        }
    }

    printf ("数组中的值为:\n");
    for (i=0;i<5;i++)
    {
        for (j=0;j<4;j++)
        {
            printf ("%d\t", a[i][j]);
        }
        printf ("\n");
    }

    printf ("现在将所有元素乘以3倍...");
    for (i=0;i<5;i++)
    {
        for (j=0;j<4;j++)
        {
            a[i][j] *= 3;
        }
    }
    printf ("完成\n");

    printf ("行序优先输出:\n");
    for (i=0;i<5;i++)
    {
        for (j=0;j<4;j++)
        {
            printf ("%d\t", a[i][j]);
        }
        printf ("\n");
    }

    printf ("列序优先输出:\n");
    for (i=0;i<4;i++)
    {
        for (j=0;j<5;j++)
        {
            printf("%d\t", a[j][i]);
        }
        printf ("\n");
    }

    printf ("倒着输出:\n");
    for (i=4;i>=0;i--)
    {
        for (j=3;j>=0;j--)
        {
            printf ("%d\t", a[i][j]);
        }
        printf ("\n");
    }

    printf ("数组中的偶数:\n");
    for (i=0;i<5;i++)
    {
        for (j=0;j<4;j++)
        {
            if(0 == a[i][j]%2)
            {
                printf("a[%d][%d]=%d\n", i, j, a[i][j]);
            }
        }
    }
    printf ("\n");

    printf ("行列下标之和为3的倍数的元素:\n");
    for (i=0;i<5;i++)
    {
        for (j=0;j<4;j++)
        {
            if (0 == (i+j)%3)
                printf ("a[%d][%d]=%d\n", i, j, a[i][j]);
        }
    }
    printf ("\n");

    return 0;
}
运行结果:
技术分享
技术分享





项目二 【矩阵运算】
   在数学中,一个矩阵由若干行和若干列数据组成,可以直接存储为一个二维数组。
(1)矩阵相加
  两个矩阵相加,要求其行、列数均相等。运算规则为:一个n行m列的矩阵A加上另一个n行m列的矩阵,得到的结果是一个n行m列的矩阵C,C中的第i行第j列位置上的数等于A和B矩阵第i行第j列上数相加的和。例如:
技术分享
  请编程序,实现两个矩阵的加法。

(2)矩阵相乘
  一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和。
  例如,下面的算式表示一个2行3列的矩阵乘以3行4列的矩阵,其结果是一个2行4列的矩阵:
技术分享
  按二维数组习惯,从第0行第0列开始计数,结果中第1行第2列的元素是9,是通过左矩阵中的第1行(2  0  3),乘以右矩阵中的第2列(3  2  1),对应数相乘并加起来,就得到了9,即2×3-0×2+3×1=9。请将这个矩阵乘手工计算一下,规则不复杂。
  请编程序,实现两个矩阵的乘法。


(1)代码:
#include<stdio.h>
int main()
{
    int a[4][3]={{1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}};
    int b[4][3]={{10,20,30}, {40,50,60}, {70,80,90}, {100,110,120}};
    int c[4][3];
    int i=0,j=0;
    for (i=0;i<4;i++)
    {
        for (j=0;j<3;j++)
        {
            c[i][j] = a[i][j] + b[i][j];
            printf ("%d\t", c[i][j]);
        }
        printf ("\n");
    }
    return 0;
}
运行结果:
技术分享


(2)代码:
#include<stdio.h>
int main()
{
    int a[2][3]={{1,1,0}, {2,0,3}};
    int b[3][4]={{0,2,3,1}, {1,0,2,2}, {2,1,1,1}};
    int c[2][4];
    int i=0, j=0, k=0, t=0;
    for (i=0;i<2;i++)
    {
        for (j=0;j<4;j++)      // c数组的每个数
        {
            t = 0;            // 在这里初始化,不然和会一直累加
            for (k=0;k<3;k++)             // 一个公用的数
                t += a[i][k] * b[k][j];   //计算乘积和
            c[i][j] = t;                  //给予c数组的每个数
        }
    }
    // 输出c数组
    for (i=0;i<2;i++)
    {
        for (j=0;j<4;j++)
        {
            printf ("%d\t", c[i][j]);
        }
        printf ("\n");
    }
    return 0;
}
运行结果:
技术分享


















第三十二课 二维数组及其定义 【项目1-2】

标签:

原文地址:http://blog.csdn.net/benjavan4641/article/details/51131879

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!