2023-04-22 学习记录--C/C++-数组

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、定义一维数组 ⭐️

(一)、初识

格式 🌈:数组元素类型 数组名[数组元素个数];
example1:🎈

  • 需求 🍉:定义一个包含4整数的数组a
  • 代码 🍉:int a[4];
  • 收获 🍉:
    • 1、数组的下标从0开始,所以通过a[0]a[1]a[2]a[3]来访问数组中的每个整数;
    • 2、赋值和计算
      a[0]=10; // 将10赋值给数组的第一个元素
      a[1]=20; // 将20赋值给数组的第二个元素
      int sum = a[0]+a[1]; // 计算数组中前两个元素的和

example2:🎈

  • 需求 🍉:定义一个含2、4、6、8、10这五位数的数组arr
  • 代码 🍉:int arr[5]={2,4,6,8,10};
  • 注意 🍉:
    • 1、各数组元素需用大括号包裹;
    • 2、各数组元素之间用逗号隔开。

(二)、举例

在这里插入图片描述

需求 🎀:对10个数组元素依次赋值为0、1、2、3、4、5、6、7、8、9,并按倒序输出。

/**
 * 需求:对10个数组元素依次赋值为0、1、2、3、4、5、6、7、8、9,并按倒序输出。
 */

#include <stdio.h>
int main()
{
    /** 定义一个一维数组arr */
    int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    /** for语句 */
    for (int i = 9; i >= 0; i--)
        printf("%d\t", arr[i]); // for语句里只有一行代码时,其大括号可以省略
    printf("\n");               // 最后一个输出语句,一定要记得加上换行符(\n)
    /** 程序正常运行结束 */
    return 0;
}

在这里插入图片描述

二、定义二维数组 ⭐️

(一)、初识

格式 🌈:数组元素类型 数组名[数组行数][数组列数];
写法 ✍🏻:比如定义一个含 2行3列 整数的数组a

  • 写法一【更推荐】、int a[2][3]={{1,2,3},{4,5,6}};
  • 写法二、
    • int a[2][3];
      a[0][0]=1;
      a[0][1]=2;
      a[0][2]=3;
      a[1][0]=4;
      a[1][1]=5;
      a[1][2]=6;
  • 写法三、int a[2][3]={1,2,3,4,5,6};
  • 结果:👇🏻
    • 1 2 3
      4 5 6

(二)、举例

在这里插入图片描述

example1 🎈

在这里插入图片描述

#include <stdio.h>
int main()
{
    /** 使用变量/常量前必须先定义 */
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 定义一个2行3列的二维数组a
    int b[3][2], i, j;                    // 定义一个3行2列的二维数组b
    /** for语句 */
    for (i = 0; i < 2; i++)     // 因为数组a的行数是2,所以第一层循环2次
        for (j = 0; j < 3; j++) // 因为数组a的列数是3,所以第二层循环3次
            b[j][i] = a[i][j];  // 将a[i][j]的值赋值给b[j][i]
    /** 输出结果 */
    printf("数组b为:\n");
    for (j = 0; j < 3; j++) // 因为数组b的行数是3,所以第一层循环3次
    {
        for (i = 0; i < 2; i++)      // 因为数组b的列数是2,所以第二层循环2次
            printf("%d\t", b[j][i]); // for语句里只有一行代码时,其大括号可以省略
        printf("\n");                // 每一行内容后加个换行符(\n)
    }
    /** 程序正常运行结束 */
    return 0;
}

在这里插入图片描述

example2 🎈

在这里插入图片描述

#include <stdio.h>
int main()
{
    /** 使用变量/常量前必须先定义 */
    int a[3][3] = {{1, 2, 3}, {9,8,7}, {-10,10,-5}}; // 定义一个3行3列的二维数组a
    int i,j,max;
    /** 赋值 */
    max = a[0][0]; // 将数组a的第一个元素赋值给max的初始值
    /** for语句 */
    for (i = 0; i < 3; i++)     // 因为数组a的行数是3,所以第一层循环3次
        for (j = 0; j < 3; j++) // 因为数组a的列数是3,所以第二层循环3次
           if(a[i][j]>max)
           max=a[i][j];
    /** 输出结果 */
    printf("最大元素的值为:%d\n",max); // 最后一个输出语句,一定要记得加上换行符(\n)
    /** 程序正常运行结束 */
    return 0;
}

在这里插入图片描述

三、定义字符数组 ⭐️

1、定义格式同前面,只是里面的数组元素是字符
2、比如:【注意:字符用单引号

  • 一维字符数组char c[3] = ['H',' ','i']; // H i
  • 二维字符数组char c[3][3]={{'A',' ','B'},{'C',' ','D'},{'E',' ','F'}};
    • A B
      C D
      E F

四、输出字符数组 ⭐️

方法一、挨个输出【不推荐】🙅🏻‍♀️

