wordpress仿seowhy基础指南模板,关键词优化的最佳方法,企业网站建设方案效果,建设踏板车所有型号二维数组
二维数组本质上是一个行列式的组合#xff0c;也就是二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。
定义形式#xff1a;
类型#xff08;说明符#xff09; 数组名[行数#xff08;常量表达式1#xff09;][列数#xff08;常量表达式…二维数组
二维数组本质上是一个行列式的组合也就是二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。
定义形式
类型说明符 数组名[行数常量表达式1][列数常量表达式2]
eg int arr[3][3] {{1,2,3},{4,5,6},{7,8,9}} int arr[][] {{1,2,3},{4,5,6},{7,8,9}} int arr[3][] {{1,2},{4,5,6},{7}}//等价于int arr[3][3] 说明
在C语言中二维数组在计算机中的存储顺序是按行进行的。
二维数组元素
表示形式
数组名[下标1][下标2]
eg a[2][3]b[4][9] 下标可以是整型表达式如a[2-1][2*2-1] 下标可以是已经有值的变量或数组元素, 如a[2*x-1][b[3][1]] 数组元素可以出现在表达式中 如b[1][2]a[2][3]/2 注意 使用时数组元素的下标应在已定义数组的大小范围内 应注意区别定义数组大小和引用数组元素的区别。 二维数组初始化
方法 ⑴ 分行给二维数组赋初值。如 int a[3][4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}}; ⑵ 可将所有数据写在一个花括号内按排列顺序对个元素赋值。如 int a[3][4]{1,2,3,4,5,6,7,8,9,10,11,12}; ⑶ 可对部分元素赋初值其余自动取0值(\0|0.0)。如 int a[3][4]{{1},{5,6},{9}}; ⑷ 若对全部元素赋初值则定义数组时可不说明第一维的长度对方括号不能省第二维的长度必须指明。如 int a[ ][4]{1,2,3,4,5,6,7,8,9,10,11,12}; ⑸ 在分行赋初值时也可以省略第一维的长度说明。如 int a[ ][4]{{1,2,3},{0},{0,10}}; eg:
二维数组的遍历 #include stdio.h int main() { int arr[][3] {{1},{2,4},{5,6,7}};// 经过论证二维数组我们必须指明第2维的数组的长度 // 获取行元素的大小 int length sizeof(arr) / sizeof(arr[0]); // 如果是二维数组第1维的长度应该是如左侧这样获取 printf(length:%d\n,length); // 遍历二维数组需要使用双层for循环外层遍历行内层遍历每一行的列 for(int row 0;row length;row) { // 获取列元素的总大小 int len sizeof(arr[row]) / sizeof(int); for(int col 0; col len; col) { // 获取列元素 printf(%3d,arr[row][col]);// 意思是获取数组arr 第row行第col列 } printf(\n); } return 0; }// 数据类型分支结构循环结构数组 二维数组矩阵转置 /** * 需求二维数组案例-矩阵的转置就是将一个2行3列的数组转换为3行2列的数组 */ #include int main() { // 准备2个数组存放转前和转后的数据 int arr_before[2][3] {1,2,3,4,5,6}; int arr_after[3][2] {0};// 初始化每一列上都是0 // 遍历arr_before for(int i 0;i sizeof(arr_before)/sizeof(arr_before[0]);i) { for(int j 0;j sizeof(arr_before[i])/sizeof(int);j) // 转置 arr_after[j][i] arr_before[i][j]; } } // 遍历arr_after for(int i 0;i sizeof(arr_after)/sizeof(arr_after[0]);i) { for(int j 0;j sizeof(arr_after[i])/sizeof(int);j) { // 输出 printf(%4d,arr_after[i][j]); } printf(\n); } return 0; } 字符数组
概念
元素类型为char字符型的数组字符数组往往是用来存储字符串数据的。需要注意的一点是我们
C语言中的字符是字节字符。
字节字符也就是一个字符占1个字节
语法 char 数组名[容量] char 数组名[行容量][列容量] 测试 char a A char b 1 char c 65 char d A //错误因为这是字符串写法也是char数组的写法char d[1] A char e “马” //错误中文一个字符超过一个字节 eg: #include stdio.h int main() { char arr[7][7] {{ , , ,*, , , }, { , ,*, ,*, , }, { ,*, , , ,*, }, {*, , , , , ,*}, { ,*, , , ,*, }, { , ,*, ,*, , }, { , , ,*, , , } }; for(int i 0;i sizeof(arr)/sizeof(arr[0]);i) { for(int j 0;j sizeof(arr[i])/sizeof(char);j) { printf(%c,arr[i][j]); } printf(\n); } return 0; } 字符串和字符串结束标志
说明 C语言规定字符串以字符\0作为结束标志。 编译系统对字符串常量自动加一个\0作为结束标志。 程序中往往通过判断\0来检测字符串是否结束。 \0的ASCII码为0不是一个可显示的字符是“空操作符”什么都不做不会增加有效字符仅是一个供判别的标志。 字符数组的多样表示 char数组可以以数组的方式一个个输出每个字符我们的char数组也可以以字符串的方式整体进行输出所有字符。 具体如下面案例 /* 需求字符数组-字符串 */ #include int main() { // 字符串第1种表示 char s1[] {h,e,l,l,o, ,w,o,r,l,d}; // 字符串第2种表示 char s2[] {hello world}; // 字符串第3种表示 char s3[] hello world; // 测试使用字符串方式打印这样就不用一一遍历 printf(%s\n,s1); //hello world printf(%s\n,s2); //hello world printf(%s\n,s3); //hello world return 0; } 注意: 字符串的长度与字符数组的长度不一定相同。 利用字符串常量可以对字符数组进行初始化但不能用字符串常量为字符数组赋值。 // 正确写法利用字符串常量给字符数组初始化 char b[15] China; // 错误写法利用字符串常量给字符数组赋值 char b[15]; b[15] China; 字符串输入
格式
scanf(%s,数组名)
注意
采用scanf进行字符串输入要求字符串中不能存在空格否则字符串遇到空格会结束。 fgets(数组名,数组容量stdin); 说明采用fgets进行字符串输入可获取所有输入的字符串包含\n在实际的字符串处理时我们可能需要处理\n 注意 1. 如果输入的字符串不包含空格和换行可以使用scanf() | fgets(); 2. 如果输入的字符串需要包含空格和换行只能使用fgets(); 3. 经过对比我们发现在字符串的输入中fgets()更好 字符串输出
puts(数组名)
printf(%s,数组名);
字符串拼接
strcat(数组名,需要拼接的字符串)
注意需要引入#include string.h
字符串拷贝
strcpy(数组名,字符串)
注意需要引入string.h库
说明这个方法适合给字符串赋值用。
字符串比较
strcmp(字符串1,字符串2);
注意
1. 需要引入string.h
2. 返回的结果是boolean
获取字符串长度
strlen(字符串)
注意
1. 需要string.h
2. 返回字符串长度