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

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

项目一 【折腾二维数组】

创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后:

  • 通过键盘输入,使后两列的10个元素获得值;
  • 按行序优先输出数组元素;
  • 将所有元素值乘以3后保存在数组中;
  • 按列序优先输出(输出的第一行是数组中的第一列……,其实输出的就是“转置”);
  • 将数组“倒”着输出(即最后一行最后一列的最先输出,第0行第0列的最后输出);
  • 输出数组中的所有偶数;
  • 输出所有行列下标之和为3的倍数的元素值。

[cpp] view
plain
 copy

print?

  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. //键盘输入后两列10个元素的值
  8. printf("请输入10个整数:\n");
  9. //按行序优先输出
  10. printf("数组中的值为:\n");
  11. //将所有元素值乘以3后保存在数组中
  12. printf("现在将所有元素乘以3倍...";
  13. //按行序优先输出
  14. printf("行序优先输出:\n");
  15. //按列序优先输出(见题目描述)
  16. printf("列序优先输出:\n");
  17. //将数组“倒”着输出(见题目描述)
  18. printf("倒着输出:\n");
  19. //输出数组中的所有偶数
  20. printf("数组中的偶数:\n");
  21. //输出所有行列下标之和为3的倍数的元素值
  22. printf("行列下标之和为3的倍数的元素:\n");
  23. return 0;
  24. }

提示:编程时,可以做一点,调一点。参考的运行界面如图:

代码:

#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;
}

运行结果:

时间: 2024-10-19 19:32:40

第三十二课 二维数组及其定义 【项目1-2】的相关文章

第三十四课 二维数组的存储 【项目1-3】

第三十四课 二维数组的存储 项目一[二维数组当函数参数] 定义一个函数来完成对参数数组中元素的求和工作,函数声明如下: [cpp] view plain copy print? int sum(int array[ ][4],int m,int n);  //该函数完成对array数组中的前m行和n列元素求和 在以下程序的基础上,完成对sum函数的定义. [cpp] view plain copy print? #include <stdio.h> int sum(int array[ ][4

python第三十四课——1.匿名函数的定义和使用

演示匿名函数的定义和使用 # 定义无参有返回值的有名函数: def func(): return True # 定义无参有返回值的匿名函数 f=lambda : True # 调用有名函数执行 print(func()) # 调用匿名函数执行 print(f()) # 定义无参无返回值的有名函数: def func(): print(True) # 定义无参无返回值的匿名函数: f=lambda : print(True) # 调用有名函数执行 func() #调用匿名函数执行 f() 需求:字

&lt;24&gt;【掌握】二维数组指针定义、初始化+

[掌握]二维数组指针定义.初始化 数组指针: 定义一个指针变量,让这个指针变量指向一维数组的元素 二维数组指针 行指针,用来指向二维数组的每一行,存放的是行的首地址 定义格式: 数据类型 (*行指针变量名)[数组第二维的长度]; 二维数组指针的初始化 int a[2][3]; int b[2][2]; float f1[4][4]; //假设我要定义一个指向数组a的一个行指针 // a = &a[0] = &a[0][0] = a[0] int (*p)[3] = a; 二维数组指针的使用

NeHe OpenGL教程 第三十六课:从渲染到纹理

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十六课:从渲染到纹理 放射模糊和渲染到纹理: 如何实现放射状的滤镜效果呢,看上去很难,其实很简单.把渲染得图像作为纹理提取出来,在利用OpenGL本身自带的纹理过滤,就能实现这种效果,不信,你试试. 嗨,我是Dario Corn

NeHe OpenGL教程 第三十五课:播放AVI

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十五课:播放AVI 在OpenGL中播放AVI: 在OpenGL中如何播放AVI呢?利用Windows的API把每一帧作为纹理绑定到OpenGL中,虽然很慢,但它的效果不错.你可以试试. 首先我得说我非常喜欢这一章节.Jonat

2018-08-24 第三十六课

第三十六课 非关系统型数据库-mangodb 目录 二十四 mongodb介绍 二十五 mongodb安装 二十六 连接mongodb 二十七 mongodb用户管理 二十八 mongodb创建集合.数据管理 二十九 php的mongodb扩展 三十 php的mongo扩展 三十一 mongodb副本集介绍 三十二 mongodb副本集搭建 三十三 mongodb副本集测试 三十四 mongodb分片介绍 三十五 mongodb分片搭建 三十六 mongodb分片测试 三十七 mongodb备份

centos DNS服务搭建 第三十节课

centos  DNS服务搭建     第三十节课 上半节课 下半节课 一. DNS原理相关DNS 为Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种服务机制.其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析. DNS使用TCP和UDP, 端口号都是53, 但它主要使用UDP,服务器之间备份使用TCP.全世界只有13台“根”服务器,1个主根服务器放在美国,其他12台为辅根服务器,DN

centos shell编程4【分发系统】 第三十八节课

centos shell编程4[分发系统]  第三十八节课 http://www.cnblogs.com/MYSQLZOUQI/p/4811790.htmlmkpasswd 生成密码的工具,安装 expect包 yum install -y expect 上半节课 下半节课 f

NeHe OpenGL教程 第三十八课:资源文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十八课:资源文件 从资源文件中载入图像: 如何把图像数据保存到*.exe程序中,使用Windows的资源文件吧,它既简单又实用. 欢迎来到NeHe教程第38课.离上节课的写作已经有些时日了,加上写了一整天的code,也许笔头已经