当前位置: 首页 > article >正文

C语言——库函数

常用的函数

https://cplusplus.com/reference/ 没事儿多看看

1 数学函数

#include <math.h>
#include <stdio.h>
int main() 
{

	printf("%lf\n", sqrt(4));//开平方根——>double类型
	printf("%lf\n", pow(2, 10));//求几次方的——>double类型
	printf("%d\n", abs(-1));//整数绝对值
	printf("%lf\n", fabs(-1.11));//浮点数的绝对值
    //三角函数...
    //对数函数...

	return 0;
}

2 时间函数

可以做游戏用

#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include <windows.h>
void test_time_type() 
{
	clock_t t1;	//其实就是long类型
	time_t t2;	//int64类型
	size_t t3;			
	struct tm t4;//右击查看定义就能知道详细
    /*struct tm
    {
    int tm_sec;   // seconds after the minute - [0, 60] including leap second
    int tm_min;   // minutes after the hour - [0, 59]
    int tm_hour;  // hours since midnight - [0, 23]
    int tm_mday;  // day of the month - [1, 31]
    int tm_mon;   // months since January - [0, 11]
    int tm_year;  // years since 1900——>从1900年开始
    int tm_wday;  // days since Sunday - [0, 6]
    int tm_yday;  // days since January 1 - [0, 365]
    int tm_isdst; // daylight savings time flag
	};*/
}
	

//1 获取当前时间
void get_cur_time() 
{
	//1.使用time函数获取时间戳 
	time_t t = time(NULL);
	//2.直接用ctime转换为字符串打印出来
	puts(ctime(&t));
	//3.时间戳转换为struct tm 自己去访问年月日时分秒
	struct tm* pt = localtime(&t);
	printf("%d年%d月%d日\n", pt->tm_year + 1900, pt->tm_mon + 1, pt->tm_mday);
	printf("%02d:%02d:%02d\n", pt->tm_hour, pt->tm_min, pt->tm_sec);
	//4.struct tm* 转换为字符串,内部有很多转换函数
	puts(asctime(pt));
	//5.格式化字符串
	char buffer[50] = "";
	strftime(buffer,50, "%Y-%m-%d %H:%M:%S", pt);
	puts(buffer);
	strftime(buffer, 50, "%F %T", pt);
	puts(buffer);
}

-----------------------------------------------------------------------------------------

// 2 !!!挺有用的,可以测自己写的算法运行时间间隔
void test_clock() 
{
	clock_t begin = clock();
    
	for (int i = 0; i < 1000000; i++) 
	{
		int a = i + 1;
		int b = i + a;
		int c = a + b + i;
	}
	clock_t end = clock();
	printf("duration:%ld", end - begin);
}

-----------------------------------------------------------------------------------------

//3 !!!定时器——>和sleep函数(会影响程序主循环)有区别的
bool on_timer(int duration, int id) 
{
	static int start_time[20] = { 0 };//静态变量,初始化代码只执行一次。普通变量每次都执行
	if (start_time[id] == 0) 
	{
		start_time[id] = clock();
	}
	int end_time = clock();
	if (end_time - start_time[id] >= duration) 
	{
		start_time[id] = end_time;
		return true;
	}
	return false;
}

-----------------------------------------------------------------------------------------


//4 记录时间
void count_time(int duration) 
{
	time_t start_time, end_time;
	int  old_time = 0;
	start_time = time(NULL);
	while (1) 
	{
		end_time = time(NULL);
		int etime = (int)difftime(end_time, start_time);
		if (old_time != etime) 
		{
			printf("过去了 %d 秒\n", etime);
		}
		old_time = etime;
		if(etime>=duration)
		{
			break;
		}
	}
}


-----------------------------------------------------------------------------------------

int main() 
{

	//get_cur_time();
	//test_clock();
	count_time(10);
	//while (true) 
	//{
	//	printf("11111111\n");
	//	//Sleep(2000);
	//	if(on_timer(2000,0))
	//		printf("22222222\n");
	//}
	return 0;
}

3 随机函数

通常结合时间函数来做

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

//1 rand 和 srand
void test_rand() 
{
	
	//rand()——>伪随机数
	//srand(100);//生成的随机树的最小值是100,随机函数种子,但也是伪随机数,可以与时间建立联系,就可以					 真正随机了
    //srand((unsigned int)time(NULL));
	printf("%d\n", rand());
}

-----------------------------------------------------------------------------------------

//2 设置随机数范围
void set_rand() 
{
	//1.取余数  n%x  [0,x-1]
	printf("取余固定范围:%d\n", rand() % 10);
	//2.n%x+a   [a,x-1+a];
	printf("最小值限定:%d\n", rand() % 10 + 5);
	//3.某一个数字的整数倍 
	printf("整数倍:%d\n", rand() % 100 * 10);
}

-----------------------------------------------------------------------------------------

//与定时器结合(下面场景用)
bool on_timer(int duration, int id)
{
	static int start_time[20] = { 0 };
	if (start_time[id] == 0)
	{
		start_time[id] = clock();
	}
	int end_time = clock();
	if (end_time - start_time[id] >= duration)
	{
		start_time[id] = end_time;
		return true;
	}
	return false;
}

-----------------------------------------------------------------------------------------

