精华内容
下载资源
问答
  • C语言二维字符数组输入 万次阅读 多人点赞
    2018-11-22 22:32:02

    标题 C语言字符数组的输入输出

    定义一个字符二维数组,输入行数n,与列数m

    #include <stdio.h>
    #include <math.h>
    int main()
    {
     int n,m,i,j;
     scanf("%d %d",&n,&m);
     char a[n][m];
     for(i=0;i<n;i++)
     {
     scanf("%s",a[i]);
     }
     for(i=0;i<n;i++)
     {
     printf("%s\n",a[i]);
     }
     return 0;
     }
    

    运行结果:在里插入图片描述

    可以看出来第一行把后面的数组元素都输出了,第二行也是
    问题在于,printf("%s",a[i])输出时,是根据’\0’来进行字符串输出的结束的。而输入时,由于列数只有3,所以第一行的元素实际是XXX,而不是XXX’\0’,所以字符串的输出没有终止。

    改正方法:
    将列数+1即可,scanf("%s",a[i])就能在每一行最后一列加上’\0’.

    char a[n][m+1];
    

    还有这里a[i]指的是二维数组每一行第一个元素的地址(我的理解。。)

    更多相关内容
  • C语言总结第七章、数组一维数组一维数组的定义一维数组的引用一维数组的初始化程序举例二维数组及多维数组二维数组的定义二维数组元素的引用二维数组元素的初始化程序举例字符数组和字符串字符数组字符串第七章、...

    C语言总结

    第七章、数组

    一维数组

    一维数组的定义

    一维数组的引用

    一维数组的初始化

    程序举例

    二维数组及多维数组

    二维数组的定义

    二维数组元素的引用

    二维数组元素的初始化

    程序举例

    字符数组和字符串

    字符数组

    字符串

    第七章、数组

    数组是构造数据类型之一

    数组: 有序数据的集合,用数组名标识

    元素: 属同一数据类型,用数组名和下标确定

    一维数组

    一维数组的定义

    定义方式:

    55225c756dcf40110599f6deaa161542.png

    例: int a[6]

    6351edc51b4f14fa86f60d60c3c2f8f9.png

    一维数组的引用

    1、数组必须先定义,后使用。

    2、只能逐个引用数组元素,不能一次引用整个数组。

    3、数组元素表示形式: 数组名[下标] ,下标可以是常量或整型表达式 。

    一维数组的初始化

    初始化方式:

    eaecd783566e4f227a7883012b39fa5a.png

    说明:

    1、数组不初始化,其元素值为随机数。

    2、对static数组元素不赋初值,系统会自动赋以0值。

    5f44e9f3a9df2f519d36c6ea7377c816.png

    3、只给部分数组元素赋初值。

    ea97d8aca4987542a8a04804529175c7.png

    4、当全部数组元素赋初值时,可不指定数组长度。

    acc7b0b296a7c6a1100a9bad82828a85.png

    程序举例

    例1: 读10个整数存入数组,找出其中最大值和最小值

    62a5c43b9d45a11e7996d2d6794f31fb.png

    /*示例1*/

    #include

    #define SIZE 10

    main()

    { int x[SIZE],i,max,min;

    printf("Enter 10 integers:\n");

    for(i=0;i

    { printf("%d:",i+1);

    scanf("%d",&x[i]);

    }

    max=min=x[0];

    for(i=1;i

    { if(max

    if(min>x[i]) min=x[i];

    }

    printf("Maximum value is %d\n",max);

    printf("Minimum value is %d\n",min);

    }

    例2: 用数组求Fibonacci数列前20个数

    b28a6bce5bb9eaa778c0c5751e53c447.png

    /*示例2*/

    #include

    main()

    { int i;

    int f[20]={1,1};

    for(i=2;i<20;i++)

    f[i]=f[i-2]+f[i-1];

    for(i=0;i<20;i++)

    { if(i%5==0) printf("\n");

    printf("%12d",f[i]);

    }

    }

    例3: 用冒泡法对10个数排序

    c458ee46813d44163377e2537e63607d.png

    5877fd536775d05a85a7c15ea793d53c.png

    /*示例3*/

    #include

    main()

    { int a[11],i,j,t;

    printf("Input 10 numbers:\n");

    for(i=1;i<11;i++)

    scanf("%d",&a[i]);

    printf("\n");

    for(j=1;j<=9;j++)

    for(i=1;i<=10-j;i++)

    if(a[i]>a[i+1])

    {t=a[i]; a[i]=a[i+1]; a[i+1]=t;}

    printf("The sorted numbers:\n");

    for(i=1;i<11;i++)

    printf("%d ",a[i]);

    }

    例4: 用简单选择法对10个数排序

    053282b1da13f6f41a5b189b9206d250.png

    f84e7b6a1e15010142d0d044ca1b64bb.png

    /*示例4*/

    #include

    main()

    { int a[11],i,j,k,x;

    printf("Input 10 numbers:\n");

    for(i=1;i<11;i++)

    scanf("%d",&a[i]);

    printf("\n");

    for(i=1;i<10;i++)

    { k=i;

    for(j=i+1;j<=10;j++)

    if(a[j]

    if(i!=k)

    { x=a[i]; a[i]=a[k]; a[k]=x;}

    }

    printf("The sorted numbers:\n");

    for(i=1;i<11;i++)

    printf("%d ",a[i]);

    }

    二维数组及多维数组

    二维数组的定义

    定义方式:

    40f17436bd445c6021b68ae48d165f3c.png

    e9a153efd549e6c56a39071317225822.png

    数组元素的存放顺序

    1、原因: 内存是一维的

    2、二维数组: 按行序优先

    3、多维数组: 最右下标变化最快

    1a253398cda0853e6337b08e6ea06de1.png

    数组a[m][n],m行n列,共m*n个元素

    d02fc83e3697ee2994e33c71672dea83.png

    这些元素占用m*n个单元,每个单元的大小取决于

    元素的类型。

    任意元素a[i][j]在数组中的位置计算公式为:

    i×n+j (从0开始)

    a——数组的起始地址;a[0]——0行0列元素的地址。

    二维数组元素的引用

    形式: 数组名[下标][下标]

    二维数组元素的初始化

    1、分行初始化

    2、按元素排列顺序初始化

    程序举例

    例1:将二维数组行列元素互换,存到另一个数组中

    d157c0d32894e5dcd2e791fb9037d824.png

    /*示例1*/

    #include

    main()

    { int a[2][3]={{1,2,3},{4,5,6}};

    int b[3][2],i,j;

    printf("array a:\n");

    for(i=0;i<=1;i++)

    { for(j=0;j<=2;j++)

    { printf("%5d",a[i][j]);

    b[j][i]=a[i][j];

    }

    printf("\n");

    }

    printf("array b:\n");

    for(i=0;i<=2;i++)

    { for(j=0;j<=1;j++)

    printf("%5d",b[i][j]);

    printf("\n");

    }

    }

    例2:求二维数组中最大元素值及其行列号

    73aec5ca81f6434dce16be37b5933b31.png

    /*示例2*/

    #include

    main()

    { int a[3][4]={{1,2,3,4},

    {9,8,7,6},

    {-10,10,-5,2}};

    int i,j,row=0,colum=0,max;

    max=a[0][0];

    for(i=0;i<=2;i++)

    for(j=0;j<=3;j++)

    if(a[i][j]>max)

    { max=a[i][j];

    row=i;

    colum=j;

    }

    printf("max=%d,row=%d,\colum=%d\n",max,row,colum);

    }

    例3:分别求n阶方阵两条对角线上的元素之和

    /*示例3*/

    #define N 3

    main()

    { int i,j,a[N][N];

    int sum1=0,sum2=0;

    for(i=0;i

    for(j=0;j

    scanf(“%d”,&a[i][j]);

    for(i=0;i

    for(j=0;j

    if(i==j) sum1+=a[i][j];

    for(i=0;i

    for(j=N-1;j>=0;j--)

    if((i+j)==N-1) sum2+=a[i][j];

    printf(“sum1=%d,sum2=%d\n”,sum1,sum2);

    }

    字符数组和字符串

    字符数组

    定义 : 每个元素存一个字符,主要用来对字符串操作。

    字符数组的初始化:

    1、逐个字符赋值

    2、用字符串常量

    字符数组的引用:

    a7d8e085b3df7b3fe2679bafdc8fc6cc.png

    846b51ea26c7a98231e1db0906da92ad.png

    43cf377479df4c11e5ceefba462ca6e9.png

    253a6e56e330a6e395ffab430b729b22.png

    字符串

    字符串及其结束标志

    (1)、无字符串变量,用字符数组处理字符串。

    (2)、字符串结束标志:‘\0’。

    c2f4fa2c889f611101f06d091603115a.png

    字符串的输入输出

    输入:

    用scanf函数

    (1).输入单个字符:%c 需用循环语句

    (2).输入字符串:%s scanf(“%s”,str);

    用gets函数:gets(str);

    输出:

    用printf函数

    (1).输出单个字符:%c 需用循环语句

    (2).输出字符串:%s printf(“%s”,str);

    用puts函数:puts(str);

    69bab6014a4abc35d4fad816ec184790.png

    常用的字符串处理函数: 加粗样式包含在头文件 string.h

    字符串输出函数puts

    格式: puts(字符数组)

    功能: 向显示器输出字符串(输出完,换行)

    说明: 字符数组必须以‘\0’结束

    字符串输入函数gets

    格式: gets(字符数组)

    功能: 从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’

    说明: 输入串长度应小于字符数组维数

    字符串连接函数strcat

    格式: strcat(字符数组1,字符数组2)

    功能: 把字符数组2连到字符数组1后面

    返值: 返回字符数组1的首地址

    说明:

    1、字符数组1必须足够大

    2、连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消, 新串最后加‘\0’

    字符串拷贝函数strcpy

    格式: strcpy(字符数组1,字符串2)

    功能: 将字符串2,拷贝到字符数组1中去

    返值: 返回字符数组1的首地址

    说明:

    1、字符数组1必须足够大

    2、拷贝时‘\0’一同拷贝

    3、不能使用赋值语句为一个字符数组赋值

    1af5167506404a9065559a4d12e6834e.png

    字符串比较函数strcmp

    格式: strcmp(字符串1,字符串2)

    功能: 比较两个字符串

    比较规则: 对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止

    返值: 返回int型整数,

    a. 若字符串1< 字符串2, 返回负整数

    b. 若字符串1> 字符串2, 返回正整数

    c. 若字符串1== 字符串2, 返回零

    说明: 字符串比较不能用“==”,必须用strcmp

    字符串比较函数strcmp

    字符串长度函数strlen

    格式:strlen(字符数组)

    功能:计算字符串长度

    返值:返回字符串实际长度,不包括‘\0’在内

    d4a16a745c5fd04473c8418414738937.png

    展开全文
  • int n=3; int a[n][n]; for(int i=0;i;i++) for(int j=0;j;j++) scanf("%c",&a[i][j]); for(int i=0;i;i++) for(int j=0;... 这些代码不能正确的对二维数组进行输出跟输出 输入 asd asd asd 输出 asd asd
  • c-一维字符数组

    千次阅读 2018-12-17 11:14:36
    一维字符数组的定义格式为: char 数组名[数组大小]; 例如: char c[10]; 该语句定义了一个一维字符数组 c,大小为 10,即占 10 个字符变量空间,最大可存储长度为 9 的字符串(第 10 个字符为 '0')。由于...

    一维字符数组的定义及初始化

    一维字符数组的定义格式为:

    char 数组名[数组大小];

    例如:

     
    1. char c[10];

    该语句定义了一个一维字符数组 c,大小为 10,即占 10 个字符变量空间,最大可存储长度为 9 的字符串(第 10 个字符为 '0')。由于没有显式给每个字符变量赋值,故每个字符变量为随机值。

    可以采用单个字符逐个赋值的方式初始化,也可以使用字符串初始化的方式。

    采用逐个字符赋值的方式

    1) 当字符个数少于数组空间大小时,例如:

     
    1. char c[8] = {'h','e','l','l','o',};//始值个数5小于数组空间个数8

    该语句定义了含 8 个字符变量的一维字符数组,前 5 个字符变量分别显式初始化为 'h','e','l','l','o' 等 5 个字符,后 3 个字符变量为空字符 '\0'。其存储形式如下。



    当字符数组中含有字符串结束字符 '\0' 时,可以使用 printf 函数及格式控制符 %s,输出该字符数组中的字符串,如下所示。

     
    1. printf ("%s”,c); //数组名 c 为首字符 'h' 的地址或者为 &c[0]

    注意:使用 printf 函数及格式控制符 %s,输出一个字符串时,输出列表中一定为某个字符的地址,且从该字符开始的串一定有结束标志 '\0'。该语句的功能是:从输出列表中的该地址开始,到第一次遇到 '\0' 为止,这之间的字符全部输出。

    通常一维数组初始化时,其第一维大小可以省略,例如:

     
    1. char c[]={'h','e','l','l','o'};

    对应的数组存储形式如下所示。



    由于该数组中不存在 '\0' 字符,故不能使用 printf("%s",c); 输出。

     
    1. char c[8] = {'h','e','l','l','o'};

    不等价于

     
    1. char c[]={'h','e','l','l','o'};


    2) 当字符个数等于数组空间大小时,例如:

     
    1. char c[5]={'h','e','l','l','o'};//初值个数5等于数组大小5

    执行该初始化语句后,数组的存储形式如下所示。



     

     
    1. char c[5]={'h','e','l','l','o'};

    等价于

     
    1. char c[]={'h','e','l','l','o'};

    由于该字符数组中不包含字符串结束标志 '\0',故不能使用 printf("%s",c); 输出其中的字符串。输出结果中一般含有随机乱码。

    这种情况一般采用循环语句逐个输出该数组中的每个字符。

     
    1. int i;
    2. for(i=0;i<5;i++) //循环次数为字符个数或数组大小
    3. printf ("%c",c[i]);//格式控制符为%c,输出列表中为字符变量c[i]


    3) 当字符个数多于空间大小时,编译时报错。例如:

     
    1. char c[4] = {'h','e','l','l','o'}; //错误。初值个数5大于数组大小4

    采用字符串初始化的方式

    在 C 语言中,字符串一般是指含有字符串结束符 '\0' 的若干个字符的集合。而使用双引号括起来的字符串常量,默认隐含字符串结束符 '\0'。例如:

     
    1. char c[12] = {"C program"}; //注意该数组大小应足够大

    用字符串对字符数组初始化时,一般大括号可以去掉,即:

     
    1. char c[12]="C program";

    该初始化语句与以下三条语句均是等价的。

     
    1. char c[12]= {'C',' ','p','r','o','g','r','a','m','\0','\0','\0'};

    或者:

     
    1. char c[12] = {'C',' ','p','r','o','g','r','a','m','\0'};

    或者:

     
    1. char c[12] = {'C',' ','p','r','o','g','r','a','m'};

    以上等价初始化语句有一个共同特点:数组的大小均为指定值 12。

    其数组存储形式均如下所示。



    采用字符串对字符数组进行初始化时,一般省略一维数组空间的大小,即:

     
    1. char c[]="C program";

    该数组中除了存储字符串中的 9 个有效字符外,还自动在字符串的结尾存储 '\0' 字符。即该数组的大小为 10。其存储形式如下所示。



    为节省空间及书写方便,当用字符串对字符数组初始化时,一般均省略其一维的大小。

    一维字符数组的引用

    字符数组中的每一个元素都是一个字符,可以使用下标的形式来访问数组中的每一个字符。

    例如

     
    1. char c[]="abcd";

    定义了一个一维字符数组 c,用字符串常量对其初始化,该数组大小为 5,前 4 个元素的值分别为 'a'、'b'、'c'、'd',第 5 个元素的值为 '\0'。其存储形式如下所示。



     

    可以使用 c[i] 引用该数组中的每个元素,例如:

     
    1. c[2]='f'; //把'f'赋给元素c[2]
    2. scanf("%c",&c[3]); //输入一个字符,保存到元素c[3]对应的地址空间中
    3. printf("%c",c[1]); //输出元素c[1]中的字符值

    如果每次输出一个字符,可使用循环语句输出字符数组中保存的字符串,参考代码如下。

     
    1. int i;
    2. for(i=0;c[i]!='\0';i++) //当前i号位置的字符变量只要不是结束符就输出
    3. printf("%c",c[i]);

    一维字符教组的应用举例

    C 语言中的字符串总是以 '\0' 作为结束标志,所以字符串的长度指的是从字符串的首字符开始,到第一次遇到 '\0' 为止,这之间所包含的有效字符的个数,结束符不计算在字符串长度内。

    如字符串”abcd”,C 语言中字符串最后一个有效字符后隐含 '\0' 字符,故该字符串长度为 4。

    【例 1】编写实现求一个字符串长度的程序。

    分析:把字符串保存在一维字符数组中,其长度用 len 表示,初始为 0。算法为:从该数组的首元素(0 号位置)开始,只要当前元素不为 '\0',len 加 1,直到遇到 '\0' 为止,此时 len 的值即为该字符串的长度。

    实现代码:

     
    1. #include<stdio.h>
    2. int main (void)
    3. {
    4. char str[]="A good book is a good friend!";
    5. int i, len=0; //len必须初始化为0
    6. for(i=0;str[i]!='\0';i++)
    7. len++;
    8. printf ("The length is: %d\n",len);
    9. return 0;
    10. }

    运行结果为:
    The length is: 29

    【补充】该程序循环部分也可以使用 while 循环,如下所示:

     
    1. i=0;
    2. while(str[i]!='\0')
    3. {
    4. len++;
    5. i++;
    6. }
    展开全文
  • 一维数组 一位数组是最简单的数组类型,它的定义形式如下: 类型说明符 数组名[常量表达式] 类型说明符是数组中每个元素的类型,常量表达式是数组元素的个数 在使用一维数组的时候需要留意以下两个要点 常量表达式...

    所谓数组,是指将那些具有相同类型的、数量有限的若干个变量通过有序的方法组织起来的一种便于使用的形式。数组属于一种构造类型,其中的变量被称为数组的元素。数组元素的类型可以是基本数据类型,也可以是特殊类型和构造类型。

    一维数组

    一位数组是最简单的数组类型,它的定义形式如下:

    类型说明符 数组名[常量表达式]

    类型说明符是数组中每个元素的类型,常量表达式是数组元素的个数

    在使用一维数组的时候需要留意以下两个要点

    • 常量表达式的值必须是正整数
    • 数组元素的引用,数组的起始元素下标为0

    下来我们通过一个简单的示例了解一下数组

    代码如下:

    #include<stdio.h>
    #define N 9
    int main(void) {
        int arr[N];
        int i;
        for (i = 0; i < N; i++)
        {
            arr[i] = i + 1;
            printf("arr[%d]=%d\t", i, arr[i]);
            if (0 == (i+1)%3)
            {
                printf("\n");
            }
        }
        return 0;
    }
    

    运行结果如下:
    image
    我们分析一下上面这段代码

    我们定义了一个含有9个元素的一位数组arr,在引用数组中的元素时,采用"数组名[下标]"的方式,将其中的每一个元素视为一个普通的变量来进行操作。需要注意的是,因为定义的数组arr仅含有9个元素,所以在使用的过程中,下标值不能超过8,否则就会出现下标越界的错误,示例如下:
    image

    在使用数组的时候要特别注意数组越界,不然很有可能为自己埋下一颗雷(bug)。

    接下来我们我们通过一段代码看一下数组在内存中是如何存放的

    #include<stdio.h>
    #define N 4
    int main(void) {
        int arr[N];
        int i;
        for (i = 0; i < N; i++)
        {
            arr[i] = i;
            printf("&arr[%d]=%d\n", i, &arr[i]);
        }
        return 0;
    }
    

    运行结果如下:
    image
    从结果我们可以看出,每个元素占用4个字节,在内用中的存储结构图如下:
    image

    最后我们再通过一个示例来巩固一下一维数组

    需求:使用数组保存用户输入的数据,当输入完毕后逆向输出

    代码如下:

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #define N 5
    int main(void) {
        int arr[N];//定义数组
        int i, temp;//定义变量
        printf("请输入一个5个元素数组:\n");
        for (i = 0; i < N; i++)
        {
            scanf("%d", &arr[i]);
        }
        printf("读取到的数组如下:\n");
        for (i = 0; i < N; i++)
        {
            printf("%d ",arr[i]);
        }
        printf("\n");
        for (i = 0; i < 2; i++)//将数组中元素的前后位置互换
        {
            temp = arr[i];
            arr[i] = arr[4 - i];
            arr[4 - i] = temp;
        }
        printf("输出的逆向数组如下:\n");
        for (i = 0; i < N; i++)
        {
            printf("%d ", arr[i]);
        }
        return 0;
    }
    

    运行结果如下:
    image

    二维数组

    二维数组定义的一般形式如下:

    类型说明符 数组名[常量表达式1][常量表达式2]

    与一维数组的定义唯一的不同是多了一个常量表达式2,其中,常量表达式1为第一维的长度,常量表达式2为第二维的长度。通常在处理二维数组的时候,为了便于理解,都将数组视为一个矩阵,常量表达式1表示矩阵的行数,而常量表达式2表示矩阵的列数。与一维数组一样,在定义二维数组时,常量表达式同样不能为变量。下面先通过一段代码来看二维数组的定义。

    #include<stdio.h>
    
    #define M 4
    #define N 3
    
    
    int main() {
      int arr[M][N];
      for (int i = 0; i < M; i++)
      {
        for (int j = 0; j < N; j++)
        {
          printf("&arr[%d][%d]=%d\t", i, j, &arr[i][j]);
        }
        printf("\n");
      }
      return 0;
    }
    

    运行结果:

    将二维数组arr视为一个矩阵,下图显示了数组中每个元素在矩阵中的存放位置。

    数组中各个元素在矩阵中对应的位置由二维数组的两个下标决定。我们可以将定义的二维数组int arr[4][3]视为由arr[4]和int [3] 两部分构成,将arr[4]视为一个整型一维数组,其中含有4个元素arr[0]、arr[1]、arr[2]、arr[3],每个元素都是int[3]类型的,也就是说,每个元素又是一个一维数组,每个一维数组含有3个元素,如arr[0]含有arr[0][1]、arr[0][1]、arr[0][2]三个元素。

    知道了二维数组的这种特殊结构之后,接下来通过下图来了解二维数组在内存中的存储结构。

    通过上述二维数组在内存中的存储结构图可以发现,二维数组中的所有元素都存储在一片连续的内存单元中,所占用的内存大小为元素类型所占用的内存大小乘以第一维及第二维的长度。如果以矩阵的方式来分析二维数组的存储方式,那么先从矩阵第一行从左往右依次存储完所有元素,然后按照同样的方法存储第二行的所有元素,直到存储完所有数组元素为止。

    接下来再看一个二维数组的示例:

    任意输入一个3行3列的二维数组,求对角元素之和

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    
    int main() {
      int arr[3][3];
      int i, j, sum = 0;
      printf("please input:\n");
      for (i = 0; i < 3; i++)
      {
        for (j = 0; j < 3; j++)
        {
          scanf("%d", &arr[i][j]);
        }
      }
      for (i = 0; i < 3; i++)
      {
        for ( j = 0; j < 3; j++)
        {
          if (i==j)
          {
            sum += arr[i][j];
          }
        }
      }
      printf("the result is: %d\n", sum);
      return 0;
    }
    

    运行结果如下:

    字符数组

    字符数组顾名思义就是数组的元素类型为字符型的数组。特殊之处在于它是数组元素为字符的数组。其定义的一般形式和注意事项与之前讲解的一般数组类似,只是其中的类型说明符是char。当然,并不是说类型说明符只能是char,也可以是long、int等,但是由于char型只占用一个字节的大小,使用long型和int型来定义字符数组会造成资源的浪费,因此一般选择使用char型来定义字符数组。
    一维字符数组
    首先通过下面一段代码来看看一维字符数组的定义。

    #include<stdio.h>
    #define SIZE 20
    int main() {
        long arr1[SIZE] = {'h','e','l','l','o',' ','w','o','r','l','d','!'};
        char arr2[SIZE] = { 'h','e','l','l','o',' ','w','o','r','l','d','!' };
        printf("long型字符数组占用的内存大小为:%d\n", sizeof(arr1));
        printf("char型字符数组占用的内存大小为:%d\n", sizeof(arr2));
        return 0;
    }
    

    运行结果:

    在上面的代码中定义了不同类型的字符数组来存放相同的字符,可以看出,它们占用的内存大小相差很大,long型字符数组所占用内存大小是char型数组占用内存大小的4倍。从这点可以看出,选用char型作为数组类型避免了内存空间的浪费。下面通过一段代码来了解字符数组的初始化特点。

    #include<stdio.h>
    #define SIZE 20
    int main() {
        int i;
        char arr[SIZE] = { 'h','e','l','l','o',' ','w','o','r','l','d','!' };
        for (i = 0; i < SIZE; i++)
        {
            printf("%c", arr[i]);
        }
        
        return 0;
    }
    

    运行结果:

    运行结果为“Hello World!”,其中有一些空字符。看看上面代码中定义的arr数组,其数组长度为20,而初始化的字符元素的个数为12,初始化的字符元素个数小于数组长度,编译器在编译过程中将后面没有初始化的数组元素赋值为‘\0’,这也正是打印输出中含有空字符的原因。在打印的时候也可以将数组中的元素‘\0’视为数组结束的标志,例如:

    #include<stdio.h>
    #define SIZE 20
    int main() {
        int i;
        long arr[SIZE] = { 'h','e','l','l','o',' ','w','o','r','l','d','!' };
        for (i = 0; arr[i]!='\0'; i++)
        {
            printf("%c", arr[i]);
        }
        
        return 0;
    }
    

    运行结果:

    这时的输出结果中就不含有任何空字符了,因为巧妙地使用了字符数组中的‘\0’标志。当然,也可以采用字符串常量的方式来对一维字符数组进行初始化,例如:

    #include<stdio.h>
    #define SIZE 20
    int main() {
        int i;
        char arr[SIZE] = { "hello world!" };
        for (i = 0; arr[i] != '\0'; i++)
        {
            printf("%c", arr[i]);
        }
        
        return 0;
    }
    

    运行结果:

    在对一维字符数组进行定义和初始化的过程中,可以不指定其长度。使用字符常量列表和字符串常量的方式进行初始化的结果是不同的,例如:

    #include<stdio.h>
    int main() {
        int i;
        char arr1[] = { "hello world!" };
        char arr2[] = {'h','e','l','l','o',' ','w','o','r','l','d','!'};
        
        printf("采用字符串常量进行初始化的arr1数组的长度为:%d\n", sizeof(arr1));
        printf("采用字符常量列表进行初始化的arr2数组的长度为:%d\n", sizeof(arr2));
        
        return 0;
    }
    

    运行结果:
    、
    从运行结果发现,采用这两种方式得到的数组长度并不相同,在采用字符串常量对字符数组进行初始化的过程中,在内存中进行存储时会自动在字符串的后面添加一个结束符‘\0’,所以得到的字符数组长度是字符串常量的长度加1;而采用字符常量列表的方式对字符数组进行初始化就不会在最后添加一个结束符,所以利用这种方式定义的字符数组的长度就是字符常量列表中字符的个数。

    数组实例

    交换数组中最大数和最小数的位置

    实例代码

    //
    // Created by 冲哥 on 2021/22/09.
    // 实现功能:交换数组中最大数和最小数的位置
    //
    
    #include "stdio.h"
    
    int main(){
        int a[10];
        int max, min;
        int m, n;
    
        printf("请输入10个数字:\n");
        for (int i = 0; i < 10; i++) {
            scanf("%d", &a[i]);
        }
        printf("输入的10个数是:\n");
        for (int i = 0; i < 10; i++) {
            printf("%4d", a[i]);
        }
        printf("\n");
        max = a[0];
        for (int i = 0; i < 10; i++) {
            if (a[i] > max) {
                max = a[i];
                m = i;
            }
        }
    
        min = a[0];
        for (int i = 0; i < 10; i++) {
            if (a[i] < min) {
                min = a[i];
                n = i;
            }
        }
    
        a[m] = min;
        a[n] = max;
    
        printf("交换最大数和最小数的位置后:\n");
        for (int i = 0; i < 10; i++) {
            printf("%4d", a[i]);
        }
    } 
    

    运行结果

    程序分析

    首先找到数组中的最大值和最小值,记录它们的位置,然后交换位置,最后将交换后的数组输出。

    如果您觉得本篇文章对您有帮助就顺手点个赞吧
    更多干货内容请查看我的个人公众号:C语言中文社区。
    C语言中文社区】是一个C语言/C++视频教程、学习笔记、电子书、计算机二级资料等专注于C语言/C++编程学习者的干货知识分享平台,精选深度文章,分享优秀干货类、技能类的学习资源,帮助学习中的你。
    在这里插入图片描述

    展开全文
  • 字符数组
  • 一维字符数组存放字符串

    万次阅读 2020-02-13 17:21:24
    一、用一维字符数组存放字符串 1、C语言对字符串的约定 字符串是借助于字符型一维数组来存放的,并规定以字符‘\0’作为字符串的结束标志,’\0’作为标志占用存储空间,但不计入串的实际常量 2、C语言中表示字符串...
  • C语言中二维字符数组

    千次阅读 2021-05-19 02:10:01
    C语言中二维字符数组的定义和初始化一般来说,我们可能会希望定义个二维字符数组并且在定义的时候就用一些字符串来初始化它。比如说:Code:1.char testcase[30][MAX_LENGTH]={"jo","vicent","tom","honey","gigi",...
  • 二维字符数组一般用于存储和处理多... //定义了一个3行10列的二维字符数组c由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组,即二维数组的每一行均可表示一个字符串。二维字符数组的初始...
  • 篇已经讲了有关单个字符串的处理问题,这篇将重点介绍多个字符串的输入方式以及相关函数的使用,还将介绍二维字符数组输入输出。 这是上篇的内容,如有需要可以查看: 字符数组的输入输出()处理单个...
  • 输入一字符串如“Alaska meeting”,其中字符降序排列后输出。 函数接口定义: 在这里描述函数接口。例如: void fun(char s[ ], int num) ; num接受串长度,s指向传来的字符串。 裁判测试程序样例: #...
  • 二维数组和二维字符数组 二维数组 首先,我们来介绍一下二维数组。 二维数组:int a[5][10]是内含50个int类型值的数组。 可以想象一下:可以是个5行10列的数据表。 输入个数的行数和列数,就可以查找这个元素...
  • java怎样输入一个二字符数组

    千次阅读 2019-11-20 19:00:42
    public static void main(String[] args) { Scanner in=new Scanner(System.in); int m=in.nextInt(); int n=in.nextInt(); char[][]arr=new char[m][n]; for (in...
  • C语言二维字符数组详解

    万次阅读 多人点赞 2019-07-06 23:28:10
    维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串。 二维字符数组的定义 二维字符数组的定义格式为: char 数组名[第一维大小][第二维大小]; 如: char c[3][10]; //...
  • 维字符数组排序

    千次阅读 2021-03-07 21:33:54
    1.输入多个字符串,存放二维字符数组中,并对二维字符数组进行排序,比如输入:“BBB”、 “CCC", “AAA”,最后二维字符数组的内容为"AAA ,“BBB”,“CCC” #include<stdio.h> #include<string.h> int ...
  • C语言中二维字符数组应该怎样赋值?... //定义了一个3行10列的二维字符数组c 由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组。1.用一个循环语句就可以了。例如: char *a[3]={"1","23",...
  • 01 一维数组 数组,就是把相同数据类型的变量组合在一起而产生的数据集合。 数据就是从某个地址开始连续若干个位置形成的元素集合。 数据类型 数组名[数组大小]; 数组大小必须是整数常量,不可以是变量。 一维...
  • 定义一个一维字符数组str[50],输入一串字符,输入整数位置信息M(M<50),调用函数char_cp()把指定位置M之后的内容,拷贝到新字符数组ch[50]中,使用指针完成地址传递,主函数完成数组输入和输出。 时间限制 1 ...
  • 数组与字符数组数组 简单地说就是具有两个下标的数组称为二数组。 二数组的定义形式 存储类型 类型说明符 数组标识符[常量表达式1] [常量表达式2] 例如: static int a[2][3],b[2][3]; char c[10][10]...
  • 展开全部首先说明第点,你这个代码只是给了个片段,无法全局的对你编写32313133353236313431303231363533e78988e69d8331333431346430的代码评估并确认问题。现在可以修改的是获取控制台输入的代码可以修改为:...
  • 输入一个一维数组 #输入一个数组 arr = input() num = [int(n) for n in arr.split(',')] #如果是输入一系列由空格隔开的数就是split() print(num) 2. 输入一个二维数组 # 输入一个二维数组 n = int(input()) ...
  • C语言如何输入维字符数组

    万次阅读 多人点赞 2020-10-12 15:58:29
    二维字符串数组是由多个字符串组成的数组,可以采取循环输入一维字符串的做法为这样的二维数组赋值。 #include <stdio.h> int main() { int i,j,a[10][10]; for(i=1;i<=3;i++) scanf("%s",a[i]); ...
  • C语言——二维字符数组按长度排序

    千次阅读 2020-12-17 09:01:31
    题目: 定义个char a[100][101]的二维字符数组,存储用户输入的n行m列个字符。其中n由用户输入确定,1<=n<=100;而m不需要用户输入,1<=m<=100,也就是行最多只有100个有效字符。将n行字符串按照...
  • 维字符数组

    千次阅读 2020-03-07 23:40:44
    输入的第行为N,即学生的个数(N<=1000) 接下来的N行包括N个学生的信息,信息格式如下: 01 李江 男 21 02 刘唐 男 23 03 张军 男 19 04 王娜 女 19 然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每...
  • 第一部分:一维数组 我们之前所学过的数据类型都属于基本数据类型(整型、浮点型、字符型)。实际上C语言不仅仅可以操作基本数据类型,还可以操作构造数据类型(如结构体、数组等)。 数组是有序数据的结合,数组中...
  • 维字符数组的定义、赋值和使用

    万次阅读 多人点赞 2019-09-04 00:07:43
    二维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串。...由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组,即二维数组的每一行均可表示一个字符...
  • 对于下面的这段代码 #include <stdio.h> char *arr[5]; char s[5] = "11"; int main(void) ...//输入22 arr[1] = s; for (int i = 0; i < 2; i++) printf("%s ", arr[i]); retur...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,211
精华内容 45,284
关键字:

一维字符数组的输入