C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)

C语言函数库:

C语言的常用的标准头文件有 :

<ctype.h><time.h><stdio.h>

<stdlib.h><math.h><string.h>

一. <ctype.h>

序号函数原型功能
1int iscntrl(int c)判断字符c是否为控制字符。
2int isalnum(int c)判断字符c是否为字母或数字
3int isalpha(int c)判断字符c是否为英文字母
4int isascii(int c)判断字符c是否为ascii码
5int isblank(int c)判断字符c是否为TAB或空格
6int isdigit(int c)判断字符c是否为数字
7int isgraph(int c)判断字符c是否为除空格外的可打印字符
8int islower(int c)判断字符c是否为小写英文字母
9int isprint(int c)判断字符c是否为可打印字符(含空格)
10int ispunct(int c)判断字符c是否为标点符号
11int isspace(int c)判断字符c是否为空白符
12int isupper(int c)判断字符c是否为大写英文字母
13int isxdigit(int c)判断字符c是否为十六进制数字
14int toascii(int c)将字符c转换为ascii码
15int tolower(int c)将字符c转换为小写英文字母
16int toupper(int c);将字符c转换为大写英文字母

二. <math.h>

序号函数原型功能
1float fabs(float x)求浮点数x的绝对值
2int abs(int x)求整数x的绝对值
3float acos(float x)求x(弧度表示)的反余弦值
4float asin(float x)求x(弧度表示)的反正弦值
5float atan(float x)求x(弧度表示)的反正切值
6float atan2(float y, float x)求y/x(弧度表示)的反正切值
7float ceil(float x)求不小于x的最小整数
8float cos(float x)求x(弧度表示)的余弦值
9float cosh(float x)求x的双曲余弦值
10float exp(float x)求e的x次幂
11float floor(float x)求不大于x的最大整数
12float fmod(float x, float y)计算x/y的余数
13float frexp(float x, int *exp)把浮点数x分解成尾数和指数
14float ldexp(float x, int exp)返回x*2^exp的值
15float modf(float num, float *i)将浮点数num分解成整数部分和小数部分
16float hypot(float x, float y)对于给定的直角三角形的两个直角边,求其斜边的长度
17float log(float x)计算x的自然对数
18float log10(float x)计算x的常用对数
19float pow(float x, float y)计算x的y次幂
20float pow10(float x)计算10的x次幂
21float sin(float x)计算x(弧度表示)的正弦值
22float sinh(float x)计算x(弧度表示)的双曲正弦值
23float sqrt(float x)计算x的平方根
24float tan(float x);计算x(弧度表示)的正切值
25float tanh(float x)求x的双曲正切值

三. <stdio.h>

序号函数原型功能
1int printf(char *format...)产生格式化输出的函数
2int getchar(void)从键盘上读取一个键,并返回该键的键值
3int putchar(char c)在屏幕上显示字符c
4FILE *fopen(char *filename, char *type)打开一个文件
5FILE *freopen(char *filename, char *type,FILE *fp)打开一个文件,并将该文件关联到fp指定的流
6int fflush(FILE *stream)清除一个流
7int fclose(FILE *stream)关闭一个文件
8int remove(char *filename)删除一个文件
9int rename(char *oldname, char *newname)重命名文件
10FILE *tmpfile(void)以二进制方式打开暂存文件
11char *tmpnam(char *sptr)创建一个唯一的文件名
12int setvbuf(FILE *stream, char *buf, int type, unsigned size)把缓冲区与流相关
13int fprintf(FILE *stream, char *format[, argument,...])传送格式化输出到一个流中
14int scanf(char *format[,argument,...])执行格式化输入
15int fscanf(FILE *stream, char *format[,argument...])从一个流中执行格式化输入
16int fgetc(FILE *stream)从流中读取字符
17char *fgets(char *string, int n, FILE *stream)从流中读取一字符串
18int fputc(int ch, FILE *stream)送一个字符到一个流中
19int fputs(char *string, FILE *stream)送一个字符到一个流中
20 int getc(FILE *stream)从流中取字符
21int getchar(void)从 stdin 流中读字符
22char *gets(char *string)从流中取一字符串
23 int putchar(int ch)在 stdout 上输出字符
24int puts(char *string)送一字符串到流中
25int ungetc(char c, FILE *stream)把一个字符退回到输入流中
26int fread(void *ptr, int size, int nitems, FILE *stream)从一个流中读数据
27int fwrite(void *ptr, int size, int nitems, FILE *stream)写内容到流中 int fseek
28(FILE *stream, long offset, int fromwhere)重定位流上的文件指针
29long ftell(FILE *stream)返回当前文件指针
30int rewind(FILE *stream)将文件指针重新指向一个流的开头
31 int fgetpos(FILE *stream)取得当前文件的句柄
32int fsetpos(FILE *stream, const fpos_t *pos)定位流上的文件指针
33void clearerr(FILE *stream)复位错误标志
34 int feof(FILE *stream)检测流上的文件结束符
35 int ferror(FILE *stream)检测流上的错误
36 void perror(char *string)系统错误信息

