亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 表達式求值.cpp

?? 同Windows自帶的計算器類似的程序
?? CPP
字號:
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<math.h>
#include<malloc.h>
#include<stdlib.h>
#include<iostream.h>
#include<string.h>

#define prompt printf("Pb4801039>")

const max=300;
const stackinitsize=300;
const stackincrement=100;

double trans=1;

typedef struct
{char *elem;
 int top;
 int stacksize;
 int increment;
}stack_C;

typedef struct
{double *elem;
 int top;
 int stacksize;
 int increment;
}stack_F;

typedef struct lnode
{float data;
 char oper;
 struct lnode *next;
}lnode,*linklist;


int Error(char *s)
{printf("\n       %s\n",s);
 printf("\n");
 return 0;
}
void initstack_C(stack_C &S,int maxsize=stackinitsize,int incresize=stackincrement)
{ S.elem=new char[maxsize];
  S.top=-1;
  S.stacksize=maxsize;
  S.increment=incresize;}

void initstack_F(stack_F &S,int maxsize=stackinitsize,int incresize=stackincrement)
{ S.elem=new double[maxsize];
  S.top=-1;
  S.stacksize=maxsize;
  S.increment=incresize;}

char gettop_C(stack_C S,char &e)
{if(S.top==-1) return '\0';                      // Error("棧已空")
 e=S.elem[S.top];
 return e;}

void push_C(stack_C &S,char e)
{if(S.top==S.stacksize-1)
{         int newsize=S.stacksize+S.increment;
          char *newbase=new char[newsize];
		  for(int i=0;i<S.stacksize;i++)
			  newbase[i]=S.elem[i];
		  delete S.elem;
          S.elem=newbase;
          S.stacksize+=S.increment;
}

S.elem[++S.top]=e;
}


void push_F(stack_F &S,double e)
{if(S.top==S.stacksize-1)
{         int newsize=S.stacksize+S.increment;
          double *newbase=(double *)realloc(S.elem,newsize*sizeof(double));
          S.elem=newbase;
          S.stacksize+=S.increment;}

S.elem[++S.top]=e;
}

void pop_C(stack_C &S,char &e)
{   if(S.top==-1)  Error("棧已空!");
    e=S.elem[S.top--];
}

void pop_F(stack_F &S,double &e)
{   if(S.top==-1)  Error("棧已空!");
    e=S.elem[S.top--];
}

int stackempty_C(stack_C S)
{if(S.top==-1) return 1;
 else return 0;
}

int stackempty_F(stack_F S)
{if(S.top==-1) return 1;
 else return 0;
}

void info()
{system("title   小型表達式求值系統");system("color 0b");
 printf("\n\n請輸入表達式,可以使用函數和括號。\n\n");
 printf("比如sin,cos,tan,sinh,cosh,tanh,ln,lg,exp,!,%%%等數學函數。  \n\n");
 //printf("三角函數默認使用的是弧度制,但可以用declare deg/rad改變。\n");
 //printf("還可以使用大中小括號({[()]}),但需注意優先級不要搞錯。  \n");
 printf("需要幫助請輸入help, 若退出可以輸入exit, 也可以直接回車。  \n\n");
 printf("--------------------------歡迎使用---------------------------\n\n");
}

void help()
{printf("\n\n請輸入表達式,可以使用函數,\n");
 printf("比如sin,cos,tan,sinh,cosh,tanh,ln,lg,exp,!,%%%等函數。  \n");
 printf("三角函數默認使用的是弧度制,但可以用declare命令改變。\n");
 printf("格式為declare deg/rad;可以使用show命令察看當前設置。\n");
 printf("還可以使用大中小括號({[()]}),但需注意優先級不要搞錯。  \n");
 printf("可以使用的命令有time,date,exit,cls,color xx 等。  \n");
 printf("--------------------------歡迎使用---------------------------\n\n");
}

int fac(int n)
{int result=1;
 if(n==0)  return 1;
 while(n>0)  result*=n--;
 return result;
}

