C语言函数大全-- t 开头的函数
C语言函数大全
本篇介绍C语言函数大全-- t 开头的函数
1. tan,tanf,tanl
1.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
double tan(double x) | 计算 以弧度 x 为单位的角度的正切值(double) |
float tanf(float x) | 计算 以弧度 x 为单位的角度的正切值(float) |
long double tanl(long double x) | 计算 以弧度 x 为单位的角度的正切值(long double) |
1.2 演示示例
#include <stdio.h>
#include <math.h>int main()
{double x = 45.0;double tan_value = tan(x * M_PI / 180.0);printf("The tangent of %lf degrees is %lf\n", x, tan_value);float xf = 60.0f;float tan_valuef = tanf(xf * M_PI / 180.0f);printf("The tangent of %f degrees is %f\n", xf, tan_valuef);long double xL = 30.0l;long double tan_valueL = tanl(xL * M_PI / 180.0l);printf("The tangent of %Lf degrees is %Lf\n", xL, tan_valueL);return 0;
}
1.3 运行结果

2. tanh,tanhf,tanhl
2.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
double tanh(double x); | 计算 x 的双曲正切值(double) |
float tanhf(float x); | 计算 x 的双曲正切值(float) |
long double tanhl(long double x); | 计算 x 的双曲正切值(long double) |
2.2 演示示例
#include <stdio.h>
#include <math.h>int main()
{double x = 1.0;double tan_value = tanh(x);printf("%lf 的双曲正切值是 %lf\n", x, tan_value);float y = 2.0f;float tanh_value = tanhf(y);printf("%f 的双曲正切值是 %f\n", y, tanh_value);long double z = 3.0l;long double tanhl_value = tanhl(z);printf("%Lf 的双曲正切值是 %Lf\n", z, tanhl_value);return 0;
}
2.3 运行结果

3. tell
3.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
off_t tell(int fd); | 用于返回文件指针当前位置相对于文件开头的偏移量 |
参数:
- fd : 是文件描述符,表示要查询的文件
3.2 演示示例
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>int main()
{char buf[100];int fd = open("test.txt", O_RDONLY);off_t offset = tell(fd);printf("当前的文件偏移量是 %ld\n", offset);int nread = read(fd, buf, sizeof(buf));offset = tell(fd);printf("读取了 %d 个字节后,文件偏移量是 %ld\n", nread, offset);close(fd);return 0;
}
在上面这个示例中,
- 首先我们打开了一个名为 test.txt 的文件,并使用
tell()函数获取了当前的文件偏移量。 - 然后我们用
read()函数读取了一些数据,并再次使用tell()函数来获取新的文件偏移量。 - 最后我们使用
close()函数关闭文件。
注意:
tell()函数和lseek函数的功能类似,但有一个重要的区别:tell()函数只用于查询当前位置,而不能修改文件指针的位置。如果要修改文件指针的位置,请使用lseek()函数。
下面我们来看看,使用 lseek() 函数来演示上面的 tell() 函数的示例 :
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>int main()
{char buf[100];int fd = open("test.txt", O_RDONLY);off_t offset = lseek(fd, 0, SEEK_CUR);printf("当前的文件偏移量是 %ld\n", offset);int nread = read(fd, buf, sizeof(buf));offset = lseek(fd, 0, SEEK_CUR);printf("读取了 %d 个字节后,文件偏移量是 %ld\n", nread, offset);close(fd);return 0;
}
3.3 运行结果


4. telldir
4.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
long int telldir(DIR *dirp); | 获取目录流的当前位置 |
参数:
- dirp : 指向
DIR类型结构体的指针
4.2 演示示例
#include <stdio.h>
#include <dirent.h>int main()
{DIR *dirp;struct dirent *direntp;// 打开当前工作目录dirp = opendir(".");if (dirp == NULL) {printf("无法打开目录。\n");return 1;}// 遍历目录下的所有文件和子目录while ((direntp = readdir(dirp)) != NULL) {printf("%s\n", direntp->d_name);}closedir(dirp);return 0;
}
4.3 运行结果

