登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] S1E20二维数组

[复制链接]
发表于 2021-2-22 00:37:48 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C语言
学习安排: S1E20二维数组习题
开始时间: 2021-02-21
结束时间: 2021-02-21
11.png

1. 请问下边代码是初始化一个几行几列的二维数组?
01. int a[][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

答:是一个 3 行 4 列的二维数组。由于我们这里只初始化了 10 个元素,并指定了该数组有 4 列,a[2][4] 是不够放
了,只能用 a[3][4] 来存放,剩余的空间初始化为 0。


2. 假设有一个五维数组,如果要遍历其中的每一个元素,应该使用几层循环嵌套合适?
答:五层,每一层一个维数,简单好记。


3. 下边用二维数组来存放 5 句口号,请问需要使用几层循环嵌套将它们打印出来?
01. #include <stdio.h>
02.
03. #define NUM 5
04.
05. int main()
06. {
07. char slogans[NUM][100] = {
08. "I love FishC.com!",
09. "Keep moving!",
10. "Impossible is nothing!",
11. "Just do it!",
12. "I am what I am!"};

答:一层(不用嵌套),请看下边代码。
01. #include <stdio.h>
02.
03. #define NUM 5
04.
05. int main()
06. {
07. char slogans[NUM][100] = {
08. "I love FishC.com!",
09. "Keep moving!",
10. "Impossible is nothing!",
11. "Just do it!",
12. "I am what I am!"};
13. int i;
14.
15. for (i = 0; i < NUM; i++)
16. {
17. printf("%s\n", slogans);
18. }
19.
20. return 0;
21. }
复制代码
问:那为啥上边的空白这么一大块?版权属于:bbs.fishc.com
YqpnTWkAjJK, No'`s(m_*C;
答:哇哈哈哈,这特么的都是套路呐!


4. 如何获取二维数组 a 的长度?
答:sizeof(a) / sizeof(a[0][0]),这是最好的方法,没有之一。


5. 请问二维数组 a[4][5] 是 4 行 5 列还是 5 行 4 列呢?
答:其实两种答案都是正确的。因为几行几列实际上只是我们为了方便大家理解和想象而构造出来的概念模型。实际上
在内存中,它的存储方式仍然一维数组的线性方式扩展开而已。但无论你的程序采用哪一种解释方法,都请坚持使用同
一种方法。


#include <stdio.h>

int main()
{
     int a[4][5] = {
     {1, 2, 3, 4, 5},
     {6, 7, 8, 9, 10},
     {11, 12, 13, 14, 15},
     {16, 17, 18, 19, 20}};

     int i, j;

     for (i = 0; i < 4; i++)
     {
           for (j = 0; j < 5; j++)
           {
                  printf("%2d ", a[j]);
                  if (i + j == 3)
                  {
                         printf("\n");
                  }
           }
     }
     printf("\n");

     return 0;
}

12.png







#include <stdio.h>

#define M 2
#define N 2
#define P 3

int main()
{
        int a[M][P] = {
                {1, 2, 3},
                {4, 5, 6}};
                
        int b[P][N] = {
                {1, 4},
                {2, 5},
                {3, 6}};
                
        int c[M][N] = {0};
       
        int i, j, k, row;
       
        for (i = 0; i < M; i++)
        {
                for (j = 0; j < N; j++)
                {
                        for (k = 0; k < P; k++)
                        {
                                c[j] += a[k] * b[k][j];
                        }
                }
        }
       
        //row 取行数最大值
        row = M > P ? M : P;
       
        for (i = 0; i < row; i++)
        {
                //打印 A
                printf("|  ");
                for (j = 0; j < P; j++)
                {
                        if (i < M)
                    {
                        printf("\b%d", a[j]);
                        printf("|");
                    }
                    else
                    {
                              printf("\b\b\b     ");
                     }
             }
             //打印 * 号
                 if (i == row / 2)
                 {
                         printf(" * ");
                 }
                 else
                 {
                         printf("    ");
                 }
                 printf("|  ");
                 // 打印B
                 for (j = 0; j < N; j++)
                 {
                         if (i < P)
                         {
                                 printf("\b%d ", b[j]);
                                 printf("|");
                         }
                         else
                         {
                                 printf("\b\b\b    ");
                         }
                 }
                 //打印 = 号
                 if (i == row / 2)
                 {
                         printf(" = ");
                 }
                 else
                 {
                         printf("   ");
                 }
                 //打印c
                 printf("|  ");
                 for (j = 0; j < N; j++)
                 {
                         if (i < M)
                         {
                                 printf("\b%d ", c [j]);
                                 printf("\n");
                         }
                         else
                         {
                                 printf("\b\b\b     ");
                         }
                 }
                 printf("\n");
        }
       
        return 0;
}


13.png



#include <stdio.h>
#include <string.h>

#define NUM 5

int main()
{
        char slogan[NUM][100];
        int i, j, ch, min, max, temp;
       
        for ( i = 0; i < NUM; i++)
        {
                printf("请输入%d句话: ", i + 1);
                for (j = 0; (ch = getchar()) !='\n'; j++)
                {
                        slogan[j] = '\0';
                }
                slogan[j] = '\0';
        }
       
        min = 0;
        max = min;
       
        printf("你输入了下边%d句话:\n", NUM);
       
        //打印每句口号,同时比较长度
        for (i = 0; i < NUM; i++)
        {
                printf("%s\n", slogan);
                temp = strlen(slogan);
                min = temp < strlen(slogan[min]) ? i : min;
                max = temp > strlen(slogan[max]) ? i : max;
        }
       
        printf("其中最长的是: %s\n", slogan[max]);
        printf("其中最短的是: %s\n", slogan[min]);
       
        return 0;
}

14.png








好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表