【快速上手C语言】第十二章:探索C语言标准库的强大功能-stdio.h、string.h、math.h、time.h和stdlib.h详解

        C语言标准库提供了一套丰富的函数,可以帮助开发者完成各种常见任务,从输入输出处理到数学计算、字符串操作、时间处理和通用实用函数。第十二章将详细介绍这些库的功能,帮助您更好地理解和使用C语言标准库。

一、标准输入输出库(stdio.h)

1. 基本输入输出函数

stdio.h 提供了处理标准输入输出的函数,如 printfscanffgetsfputs 等。

(1) printf 和 scanf

printf 用于格式化输出到标准输出(通常是屏幕),而 scanf 用于从标准输入(通常是键盘)读取数据。

#include <stdio.h>

int main() {
    int age;
    printf("请输入您的年龄: ");
    scanf("%d", &age);
    printf("您输入的年龄是: %d\n", age);
    return 0;
}
# 运行结果:
# 请输入您的年龄: 25
# 您输入的年龄是: 25
2) fgets 和 fputs

fgets 用于从流中读取字符串,fputs 用于将字符串输出到流中。它们通常用于处理文本文件。

#include <stdio.h>

int main() {
    char str[100];
    printf("请输入一行文字: ");
    fgets(str, 100, stdin);
    printf("您输入的是: ");
    fputs(str, stdout);
    return 0;
}
# 运行结果:
# 请输入一行文字: Hello, World!
# 您输入的是: Hello, World!

2. 文件操作

stdio.h 还提供了处理文件的函数,如 fopenfclosefreadfwrite 等。

(1) fopen 和 fclose

fopen 用于打开文件,fclose 用于关闭文件。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    fprintf(file, "Hello, File!\n");
    fclose(file);
    return 0;
}
(2) fread 和 fwrite

freadfwrite 用于二进制文件的读取和写入。

#include <stdio.h>

typedef struct {
    int id;
    char name[20];
} Record;

int main() {
    Record r = {1, "Example"};
    FILE *file = fopen("record.dat", "wb");
    fwrite(&r, sizeof(Record), 1, file);
    fclose(file);
    return 0;
}

二、字符串操作库(string.h)

string.h 提供了处理字符串的函数,如 strcpystrcatstrlenstrcmp 等。

1. 字符串复制与连接

(1) strcpy 和 strcat

strcpy 用于将一个字符串复制到另一个字符串,strcat 用于将一个字符串连接到另一个字符串末尾。

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

int main() {
    char src[50] = "Hello, ";
    char dest[50] = "World!";
    strcpy(dest, src);
    strcat(dest, "World!");
    printf("%s\n", dest);
    return 0;
}
# 运行结果:
# Hello, World!

2. 字符串长度与比较

(1) strlen 和 strcmp

strlen 用于获取字符串长度,strcmp 用于比较两个字符串。

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

int main() {
    char str1[20] = "Hello";
    char str2[20] = "World";
    printf("str1的长度: %lu\n", strlen(str1));
    if (strcmp(str1, str2) == 0) {
        printf("两个字符串相同\n");
    } else {
        printf("两个字符串不同\n");
    }
    return 0;
}
# 运行结果:
# str1的长度: 5
# 两个字符串不同

三、数学库(math.h)

math.h 提供了各种数学函数,如 sqrtpowsincostan 等。

1. 基本数学运算

(1) sqrt 和 pow

sqrt 用于计算平方根,pow 用于计算乘方。

#include <stdio.h>
#include <math.h>

int main() {
    double num = 16.0;
    printf("16的平方根是: %.2f\n", sqrt(num));
    printf("2的4次方是: %.2f\n", pow(2, 4));
    return 0;
}
# 运行结果:
# 16的平方根是: 4.00
# 2的4次方是: 16.00

2. 三角函数

math.h 提供了多种三角函数,如 sincostan 等,用于计算角度的正弦、余弦和正切。

#include <stdio.h>
#include <math.h>

int main() {
    double angle = 45.0;
    double radians = angle * (M_PI / 180.0);
    printf("sin(45) = %.2f\n", sin(radians));
    printf("cos(45) = %.2f\n", cos(radians));
    printf("tan(45) = %.2f\n", tan(radians));
    return 0;
}
# 运行结果:
# sin(45) = 0.71
# cos(45) = 0.71
# tan(45) = 1.00

四、时间处理库(time.h)

time.h 提供了处理时间和日期的函数,如 timelocaltimestrftime 等。

1. 获取当前时间

(1) time 和 localtime

time 返回当前的时间戳,localtime 将时间戳转换为本地时间。

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

int main() {
    time_t now;
    time(&now);
    printf("当前时间戳: %ld\n", now);

    struct tm *local = localtime(&now);
    printf("当前时间: %s", asctime(local));
    return 0;
}
# 运行结果:
# 当前时间戳: 1666754454
# 当前时间: Tue Oct 25 10:34:14 2022

2. 格式化时间输出

(1) strftime

strftime 用于将时间格式化为自定义的字符串形式。

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

int main() {
    time_t now;
    time(&now);
    struct tm *local = localtime(&now);

    char buffer[80];
    strftime(buffer, 80, "现在是 %Y-%m-%d %H:%M:%S", local);
    printf("%s\n", buffer);
    return 0;
}
# 运行结果:
# 现在是 2022-10-25 10:34:14

五、标准实用函数库(stdlib.h)

stdlib.h 提供了一些通用的实用函数,如内存分配、随机数生成、进程控制等。

1. 动态内存分配

(1) malloc 和 free

malloc 用于动态分配内存,free 用于释放已分配的内存。

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

int main() {
    int *arr = (int *)malloc(5 * sizeof(int));
    if (arr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        arr[i] = i * i;
    }
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    free(arr);
    return 0;
}
# 运行结果:
# 0 1 4 9 16

2. 随机数生成

(1) rand 和 srand

rand 用于生成随机数,srand 用于设置随机数生成的种子。

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

int main() {
    srand(time(0));
    for (int i = 0; i < 5; i++) {
        printf("%d ", rand());
    }
    printf("\n");
    return 0;
}
# 运行结果:
# 生成一组随机数,例如: 1804289383 846930886 1681692777 1714636915 1957747793

3. 字符串转换为数字

(1) atoi 和 atof

atoi 用于将字符串转换为整数,atof 用于将字符串转换为浮点数。

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

int main() {
    char str1[] = "123";
    char str2[] = "45.67";

    int num1 = atoi(str1);
    double num2 = atof(str2);

    printf("整数: %d\n", num1);
    printf("浮点数: %.2f\n", num2);
    return 0;
}
# 运行结果:
# 整数: 123
# 浮点数: 45.67

总结

        C语言标准库是C语言强大功能的重要组成部分,它为开发者提供了各种实用的工具函数,涵盖了输入输出、字符串操作、数学计算、时间处理和通用实用函数等方面。通过合理利用这些库函数,开发者可以显著提高代码的效率、可读性和可维护性。

        无论是在处理复杂的数学计算、字符串操作,还是在管理时间、内存或生成随机数时,C标准库中的这些功能都能帮助我们更简洁、高效地完成任务。了解并熟练使用这些标准库函数,将使您的C语言编程更加得心应手。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值