int get(char exp[])
{int flag=1,i=0;char ch='c';
  scanf("%c",&ch);
  while(ch!='\n')
  {    if(flag&&(ch=='-'||ch=='+')) exp[i++]='0';
	   else flag=0;
       exp[i++]=ch;
       if(ch=='(') flag=1;
	   scanf("%c",&ch);
  }
  exp[i]='\0';
  if(!strcmp(exp,"help"))            {help();return 0;}
  else if(!strcmp(exp,"exit"))       exit(0);
  else if(!strcmp(exp,"time"))       {system("time /t");return 0;}
  else if(!strcmp(exp,"date"))       {system("date /t");return 0;}
  else if(!strcmp(exp,"cls"))        {system("cls");printf("\n");return 0;}
  else if(strstr(exp,"color"))       {system(exp);return 0;}
  else if(!strcmp(exp,"declare deg")) {trans=3.14159265/180;printf("已改為角度制。\n");return 0;}
  else if(!strcmp(exp,"declare rad")) {trans=1;printf("已改為弧度制。\n");return 0;}
  else if(!strcmp(exp,"show"))        {if(trans==1) printf("現在為弧度制。\n");else printf("現在為角度制。\n");return 0;}
  else  {exp[i]='#';exp[i+1]='\0';return 1;}
  
}



int  functionprocess(char exp[])
{char *ch=exp;char temp[200];char *pch;char *q=temp;int k=0;
while(*ch!='#')
{ if(!strchr("+-*/()^!%1234567890.",*ch))
  switch(*ch)
{      case 's' :   {q=temp;while((*ch=='i'||*ch=='h'||*ch=='n'||*ch=='s')&&++k<=3)
                    *q++=*ch++;if(*ch=='h') {*q='h';ch++;q++;}*q='\0';
                   if(strcmp(temp,"sin")==0)
					{    *(ch-2)=*(ch-3)=' ';*(ch-1)='s';  }
				   else if(strcmp(temp,"sinh")==0)
					{    *(ch-2)=*(ch-3)=*(ch-4)=' ';*(ch-1)='S';}
			    else return Error("Ilegal char!");k=0;break;}
       case 'c' :   {q=temp;while((*ch=='o'||*ch=='h'||*ch=='s'||*ch=='c')&&++k<=3)
		            *q++=*ch++;if(*ch=='h') {*q='h';ch++;q++;}*q='\0';
                    if(strcmp(temp,"cos")==0)
					{    *(ch-2)=*(ch-3)=' ';*(ch-1)='c';}
                    else if(strcmp(temp,"cosh")==0)
					{    *(ch-2)=*(ch-3)=*(ch-4)=' ';*(ch-1)='C';}
				else return Error("Ilegal char!");k=0;break;}
	  case 't' :   {q=temp;while((*ch=='a'||*ch=='n'||*ch=='h'||*ch=='t')&&++k<=3)
		            *q++=*ch++;if(*ch=='h') {*q='h';ch++;q++;}*q='\0';
                    if(strcmp(temp,"tan")==0)
					{    *(ch-2)=*(ch-3)=' ';*(ch-1)='t';}
                    else if(strcmp(temp,"tanh")==0)
					{   *(ch-2)=*(ch-3)=*(ch-4)=' ';*(ch-1)='T';}
				else return Error("Ilegal char!");k=0;break;}
	  case 'l' :   {q=temp;while((*ch=='g'||*ch=='n'||*ch=='l')&&++k<=2)
		            *q++=*ch++;*q='\0';
                    if(strcmp(temp,"lg")==0)
					{   *(ch-2)=' ';*(ch-1)='l';}
                    else if(strcmp(temp,"ln")==0)
					{    *(ch-2)=' ';*(ch-1)='L';}
				else return Error("Ilegal char!");k=0;break;}
     case 'e'  :   {q=temp;while((*ch=='x'||*ch=='p'||*ch=='e')&&++k<=3)
		            *q++=*ch++;*q='\0';
                    if(strcmp(temp,"exp")==0)
					{    *(ch-2)=*(ch-3)=' ';*(ch-1)='e';}
                   	else Error("Ilegal char!");k=0;break;}
	 default  :   return Error("存在非法字符!");}  //end switch
     if((*ch<'a')||(*ch>'z')) 
	     ch++;
 } //end while
 if(strchr(exp,' ')) {
 ch=exp;pch=temp;
 while(*ch!='\0')
 {  if(*ch!=' ') *pch++=*ch++;
    else ch++;}
 *pch='\0';
 strcpy(exp,temp);}
 return 1;
} // end functionprocess

