常用头文件及函数
C语言编译器安装的时候还附带了很多标准函数库。当程序使用库中函数的时候,需要在程序开头声明程序调用的库。格式为:
#include<... .h>
常用头文件:
stdio.h 数据输入/输出 stdlib.h 不知道该属于什么类别的常用函数
string.h 和字符串有关的函数 math.h 各类数学函数
time.h 极少用但会用到的和时间有关的函数
ctype.h 字符类型和映射
如果让我给一个建议的话,就是在某个程序里把所有能想到的头文件都写上,以后每次用到就复制粘贴。
常用的输入输出函数:
输入:
int getchar() 读入一个字符,读到文件尾的时候返回一个EOF。
int putchar(int c) 输出一个字符,函数出错时返回EOF。
char *gets(cahr *buf) 读入一行字符,读到文件尾或者出错时返回NULL,否则返回存储区buf。
char *fgets(char *buf, int n, FILE *fp) 从指定文件中读入一行不超过n-1个字符的字符串,并将其保存在bug所指向的存储区。读到文件尾或者出错时返回NULL,否则返回存储区buf。
puts() 输出一行字符,并将字符末尾的'\0'替换成'\n'。
由于指针没有提到过,详细描述下getchar()和gets()。
假如在屏幕上输入:tuilixiehui。
程序为:
string ch;
ch=getchar(); 那么ch的值为t。
如果程序为:
ch=gets(); 那么ch的值为tuilixiehui。
scanf()中常用的数据类型说明符:
%d 有符号十进制整数 %o 无符号八进制整数
%u 无符号十进制整数 %x 无符号十六进制整数
%f 有符号浮点数(float) %lf 有符号浮点数(doubt)
%s 字符串
printf()中常用的数据类型说明符:
%c 单个字符 %d 有符号十进制整数
%o 无符号八进制整数 %u 无符号十进制整数
%x 无符号十六进制整数 %s 字符串
%e 有符号浮点数的科学表示法 %f 有符号浮点数的常规表示法
%g 有符号浮点数,按照f或e格式输出
printf()还可以规定数字的宽度,小数的位数:
printf(“%5.2f”,a); 这表示a的长度为5个字符,保留两位小数。如果a本身数字部分加上小数点不够五个字符,会补上前导空格。
其他常用格式标志:
-:数据在字段宽度内左对齐,默认右对齐
+:在有符号的数据类型前加符号,负数加前导负号,正数加前导正号。注意要写成%+d的样子,写成+%d显然错误。
0:数据在字段宽度内加前导0
#:对类型符o、x、X,加前缀0、0x、0X。对类型符e、E、f、g、G强制输出小数点。
字符类型判断函数:
在C语言编译器中,每个可输入的字符都对应一个编号(汉字和全角符号除外),称为ASCII编码。相同“类型”,比如数字,小写字母,大写字母的ASCII码是连续的。利用这一点我们可以判断一个字符所属的类型。比如一个判断字符是否属于数字的函数可以这样定义:
bool isnumber(char a)
{
if (a>=’0’ && a<=’9’) return 1;
return 0;
}
之前说过,字符之间进行比较的时候,比较的是二者的ASCII码。
同理可以设计函数判断一个字符是不是大小写字母。
字符串处理常用函数:
strcat(s1,s2) 把s2连接到s1后
strncat(s1,s2,n) 把s2的前n个字符连接到s1后
strcmp(s1,s2) 比较s1和s2。s1<s2结果为-1,相等为0,s1>s2结果为1.
strncmp(s1,s2,n) 比较s1和s2的前n字符
strcpy(s1,s2) 将s2复制到s1中,如果s1比s2长,超出的部分不变。
strncpy(s1,s2,n) 将s2的前n位复制到s1中
strchr(s,c) 在s中查找c第一次出现的位置
strrchr(s,c) 在s中查找c最后一次出现的位置
strstr(s1,s2) 查找s1中s1第一次出现的位置
strrstr(s1,s2) 查找s1中s2最后一次出现的位置
strlen(s) 返回字符串的长度,长度中不包括终止符'\0'。
其他常用函数(n为整型,x为浮点型):
abs(n) 绝对值 rand() 生成伪随机数
atof(s) 把字符串转换为double类型的数 srand(unsigned int s) 设置随机数种子
atoi(s) 把字符串转换为int类型的数 exit() 终止程序执行
sqrt(x) x的平方根
asin(x) 反正弦 sin(x)
acos(x) cos(x)
log(x) x的自然对数
tan(x) log10(x) x的常用对数
atan(x) exp(x) e^x
atan2(x,y) fabs(double x) x的绝对值
void *bsearch(void *key, void *base, size_t num, side_t width, int (*f)(void *e1, void *e2)); 以二分查找方式在排序数组base中查找元素key
qsort() 以快速排序的方式对数组进行排序,具体用法见qsort()函数的使用方法那篇博文。
各类取整函数:
只要整数/小于某个数的最大整数:强制类型转换或floor();
ceil():返回大于某个数的最小整数。
四舍五入:floor(x+0.5);
注意,floor和ceil的返回值都是double类型。
一个简单的向上取整的方法:
ans=floor(x-1/y)+1;