格式 🌈:printf("%c",字符);
缺点 💥:比较墨迹,需要搭配一个或多个for语句,所以不推荐。

example:🎈

需求:定义一个字符串"spare no pains",然后输出这个字符串。

/**
 * 需求:定义一个字符串"spare no pains",然后输出这个字符串。
 */

#include <stdio.h>
int main()
{
    /** 使用变量/常量前必须先定义 */
    char c[14] = {'s', 'p', 'a', 'r', 'e', ' ', 'n', 'o', ' ', 'p', 'a', 'i', 'n', 's'};
    int i;
    /** for语句 */
    for (i = 0; i < 14; i++)
        printf("%c", c[i]);
    printf("\n"); // 最后一个输出语句,一定要记得加上换行符(\n)
    /** 程序正常运行结束 */
    return 0;
}

在这里插入图片描述

方法二、整体输出【推荐】

格式 🌈:printf("%s",数组名);puts(数组名);

example:🎈

需求:定义一个字符串"spare no pains",然后输出这个字符串。

/**
 * 定义一个字符串"spare no pains",然后输出这个字符串。
 */

#include <stdio.h>
int main()
{
    /** 使用变量/常量前必须先定义 */
    char c[14] = {'s', 'p', 'a', 'r', 'e', ' ', 'n', 'o', ' ', 'p', 'a', 'i', 'n', 's'};
    
    /** 方法二、整体输出 */
    printf("%s\n",c);
    // 或者
    puts(c);

    /** 程序正常运行结束 */
    return 0;
}

在这里插入图片描述

补充 👁

1、printf里,%c是输出字符串里的某一个字符s%是输出整个字符串
2、无论方法一还是方法二,遇到字符'\0',该字符及其后面的内容都不会被输出来,比如:👇🏻
在这里插入图片描述
3、好习惯:定义字符数组时,最好在原字符上多加一位字符'\0',目的是避免大项目中重复定义数组后未发现(虽然代码里若定义了同数组名,会有错误提示)。

五、输入字符数组 ⭐️

方法一、挨个单词输入【不推荐】🙅🏻‍♀️

格式 🌈:scanf("%s%s...",数组名1,数组名2,...);
知识点 📚:scanf里,当输入的是字符串时,其前不用加&符号。

方法二、gets整句输入【不推荐】🙅🏻‍♀️

格式 🌈:gets(数组名);
缺点 💥:使用时,会出现 warning: this program uses gets(), which is unsafe.

example:🎈

需求:输入一行由空格和单词组成的字符(字符数在80以内),请统计有多少单词。

/**
 * 需求:输入一行由空格和单词组成的字符(字符数在80以内),请统计有多少单词。
 */

#include <stdio.h>
int main()
{
    /** 使用变量/常量前必须先定义 */
    char c[81]; // 定义一个长度为81的字符型数组(因为最后最好加一个'\0')
    int i, num = 1;
    /** 引导用户输入 */
    printf("请输入一行由空格和单词组成的字符(字符数在80以内):\n");
    gets(c); // 数组c通过用户输入得到
    /** 逻辑处理 */
    if (c[0] == ' ')
        num = 0; // 第一位为空格,单词数为0
    for (i = 0; c[i] != '\0'; i++)
        if (c[i] == ' ' && c[i + 1] != ' ' && c[i + 1] != '\0')
            num++; // 单词数加1
    /** 输出结果 */
    printf("有%d个单词\n", num);
    /** 程序正常运行结束 */
    return 0;
}

在这里插入图片描述

方法三、fgets整句输入【推荐】👂🏻

格式 🌈:fgets(数组名, sizeof(数组名), stdin);

example:🎈

需求:输入一行由空格和单词组成的字符(字符数在80以内),请统计有多少单词。

/**
 * 需求:输入一行由空格和单词组成的字符(字符数在80以内),请统计有多少单词。
 */

#include <stdio.h>
int main()
{
    /** 使用变量/常量前必须先定义 */
    char strArr[81]; // 定义一个最大长度为80, 末尾是'\0'的字符数组来存储字符串(因为最后最好加一个'\0')
    int i, num = 1;
    /** 引导用户输入 */
    printf("请输入一行由空格和单词组成的字符(字符数在80以内):\n");
    fgets(strArr, sizeof(strArr), stdin); // 用户输入:从输入流stdin即输入缓冲区中读取sizeof(strArr)个字符到字符数组strArr中
    /** 逻辑处理 */
    if (strArr[0] == ' ')
        num = 0; // 第一位为空格,单词数为0
    for (i = 0; strArr[i] != '\0'; i++)
        if (strArr[i] == ' ' && strArr[i + 1] != ' ' && strArr[i + 1] != '\0')
            num++; // 单词数加1
    /** 输出结果 */
    printf("有%d个单词\n", num);
    /** 程序正常运行结束 */
    return 0;
}

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呀小萝卜儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值