C基础-标准库下

上:http://t.csdnimg.cn/qj5uA

目录

七. math.h

八. setjmp.h

九. signal.h

十. stdarg.h

十一.stddef.h

十二. stdio.h

十三. stdlib.

十四. string.h

十五. time.h


七. math.h

定义了各种数学函数和一个宏。

宏和函数描述

序号宏 & 描述
1HUGE_VAL

当函数的结果不可以表示为浮点数时。如果是因为结果的幅度太大以致于无法表示,则函数会设置 errno 为 ERANGE 来表示范围错误,并返回一个由宏 HUGE_VAL 或者它的否定(- HUGE_VAL)命名的一个特定的很大的值。

如果结果的幅度太小,则会返回零值。在这种情况下,error 可能会被设置为 ERANGE,也有可能不会被设置为 ERANGE。

序号函数 & 描述
1double acos(double x)
返回以弧度表示的 x 的反余弦。
2double asin(double x)
返回以弧度表示的 x 的反正弦。
3double atan(double x)
返回以弧度表示的 x 的反正切。
4double atan2(double y, double x)
返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。
5double cos(double x)
返回弧度角 x 的余弦。
6double cosh(double x)
返回 x 的双曲余弦。
7double sin(double x)
返回弧度角 x 的正弦。
8double sinh(double x)
返回 x 的双曲正弦。
9double tanh(double x)
返回 x 的双曲正切。
10double exp(double x)
返回 e 的 x 次幂的值。
11double frexp(double x, int *exponent)
把浮点数 x 分解成尾数和指数。返回值是尾数,并将指数存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent。
12double ldexp(double x, int exponent)
返回 x 乘以 2 的 exponent 次幂。
13double log(double x)
返回 x 的自然对数(基数为 e 的对数)。
14double log10(double x)
返回 x 的常用对数(基数为 10 的对数)。
15double modf(double x, double *integer)
返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。
16double pow(double x, double y)
返回 x 的 y 次幂。
17double sqrt(double x)
返回 x 的平方根。
18double ceil(double x)
返回大于或等于 x 的最小的整数值。
19double fabs(double x)
返回 x 的绝对值。
20double floor(double x)
返回小于或等于 x 的最大的整数值。
21double fmod(double x, double y)
返回 x 除以 y 的余数。

源码截图:

例子:

源码:

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

int main() {

    double a = 2.0;
     
    double b = -2.0;

    //打印a的平方根
    printf("a的平方根 %f \n", sqrt(a));

    //打印a的3次方根
    printf("a的3次方根 %f \n", pow(a,3));

    //打印b的绝对值
    printf("打印b的绝对值 %f \n", fabs(b));

    return 0;
}

八. setjmp.h

定义了宏 setjmp()、函数 longjmp() 和变量类型 jmp_buf,该变量类型会绕过正常的函数调用和返回规则。

源码

例子

1.不加跳转

2.加上跳转

源码:

#include <stdio.h>
#include <setjmp.h>


void a() {

    printf("执行a函数");
}

void b() {

    printf("执行b函数");
}

int main() {

    jmp_buf env;
    if (setjmp(env) == 0) {
        // 这里是正常执行的代码
        a();

        longjmp(env, 0);
    }
    else {
        // 这是从 longjmp 跳转回来后执行的代码
        b();
    }

  

    return 0;
}

九. signal.h

调用函数和一些宏来处理程序执行期间报告的不同信号。

  1. 信号处理函数:通过 signal 函数可以注册信号处理函数,当指定的信号发生时,系统会调用相应的处理函数。
  2. 信号发送:可以使用 raise 函数向当前进程发送指定的信号。
  3. 信号屏蔽:可以使用 sigprocmask 函数来设置信号屏蔽字,以控制哪些信号被阻塞或不被阻塞。
  4. 信号等待:可以使用 sigsuspend 函数来等待一个或多个信号的发生。

源码截图

例子:

源码

#include <stdio.h>
#include <signal.h>

void sigusr1Handler(int sig) {
    printf("收到!\n");
}

int main() {

    printf("注册 SIGINT 信号的处理函数.\n");
    // 注册 SIGINT 信号的处理函数
    signal(SIGINT, sigusr1Handler);

    printf("下面信号发送.\n");

    raise(SIGINT);

   // while (1) {}

    return 0;
}

十. stdarg.h

主要用于实现可变参数列表的相关操作。

宏描述

序号宏 & 描述
1void va_start(va_list ap, last_arg)
这个宏初始化 ap 变量,它与 va_arg 和 va_end 宏是一起使用的。last_arg 是最后一个传递给函数的已知的固定参数,即省略号之前的参数。
2type va_arg(va_list ap, type)
这个宏检索函数参数列表中类型为 type 的下一个参数。
3void va_end(va_list ap)
这个宏允许使用了 va_start 宏的带有可变参数的函数返回。如果在从函数返回之前没有调用 va_end,则结果为未定义。

源码截图;

例子:

源码:

#include <stdio.h>
#include <stdarg.h>

void print_args(int count, ...) {
    va_list args;
    va_start(args, count);

    for (int i = 0; i < count; i++) {
        int num = va_arg(args, int);
        printf("Arg %d: %d\n", i, num);
    }

    va_end(args);
}

int main() {
    print_args(3, 10, 20, 30);
    return 0;
}

十一.stddef.h

包含了一些通用的定义和类型声明。

变量描述

序号变量 & 描述
1ptrdiff_t
这是有符号整数类型,它是两个指针相减的结果。
2size_t
这是无符号整数类型,它是 sizeof 关键字的结果。
3wchar_t
这是一个宽字符常量大小的整数类型。

源码截图

例子:

源码

#include <stdio.h>
#include <stddef.h>

int main() {
    size_t arraySize = 10;
    printf("Size: %zu\n", arraySize);
    return 0;
}

十二. stdio.h

标准输入输出头文件)是 C 语言中非常重要的头文件,包含了许多与标准输入、输出操作相关的函数和宏定义。

一些主要的函数和操作包括:

  • printf():格式化输出数据到标准输出(通常是屏幕)。
  • scanf():从标准输入(通常是键盘)读取格式化的数据。
  • fopen()fclose():用于文件的打开和关闭操作。
  • fprintf()fscanf():用于对文件进行格式化输入输出。
  • putchar():输出一个字符。
  • getchar():获取一个字符。

源码:

例子:

源码:

#include <stdio.h>

int main() {

    printf("Hello, World!\n");
    printf("You entered: %d\n", 1);
    return 0;
}

十三. stdlib.

包含了一系列实用的函数和宏。

以下是一些常见的用途:

  • malloc() 和 free() 用于动态内存分配和释放。
  • atoi() 用于将字符串转换为整数。
  • rand() 用于生成随机数。
  • exit() 用于终止程序。

源码:

例子:

源码:

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

int main() {
    int* ptr = (int*)malloc(sizeof(int));
    if (ptr) {
        *ptr = 42;
        printf("Value at allocated memory: %d\n", *ptr);
        free(ptr);
    }

    int num = atoi("123");
    printf("Converted integer: %d\n", num);

    return 0;
}

十四. string.h

包含了很多用于字符串操作的函数.

以下是一些常见的:

  • strcpy():用于复制字符串。
  • strncpy():指定长度的字符串复制。
  • strcat():连接两个字符串。
  • strncat():指定长度的字符串连接。
  • strcmp():比较两个字符串。
  • strncmp():指定长度的字符串比较。
  • strlen():获取字符串的长度。

源码

例子:

源码:

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

int main() {
    char src[] = "Hello";
    char dst[10];

    strcpy(dst, src);
    printf("Copied string: %s\n", dst);

    char str1[] = "Apple";
    char str2[] = "ApplePie";

    if (strcmp(str1, str2) == 0) {
        printf("Strings are equal\n");
    }
    else {
        printf("Strings are not equal\n");
    }

    return 0;
}

十五. time.h

主要用于时间相关的操作。

以下是一些常见的用法:

  • time_t 类型,通常用于表示时间。
  • time() 函数获取当前时间(以秒为单位)。
  • ctime() 函数将时间转换为字符串表示。
  • localtime() 函数将时间转换为本地时间的结构体表示。

源码截图

例子:

源码:

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

int main() {
    time_t now = time(NULL);
    printf("Current time in seconds: %ld\n", now);

    char* timeStr = ctime(&now);
    printf("Current time as string: %s", timeStr);

    struct tm* localTime = localtime(&now);
    printf("Year: %d\n", localTime->tm_year + 1900);

    return 0;
}

ps:需要在年份上加上1900,在月份上加上1,这是因为localtime函数返回的结构体中的年份和月份是从1900年和1月开始计数的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/673729.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++11 lambda表达式和包装器

C11 lambda表达式和包装器 一.lambda表达式1.lambda表达式的引入2.基本语法和使用1.基本语法2.使用1.传值捕捉的错误之处2.传引用捕捉 3.lambda表达式的底层原理4.lambda的特殊之处5.lambda配合decltype的新玩法 二.function包装器1.概念2.包装函数1.包装普通函数2.包装成员函数…

【Oracle篇】rman全库异机恢复:从RAC环境到单机测试环境的转移(第四篇,总共八篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

odoo10 编写审批拒绝弹窗

前言 在日常中有很多审批场景&#xff0c;例如请销假。审批拒绝的时候应该给出原因&#xff0c;此时&#xff0c;在form界面点击拒绝的时候应该弹出输入窗口。如下图所示。 编写模型 模块的目录下&#xff0c;新建wizard文件夹&#xff0c;然后直接创建一个models.py和views.p…

idea实用快捷键(持续更新...)

文章目录 1、快速输入try/catch/finally2、选中多个光标3、实现接口4、方法参数提示5、查看某个类的子类6、弹出显示查找内容的搜索框 1、快速输入try/catch/finally CtrlAltT 2、选中多个光标 ShiftAlt单机多选 End可以全部到行尾&#xff0c;Home则可以全部回到行首 3、实现接…

MySQL 使用方法以及教程

一、引言 MySQL是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛应用于Web开发、数据分析等领域。它提供了高效、稳定的数据存储和查询功能。同时&#xff0c;Python作为一种强大的编程语言&#xff0c;也提供了多种与MySQL交互的库&#…

中国人工智能区域竞争力研究报告(2024)

来源&#xff1a;赛迪顾问 近期历史回顾&#xff1a;2024年NoETL开启自动化数据管理新时代白皮书.pdf 创新引领用户“换新生活”-从AWE2024看家电及消费电子行业发展趋势报告&#xff08;精简版&#xff09;.pdf 2024智能网联汽车“车路云一体化”规模建设与应用参考指南&#…

字节裁员!开启裁员新模式。。

最近&#xff0c;互联网圈不太平&#xff0c;裁员消息此起彼伏。而一向以“狼性文化”著称的字节跳动&#xff0c;却玩起了“低调裁员”&#xff0c;用一种近乎“温柔”的方式&#xff0c;慢慢挤掉“冗余”的员工。 “细水长流”&#xff1a;裁员新模式&#xff1f; 不同于以往…

FreeRTOS基础(九):FreeRTOS的列表和列表项

今天我们将探讨FreeRTOS中的一个核心概念——列表&#xff08;List&#xff09;和列表项&#xff08;List Item&#xff09;。在实时操作系统&#xff08;RTOS&#xff09;中&#xff0c;任务的管理和调度是至关重要的&#xff0c;而FreeRTOS使用列表来实现这一功能。列表可以说…

城市低空经济“链接力”指数报告(2024)

来源&#xff1a;城市进化论&火石创造 近期历史回顾&#xff1a;2024年NoETL开启自动化数据管理新时代白皮书.pdf 创新引领用户“换新生活”-从AWE2024看家电及消费电子行业发展趋势报告&#xff08;精简版&#xff09;.pdf 2024智能网联汽车“车路云一体化”规模建设与应用…

鬼刀画风扁平化粒子炫动引导页美化版

源码介绍 分享一款引导页,响应式布局&#xff0c;支持移动PC 添加背景图片&#xff0c;美化高斯模糊 &#xff0c;删除蒙版人物部分&#xff0c;更图片人物画风更美好 删除雪花特效 替换字体颜色 添加底备案号 预留友情连接 效果预览 源码下载 https://www.qqmu.com/3381.h…

总结2024/6/3

省流&#xff0c;蓝桥杯国优&#xff0c;还是太菜了&#xff0c;听说都是板子题但是还是写不出来&#xff0c;靠暴力好歹没有爆0&#xff0c;还是得多练&#xff0c;明年加油了

分享5款.NET开源免费的Redis客户端组件库

前言 今天大姚给大家分享5款.NET开源、免费的Redis客户端组件库&#xff0c;希望可以帮助到有需要的同学。 StackExchange.Redis StackExchange.Redis是一个基于.NET的高性能Redis客户端&#xff0c;提供了完整的Redis数据库功能支持&#xff0c;并且具有多节点支持、异步编…

Python中的元素相乘与矩阵相乘(附Demo)

目录 前言1. 元素相乘2. 矩阵相乘3. 差异 前言 深度学习的矩阵相乘引发的Bug&#xff0c;由此深刻学习这方面的相关知识 在Python中&#xff0c;特别是使用NumPy库时&#xff0c;元素相乘和矩阵相乘是处理数组和矩阵时的常见操作 1. 元素相乘 元素相乘是指对两个相同形状的…

Windows端口本地转发

参考 微软Netsh interface portproxy 命令 界面端口代理的 Netsh 命令 | Microsoft Learn 使用Windows系统的portproxy功能配置端口转发 使用Windows系统的portproxy功能配置端口转发-阿里云帮助中心 (aliyun.com) 将来自0.0.0.0地址对端口35623的访问转发到172.18.106.16…

Python中degrees怎么用

degrees() 函数可以将弧度转换为角度。 语法 以下是 degrees() 方法的语法&#xff1a; import math math.degrees(x) 注意&#xff1a;degrees() 是不能直接访问的&#xff0c;需要导入 math 模块&#xff0c;然后通过 math 静态对象调用该方法。 参数 x -- 一个数值。 返…

苹果设备mac/Paid/phone 下载使用anki记忆卡

安卓的设备直接可以下 如果你这个&#xff0c;如图。 首先点击下列网址&#xff0c;下载&#xff0c;在里面搜索anki记忆卡 https://www.i4.cn 下载好&#xff0c;打开应用软件爱思助手。搜索anki记忆卡&#xff0c;下载&#xff0c;然后用数据线一端连接电脑一端连接手机或者…

【C++练级之路】【Lv.23】C++11——可变参数模板、lambda表达式和函数包装器

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、可变参数模板1.1 参数包的概念1.2 参数包的展开1.3 emplace系列 二、lambda表达式2.1 lambda的格式2.2 捕…

二级指针简单介绍

我们之前学习的&#xff1a;变量的地址是存入指针变量中的&#xff0c;然而指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那么指针变量的地址存放在哪里 &#xff1f; 这也就是二级指针 #include<stdio.h> int main() {int a10;int*p&a;int**pp&p;re…

假指纹与活体指纹检测

目录 1. 假指纹简介 2. 假指纹制作流程 3. 活体指纹检测 4. 活体指纹检测竞赛 1. 假指纹简介 随着科学技术的发展&#xff0c;指纹技术以各种各样的形式进入了我们的生活。在大多数情况下&#xff0c;指纹识别应用于移动设备和桌面设备解决方案&#xff0c;以提供安全方便的…

Linux命令篇(一):文件管理部分

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 1、cat命令常用参…