四. <stdlib.h>

序号函数原型功能
1char *itoa(int i)把整数i转换成字符串
2void exit(int retval)结束程序
3double atof(const char *s)将字符串s转换为double类型
4int atoi(const char *s)将字符串s转换为int类型
5long atol(const char *s)将字符串s转换为long类型
6double strtod (const char*s,char **endp)将字符串s前缀转换为double型
7long strtol(const char*s,char **endp,int base)将字符串s前缀转换为long型
8unsinged long strtol(const char*s,char **endp,int base)将字符串s前缀转换为 unsinged long型
9int rand(void)产生一个0~RAND_MAX之间的伪随机数
10void srand(unsigned int seed)初始化随机数发生器
11void *calloc(size_t nelem, size_t elsize)分配主存储器
12void *malloc(unsigned size)内存分配函数
13void *realloc(void *ptr, unsigned newsize)重新分配主存
14void free(void *ptr)释放已分配的块
15void abort(void)异常终止一个进程
16void exit(int status)终止应用程序
17int atexit(atexit_t func)注册终止函数
18char *getenv(char *envvar)从环境中取字符串
19void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *))二分法搜索函数
20void qsort(void *base, int nelem, int width, int (*fcmp)())使用快速排序例程进行排序
21int abs(int i)求整数的绝对值
22long labs(long n)取长整型绝对值
23div_t div(int number, int denom)将两个整数相除 , 返回商和余数
24ldiv_t ldiv(long lnumer, long ldenom)两个长整型数相除 , 返回商和余数

五. <time.h>

序号函数原型功能
1clock_t clock(void)确定处理器时间函数
2time_t time(time_t *tp)返回当前日历时间
3double difftime(time_t time2, time_t time1)计算两个时刻之间的时间差
4time_t mktime(struct tm *tp)将分段时间值转换为日历时间值
5char *asctime(const struct tm *tblock)转换日期和时间为ASCII码
6char *ctime(const time_t *time)把日期和时间转换为字符串
7struct tm *gmtime(const time_t *timer)把日期和时间转换为格林尼治标准时间
8struct tm *localtime(const time_t *timer)把日期和时间转变为结构
9size_t strftime(char *s,size_t smax,const char *fmt, const struct tm *tp)根据 fmt 的格式 要求将 *tp中的日期与时间转换为指定格式

六. <string.h>

序号函数原型功能
1int bcmp(const void *s1, const void *s2, int n)比较字符串s1和s2的前n个字节是否相等
2void bcopy(const void *src, void *dest, int n)将字符串src的前n个字节复制到dest中
3void bzero(void *s, int n)置字节字符串s的前n个字节为零
4void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count)由src所指内存区域复制不多于count个字节到dest所指内存区域,如果遇到字符ch则停止复制
5void *memcpy(void *dest, void *src, unsigned int count)由src所指内存区域复制count个字节到dest所指内存区域
6void *memchr(void *buf, char ch, unsigned count)从buf所指内存区域的前count个字节查找字符ch
7int memcmp(void *buf1, void *buf2, unsigned int count)比较内存区域buf1和buf2的前count个字节
8int memicmp(void *buf1, void *buf2, unsigned int count)比较内存区域buf1和buf2的前count个字节但不区分字母的大小写
9void *memmove(void *dest, const void *src, unsigned int count)由src所指内存区域复制count个字节到dest所指内存区域
10void *memset(void *buffer, int c, int count)把buffer所指内存区域的前count个字节设置成字符c
11void setmem(void *buf, unsigned int count, char ch)把buf所指内存区域前count个字节设置成字符ch
12void movmem(void *src, void *dest, unsigned int count)由src所指内存区域复制count个字节到dest所指内存区域
13char *stpcpy(char *dest,char *src)把src所指由NULL结束的字符串复制到dest所指的数组中
14char *strcpy(char *dest,char *src)把src所指由NULL结束的字符串复制到dest所指的数组中
15char *strcat(char *dest,char *src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)并添加’\0’
16char *strchr(char *s,char c)查找字符串s中首次出现字符c的位置
17int strcmp(char *s1,char * s2)比较字符串s1和s2
18int stricmp(char *s1,char * s2)比较字符串s1和s2,但不区分字母的大小写
19int stricmp(char *s1,char * s2)比较字符串s1和s2,但不区分字母的大小写
20int strcspn(char *s1,char *s2)在字符串s1中搜寻s2中所出现的字符
21char *strdup(char *s)复制字符串s
22int strlen(char *s)计算字符串s的长度
23char *strlwr(char *s)将字符串s转换为小写形式
24char *strupr(char *s)将字符串s转换为大写形式
25char *strncat(char *dest,char *src,int n)把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的’\0’)并添加’\0’
26int strcmp(char *s1,char * s2,int n)比较字符串s1和s2的前n个字符
27int strnicmp(char *s1,char * s2,int n)比较字符串s1和s2的前n个字符但不区分大小写
28char *strncpy(char *dest, char *src, int n)把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中
29char *strpbrk(char *s1, char *s2)在字符串s1中寻找字符串s2中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内
30char *strrev(char *s)把字符串s的所有字符的顺序颠倒过来(不包括空字符NULL)
31char *strset(char *s, char c)把字符串s中的所有字符都设置成字符c
32char *strstr(char *haystack, char *needle)从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)
33char *strtok(char *s, char *delim)分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串

