⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test4_.c

📁 利用递归实现的计算器编译器
💻 C
字号:
#include <stdio.h>#include <ctype.h>#include <stdlib.h>#define MAX 100static int stack[MAX];int sp = 0;int sp_copy = 0;char buf[20];int chack = 0;int pop(void);void push(int);int get_number(void);int volatile operate(void);void p (void);int main(){	int k = 0;	char c;	printf("please input\n");	c= getchar();	for(;c != '\n';)	{		if(k > 20)		{			printf("you in put is too lang\n");			return 0;		}		if(isspace(buf[k]))			;		else		{		buf[k] = c;		k++;		}				c = getchar();	}	buf[k] = '\n';	printf("buf%s\n",buf);	printf("res = %d\n",operate());} int volatile operate(){	int num;	push (sp_copy);		sp_copy = sp;	for(;;)	{		if(isdigit(buf[chack]))		{			num = get_number();			push(num);		}		switch(buf[chack])		{			case'+':			{lab:				chack++;                                if(buf[chack] == '(')                                {                                        chack++;                                        num = 0;                                        num = operate();                                        push(num);                                        break;				}				else				{					num = 0;					num = get_number();					push(num);					break;					}			}			case'-':			{				if(buf[chack+1] == '-')				{						chack++;					goto lab;				}				chack++;                                if(buf[chack] == '(')                                {                                        chack++;                                        num = 0;                                        num = operate();                                        num = num * (-1);                                        push(num);                                        break;				}				else				{					num = 0;					num = get_number();					num = num * (-1);					push(num);					break;				}			}			case'*':			{				chack++;				if(buf[chack] == '(')				{					chack++;					num = 0;					num = operate();					num = num * pop();					push(num);					break;				}				else				{				        num = 0;                                        num = get_number();                                        num = num * pop();                                        push(num);                                        break;				}			}				case'/':			{				chack++;				if(buf[chack] == '(')				{					chack++;					num = 0;					num = operate();					num = pop() / num;					push(num);					break;				}				else				{				        num = 0;                                        num = get_number();                                        num = pop() / num;                                        push(num);                                        break;				}			}			case'(':			{				num = 0;				chack++;				num = operate();				push(num);				break;							}						case')':			{				chack++;				num = 0;				for(;!(sp == (sp_copy));)				{											num = num + pop();//					printf("num=%d\n",num);									}				sp_copy = pop();				return num;				}			case'\n':			{				num = 0;				for(;!(sp == (sp_copy));)				{											num = num + pop();//					printf("num=%d\n",num);									}				sp_copy = pop();				return num;			}			default:			{			printf("input error\n");			return 0;			}		}			}										}int get_number(void){	int temp = 0;	int i;	for(i=0;isdigit(buf[chack]);chack++)	{		temp = temp*10+(buf[chack] - '0');		}	//	printf("get=%d\n",temp);			return temp;}void push(int f){	if (sp < MAX)		{		stack[sp++] = f;		printf("push %d  sp== %d  ",f,sp);		p();		}	else		;	//	printf("stack full\n");}int pop(void){	if (sp >= 0)		{		sp--;		printf("pop %d   sp== %d  ",stack[sp],sp);		p();		return stack[sp];		}	else	{//		printf("stack empty\n");		return 0;	}}void p(void){	int i;	printf(" : ");	for(i = 0;i < sp;i++)		printf("%d   ",stack[i]);	printf("\n");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -