数组----C语言上篇---36-43节

174 阅读4分钟

数组

有一维数组和二维数组
具体有哪些呢,且听我娓娓道来

一维数组

这些想必大家都不是想看到的吧:

一维数组是一种数据结构,它由相同数据类型的元素组成,并且这些元素在内存中是连续存储的。每个元素可以通过索引来访问,索引从0开始递增。它们经常用于存储和处理大量的数据

所以直接看代码:

int a[];     \\是的你看懂了吗?
char a[];     \\没看懂没关系,这些都不重要
double a[];    \\框框([])里面的是要放你数组的大小,比如    double a[32];
.......         \\

上面的看懂了我们再看一下数组的遍历 不知道你们看懂没,我自己是懂得

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5}     \\我定义了一个数组  并给他赋值  数组大小为5
    int i;                           \\定义一个变量i,用来遍历数组

    for (i = 0; i < 5; i++) {        \\ 通过for循环遍历数组中的每一个值
        printf("%d ", arr[i]);        \\打印遍历过的每一个值
    }

    return 0;     \\    返回值
}

为了验证最上面的一段干干的文字 我们继续打印一下数组中的每个值的地址 验证一下是否是连续的

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int i;

    for (i = 0; i < 5; i++) {
        printf(" arr[%d]的地址 = %p\n", i, &arr[i]);
    }

    return 0;
}

交给你们验证吧 我是验证过 莫得问题啊!!!!!!

这当中还有一些 赋值上的问题,我在这也浅浅的提一下:
讲的很通俗的例子:给大家讲一下,顺带自己加深一下印象,见怪不怪的写法
这里只写部分代码:


int i;

one:\\第一种方法
         int a[7];
         for(i=0;i<7;i++){
              a[i] = i + 998;
         }
two:\\第二种方法
          int arr[7] = {1, 2, 3, 4, 5,6,7};
thre:\\ ...不要慌张
   int arr[7] = {1, 2, 3, 4};    \\也是对的哦
......
          int arr[7];\\这个也是对的    里面都是0

冒泡排序法(大至小)

#include <stdio.h>
int main()
{
    int i;
    int j;
    int a[] = {34,5,456,22};
    int size;
    int tmp;
    size = sizeof(a)/sizeof(a[0]);
    for(i=0;i<size-1;i++){
        for(j=0;j<size-1-i;j++){
                if(a[j]<a[j+1]){
                    tmp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = tmp;
                }
        }
    }
    for(i=0;i<size;i++){
        printf("%d     ",a[i]);
    }
}

image.png

简单排序法(也叫冒泡排序法)(大至小)

#include <stdio.h>
int main()
{
    int i;
    int j;
    int a[] = {34,5,456,22};
    int size;
    int tmp;
    size = sizeof(a)/sizeof(a[0]);
    for(i=0;i<size-1;i++){
        for(j=0;j<size;j++){
                if(a[j]<a[j+1]){
                    tmp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = tmp;
                }
        }
    }
    for(i=0;i<size;i++){
        printf("%d    ",a[i]);
    }
}

image.png

选择排序法

#include <stdio.h>
int xuanze(int a[],int size)
{
        int min;
        int i;
        int j;
        int tmp;
        
        for (i = 0; i < size-1; i++){
                min = i;
                for (j = i+1; j < size; j++) {
                        if (a[j] < a[min]){
                                min = j;
                        // 交换找到的最小元素和已排序序列的最后一个元素
                        tmp = a[min];
                        a[min] = a[i];
                        a[i] = tmp;
                         }
                }
        }
     
}
int main()
{
        int i;
        int a[]={23,5,768,2,1235};
        int size = sizeof(a) / sizeof(a[0]);
        xuanze(a,size);

           for(i = 0; i < size;i++){
                printf("%d ",a[i]);
        }

}

image.png

二维数组

现在我们讲讲二维数组:
先上废话:二维数组是由多个一维数组组成的数据结构,每个一维数组称为这个二维数组的,而每个元素则被称为该行的。简而言之,二维数组就是一个表格或矩阵,其中的元素可以通过行和列的索引来访问
想必大家不喜欢这种废话

话不多说先上代码:

#include <stdio.h>

int main() {
                // 创建一个 3 行 4 列的二维数组
   int arr[3][4] = {
      {1, 2, 3, 4},
      {5, 6, 7, 8},
      {9, 10, 11, 12}
   };

               // 访问和输出数组中的元素
   printf("数组元素:\n");
   for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 4; j++) {
         printf("%d ", arr[i][j]);
      }
      printf("\n");    \\换行
   }

            // 修改数组中的元素
   arr[1][2] = 100;

            // 再次访问和输出数组中的元素
   printf("修改后的数组元素:\n");
   for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 4; j++) {
         printf("%d ", arr[i][j]);
      }
      printf("\n");      \\换行
   }

   return 0;
}

这里我们输出二维数组用到了for循环的嵌套,一环套一环,“套马的汉子,你威武雄壮.....”
这里不知道大家理解的怎么样了,没理解,是吧,没关系,去找我的老师,“上官社长”,我会 但是我教不会你,这没关系,可以找我老师😁教。

这里还有一些和一维数组一样的见怪不怪的问题哈,不要慌张往上看 ^

二维数组和一维数组有很多相通的地方,大家遇到了前往不要慌

                                这里我也是直接copy我老师HuiChang详细
                                            的一小部分资料

06e70f2fa68df03763db9b9bfff7b68.jpg

这里还有一个非常非常非常重要的知识点

这里的二维数组a[i][j]; i可以不赋值,但是j一定要赋值
这个可不敢忘记哈

最后我把老师给出的题目,在这里给大家做一下,感兴趣的小伙伴可以做一下哦!!

#include<stdio.h>
int main()
{
       int i;
   int j;
   int max;
   int hang;
   int lie;
   int a[5][6] = {
      {1, 2, 3, 4},
      {5,63, 7, 8},
      {9, 10, 311, 12},
      {53, 63, 7888, 548},
      {95,14,311,122,87}
     };                  //这个样子大家千万不要觉得奇怪,没有问题的啊!见怪不怪
      max = a[0][0];
       for(i=0;i<5;i++){
          for(j=0;j<6;j++){
          printf("%d",a[i][j]);
          }
       }//不放心我们先打印一下
       
      for(i=0;i<5;i++){
          for(j=0;j<6;j++){
              if(max < a[i][j]){
                  max = a[i][j];
                    hang = i;
                    lie  = j;
              }
          }
      }
       printf("最大的数是%d,他在第%d行,%d列", max,hang+1,lie+1);
}

image.png

好啦 兄弟们搞起