文档资料

上面只是简单的介绍函数原型和功能,如果想对函数进一步了解可以下载以下文档 (内含详解与实例):

1. C语言标准函数库速查手册.chm

2. C语言标准函数库详解.pdf

我理解你的问题了。实现表达式求解需要用到一个栈来存储运算符和操作数,并按照一定的优先级进行计算。以下是一个示例程序,其中用到了几个重要的栈库函数(如stack_push、stack_pop等): ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> typedef struct { int capacity; int top; int* data; } Stack; Stack* stack_new(int capacity) { Stack* s = (Stack*)malloc(sizeof(Stack)); s->capacity = capacity; s->top = -1; s->data = (int*)malloc(capacity * sizeof(int)); return s; } void stack_push(Stack* s, int value) { if (s->top == s->capacity - 1) { fprintf(stderr, "Error: stack is full.\n"); exit(1); } s->top++; s->data[s->top] = value; } int stack_pop(Stack* s) { if (s->top == -1) { fprintf(stderr, "Error: stack is empty.\n"); exit(1); } int value = s->data[s->top]; s->top--; return value; } int stack_top(Stack* s) { if (s->top == -1) { fprintf(stderr, "Error: stack is empty.\n"); exit(1); } return s->data[s->top]; } int is_operator(char ch) { return ch == '+' || ch == '-' || ch == '*' || ch == '/'; } int operator_precedence(char op) { switch (op) { case '+': case '-': return 1; case '*': case '/': return 2; default: fprintf(stderr, "Error: unsupported operator '%c'.\n", op); exit(1); } } int evaluate_expression(char* expression) { Stack* operands = stack_new(strlen(expression)); Stack* operators = stack_new(strlen(expression)); int i = 0; while (expression[i]) { if (isdigit(expression[i])) { int value = expression[i] - '0'; i++; while (isdigit(expression[i])) { value = value * 10 + (expression[i] - '0'); i++; } stack_push(operands, value); } else if (is_operator(expression[i])) { while (!stack_top(operators)) { char op = stack_top(operators); if (operator_precedence(op) >= operator_precedence(expression[i])) { int b = stack_pop(operands); int a = stack_pop(operands); switch (op) { case '+': stack_push(operands, a + b); break; case '-': stack_push(operands, a - b); break; case '*': stack_push(operands, a * b); break; case '/': stack_push(operands, a / b); break; default: fprintf(stderr, "Error: unsupported operator '%c'.\n", op); exit(1); } stack_pop(operators); } else { break; } } stack_push(operators, expression[i]); i++; } else if (isspace(expression[i])) { i++; } else { fprintf(stderr, "Error: invalid character '%c'.\n", expression[i]); exit(1); } } while (!stack_top(operators)) { char op = stack_top(operators); int b = stack_pop(operands); int a = stack_pop(operands); switch (op) { case '+': stack_push(operands, a + b); break; case '-': stack_push(operands, a - b); break; case '*': stack_push(operands, a * b); break; case '/': stack_push(operands, a / b); break; default: fprintf(stderr, "Error: unsupported operator '%c'.\n", op); exit(1); } stack_pop(operators); } int result = stack_pop(operands); free(operands->data); free(operands); free(operators->data); free(operators); return result; } int main() { char* expression = "3 * ( 4 + 5 ) - 6 / 2"; int result = evaluate_expression(expression); printf("%s = %d\n", expression, result); return 0; } ``` 这个程序能够处理带括号的表达式,并按照正确的优先级进行计算。你可以尝试将其复制到本地环境中运行。
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬瓜~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值