本文最后更新于 377 天前,其中的信息可能已经有所发展或是发生改变。
函数是一段可以重复执行的代码。它可以接受不同的参数,完成对应的操作。下面的例子就是一个函数。
int plus_one(int n) {
return n + 1;
}
函数的主要内容在初识里面我就已经说的比较详细了。本文介绍一下常用的函数。1.1 和1.2用的最多
C语言常用函数整理
输入/输出函数()
| 函数名 | 概念功能 | 使用示例 |
|---|---|---|
| printf | 格式化输出数据到标准输出设备(通常是屏幕)。 | printf("Hello, World! %d\n", 2024); |
| scanf | 从标准输入读取格式化数据。 | scanf("%d", &num); |
| puts | 输出字符串到标准输出,并自动添加换行符。 | puts("Hello, World!"); |
| getchar | 从标准输入读取一个字符。 | char c = getchar(); |
| putchar | 输出一个字符到标准输出。 | putchar('A'); |
字符串操作函数()
| 函数名 | 概念功能 | 使用示例 |
|---|---|---|
| strcpy | 复制源字符串到目标字符串。 | strcpy(dest, src); |
| strncpy | 复制源字符串的前n个字符到目标字符串。 | strncpy(dest, src, 5); |
| strcat | 将源字符串连接到目标字符串末尾。 | strcat(dest, src); |
| strlen | 返回字符串长度(不包括空字符\0)。 | size_t len = strlen(str); |
| strcmp | 比较两个字符串。 | if (strcmp(str1, str2) == 0) { ... } |
| strstr | 查找字符串中第一次出现的子串。 | char *pos = strstr(str, "World"); |
内存管理函数()
| 函数名 | 概念功能 | 使用示例 |
|---|---|---|
| malloc | 动态分配指定字节数的内存块。 | int *arr = (int *)malloc(5 * sizeof(int)); |
| calloc | 动态分配内存并初始化为零。 | int *arr = (int *)calloc(5, sizeof(int)); |
| realloc | 调整已分配内存块的大小。 | arr = (int *)realloc(arr, 10 * sizeof(int)); |
| free | 释放之前分配的内存。 | free(arr); |
数学函数()
| 函数名 | 概念功能 | 使用示例 |
|---|---|---|
| pow | 计算一个数的指定幂次。 | double result = pow(2.0, 3.0); |
| sqrt | 计算平方根。 | double root = sqrt(16.0); |
| sin | 计算弧度的正弦值。 | double s = sin(3.14159 / 2); |
| cos | 计算弧度的余弦值。 | double c = cos(0.0); |
| tan | 计算弧度的正切值。 | double t = tan(3.14159 / 4); |
| log | 计算自然对数。 | double ln = log(2.71828); |
时间函数()
| 函数名 | 概念功能 | 使用示例 |
|---|---|---|
| time | 返回自1970年1月1日以来的秒数(Unix时间戳)。 | time_t now = time(NULL); |
| difftime | 返回两个时间点之间的时间差(秒)。 | double diff = difftime(time2, time1); |
| clock | 返回程序执行时间(时钟周期)。 | clock_t start = clock(); |
| strftime | 将时间转换为字符串。 | strftime(buf, 100, "%Y-%m-%d", timeinfo); |
文件操作函数()
| 函数名 | 概念功能 | 使用示例 |
|---|---|---|
| fopen | 打开文件并返回文件指针。 | FILE *fp = fopen("file.txt", "r"); |
| fclose | 关闭文件,释放资源。 | fclose(fp); |
| fread | 从文件读取数据到内存。 | fread(buffer, sizeof(char), 100, fp); |
| fwrite | 将内存中的数据写入文件。 | fwrite(data, sizeof(char), 100, fp); |
| fscanf | 从文件读取格式化数据。 | fscanf(fp, "%d", &num); |
| fprintf | 向文件写入格式化数据。 | fprintf(fp, "Value: %d\n", num); |
布尔类型及相关函数()
| 函数名 | 概念功能 | 使用示例 |
|---|---|---|
| bool | 定义布尔类型。 | bool isEven = (num % 2 == 0); |
| true | 表示真(值为1)。 | if (isEven == true) { printf("Even number.\n"); } |
| false | 表示假(值为0)。 | if (isEven == false) { printf("Odd number.\n"); } |
其他常用函数
| 函数名 | 概念功能 | 使用示例 |
|---|---|---|
| #define | 宏定义,用于定义常量或宏函数。 | #define PI 3.14159 |
| typedef | 为现有类型定义新名称。 | typedef unsigned long ulong; |
| enum | 定义枚举类型。 | enum Color { RED, GREEN, BLUE }; |
| struct | 定义结构体。 | struct Point { int x; int y; }; |
| sizeof | 返回类型或变量的大小(字节)。 | size_t size = sizeof(int); |
| typecast | 类型转换,将一种数据类型转换为另一种。 | double num = (double)intVar; |
printf()
printf()的作用是将参数文本输出到屏幕。它名字里面的f代表format(格式化),表示可以定制输出文本的格式。
printf("Hello World");
上面命令会在屏幕上输出一行文字“Hello World”。
printf()不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符\n。
printf("Hello World\n");
占位符
printf()可以在输出文本中指定占位符。所谓“占位符”,就是这个位置可以用其他值代入。
// 输出 There are 3 apples
printf("There are %i apples\n", 3);
面示例中,There are %i apples\n是输出文本,里面的%i就是占位符,表示这个位置要用其他值来替换。占位符的第一个字符一律为百分号%,第二个字符表示占位符的类型,%i表示这里代入的值必须是一个整数。
printf()的第二个参数就是替换占位符的值,上面的例子是整数3替换%i。执行后的输出结果就是There are 3 apples。
printf()的占位符有许多种类,与 C 语言的数据类型相对应。下面按照字母顺序,列出常用的占位符,方便查找。
%a:十六进制浮点数,字母输出为小写。%A:十六进制浮点数,字母输出为大写。%c:字符。%d:十进制整数。%e:使用科学计数法的浮点数,指数部分的e为小写。%E:使用科学计数法的浮点数,指数部分的E为大写。%i:整数,基本等同于%d。%f:小数(包含float类型和double类型)。%g:6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的e为小写。%G:等同于%g,唯一的区别是指数部分的E为大写。%hd:十进制 short int 类型。%ho:八进制 short int 类型。%hx:十六进制 short int 类型。%hu:unsigned short int 类型。%ld:十进制 long int 类型。%lo:八进制 long int 类型。%lx:十六进制 long int 类型。%lu:unsigned long int 类型。%lld:十进制 long long int 类型。%llo:八进制 long long int 类型。%llx:十六进制 long long int 类型。%llu:unsigned long long int 类型。%Le:科学计数法表示的 long double 类型浮点数。%Lf:long double 类型浮点数。%n:已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。%o:八进制整数。%p:指针。%s:字符串。%u:无符号整数(unsigned int)。%x:十六进制整数。%zd:size_t类型。%%:输出一个百分号。