Notes: 这是一篇测试文章:
C 语言数组
数组的定义
与定义变量类似,定义数组只需在数组名字后面添加一对中括号 []
既可:
int array[10];
注意:中括号里面是数组的长度(元素的数量)。这是一个固定长度的数组,如需用到动态长度数组,可以用 C++ 的 STL 。(后续学长会讲)
我们刚刚定义的数组中显然可以容纳 10 个 int
类型的数字。
数组的初始化
我们现在定义的数组是一个空数组,需要对其进行初始化来填充数据:
array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
大括号中的元素数量不能超过数组的容量。
另外,在定义数组时也可以省略数组的容量,但是必须在定义的同时对其初始化:
int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
这段代码定义的数组和前例定义的数组完全相同!
此外也可以单独给其中某个元素赋值:
array[5] = 0;
这段代码会将数组中第六个元素的值置为 0(为什么是第六个后面会讲)。
访问数组中的元素
所有的数组都是以 0 来作为它们第一个元素的索引值。因此,数组的最后一个元素索引为就是 。
访问数组元素可以通过数组名称加索引来进行访问,例如:
printf("%d", array[5]);
DEMO
这个 DEMO 实现了以下功能:
- 从输入的第 行获取数组的长度 .
- 随后的 行输入为 到 ,表示数组的每个元素.
- 随后程序输出数组的每个元素的值,中间以空格隔开.
#include "bits/stdc++.h"
int a[10001]; // 这里保证数组的长度足够大,避免输入数组过长
int main() {
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for(int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
}
获取数组长度
可以使用 sizeof()
运算符(这不是函数)来获取数组的大小。
但是需要注意的是,sizeof()
运算符返回的是数组的 Byte 数,如果需要得到数组的长度,需要用
这个式子来计算。来看下例:
#include <stdio.h>
int main() {
int array[] = {1, 2, 3, 4, 5};
int length = sizeof(array) / sizeof(array[0]);
printf("数组长度为: %d\n", length);
}
多维数组
多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:
int array[10][10];
此例定义了一个 的二维数组。
多维数组也可以在定义时直接初始化:
int a[3][4] = {
{0, 1, 2, 3} , /* 初始化索引号为 0 的行 */
{4, 5, 6, 7} , /* 初始化索引号为 1 的行 */
{8, 9, 10, 11} /* 初始化索引号为 2 的行 */
};
C 语言函数
函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main()
,所有简单的程序都可以定义其他额外的函数。
您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。
函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。
C 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat()
用来连接两个字符串,函数 memcpy()
用来复制内存到另一个位置。
下面这个例子定义了一个简单的判断平年闰年的函数:
int isRun(int year) {
return (year % 400 == 0 || year % 4 == 0 && year % 100 != 0);
}
我们来简单介绍一下这个函数的各个部分:
- 返回类型:一个函数可以返回一个值,也可以不返回值(此时返回类型填
void
),这里我们需要返回 0 和 1,所以类型选择int
或者char
; - 函数名称:略;
- 函数参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
- 函数主体: 函数主体包含一组定义函数执行任务的语句。
函数的参数
如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数。
形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。
当调用函数时,有两种向函数传递参数的方式:
调用类型 | 描述 |
---|---|
传值调用 | 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。 |
引用调用 | 通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。 |
默认情况下,C 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的实际参数。
Examples
数组
- https://acm.sdut.edu.cn/onlinejudge3/problems/1191?from=%2Fsets%2F11
- https://acm.sdut.edu.cn/onlinejudge3/problems/3106?from=%2Fsets%2F11
函数
- https://acm.sdut.edu.cn/onlinejudge3/problems/1206?from=%2Fsets%2F11
- https://acm.sdut.edu.cn/onlinejudge3/problems/1161?from=%2Fsets%2F11
- https://acm.sdut.edu.cn/onlinejudge3/problems/1209?from=%2Fsets%2F11
Practice
https://acm.sdut.edu.cn/onlinejudge3/sets/11 中的数组和函数部分。