C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解

简介: 本章介绍了C语言中的数组概念及应用。数组是一种存储同一类型数据的线性结构,通过下标访问元素。一维数组定义需指定长度,如`int a[10]`,并遵循命名规则。数组元素初始化可使用 `{}`,多余初值补0,少则随机。二维数组扩展了维度,定义形式为`int a[3][4]`,按行优先顺序存储。字符数组用于存储字符串,初始化时需添加结束符`\0`。此外,介绍了字符串处理函数,如`strcat()`、`strcpy()`、`strcmp()` 和 `strlen()`,用于拼接、复制、比较和计算字符串长度。

第六章 数组

特点:同一数组中的所有元素都属于同一种数据类型(int,char,float)数组元素用数组名和相应的下标来确定。
方法:一个数组元素其实就是一个变量(可以称为带下标的变量)

1.一维数组

类型名 数组名[常量表达式]
如:float s[25];

1.1 定义数组

定义数组有4个注意:

  1. 数组名属于用户定义标识符。要遵守标识符命名规则

    简言之,不用能关键字啥的命名

  2. 定义一维数组时数组名后必须用一个方括号[]将常量表达式括起来,常量表达式的值表示所定义数组共有多少个元素(数组长度或数组的大小)

    如下面是非法的定义,int a{10}; int a(10); 正确定义:int a[10];

  3. 定义数组时方括号中的表达式不能含有==变量==。另外表达式的值必须大于零且为正整数。

    下面是非法定义:int a[x];x是变量 int a[1.5]; int a[-10];

  4. C语言每个数组中分配空间时是连续分配的

1.2 一维数组的引用格式

数组名[下标]

注:C语言中不能对数组进行整体引用只能单独饮用其中的元素。引用时下标可以是表达式。
char a[10];
a[0]='A';
a[3+7]='b';

记住:数组元素的下标值在(0~N-1之间)

1.3 一维数组的初始化

格式: 类型名 数组名[常量表达式]={初值1,初值2,...}

注意:

  1. 定义一位数组时,可以将各元素的初始值依次放在一对{}中给数组,且初值之间用一个逗号分隔

    int a[5]={19,45,66,90,100,80};

  2. 多则出错,少则补0

  3. 定义赋初值的个数等于数组长度,则数组长度可以省略

    int a[]={19,45,66,90,100,80};

  4. 一个也不给则是随机值

  5. 只能在定义数组的同时用{}|给数组元素整体赋值

2. 二维数组

2.1 二维数组的定义格式

类型名 数组名 [常量表达式1][常量表达式2]
如:
int a[10][10];
char b[3][4];
float s[7][3];

注:

  1. 数组名要遵守用户自定义标识符的命名规则
  2. 定义二维数组第一个方括号常量表示行数,第二个方括号常量表示列数.如:
    int a[4*5];
    iint a[4][5];
  3. 定义数组时,方括号不能含有变量,且表达式的值必须是大于0的正整数
    如:
    int i=3;
    int a[i][4]; 不合法
  4. 在内存中二维数组元素的存放连续存放的,遵循着先行后列原则

2.2 二维数组的引用格式

数组名 [行下标] [列下标]

注:

  1. 不能整体引用,只能引用其中的元素
  2. 引用二维数组元素时,必须有行下标和列下标两个下标.从0开始依次加1.

2.3 二维数组的初始化

方法1:将初值依序放在一对{ }中,与一维数组初始化格式相同
例如:int a[2][3]={1,2,3,4,5,6};

方法2:定义二维数组同时,按行初始化每一行初值均用一对{}括起,采用嵌套的{}格式.
例如:int a[2][3]={ {1,2,3},{4,5,6}};

注意:定义二维数组的同时给数组初始化,则可以省略行数,但列数不能省略.

例如:
int a[][3]={1,2,3,4,5,6} 没问题
int a[2][]={1,2,3,4,5,6} 非法
int a[][3]; 非法,必须得有数据

3.字符数组

引子:c语言中没有字符串变量,那么如何存储字符串?
方法1:字符数组来存放
方法2:字符型指针变量

3.1 字符数组的初始化

char s[]={'a','b','c','d','e'};
与其他类型数组初始化方式一样,只是其初始值是字符.