5. textheight,textwidth
5.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
int textheight(char *string); | 用于获取当前文本模式下字符的高度 |
int textwidth(char *string); | 用于获取当前文本模式下字符的宽度 |
参数:
- string : 要查询的字符串
5.2 演示示例
#include <graphics.h>int main() {initwindow(640, 480, "Example");char str[] = "Hello, world!";int height = textheight(str); // 当前文本模式下字符的高度int width = textwidth(str); // 当前文本模式下字符的宽度outtextxy(100, 100, str);outtextxy(100, 120, "Height: ");outtextxy(170, 120, itoa(height, str, 10));outtextxy(100, 140, "Width: ");outtextxy(170, 140, itoa(width, str, 10));getch();closegraph();return 0;
}
5.3 运行结果

6. time
6.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
time_t time(time_t *timer); | 可以用于获取从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的秒数 |
参数:
- timer : 一个指向
time_t类型对象的指针,如果不想使用此参数,可以将它设置为NULL
6.2 演示示例
#include <stdio.h>
#include <time.h>int main()
{time_t curtime;time(&curtime);printf("当前时间是 %s", ctime(&curtime));return 0;
}
在上面的示例中,
- 首先我们使用
time()函数来获取当前时间的秒数; - 然后使用
ctime()函数将其转换为可读的日期和时间格式; - 最后,再用将日期和时间字符串输出到标准输出流中。
6.3 运行结果

7. tmpfile
7.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
FILE *tmpfile(void); | 可以用于在临时目录中创建一个唯一的临时文件,并返回文件指针 |
7.2 演示示例
#include <stdio.h>int main()
{FILE *fp;char str[60];fp = tmpfile();if (fp == NULL) {perror("打开临时文件失败");return 1;}fputs("这是一个临时文件", fp);rewind(fp);fgets(str, sizeof(str), fp);printf("从临时文件读取的内容是: %s", str);fclose(fp);return 0;
}
7.3 运行结果

在上述的示例中,
- 首先我们使用
tmpfile()函数创建一个临时文件; - 接着使用
fputs()函数将字符串"这是一个临时文件"写入该文件; - 然后,我们使用
rewind()函数将文件指针移动到文件开始处; - 再接着,使用
fgets()函数从临时文件中读取数据并将其存储到字符串数组str中; - 最后,我们输出从临时文件中读取的数据,并关闭临时文件。
注意: 使用
tmpfile()创建的临时文件只在程序运行期间存在,并在程序终止时自动删除。如果需要在程序运行期间保留临时文件,请使用tmpnam()或mkstemp()等函数来创建文件。
8. tmpnam
8.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
char *tmpnam(char *s); | 用于创建一个唯一的临时文件名 |
参数:
- s : 一个指向字符数组的指针,用于存储临时文件名。如果
s等于NULL,则函数会返回指向静态内存区的指针,该内存区包含了唯一的临时文件名
8.2 演示示例
#include <stdio.h>int main()
{char tmpname[L_tmpnam];char *filename;filename = tmpnam(tmpname);printf("临时文件名是:%s\n", filename);return 0;
}
在上面的示例中,
- 我们首先使用
tmpnam()函数创建一个唯一的临时文件名; - 然后将其存储到字符数组
tmpname中; - 最后,我们输出该临时文件名。
注意: 使用
tmpnam()创建的临时文件名只在程序运行期间存在,不具有真正唯一性,因此可能存在一定程度的风险。如果需要创建一个具有真正唯一性的临时文件,请考虑使用mkstemp()或类似的函数。
8.3 运行结果

9. toascii
9.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
int toascii(int c); | 将一个字符转换为其对应的 ASCII 码值 |
参数:
- c : 要转换的字符
9.2 演示示例
#include <stdio.h>
#include <ctype.h>int main()
{char ch = 'A';// 将字符转换为其对应的 ASCII 码值int ascii_val = toascii(ch);printf("字符 %c 的 ASCII 码值为 %d\n", ch, ascii_val);return 0;
}
注意 :
toascii()函数已经过时,不建议在新代码中使用。在C99标准中,改用更安全的isascii()函数来检查字符是否为7-bit ASCII字符,并使用位掩码操作或其他算法来将非ASCII字符转换为相应的7-bit ASCII码值。
知识点:
7-bit ASCII,也称为美国信息交换标准代码 (American Standard Code for Information Interchange),是一种基于英语的字符编码系统,使用7个二进制位(即一个字节)表示每个字符。它涵盖了拉丁字母、数字、标点符号和一些特殊符号,共计128个字符。
9.3 运行结果

