1. arrayoverview
1.1 what is array
array is adatastructure, 用于store相同class型 many 个元素. in Clanguagein, array is 一组连续 memory位置, 每个位置都可以store一个值. array 每个元素都可以throughindex ( under 标) 来访问, index from 0开始.
array 主要特点:
- 所 has 元素 class型必须相同
- 元素 in memoryin is 连续store
- 可以throughindex fast 速访问任意元素
- array big small in 声明时确定, 之 after 不能改变
1.2 array 声明
in Clanguagein, 声明array basic语法such as under :
dataclass型 array名[array big small ]; // example int numbers[10]; // 声明一个package含10个整数 array float scores[5]; // 声明一个package含5个浮点数 array char grades[20]; // 声明一个package含20个字符 array
其in:
- dataclass型: array元素 class型
- array名: array 名称, 遵循标识符命名规则
- array big small : array可以store 元素个数, 必须 is a 常量表达式
2. array 初始化
2.1 初始化method
in 声明array时, 可以同时 for 其for初始化:
2.1.1 完全初始化
// 完全初始化
int numbers[5] = {1, 2, 3, 4, 5};
float scores[3] = {95.5, 87.5, 92.0};
char grades[4] = {'A', 'B', 'C', 'D'};
2.1.2 部分初始化
// 部分初始化, 未初始化 元素会被自动设置 for 0
int numbers[5] = {1, 2, 3}; // etc.价于 {1, 2, 3, 0, 0}
float scores[3] = {95.5}; // etc.价于 {95.5, 0.0, 0.0}
2.1.3 省略array big small 初始化
// 省略array big small , 编译器会根据初始化list long 度自动计算
int numbers[] = {1, 2, 3, 4, 5}; // array big small for 5
float scores[] = {95.5, 87.5}; // array big small for 2
2.2 array 访问
array元素可以throughindex来访问 and modify, index from 0开始:
#include <stdio.h>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
// 访问array元素
printf("第一个元素: %d\n", numbers[0]);
printf("第三个元素: %d\n", numbers[2]);
// modifyarray元素
numbers[1] = 10;
printf("modify after 第二个元素: %d\n", numbers[1]);
return 0;
}
run结果:
第一个元素: 1 第三个元素: 3 modify after 第二个元素: 10
2.3 array 遍历
通常using循环来遍历array 所 has 元素:
#include <stdio.h>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
int i;
// usingfor循环遍历array
printf("array元素: ");
for (i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
run结果:
array元素: 1 2 3 4 5
3. many 维array
3.1 二维array
二维array is array array, 可以看作 is a 表格, has 行 and 列. 声明二维array 语法such as under :
dataclass型 array名[行数][列数]; // example int matrix[3][4]; // 声明一个3行4列 整数二维array float scores[5][3]; // 声明一个5行3列 浮点数二维array
3.2 二维array 初始化
// 二维array 初始化
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 也可以using简化 初始化方式
int matrix2[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
// 部分初始化
int matrix3[3][4] = {
{1, 2},
{5},
{9}
}; // 未初始化 元素会被自动设置 for 0
3.3 二维array 访问
#include <stdio.h>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
int i, j;
// 访问二维array元素
printf("第2行第3列 元素: %d\n", matrix[1][2]);
// modify二维array元素
matrix[0][0] = 100;
printf("modify after 第1行第1列 元素: %d\n", matrix[0][0]);
// 遍历二维array
printf("二维array 所 has 元素:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
run结果:
第2行第3列 元素: 7 modify after 第1行第1列 元素: 100 二维array 所 has 元素: 100 2 3 4 5 6 7 8 9 10 11 12
4. string
4.1 string concepts
in Clanguagein, string is 由字符组成 array, 以空字符 ('\0') 结尾. 空字符 is a 特殊 字符, 其ASCII值 for 0, 用于标记string 结束.
string 声明 and 初始化:
// method1: using字符array初始化
char message1[10] = {'H', 'e', 'l', 'l', 'o', '\0'};
// method2: usingstring字面量初始化 (推荐)
char message2[] = "Hello";
// method3: 指定array big small
char message3[10] = "Hello";
当usingstring字面量初始化字符array时, 编译器会自动 in 末尾添加空字符.
4.2 string 输入 and 输出
#include <stdio.h>
int main() {
char name[50];
// 输出string
printf("请输入你 名字: ");
// 输入string (注意: scanf会 in 遇 to 空格时停止读取)
scanf("%s", name);
// 输出string
printf("你 good , %s!\n", name);
return 0;
}
such as果要读取package含空格 string, 可以usingfgetsfunction:
#include <stdio.h>
int main() {
char name[50];
// 输出提示information
printf("请输入你 全名: ");
// 输入string (可以package含空格)
fgets(name, sizeof(name), stdin);
// 输出string
printf("你 good , %s!\n", name);
return 0;
}
4.3 stringprocessingfunction
Clanguageproviding了一组stringprocessingfunction, 定义 in string.h头filein. 常用 stringprocessingfunctionincluding:
4.3.1 strlen - 计算string long 度
#include <stdio.h>
#include <string.h>
int main() {
char message[] = "Hello, World!";
int length;
length = strlen(message);
printf("string long 度: %d\n", length);
return 0;
}
run结果:
string long 度: 13
4.3.2 strcpy - copystring
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello";
char destination[20];
strcpy(destination, source);
printf("目标string: %s\n", destination);
return 0;
}
run结果:
目标string: Hello
4.3.3 strcat - 连接string
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[] = " World!";
strcat(str1, str2);
printf("连接 after string: %s\n", str1);
return 0;
}
run结果:
连接 after string: Hello World!
4.3.4 strcmp - 比较string
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "banana";
char str3[] = "apple";
int result;
result = strcmp(str1, str2);
printf("strcmp(str1, str2) = %d\n", result);
result = strcmp(str1, str3);
printf("strcmp(str1, str3) = %d\n", result);
result = strcmp(str2, str1);
printf("strcmp(str2, str1) = %d\n", result);
return 0;
}
run结果:
strcmp(str1, str2) = -1 strcmp(str1, str3) = 0 strcmp(str2, str1) = 1
strcmpfunction return value:
- such as果第一个string small 于第二个string, 返回负值
- such as果两个string相etc., 返回0
- such as果第一个string big 于第二个string, 返回正值
实践case: 学生成绩managementsystem
writing一个C程序, usingarraystore学生 成绩, 并计算平均分, 最 high 分 and 最 low 分.
requirementsanalysis
- store5个学生 成绩
- 计算平均分
- 找出最 high 分
- 找出最 low 分
- 输出所 has 成绩 and statistics结果
referencecode
#include <stdio.h>
int main() {
int scores[5];
int i;
int sum = 0;
int max, min;
float average;
// 输入学生成绩
printf("请输入5个学生 成绩: \n");
for (i = 0; i < 5; i++) {
printf("学生%d: ", i + 1);
scanf("%d", &scores[i]);
sum += scores[i];
}
// 计算平均分
average = (float)sum / 5;
// 找出最 high 分 and 最 low 分
max = scores[0];
min = scores[0];
for (i = 1; i < 5; i++) {
if (scores[i] > max) {
max = scores[i];
}
if (scores[i] < min) {
min = scores[i];
}
}
// 输出结果
printf("\n成绩statistics:\n");
printf("所 has 成绩: ");
for (i = 0; i < 5; i++) {
printf("%d ", scores[i]);
}
printf("\n");
printf("平均分: %.2f\n", average);
printf("最 high 分: %d\n", max);
printf("最 low 分: %d\n", min);
return 0;
}
run结果
请输入5个学生 成绩: 学生1: 85 学生2: 92 学生3: 78 学生4: 95 学生5: 88 成绩statistics: 所 has 成绩: 85 92 78 95 88 平均分: 87.60 最 high 分: 95 最 low 分: 78
互动练习
练习1: writing一个C程序, usingarraystore10个整数, 然 after 计算它们 and and 平均值.
提示: using循环输入10个整数, 然 after 计算它们 and , 最 after 计算平均值.
练习2: writing一个C程序, using二维arraystore一个3x3 矩阵, 然 after 计算矩阵 转置.
提示: 矩阵 转置 is 将矩阵 行 and 列互换.
练习3: writing一个C程序, usingstringstoreuser输入 句子, 然 after statistics句子in单词 个数.
提示: 可以throughstatistics空格 个数来计算单词 个数, 注意句子开头 and 结尾 空格.