C语言(02)——标准库函数大全(持续更新)

发布于:2025-08-02 ⋅ 阅读:(16) ⋅ 点赞:(0)

想要了解更多的C语言知识,可以订阅下面的专栏,里面也有很多品质好文:

打怪升级之路——C语言之路_ankleless的博客-CSDN博客

目录

1.  printf函数——头文件

2.  puts函数——头文件

3.  fgets函数——头文件

4.  scanf函数——头文件

5.  pow函数——头文件

6.  time函数——头文件

7. strlen函数——头文件

8. rand函数——头文件

9. srand函数——头文件

10. abs函数——头文件

11.  sqrt函数——头文件

12.qsort函数——头文件


还在持续更新中,以下是学习过程中遇到的一些库函数(排序不分先后):

1.  printf函数——头文件<stdio.h>

语法形式:int printf(const char *format,......)

作用:在屏幕上输出对应的数据信息,printf的第一个参数是格式化字符串,可以在其中加入占位符,实现对后方参数的打印,占位符的数量决定了格式化字符串后面的参数数量

printf函数的返回值是成功打印的字符数量(包括所有字符,如字母、数字、空格、换行符\n等),类型为int。

:一般情况下,printf不会打印 \0 ,若需要打印可以使用占位符%c或者'\0'进行单独打印,他打印出来不占视觉空间

示例:

#include <stdio.h>
int main()
{
	printf("Hello world");//执行程序,打印Hello world
	return 0;
}

 

我们可以思考上述代码的运行结果,加深对printf函数的认知。 

2.  puts函数——头文件<stdio.h>

语法形式:int puts(const char *str)

作用:通过读取地址(字符指针)的方式来对内容进行打印(标准输出流),并再末尾追加一个换行符'\n'(自动换行)。有且仅有一个参数,这就决定了puts只能打印以\0结尾的字符串,不能在参数中加入占位符。他的返回值是一个非负整数,具体指取决于编译器

示例:

int main()
{
	puts("sahsagd");
	printf("%d", puts("sahsagd"));
	return 0;
}

3.  fgets函数——头文件<stdio.h>

语法形式:char * fgets(char * str,int size, file * stream)

                 str 指向字符数组的指针,用于存储读取到的内容;

                 size为最大读取的字符数(包含字符串结束符\0) ;

                 stream是文件流指针

作用:他是从指定流(一般为输入流stdin)中读取一行数据。

1.  当他遇到换行符 \n 时,fgets会将\n一同存入缓冲区,然后停止读取,尾部加入\0;

2.  当他读取到size - 1个数字是,由于最后一位需要存放\0,所以也会结束读取;

3.  当遇到文件末尾(EOF)或者读取错误时,会停止读取并返回NULL。

成功读取时,返回值为str(即存储字符串的数组地址),失败或者读到文件末尾EOF,返回NULL

:若读取部分内容后遇到EOF,仍会返回str

示例:

int main()
{
	char str[10];
	fgets(str, 10, stdin);//可以读取空白符,但要注意读取停止的条件
	printf("%s", str);//打印输入的字符(注意空间限制)
	printf("\n");
	printf("%zd", strlen(str));//验证字符串长度和\0的存在
	return 0;
}

4.  scanf函数——头文件<stdio.h>

语法形式:int scanf(const char *format,.....)

format 为格式控制字符串,由格式说明符(如%d、%s)和普通字符组成

...... 为可变参数列表,时存放读取结果的变量地址(需要&取地址符,除字符串数组外),需要注意输入的是变量名还是指针(地址)

作用:scanf是从标准输入流中读取字符,按照format字符串的格式进行解析;scanf()处理数值占位符时,会自动过滤空白字符,包括空格制表符换行符等。

scanf的返回值是成功读取数据的个数(个数是非负的),如果没有读取任何项或者匹配失败,则返回0;如果在读取任何数据之前,发生了读取错误或者遇到文件末尾EOF,则返回EOF(-1)。

:%s遇到空格停止读取,无法读取含空格的字符串(需用fgets替代),他从第一个非空白字符开始读取,并在末尾加上空字符\0;我们使用%[n]s来限制读取的字符串长度,但当读取的长度恰好等于数组长度时,会导致数组结尾不是\0,打印时会越界读取内存,这是不合理的写法:

%c不忽略空白字符,总是返回第一个字符,无论该字符是否为空格;

scanf读取除字符类型(%c)以外的数据时,遇到空白字符通常会停止读取。

示例:尝试输入10 sadgb .123e21 c,看输出的结果是什么

int main()
{
	int n;
	char arr[15];
	float k;
	char c;
	scanf("%d%s%f%c", &n, arr, &k, &c);
	printf("%d %s %f %c", n, arr, k, c);
	return 0;
}

5.  pow函数——头文件<math.h>

语法形式:double pow(double base,double exponent)

base :底数,可以是任意实数;

exponent:指数,可以是任意实数。

:当pow后的参数类型不是double时,会发生隐式类型转换。

作用:求base的exponent次幂,即一个数x^y的结果(返回值),类型为double;如果计算过程出现溢出等错误情况(如计算的数过大,超出范围),会根据具体实现返回特定的值(如HUGE_VAL表示正无穷大-HUGE_VAL表示负无穷大,或者NaN表示非数(负数的开方)),并且可能设置全局变量errno来指示错误类型。

示例:

int main()
{
	printf("%lf", pow(2.2, 4));
	return 0;
}

6.  time函数——头文件<time.h>

语法形式:time_t time(time_t * timer);

作用:获取当前的系统时间,返回从 UTC 时间 1970 年 1 月 1 日 00:00:00 到当前时刻的秒数(称为 “时间戳” 或 “Unix 时间”)。时间戳是计算机领域中用于表示时间的一种标准化方式,他通常指从某个固定的“时间起点”开始计算的时间间隔(通常以秒为单位)

timer 是一个指向time_t类型的指针。如果改指针不为NULL,函数会将获取到的时间戳同时存储到该指针指向的变量中(不能是无效地址),如果为NULL,则只通过返回值返回时间戳 。

示例:

time函数经常配合随机数一起使用

#include <stdio.h>
#include <time.h>

int main() {
    time_t t1, t2;
    
    // 情况1:参数为NULL,只通过返回值获取时间戳
    t1 = time(NULL);
    printf("通过返回值获取:%lld\n", (long long)t1);
    
    // 情况2:参数为有效指针,同时存储到变量并返回
    time(&t2);  // 等价于 t2 = time(&t2)
    printf("通过参数获取:%lld\n", (long long)t2);
    
    return 0;
}

7. strlen函数——头文件<string.h>

语法形式:size_t strlen( const char * str)

str 为需要计算的字符串的首地址,字符串需要以“\0”结尾,否则返回值是随机值

作用:计算字符串str 中从首地址开始到第一个"\0"之间的字符个数(不包含"\0"本身

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "world\0extra";  // 遇到第一个'\0'就停止计数
    char str3[] = "";              // 空字符串
    char str4[] = {'a', 'b', 'c'}; // 注意:没有结束符'\0',会导致未定义行为

    printf("str1长度: %zu\n", strlen(str1));  // 输出:5
    printf("str2长度: %zu\n", strlen(str2));  // 输出:5(忽略'\0'后的内容)
    printf("str3长度: %zu\n", strlen(str3));  // 输出:0
    // printf("str4长度: %zu\n", strlen(str4)); // 危险!可能返回随机值或导致崩溃

    return 0;
}

8. rand函数——头文件<stdlib.h>

语法形式:int rand (void)

作用:返回值为0~RAND_MAX(int 类型),rand()生成的是伪随机数,其本质是通过一个数学算法(线性同余法)基于初始值(称为"种子")计算出的数值序列:

相同的种子会生成完全相同的随机数序列;

默认种子值为1;

要获取不同的随机序列,需要通过srand()函数设置不同的种子。

如果需要生成某特定区间范围的数字,如[0,100),则可以设置rand() % 100;利用取余的方法限制伪随机数区间。

示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 生成5个随机数
    for (int i = 0; i < 5; i++) {
        printf("随机数 %d: %d\n", i+1, rand());
    }
    return 0;
}

9. srand函数——头文件<stdlib.h>

语法形式:void srand ( unsigned   int   seed)

作用:seed是一个无符号整数,即种子值无返回值,他的作用是为rand()函数设置初始种子值,决定后续生成的伪随机数序列。

示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>  // 提供time()函数

int main() {
    // 用当前时间戳作为种子(每次运行时间不同,种子不同)
    srand((unsigned int)time(NULL));
    
    // 生成5个随机数
    for (int i = 0; i < 5; i++) {
        printf("%d ", rand());
    }
    return 0;
}

10. abs函数——头文件<stdlib.h>

语法形式:int  abs ( int   n )

作用:计算整数n的绝对值,即:

           若 n >= 0,返回n本身,若 n <= 0,返回-n。

示例:

#include <stdio.h>
#include <stdlib.h>  // 包含abs()函数

int main() {
    int a = 10;
    int b = -20;
    int c = 0;
    
    printf("abs(%d) = %d\n", a, abs(a));  // 输出:abs(10) = 10
    printf("abs(%d) = %d\n", b, abs(b));  // 输出:abs(-20) = 20
    printf("abs(%d) = %d\n", c, abs(c));  // 输出:abs(0) = 0
    
    return 0;
}

11.  sqrt函数——头文件<math.h>

语法形式:double  sqrt ( double  x )

作用:计算非负实数x的平方根(即满足y^2 == x的非负实数y),参数double  x是需要进行计算的非负实数(x >= 0),返回值也为double类型,注意函数参数返回值的数据类型

示例:

#include <stdio.h>
#include <math.h>  // 包含sqrt()函数

int main() {
    double num1 = 25.0;
    double num2 = 2.0;
    double num3 = 0.0;
    
    printf("sqrt(%.1f) = %.1f\n", num1, sqrt(num1));  // 输出:sqrt(25.0) = 5.0
    printf("sqrt(%.1f) = %.6f\n", num2, sqrt(num2));  // 输出:sqrt(2.0) = 1.414214
    printf("sqrt(%.1f) = %.1f\n", num3, sqrt(num3));  // 输出:sqrt(0.0) = 0.0
    
    return 0;
}

12.qsort函数——头文件<stdlib.h>

语法形式:

void qsort  (void * base, size_t  num ,size_t  size,int (*compar)(const  void*,const void*))

base: 指向待排序数组的首地址(void *类型,可接受任意类型数组的指针);

num: 数组中元素的个数(size_t类型),实际应用中可以用sizeof操作符进行求得;

size: 每个元素的大小(单位:字节,size_t类型,通常用sizeof获取)

compar: 比较函数指针,用于定义排序规则,返回值决定元素的排序顺序:返回负数,第一个参数应该排在第二个参数前面(指左侧);返回0,两个参数相等;返回正数,第一个参数应排在第二个参数后面(指右侧)。

作用:qsort()基于快速排序算法实现,通过用户提供的比较函数compar确定元素之间的大小关系,从而对数组进行排序。由于使用void *指针字节大小参数,他可以处理任何类型的数组,void *决定了他可以接受任意类型的指针。

关键是compar函数的设定。

示例:

#include <stdio.h>
#include <stdlib.h>

// 比较两个整数:升序排列
int compare_int(const void *a, const void *b) {
    // 将void*转换为int*,再解引用获取值
    int num1 = *(const int *)a;
    int num2 = *(const int *)b;
    
    return num1 - num2;  // 升序(num2 - num1 为降序)
}

int main() {
    int arr[] = {5, 2, 9, 1, 5, 6};
    int n = sizeof(arr) / sizeof(arr[0]);  // 元素个数
    
    qsort(arr, n, sizeof(int), compare_int);
    
    // 打印排序结果
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);  // 输出:1 2 5 5 6 9
    }
    return 0;
}

13.

14.

15.

持续更新中


网站公告

今日签到

点亮在社区的每一天
去签到