字符串:
因为字符串最后都有一个字符串结束符'\0',所以用字符数组存放字符串时一定要有一个元素存放结束符'\0'

  1. 字符串常量后有一个'\0'

    如:"abcd"由5个字符组成
    "" 等价于"\0",是一个空字符串

  2. 用字符串给一字符数组进行初始化有三种情况

    方法一:char a[]="abcd"; 字符数组长度为5
    与char a[]={'a','b','c','d'}对比,不相同 字符数组长度为4
    方法二:char a[]={"abcd"}; 字符数组长度为5,双引号可以省略花括号
    方法三:char a[]={'a','b','c','d','\0'};字符数组长度为5

4.字符串的使用

4.1 字符串存储(赋值)四种方法

方法1:
scanf();键盘输入
char a[10]; scanf("%s",a); 合法 scanf("%s",&a); 非法

数组头就是数组的首地址,不用加上取地址符
用%s格式输入时,==遇到空格符或回车符==则自动结束输入

printf();键盘输出
注意:输出时则从当前地址开始直到遇到结束符'\0'为止

方法2:
gets()键盘输入
格式:

include

gets(字符数组)
功能:读取一个字符串赋给字符数组

注:
(1)用该函数输入字符时,只有遇到==回车符==系统才结束读取
(2)不论是用%s,还是gets()在输入时均不需要输入双引号,若输入用了双引号则双引号也作为字符串的有效字符

puts( )输出
格式:

include

puts(字符数组或字符串常量)
功能:在屏幕上输出字符数组中的字符.
注:用该函数输出与用%s格式输出一样,只是将=='\0'转成'\n'输出==

方法3:
字符串初始化
char s[]=''abcd'';
char s[]={"abcd"};
char s[]={'a','b','c','d','\0'};

方法4:
字符串函数

4.2 字符串函数

格式:#include

4.2.1 strcat()

strcat(字符数组1,字符数组2);

将字符数组1后连接字符数组2,字符数组2不发生变化

功能:"连接"
例如:

char a[18]="jack";
char b[18]="zhy";
strcat(a,b);
a是jackzhy,b是zhy

4.2.2 strcpy()

格式:

include

strcpy(字符数组1,字符数组2)
功能:将字符数组2中的字符串替换到字符数组1中.函数值应为字符数组1的首地址

会直接把字符数组2包括\0,覆盖到字符数组1上

4.2.3 strcmp()

strcmp(字符数组1,字符数组2)
功能:函数返回值相同位置不同字符的ASII码差值

从左往右,一个字符一个字符比较
strcmp("abc","abc") 差值是0
strcmp("abc","abfc") 差值是-3
strcmp("abc","ab") 差值是99
注意:不能用关系运算符比较字符串

4.2.4 strlen()

功能:求出字符数组的实际长度(不包括结束符)

注意:\0是结束符,但是\1可不是,\后面可以接一个8进制数
char a[]="abc\018\0" strlen()=5, \01是一个 8肯定不是8进制

相关文章
|
4月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
296 15
|
9月前
|
存储 人工智能 Java
一文彻底搞定C语言中的二维数组
本文详细介绍了C语言中的多维数组,包括二维和三维数组的定义、初始化方式、内存布局及遍历方法。通过具体示例讲解了多种赋值技巧,并强调了数组在内存中按行存放的特点。希望这些内容能帮助你在编程路上不断成长!君志所向,一往无前!
552 1
一文彻底搞定C语言中的二维数组
|
9月前
|
存储 人工智能 程序员
一文彻底搞明白C语言的数组
本文详细介绍了C语言中的数组,包括定义、初始化(静态与动态)、存储方式、访问方法及常用操作,如遍历、修改元素和作为函数参数传递。数组是C语言中最基本的数据结构之一,掌握它对编程至关重要。下篇将介绍二维数组,敬请期待!
442 0
一文彻底搞明白C语言的数组
|
10月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
484 16
|
10月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
336 3
|
10月前
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
282 2
|
10月前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
183 1
|
C语言
《C语言程序设计》一 第 1 章 程序设计概述
本节书摘来自华章出版社《C语言程序设计》一 书中的第1章,第1.1节,作者:赵宏 陈旭东 马迪芳,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1264 0
|
C语言
《C语言程序设计与实践(第2版)》——第1章 C语言与程序设计概述 1.1初见C语言程序
我国古代数学家张邱建在其编写的《算经》里提出了历史上著名的“百钱买百鸡”问题:今有鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。凡百钱买鸡百只,问鸡翁、母、雏各几何?对于这个问题,很多读者在小学或初中的竞赛中可能都见到过,而且通常都采用不定方程求解。
1239 0
|
2月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
902 0