10. tolower
10.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
int tolower(int c); | 可以用于将一个 ASCII 字符转换为小写字母 |
参数:
- c : 要转换的字符
10.2 演示示例
#include <stdio.h>
#include <ctype.h>int main()
{char str[] = "Hello, World!";int i = 0;printf("转换前字符串: %s\n", str);printf("转换后字符串: ");while (str[i]) {putchar(tolower(str[i]));i++;}return 0;
}
10.3 运行结果

11. toupper
11.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
int toupper(int c); | 可以用于将一个 ASCII 字符转换为大写字母 |
参数:
- c : 要转换的字符
11.2 演示示例
#include <stdio.h>
#include <ctype.h>int main()
{char str[] = "Hello, World!";int i = 0;printf("转换前字符串: %s\n", str);printf("转换后字符串: ");while (str[i]) {putchar(toupper(str[i]));i++;}return 0;
}
11.3 运行结果

12. trunc,truncf,truncl
12.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
double trunc(double x); | 截取 x 的小数部分,并返回整数部分(double) |
float truncf(float x); | 截取 x 的小数部分,并返回整数部分(float) |
long double truncl(long double x); | 截取 x 的小数部分,并返回整数部分(long double) |
12.2 演示示例
#include <stdio.h>
#include <math.h>int main()
{double x = 3.14159;float y = 2.71828f;long double z = 1.41421356L;// 截去 double 类型浮点数的小数部分double a = trunc(x);// 截去 float 类型浮点数的小数部分float b = truncf(y);// 截去 long double 类型浮点数的小数部分long double c = truncl(z);printf("double 类型 %.5lf 的整数部分为 %.0lf\n", x, a);printf("float 类型 %.5f 的整数部分为 %.0f\n", y, b);printf("long double 类型 %.8Lf 的整数部分为 %.0Lf\n", z, c);return 0;
}
12.3 运行结果

13. tzset
13.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
void tzset(void); | 可以用于设置时区信息 |
参数:
13.2 演示示例
UNIX/Linux 下示例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define _XOPEN_SOURCE 700int main()
{time_t rawtime;struct tm *timeinfo;// 设置时区为 UTCsetenv("TZ", "UTC", 1);tzset();time(&rawtime);timeinfo = localtime(&rawtime);printf("当前时间是:%s", asctime(timeinfo));return 0;
}
windows 下示例:
#include <stdio.h>
#include <windows.h>
#include <time.h>int main()
{time_t rawtime;struct tm *timeinfo;TIME_ZONE_INFORMATION tzinfo;GetTimeZoneInformation(&tzinfo);// 将 WCHAR* 转换为 char*int len = WideCharToMultiByte(CP_UTF8, 0, tzinfo.StandardName, -1, NULL, 0, NULL, NULL);char* standard_name = (char*) malloc(len * sizeof(char));WideCharToMultiByte(CP_UTF8, 0, tzinfo.StandardName, -1, standard_name, len, NULL, NULL);_putenv_s("TZ", standard_name);tzset();time(&rawtime);timeinfo = localtime(&rawtime);printf("当前时间是:%s", asctime(timeinfo));free(standard_name);return 0;
}
在上述示例代码中,
- 首先定义变量
rawtime和timeinfo,分别用于存储当前时间和时间结构体。 - 接着使用
GetTimeZoneInformation()函数获取当前系统时区信息,并将其存储在tzinfo变量中。 - 然后使用
WideCharToMultiByte()函数将tzinfo.StandardName转换为UTF-8编码的字符串,并将其存储在standard_name变量中。 - 再接着使用
putenv_s()函数将standard_name设置为环境变量TZ的值,并使用 tzset 函数更新本地时区信息。 - 再然后使用
localtime()函数将rawtime转换为时间结构体timeinfo。 - 之后使用
asctime()函数将时间结构体timeinfo转换为字符串格式,并输出到标准输出流中。 - 最后释放
standard_name分配的内存空间,并正常结束程序。
13.3 运行结果

