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}};
1 2 3 4 5 6
2)按元素排列顺序初始化
int a[2][3]={{1,2,3,4,5,6};
3)对部分元素进行赋值
未被赋值的 默认为0int a[2][3]={{1,2},{4}};
1 2 0 4 0 0
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'};
所占内存,如图所示
ch[0] ch[1] ch[2]
A B C
2)用字符串常量赋值
char ch[5]="ABC";
所占内存,如图所示
A B C \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