int  match(char *exp)
{int flag1=0,flag2=0;char *temp=exp;char ch=*temp++,e;stack_C S;initstack_C(S);
 while(ch!='#')
 switch(ch)
 {        case '{' : push_C(S,ch);flag1=1;flag2=1;*(temp-1)='(';ch=*temp++;break;
          case '[' : push_C(S,ch);flag1=0;flag2=1;*(temp-1)='(';ch=*temp++;break;
          case '(' : push_C(S,ch);flag1=0;flag2=0;ch=*temp++;break;
		  case ')' : {if(stackempty_C(S)) return Error("有多余括號!");
			          else if(gettop_C(S,e)=='(') {pop_C(S,e);ch=*temp++;}
					  else return Error("括號不匹配!");break;}
		  case ']' : {if(stackempty_C(S))return  Error("有多余括號");
                      else if(gettop_C(S,e)!='[') return Error("括號不匹配!");
					  else if(flag2) return Error("優先級錯誤!");
					  else {pop_C(S,e);*(temp-1)=')';ch=*temp++;}break;}
		  case '}' : {if(stackempty_C(S)) return Error("有多余括號");
			          else if(gettop_C(S,e)!='{') return Error("括號不匹配!");
					  else if((flag1)&&(flag2)) return  Error("優先級錯誤!");
                      else {pop_C(S,e);*(temp-1)=')';ch=*temp++;}break;}
		  default  :  ch=*temp++;}
 if(!stackempty_C(S)) return Error("有多余括號!");
 return 1;
}


int precede(char c,char ch)
{char oper[]="#(+-+/*/^";char func[]="%!sctSCTLle";
 char *p,*ph;
 ph=strchr(oper,ch);
 if(ph)    p=strchr(ph,c);
 if(strchr(func,c)&&strchr(func,ch))   return 0;
 else if(strchr(func,c))               return 1;
 else if(strchr(func,ch))              return 0;
 else if(p>=ph)                        return 1;
 else                                  return 0;
}

void change(char *p,int &n,float &num)
{char data[20];char *q=data; n=0;
 while((*p<='9'&&*p>='0')||(*p=='.'))
 {      *q++=*p++;n++;}
 *q='\0';
 num=(float)atof(data);}
void insert(linklist &head,linklist &p,float e,char c='\0')
{linklist q=new lnode;
 q->data=e;
 q->oper=c;
 q->next=NULL;
 p->next=q;
 p=q;}

int transform(linklist &suffix,char *exp)
{ int k=0;linklist p=suffix;char c;int n;float num;stack_C S;
 initstack_C(S);push_C(S,'#');
 while(!stackempty_C(S))
 {    if(strchr("+-*/^()sScCtTeLl%!#",*exp)==0)
 {           change(exp,n,num);
             exp+=(n-1);
             insert(suffix,p,num);}
      else if(*exp=='(')      push_C(S,*exp);
	  else if(*exp==')')
	  {       pop_C(S,c);
	          while(c!='(')   
			  {      insert(suffix,p,0,c);pop_C(S,c);}
	  }
	  else   {while(gettop_C(S,c)&&(precede(c,*exp)))
	  {             insert(suffix,p,0,c);pop_C(S,c);}
	  if(*exp!='#')     push_C(S,*exp);}
 exp++;}
 return 1;
}



