【C/C++】之C语言库函数
这个帖子记录一下 C语言 中经常用到的函数库中的函数及其用法。
1、<math.h>
math.h是进行数学操作的函数库。使用这个函数库,需要先导入包: #include <math.h> 。math包中的函数如下:
函数定义 | 函数功能 | 函数说明 |
---|---|---|
int abs(int x) | 求整数x的绝对值 | |
double fabs(double x) | 求实数x的绝对值 | 小数部分不会被忽略 |
double exp(double x) | 求e的x次方的值 | |
double floor(double x) | 将实数x向下取整 | |
double ceil(double x) | 将实数x向上取整 | |
double log(double x) | 求以e为底x的对数的值 | |
double log10(double x) | 求以10为底x的对数的值 | |
double pow(double x, double y) | 求x的y次方的值 | |
double sqrt(double x) | 将x开平方 | |
double sin(double x) | 求弧度x的正弦值 | x是弧度值 |
double cos(double x) | 求弧度x的余弦值 | x是弧度制 |
double tan(double x) | 求弧度x的正切值 | x是弧度制 |
以下是利用上面的函数编写的代码:
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { printf("-20的绝对值是:%d\n", abs(-20)); printf("-20.5的绝对值是:%f\n", fabs(-20.5)); printf("e的二次方的值是:%f\n", exp(2)); printf("20.9向下取整是:%f\n", floor(20.9)); printf("20.1向上取整是:%f\n", ceil(20.1)); printf("以e为底100的对数是:%f\n", log(100)); printf("以10为底100的对数是:%f\n", log10(100)); printf("2的3次方的值是:%f\n", pow(2, 3)); printf("9开平方的值是:%f\n", sqrt(9)); return 0; }
运行结果如下:
-20的绝对值是:20
-20.5的绝对值是:20.500000
e的二次方的值是:7.389056
20.9向下取整是:20.000000
20.1向上取整是:21.000000
以e为底100的对数是:4.605170
以10为底100的对数是:2.000000
2的3次方的值是:8.000000
9开平方的值是:3.000000
Process returned 0 (0x0) execution time : 1.966 s
Press any key to continue.
2、<ctype.h>
ctype.h是进行字符操作的函数库。使用这个函数库需要先导入包: #include <ctype.h> 。ctype包中的函数如下:
函数定义 | 函数功能 | 函数说明 |
---|---|---|
int isalnum(int ch) | 判断字符是不是字母或数字 | 参数可以是ASCII码,也可以是一个字符 |
int isalpha(int ch) | 判断字符是不是字母 | 参数可以是ASCII码,也可以是一个字符 |
int isdigit(int ch) | 判断字符是不是数字 | 参数可以是ASCII码,也可以是一个字符 |
int islower(int ch) | 判断字符是不是小写字母 | 参数可以是ASCII码,也可以是一个字符 |
int isupper(int ch) | 判断字符是不是大写字母 | 参数可以是ASCII码,也可以是一个字符 |
int ispunct(int ch) | 判断字符是不是除空格、字母、数字之外的可打印字符 | 参数可以是ASCII码,也可以是一个字符 |
int isspace(int ch) | 判断字符是不是空格、制表或换行符 | 参数可以是ASCII码,也可以是一个字符 |
int tolower(int ch) | 将大写字母转换成小写字母 | 参数可以是ASCII码,也可以是一个字符 |
int toupper(int ch) | 将小写字母转换成大写字母 | 参数可以是ASCII码,也可以是一个字符 |
以下是利用上面的函数编写的代码:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { printf("m是不是数字或字母?%s\n", isalnum('m') ? "是" : "否"); printf("m是不是字母?%s\n", isalpha('m') ? "是" : "否"); printf("m是不是数字?%s\n", isdigit('m') ? "是" : "否"); printf("m是不是小写字母?%s\n", islower('m') ? "是" : "否"); printf("m是不是大写字母?%s\n", isupper('m') ? "是" : "否"); printf("%是不是除空格、字母、数字之外的可打印字符?%s\n", ispunct('%') ? "是" : "否"); printf("\\n是不是空格、制表符或换行符?%s\n", isspace('\n') ? "是" : "否"); printf("将m转为大写字母:%c\n", toupper('m')); printf("将M转为小写字母:%c\n", tolower('M')); return 0; }
运行结果如下:
m是不是数字或字母?是
m是不是字母?是
m是不是数字?否
m是不是小写字母?是
m是不是大写字母?否
是不是除空格、字母、数字之外的可打印字符?是
\n是不是空格、制表符或换行符?是
将m转为大写字母:M
将M转为小写字母:m
Process returned 0 (0x0) execution time : 1.732 s
Press any key to continue.
3、<string.h>
string.h是进行字符串操作的函数库。使用这个函数库需要导入包: #include <string.h> 。string包中的函数如下:
函数定义 | 函数功能 | 函数说明 |
---|---|---|
char* strcat(char* s1, char* s2) | 将字符串s2拼接到字符串s1后面 | 字符串s1的长度必须足够 |
char* strcpy(char* s1, char* s2) | 将字符串s2复制给字符串s1 | |
int strcmp(char* s1, char* s2) | 字符串s1和s2进行比较 | 逐个字母比较,字母大的大;如果前面的字母都相同,则长的字符串大 |
unsigned strlen(char* s) | 获取字符串s的长度 | |
char* strstr(char* s1, char* s2) | 获取s1中s2第一次出现的地方后面的内容 | 包括s2 |
以下是利用上面的函数编写的代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char s1[80] = "I am string 1."; char* s2 = "I am not string 2."; printf("字符串1的值是:%s\n", s1); printf("字符串2的值是:%s\n", s2); printf("将s2拼接到s1后面得到:%s\n", strcat(s1, s2)); printf("s1和s2比较:%s\n", strcmp(s1, s2) ? "s1大" : "s2大"); printf("将s2复制给s1:%s\n", strcpy(s1, s2)); printf("字符串s1的长度:%d\n", strlen(s1)); printf("s1中not及之后的内容:%s\n", strstr(s1, "not")); return 0; }
运行结果如下:
字符串1的值是:I am string 1.
字符串2的值是:I am not string 2.
将s2拼接到s1后面得到:I am string 1.I am not string 2.
s1和s2比较:s1大
将s2复制给s1:I am not string 2.
字符串s1的长度:18
s1中not及之后的内容:not string 2.
Process returned 0 (0x0) execution time : 1.747 s
Press any key to continue.