第五章 数组

1.一维数组

1.1 定义

        在C语言中,一维数组的定义格式为:数据类型 数组名[数组大小]。

        例:定义一个包含5个整数的一维数组可以这样写:int nums[5];

        "int" 是数组中元素的数据类型,"nums" 是数组的名称,"[5]" 表示数组的大小为5,即数组中包含5个整数元素。

        需要注意的是,数组的大小必须是一个常量表达式,且不可以改变。数组大小定义后就固定了,不能在程序运行过程中动态改变大小

        另外,也可以在定义数组时直接初始化数组元素,例如:int nums[5] = {1, 2, 3, 4, 5}; 这样可以同时定义数组大小和初始化数组元素。 

        每个元素对应的索引和值如下: 

nums[0] = 1
nums[1] = 2
nums[2] = 3
nums[3] = 4
nums[4] = 5

        数组的下标是从0开始的,我们数组的大小为5,所以最大的数组下标是4。

 1.2 一维数组的初始化

一维数组初始化常见的几种形式:

1)可以指给部分元素赋初值,此时数组定义的长度不能省略

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

 表示只给 a[0]~a[4]五个元素赋值,而后面五个自动赋0值

 2)给元素逐个赋值,不能给数组整体赋值     

如果你要给数组里的每一个元素都赋值为1,只能写成:

int a[5]={1,1,1,1,1};

//不能写成下面这种形式

int a[5]={1};

3)给全部元素赋值,可以不用写数组的长度

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

//也可以写成下面这种形式

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

4)不进行初始化

int a[5];

//这种情况,数组元素的值是随机的,编译系统不会将其设置为默认值0

1.3 一维数组的拓展

冒泡法、选择法、快速冒泡法、插入法        (传送门)

2.二维数组

2.1 定义 

二位数组的一般形式:

数据类型 数组名[行数][列数]

例子

int a[2][3];

"int" 是数组中元素的数据类型,"a" 是数组的名称,"[2][3]" 表示数组包含2行3列,即2行3列的整数元素。如下图所示:

a[0][0]a[0][1]a[0][2]
a[1][0]a[1][1]a[1][2]

2.2 二维数组的初始化

二维数组初始化常见的几种形式:

1)分行初始化

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

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

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

3)对部分元素进行赋值

int a[2][3]={{1,2},{4}};
未被赋值的 默认为0
120
400

4)对数组中全部元素赋值,则第一维的长度可以省略,第二维不可省。全部数据写在一个花括号中。

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

2.3 二维数组的拓展

典型案例        杨辉三角        (传送门)

 3. 字符数组

3.1 定义

字符数组分为一维字符数组和多维字符数组。

一维字符数组常常存放一个字符串,而二维数组常用于存放多个字符串。

注意:字符串是一种以'\0"结尾的字符数组,'\0"占用一个字节,因此,在用字符数组来存放某个字符串常量时,如果要指定字符数组的大小,其大小至少要比字符串的长度大1(多定义一个单元用来存放'\0")

字符类型 数组名[数组大小]

char str[10];

        "char" 是字符数组中元素的数据类型,"str" 是数组的名称,"[10]" 表示数组包含10个字符元素。

        另外,字符数组也可以直接初始化

//定义一个包含字符串"Hello"的字符数组

char str[] = "Hello";

//这样定义的字符数组将包含6个字符(包括字符串结尾的空字符'\0'),并初始化为字符串"Hello"的内容

 

3.2 字符数组的初始化

1)逐个字符赋值

char ch[3]={'A','B','C'};

所占内存,如图所示

ABC
                                ch[0]                           ch[1]                ​​​​​​​        ​​​​​​​       ch[2]

2)用字符串常量赋值

char ch[5]="ABC";

 所占内存,如图所示

ABC\0\0

                        ch[0]        ​​​​​​​      ch[1]        ​​​​​​​       ch[2]              ch[3]                ch[4]

说明:用字符常量赋值,系统会自动在该字符串的最后加入字符串结束的标志(\0);逐个字符赋值,系统不会自动在最后加入字符串结束标志。 

3.3 字符及字符串操作的常用函数

1)scanf() 函数

功能:从键盘上输入以空格或者回车结束的字符串 放入字符数组中,并自动加 '\0'

#include <stdio.h>  

int main() {  
    char str[20];  
    
    printf("请输入一个字符串:");  
    scanf("%s", str);  

    printf("您输入的字符串是:%s\n", str);  

    return 0;  
}

2)printf() 函数

功能:依次输出字符串中的字符,直至遇到字符 ‘\0’

#include <stdio.h>  

int main() {  
    char str[] = "Hello, World!";  
    
    printf("字符串的值是:%s\n", str);  
    
    return 0;  
}

3)puts() 函数

功能:向显示器输出字符串 输出完会 自动换行

#include <stdio.h>  

int main() {  
    char str[] = "Hello, World!";  
    
    puts(str);  
    
    return 0;  
}

 

4)strlen() 函数       

 功能:计算字符串长度,返回字符串实际长度(不包括‘/0’在内)

必须引入 #include <string.h> 

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

int main() {  
    char str[] = "Hello, World!";  
    
    int length = strlen(str);  
    
    printf("字符串的长度是:%d\n", length);  
    
    return 0;  
}

*5)stcpy()函数

必须引入 #include <string.h> 

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

功能:将字符串2复制到字符数组1中。

说明:字符数组1必须足够大;复制时'/0'一同复制;不能使用赋值语句为一个字符数组赋值。

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

int main() {  
    char str1[20] = "Hello";  
    char str2[20];  
    
    strcpy(str2, str1);  
    
    printf("复制后的字符串是:%s\n", str2);  
    
    return 0;  
}

*6)strcmp() 函数 

格式:strcmp(字符串1,字符串2)        必须引入 #include <string.h> 

功能:比较两个字符串

返回值:返回Int型整数。字符串1>字符串2,返回负整数。

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

int main() {  
    char str1[] = "Hello";  
    char str2[] = "Hello"; 
 
    char str3[] = "H";  
  
    int a=strcmp(str1, str2);    //两个字符串相等
        printf("%d\n",a);  
  
    int b=strcmp(str3, str1);    //字符串3<字符串1
        printf("%d\n",b); 

     int c=strcmp(str1, str3);    //字符串1>符串3
        printf("%d\n",c);   
}

运行结果

0  
-11  
11

7) strncpy() 函数

必须引入 #include <string.h> 

功能:来实现字符串的截取操作;可以从一个字符串中复制指定长度的字符到另一个字符串中

例子:将"Hello, World!"这个字符串截取前5个字符存储到subStr字符串中,然后打印输出原始字符串和截取后的子字符串。

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

int main() {  
    char originalStr[] = "Hello, World!";  
    char subStr[10]; // 存储截取后的子字符串  
    int length = 5; // 指定截取的长度  

    // 拷贝原始字符串中的前length个字符到subStr中  
    strncpy(subStr, originalStr, length);  
    subStr[length] = '\0'; // 添加字符串结束符  

    printf("Original String: %s\n", originalStr);  
    printf("Sub String (First 5 characters): %s\n", subStr);  

    return 0;  
}

运行结果:

Original String: Hello, World!  
Sub String (First 5 characters): Hello


~over~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值