int value(stack_F &S,char ch)
{double a,b;
 switch(ch)
 {case '+' : pop_F(S,a);pop_F(S,b);push_F(S,a+b);break;
  case '-' : pop_F(S,a);pop_F(S,b);push_F(S,b-a);break;
  case '*' : pop_F(S,a);pop_F(S,b);push_F(S,a*b);break;
  case '/' : pop_F(S,a);pop_F(S,b);if(!b) Error("div zero");push_F(S,b/a);break;
  case '^' : pop_F(S,a);pop_F(S,b);push_F(S,pow(b,a));break;
  case 'S' : pop_F(S,a);push_F(S,sinh(a));break;
  case 's' : pop_F(S,a);push_F(S,sin(a*trans));break;
  case 'c' : pop_F(S,a);push_F(S,cos(a*trans));break;
  case 'C' : pop_F(S,a);push_F(S,cosh(a));break;
  case 'e' : pop_F(S,a);push_F(S,exp(a));break;
  case 'L' : pop_F(S,a);if(a<=0) Error("Log erro!");push_F(S,log(a));break;
  case 'l' : pop_F(S,a);if(a<=0) Error("Log error!");push_F(S,log10(a));break;
  case 't' : pop_F(S,a);push_F(S,tan(a*trans));break;
  case 'T' : pop_F(S,a);push_F(S,tanh(a));break;
  case '%' : pop_F(S,a);pop_F(S,b);push_F(S,fmod(b,a));break;
  case '!' : pop_F(S,a);push_F(S,fac((int)a));break;
  default  : return Error("Invaid oper!");
 }
}


double calc(linklist suffix)
{stack_F S; linklist p=suffix->next;double result;
 initstack_F(S);
 while(p&&p->oper!='#')
 {     if(!p->oper)   push_F(S,p->data);
       else           value(S,p->oper);
	   p=p->next;}
 pop_F(S,result);
 return result;
}