//3 随机数两种应用场景
void  test_use_rand() 
{	
    
    //抽奖
	int count = 1;
	while (1) 
	{
		int result = rand() % 1000;
		printf("第%03d次抽奖结果:", count);
		if (count>=100&&result == 0) //最少抽100次
		{
			printf("特等奖\n");
			break;
		}
		else if (result >= 10 && result < 20) 
		{
			printf("一等奖\n");
		}
		else if (result >= 100 && result <= 199) 
		{
			printf("二等奖\n");
		}
		else if (result >= 300 && result <= 500) 
		{
			printf("三等奖\n");
		}
		else 
		{
			printf("安慰奖\n");
		}
		count++;
	}
    
    
    //游戏
	int direct = 0;
	while (1) 
	{
		printf("怪物:");
        //用上定时器
		if (on_timer(1000, 0)) 
		{
			direct = rand() % 4;
		}
		switch (direct) 
		{
		case 0:
			printf("往上走!\n");
			break;
		case 1:
			printf("往下走\n");
			break;
		case 2:
			printf("往左走\n");
			break;
		case 3:
			printf("往右走\n");
			break;
		}
	}

}

int main() 
{
	
	test_rand();
	set_rand();
	test_use_rand();
	return 0;
}

4 可增长函数

#include <stdarg.h>
#include <stdio.h>
/*
va_list
va_start
va_arg
va_end
...缺省符
*/

int sum(unsigned int count, int arg1, ...) 
{
    //创建参数列表,初始化
	int result = arg1;
	va_list start;
	va_start(start, arg1);

	for (int i = 1; i < count; i++) 
	{
		result += va_arg(start, int);
	}
	va_end(start);
	return result;
}

-----------------------------------------------------------------------------------------

//模拟自己写一个printf函数
//为什么要用'%d'之类的格式控制字符
void my_printf(const char* str, ...) 
{	
    //做2种数据的解析
	int inum = 0;
	double dnum = 1.0;
    
	va_list start;
	va_start(start, str);
	while (*str)
	{
		if (*str == '%') 
		{
			str++;
			switch (*str) 
			{
			case 'd':
				inum = va_arg(start, int);
				printf("%d", inum);
				break;
			case 'f':
				dnum = va_arg(start, double);
				printf("%f", dnum);
				break;
			}
		}
		else 
		{
			printf("%c", *str);
		}
		str++;
	}
}

int main() 
{
	printf("sd\n");
	printf("%d\n", sum(2, 1,2));
	printf("%d\n", sum(3, 1,2,3));
	printf("%d\n", sum(4, 1,2,3,4));
	my_printf("整数 %d\t,小数%f", 12, 1.11f);
	return 0;
}

5 其他头文件

在这里插入图片描述

有的函数很简单,可以自己封装

#include<ctype.h>//检查字符各种功能
#include <stdlib.h>//字符串转换,伪随机,动态内存,搜索,qsort....
#include <stdio.h>//输入输出,文件操作
#include <stdbool.h>//true和false
#include <iso646.h>//逻辑运算符用单词表示
#include <limits.h>//里面有最大最小正整数之类的宏
#include <string.h>//字符串操作

bool is_digit(char num) 
{
	//return num >= '0' && num <= '9';
	return num >= '0' and num <= '9';
}

//qsort函数
int compare(const void* a, const void* b)
{
	return (*(int*)a - *(int*)b);
}


int main() 
{
	isdigit('1');
    
	printf("%d\n", INT_MAX);
	printf("%d\n", INT_MIN);
    
  ----------------------------------------------------------------------------
    //qsort函数 
	int values[] = { 40, 10, 100, 90, 20, 25 };
	int n;
	qsort(values, 6, sizeof(int), compare);
	for (n = 0; n < 6; n++)
		printf("%d ", values[n]);
   ----------------------------------------------------------------------------
    //分割字符串
	char str[] = "- This, a sample string.";
	char* pch;
	printf("Splitting string \"%s\" into tokens:\n", str);
	pch = strtok(str, " ,.-");
	while (pch != NULL)
	{
		printf("%s\n", pch);
		pch = strtok(NULL, " ,.-");
	}

	return 0;
}

http://www.kler.cn/a/419059.html

相关文章:

  • 虚拟机玩游戏,轻松实现多开不同IP
  • go-学习
  • smb cifs samba smbpasswd 笔记241127
  • FTP介绍与配置
  • 架构师的英文:Architect
  • Flink四大基石之CheckPoint
  • 最大值(Java Python JS C++ C )
  • 课程答疑微信小程序设计与实现
  • 概率论——假设检验
  • 【北京迅为】iTOP-4412全能版使用手册-第十九章 搭建和测试TFTP服务器
  • C++之2048(2.0版)
  • go并发设计模式runner模式
  • 初级数据结构——二叉搜索树
  • 【Linux】MDNS:局域网域名解析
  • 网络安全之IP伪造
  • 【k8s】kubelet 的相关证书
  • java并发面试复习
  • MyBlog(五) -- 用户注册页面完善
  • 群控系统服务端开发模式-应用开发-短信工厂结构封装
  • Harmony NEXT-越过相机读写权限上传图片至项目云存储中
  • Solidity基础语法
  • 纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
  • js对于json的序列化、反序列化有哪几种方法
  • 计算机网络基础篇
  • idea 自动导包,并且禁止自动导 *(java.io.*)
  • 数据结构之堆:原理与实现