首页 > 其他分享 >第五章 数组

第五章 数组

时间:2024-07-21 14:24:49浏览次数:14  
标签:字符 int char 第五章 数组 字符串 include

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~

标签:字符,int,char,第五章,数组,字符串,include
From: https://blog.csdn.net/m0_73382863/article/details/140584259

相关文章

  • Cython:将 2D 数组从 Python 传递到 C 并检索它
    我正在尝试使用Cython用C语言构建相机驱动程序的包装器。我是Cython的新手(两周前开始)。经过一番努力,我可以成功开发结构体、一维数组的包装器,但现在我陷入了二维数组的困境。相机的CAPI之一采用2D数组指针作为输入,并将捕获的图像分配给它。该函数需要从Python调......
  • 为何你还在坚持用数组?容器不比它香几条街?「上」
    以下内容为本人的烂笔头,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/tm2OKiLBQL2GBCd2ho6i5AC/C++到了寿终正寝的时候否?最近被热议的「美国白宫提倡软件开发者放弃使用C/C++这种语言再进行新的软件开发」。作为一名热衷于高性能架构开......
  • NumPy 广播数组是否会在二进制运算期间创建?
    我有两个numpy.ndarray具有不同形状的实例。如果我添加这两个数组,它们之间将发生广播:importnumpyasnpx=np.array([1,2,3])y=np.array([[2,3,5],[7,11,13]])print(x+y)#[[358]#[81316]]广播数组会被创建吗?也就......
  • 【软考】数据结构与算法基础 - 数组和链表
    一、数组和链表的区别(很简单,但是很常考,记得要回答全面)什么是数组:C++语言中,可以用数组,处理一组数据类型相同的数据,不可以动态定义数组的大小(使用前,必须指定大小。)在实际应用中,用户使用数组之前,无法确定数组的大小只能够将数组定义成足够大小,多余出来空间可能不被使用,......
  • 在感知器学习模型的 Python 实现中将数组传递给 numpy.dot()
    我正在尝试将单层感知器分类器的Python实现放在一起。我发现SebastianRaschka的《Python机器学习》一书中的示例非常有用,但我对他的实现的一小部分有疑问。这是代码:importnumpyasnpclassPerceptron(object):"""Perceptronclassifier.Parameters......
  • 塔子哥的最大数组-美团2023笔试(codefun2000)
    题目链接塔子哥的最大数组-美团2023笔试(codefun2000)题目内容塔子哥有一个长度为n的数组a,默认的求和方式是将a中所有元素加起来。但是塔子哥有一种技能,可以将求和的其中一次加法转换为乘法操作。在这种情况下,数组a的最大和为多少。输入描述第一行,一个正整......
  • 代码随想录数组二刷:长度最小的子数组(滑动窗口)
    代码随想录数组二刷:长度最小的子数组(滑动窗口)leetcode209这道题采用滑动窗口的思想去做。实现滑动窗口,主要确定如下三点:窗口内是什么?如何移动窗口的起始位置?如何移动窗口的结束位置?窗口就是满足其和≥s的长度最小的连续子数组。窗口的起始位置如何移动:如果当前窗口......
  • JAVA 数据结构 - 数组
    一、固定数组Arrays数组用来存储固定大小的同类型的元素;1、声明,初始化,访问int[]myIntArray;double[]myDoubleArr;String[]myStrArr;intsize=10;double[]myDoubleArr=newdouble[size];double[]myList={1.9,1.4,2.3,9.8};for(inti=0;i<myList.le......
  • 嵌入式学习记录——C基础(数组与排序)
    数组与排序数组一维数组二维数组排序冒泡排序选择排序数组数组是由一个或者多个相同数据类型的数据组成的一个集合一维数组如果将数组看做一个坐标轴,一维数组则如同只有X坐标,每个数组中的元素内存地址都是连续的,当数据类型和首个元素a[0]确定时,后续a[i]依次递增......
  • [LeetCode] 977. 有序数组的平方
    有序数组的平方简单给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7......