void main()
{double result;
 char exp[90],temp[90];
 linklist suffix=new lnode;
 suffix->next=NULL;
 info();
 loof:prompt;
      if (get(exp)){
	     strcpy(temp,exp);temp[strlen(temp)-1]='\0';
	     if(strcmp(exp,"#")==0)  return;
         if(match(exp))
         if(functionprocess(exp))
         if(transform(suffix,exp))
		 if(result=calc(suffix)){ 
	  printf("\n     結果為");
	  if(strlen(temp)<20)
      printf("%s=",temp);
      printf("%g\n\n",result);}}
	  goto loof;
 }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区视频在线观看2020 | www精品美女久久久tv| 日韩免费看的电影| 一级日本不卡的影视| 国产乱子轮精品视频| 8x福利精品第一导航| 国产精品久久久久久久午夜片| 日产精品久久久久久久性色| 不卡视频在线看| 国产亚洲精品aa| 乱中年女人伦av一区二区| 欧美吞精做爰啪啪高潮| 国产精品久久久久久久久图文区 | 亚洲成av人综合在线观看| 高清视频一区二区| 精品日韩一区二区| 日本午夜一本久久久综合| 在线免费观看视频一区| 中文字幕在线观看一区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产蜜臀av在线一区二区三区| 日一区二区三区| 在线观看国产日韩| 亚洲黄色录像片| 97久久精品人人做人人爽50路| 久久久久久久久久久电影| 激情五月婷婷综合| 精品国产区一区| 欧洲一区在线电影| 中文字幕一区免费在线观看 | 亚洲国产岛国毛片在线| 国产在线播放一区三区四| 欧美电影免费提供在线观看| 老汉av免费一区二区三区| 日韩欧美中文字幕制服| 三级在线观看一区二区| 欧美精品久久一区二区三区| 香蕉乱码成人久久天堂爱免费| 欧美色精品天天在线观看视频| 亚洲高清视频的网址| 欧美午夜不卡视频| 婷婷丁香激情综合| 欧美成人精精品一区二区频| 国内偷窥港台综合视频在线播放| 日韩视频中午一区| 国产高清亚洲一区| 国产精品不卡在线观看| 色综合久久天天| 一个色综合av| 91精品国产一区二区三区香蕉| 激情文学综合丁香| 成人欧美一区二区三区视频网页| 91亚洲精品久久久蜜桃| 亚洲图片一区二区| 在线综合视频播放| 国产一区美女在线| 亚洲天堂网中文字| 日韩午夜精品视频| 国产jizzjizz一区二区| 一区二区在线免费观看| 日韩一区二区三区免费看| 成人午夜电影网站| 日韩国产高清影视| 国产欧美视频一区二区| 91电影在线观看| 激情伊人五月天久久综合| 亚洲欧美日韩成人高清在线一区| 欧美精品xxxxbbbb| 成人精品视频一区二区三区| 香蕉成人啪国产精品视频综合网 | 国产福利视频一区二区三区| 亚洲欧美日韩中文播放| 日韩精品在线一区二区| 91污在线观看| 国产毛片精品视频| 亚洲综合精品久久| wwwwxxxxx欧美| 欧美日韩精品系列| 成人黄色a**站在线观看| 日本网站在线观看一区二区三区 | 26uuu精品一区二区在线观看| 色婷婷综合久久久久中文一区二区| 蜜桃精品视频在线观看| 综合久久久久久久| 精品粉嫩aⅴ一区二区三区四区| 欧洲日韩一区二区三区| 成人黄色大片在线观看| 久久国产精品无码网站| 亚洲一区二区在线视频| 国产精品国产三级国产普通话蜜臀| 日韩一区二区三| 欧美亚州韩日在线看免费版国语版| 国产福利精品导航| 日本不卡一区二区| 一区二区三区四区不卡在线| 中文字幕第一区第二区| 精品99一区二区三区| 91精品国产综合久久久久| 在线亚洲人成电影网站色www| 成人天堂资源www在线| 国内外成人在线视频| 麻豆91在线看| 免费的国产精品| 日韩av不卡在线观看| 日韩二区三区在线观看| 亚洲电影你懂得| 亚洲一区二区精品视频| 一区二区三区久久| 亚洲精品中文字幕在线观看| 国产精品不卡一区| 国产精品不卡在线观看| 国产精品久久久久婷婷| 国产精品不卡视频| 亚洲欧美日韩国产综合在线| 亚洲精品五月天| 伊人色综合久久天天人手人婷| 亚洲精品视频在线观看免费| 亚洲精品免费看| 亚洲综合视频在线| 亚洲电影欧美电影有声小说| 亚洲成av人片在线| 日韩中文字幕亚洲一区二区va在线| 午夜久久电影网| 天天综合日日夜夜精品| 日本系列欧美系列| 国产精品99久久久久久久女警| 国产精品一区二区不卡| 成人高清视频在线| 91浏览器打开| 欧美婷婷六月丁香综合色| 555www色欧美视频| 国产亚洲欧美激情| 亚洲欧美日韩综合aⅴ视频| 亚洲成人激情综合网| 久久精品国产亚洲5555| 国产美女在线观看一区| 91在线视频免费观看| 欧美日韩在线观看一区二区| 日韩视频在线你懂得| 国产精品网站在线| 亚洲一区二区综合| 国产一区久久久| 色诱亚洲精品久久久久久| 欧美精品精品一区| 国产欧美日韩精品一区| 一级中文字幕一区二区| 久久福利资源站| 91看片淫黄大片一级在线观看| 欧美精品高清视频| 中文av字幕一区| 午夜欧美电影在线观看| 国产一区二区福利| 在线看日本不卡| 久久青草欧美一区二区三区| 一区二区三区国产豹纹内裤在线| 日本va欧美va精品| 99麻豆久久久国产精品免费 | 91福利精品视频| 精品国产一区二区三区久久久蜜月| 日韩理论片一区二区| 久草热8精品视频在线观看| 91小视频免费观看| 欧美精品一区二区精品网| 一区二区在线电影| 国产宾馆实践打屁股91| 91.com视频| 亚洲综合色成人| 不卡一区在线观看| 久久九九久精品国产免费直播| 亚洲国产精品欧美一二99| 国产一区二区电影| 日韩午夜av电影| 亚洲国产你懂的| 色系网站成人免费| 国产精品免费av| 国模套图日韩精品一区二区| 欧美精品在线观看一区二区| 中文字幕在线免费不卡| 高潮精品一区videoshd| 精品国产免费人成在线观看| 亚洲大尺度视频在线观看| 99r国产精品| 最好看的中文字幕久久| 成人涩涩免费视频| 久久九九99视频| 国产综合色在线| 精品99一区二区三区| 久久国产三级精品| 精品日韩在线观看| 久久国产剧场电影| 精品国产麻豆免费人成网站| 日韩精彩视频在线观看| 欧美午夜精品久久久| 亚洲一区二区三区在线播放| 色八戒一区二区三区| 亚洲综合色自拍一区| 欧美日本一区二区在线观看| 亚洲国产综合视频在线观看| 在线亚洲免费视频| 午夜a成v人精品|