14. tgamma,tgammaf,tgammal
14.1 函数说明
| 函数声明 | 函数功能 |
|---|---|
double tgamma(double x); | 用于计算 Gamma 函数(double) |
float tgammaf(float x); | 用于计算 Gamma 函数(float) |
long double tgammal(long double x); | 用于计算 Gamma 函数(long double) |
14.2 演示示例
#include <stdio.h>
#include <math.h>int main()
{double x = 5.0;float y = 7.2f;long double z = 2.5L;double result1 = tgamma(x);float result2 = tgammaf(y);long double result3 = tgammal(z);printf("tgamma(%lf) = %lf\n", x, result1);printf("tgammaf(%f) = %f\n", y, result2); printf("tgammal(%Lf) = %Lf\n", z, result3);return 0;
}
知识点: 伽玛函数(
Gamma函数),也叫欧拉第二积分,是阶乘函数在实数与复数上扩展的一类函数。
14.3 运行结果

参考
- [API Reference Document]
- [ASCII]
相关文章:
C语言函数大全-- t 开头的函数
C语言函数大全 本篇介绍C语言函数大全-- t 开头的函数 1. tan,tanf,tanl 1.1 函数说明 函数声明函数功能double tan(double x)计算 以弧度 x 为单位的角度的正切值(double)float tanf(float x)计算 以弧度 x 为单位的角度的正…...
安卓系统APP稳定性测试分析的研究报告
目录 第一章:概念 第二章:重要性 第三章:意义和作用 第四章:行业现状 第五章:常见测试方法和工具 第六章:实际测试场景 第七章:测试方案 第八章:测试方法 第九章࿱…...
【Java基础】集合
一、集合概述 为了方便对多个对象进行存储和操作,集合是一种Java容器,可以动态地把多个对象引用放入容器中 数组存储的特点 一旦初始化后,长度不可改变,元素类型不可改变提供的方法很少,对于添加、删除、获取实际元…...
【Android入门到项目实战-- 9.1】—— 传感器的使用教程
目录 传感器的定义 三大类型传感器 1、运动传感器 2、环境传感器 3、位置传感器 传感器开发框架 1、SensorManager 2、Sensor 3、SensorEvent 4、SensorEventListener 一、使用传感器开发步骤 1、获取传感器信息 1)、获取传感器管理器 2)、获取设备的传感器对象列…...
yolov8 浅记
目录 Pre: 1. YOLOv8 概述 2. 模型结构设计 3. Loss 计算 4.训练数据增强 5. 训练策略 6、部署推理 End Pre: yolo系列发布时间: 先贴一下yolo各系列的发布时间(说出来很丢人,我以为 yolox是 最新的): yoloX 2…...
前端009_类别模块_修改功能
第九章 1、需求分析2、Mock添加查询数据3、Mock修改数据4、Api调用回显数据5、提交修改后的数据6、效果1、需求分析 需求分析 当点击 编辑 按钮后,弹出编辑窗口,并查询出分类相关信息进行渲染。修改后点击 确定 提交修改后的数据。 2、Mock添加查询数据 请求URL: /article/…...
2022级吉林大学面向对象第一次上机测试
【注:解答全部为本人所写,仅供同学们学习时参考使用,请勿照搬抄袭!】 1、 1)略 2)如果main,f1,g1,g2或更多的函数之间有更为复杂的调用关系,头文件一般按怎样的规律写呢? 一般情况下…...
计算机体系结构总结:内存一致性模型 Memory consistency Model
存储一致性是为了保证多线程背景下的访存顺序,多线程的语句是可以交错执行,使得顺序不同产生不同的执行结果。 下面P2的输出结果可能是什么? P1, P2两个线程的语句是可以交叉执行的,比如1a, 2a, 2b, 1b;一个线程内的语…...
高速列车运行控制系统(CTCS)介绍
1、CTCS功能 安全防护 在任何情况下防止列车无行车许可运行防止列车超速运行防止列车超过进路允许速度防止列车超过线路结构规定的速度防止列车超过机车车辆构造速度防止列车超过临时限速及紧急限速防止列车超过铁路有关运行设备的限速防止列车溜逸 人机界面 以字符、数字及…...
C#“System.Threading.ThreadStateException”类型的未经处理的异常
备忘 最近做一个功能,从主界面进入另一个界面时,数据量较大,处理信息较多,程序宕机。而且点击程序还会提示程序无响应。不得已用另一个线程显示界面。但在界面中使用控件时,报错:“System.Threading.Thread…...
为什么要交叉编译?
一、什么是交叉编译、为什么要交叉编译 1、什么是交叉编译? 交叉编译:是在一个平台上生成另一个平台上的可执行代码。比如我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的…...
java版本电子招标采购系统源码—企业战略布局下的采购
智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明࿰…...
【MATLAB数据处理实用案例详解(17)】——利用概念神经网络实现柴油机故障诊断
目录 一、问题描述二、利用概念神经网络实现柴油机故障诊断原理三、算法步骤3.1 定义样本3.2 样本归一化3.3 创建网络模型3.4 测试3.5 显示结果 四、运行结果五、完整代码 一、问题描述 柴油机的结构较为复杂,工作状况非常恶劣,因此发生故障的可能性较大…...
神奇字符串、密钥格式化----2023/5/6
神奇字符串----2023/5/6 神奇字符串 s 仅由 ‘1’ 和 ‘2’ 组成,并需要遵守下面的规则: 神奇字符串 s 的神奇之处在于,串联字符串中 ‘1’ 和 ‘2’ 的连续出现次数可以生成该字符串。 s 的前几个元素是 s “1221121221221121122……” 。…...
STM32F4_十进制和BCD码的转换
目录 前言 1. BCD码 2. BCD码和十进制转换的算法 前言 最近在学习STM32单片机(不仅仅是32)的RTC实时时钟系统的过程中,需要配置时钟的时间、日期;这些都需要实现BCD码和十进制之间进行转换。这里和大家一起学习BCD码和十进制之…...
random — 伪随机数生成器(史上总结最全)
目的:实现几种类型的伪随机数生成器。 random 模块基于 Mersenne Twister 算法提供了一个快速的伪随机数生成器。Mersenne Twister 最初开发用于为蒙特卡洛模拟器生成输入,可生成具有分布均匀,大周期的数字,使其可以广泛用于各种…...
基于VBA实现成绩排序的最佳方法-解放老师的双手
作为一名老师,每到期末就要面对一件让人头疼的事情——成绩表统计。 首先,要收集每个学生的考试成绩。这需要花费大量的时间和精力,因为每个学生都有多门科目的成绩需要统计。 其次,要将每个学生的成绩录入到电子表格中。这看起来…...
OCAF如何实现引用关系和拓扑关系
在 OpenCASCADE 中,TDF_Label 是用来保存对象及其属性的基本单元。TDF_Label 可以通过添加不同类型的属性来保存不同的数据类型。属性是继承自 TDF_Attribute 类的对象,每个属性都有一个唯一的标识符(GUID)来识别其类型。TDF_Label是OpenCASCADE中用来管理数据的标签类,它…...
自动创建设备节点
在成功加载驱动模块之后,还需要使用 mknod命令创建设备节点,才能在/dev目录下创建对应的设备文件。自动创建设备节点的功能需要依赖 mdev 设备管理机制,在使用 buildroot 构建 rootfs 的时候,会默认构建 mdev 的功能,m…...
JavaWeb ( 六 ) JSP
2.4.JSP JSP (Java Server Pages) : 一种在服务器端生成动态页面的技术,本质上就是Servlet。将HTML代码嵌入到Java代码中, 通过Java逻辑控制HTML代码的结构从而生成页面。在MVC中通常担任视图层(view),负责信息的展示与收集。 2…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
