ANSI标准中的c语言库函数有以下15个头文件
1 2 3 |
<assert.h> <float.h> <math.h> <stdarg.h> <stdlib.h> <ctype.h> <limits.h> <setjmp.h> <stddef.h> <string.h> <errno.h> <locale.h> <signal.h> <stdio.h> <time.h> |
一、输入输出:<stdio.h>
包含输入输出的函数、类型和宏。程序开始时,stdin、stdout和stderr三个流已经被打开。
1. 打开文件fopen
1 |
FILE *fopen(const char *filename, const char *mode) |
打开文件名为filename的文件,返回与之关联的流。打开失败返回NULL。
mode的合法值:
“r” 打开文本文件用于读。
“w” 创建文本文件用于写,并删除已存在的内容(如果有的话)。
“a” 添加;打开或创建文本文件用于在文件末尾写。
“r+” 打开文本文件用于更新(即读和写)。
“w+” 创建文本文件用于更新,并删除已存在的内容(如果有的话)。
“a+” 添加;打开或创建文本文件用于更新和在文件末尾写。
2. 流重定向freopen
1 |
FILE *freopen(const char *filename, const char *mode,FILE *stream) |
用mode指定的方式打开filename指定的文件,并让该文件和stream指定的流关联。返回指向stream的指针;出错返回NULL。一般用于对标准输入stdin和标准输出stdout进行重定向。
使用input.txt来重定向输入流的语句如下:
1 |
freopen("input.txt", "r", stdin); |
3. 格式化输出
1 2 3 |
int fprintf(FILE *stream, const char *format, ...) int printf(const char *format, ...) int sprintf(char *s, const char *format, ...) |
4. 格式化输入
1 2 3 |
int fscanf(FILE *stream, const char *format, ...) int scanf(const char* format, . . .) int sscanf(char *s,const *format, ... ) |
%d用于读入十进制整数
%o 读入八进制
%x读入十六进制
%i读入整数,十进制或者0开头的八进制,或者0x、0X开头的十六进制
%f 读入浮点数
%s 读入字符串,不包含空白符。会自动在末尾添加’\0′
scanf的返回值是成功读入变量的个数,如果一直循环到文件尾,可能的代码是这样的
1 2 3 4 |
while (scanf("%d", &N) == 1) { //do something } |
5. 字符输入输出
1 2 3 4 5 6 7 8 9 10 11 |
int fgetc(FILE *stream) char *fgets(char *s, int n, FILE *stream) int fputc(int c, FILE *stream) int fputs(const char *s, FILE *stream) int getc(FILE *stream) int getchar(void) char *gets(char *s) int putc(int c, FILE *stream) int putchar(int c) int puts(const char *s) int ungetc(int c, FILE *stream) |
gets用于读入一行字符串,会把换行符替换为’\0’,到达文件尾返回NULL。
puts用于把字符串s和一个换行符输出到stdout。
二、字符类测试:<ctype.h>
1. 测试
isalnum(c):函数isalpha(c)或isdigit(c)为真。
isalpha(c):函数isupper(c)或islower(c)为真。
isdigit(c):c为十进制数字。
islower(c):c是小写字母。
isupper(c):c是大写字母。
isxdigit(c):c是十六进制数字。
2. 大小写转换
int tolower(int c) 把c转换为小写字母
int toupper(int c) 把c转换为大写字母
三、字符串函数:<string.h>
1. str开头
参考: C语言字符串库函数
2. 内存操作
1 |
void *memset(s,c,n) |
用于把s中的前n个字节替换为c
四、数学函数 <math.h>
p o w ( x , y ) 求x的y次方
sqrt(x) 求x的平方根
五、实用函数库 <stdlib.h>
1. 随机数
void srand(unsigned int seed)
srand函数用参数seed作为生成新的伪随机数序列的种子。种子seed的初值为1。
int rand(void)
rand函数用于产生一个0到RAND_MAX之间的伪随机整数。RAND_MAX的取值至少为
32767。
一个产生随机数的代码如下:
1 2 3 4 5 6 7 8 |
#include <stdlib.h> #include <time.h> srand(time(NULL)); for (i = 1; i <= 100; i++) { a[i] = rand()%200; } |
2.内存分配
1 2 |
void *malloc(size_t size) void free(void *p) |
3. 查找和排序
1 2 3 4 5 6 |
void * bsearch(const void *key, const void *base, size_t n, size_t size, int (*cmp)(const void *keyval, const void *datum) void qsort(void *base, size_t n, size_t size, int (*cmp)(const void *, const void *)) |
4. 绝对值
int abs(int n)