一個計算機的C語言實現,計算機C語言實現
今天在讀《編譯原理及實踐》時,看到了一個簡單的整數計算機的實現。
按照書上的思路,我稍微進行了擴充:
1、從整數計算機擴充到小數計算機。
2、支援除法
3、支援Null 字元。
運行效果如下:
代碼很簡單,如下:
cal.c:
#include <stdio.h>#include <stdlib.h>char token;double exp(void);double term(void);double factor(void);char getPrintableChar(void);void match(char expectedToken);void error(void);int main(void){double result;for (;;){token = getPrintableChar();if (token == 'q')break;result = exp();if (token == '\n')printf("Result is: %g\n", result);elseerror();}return 0;}double exp(void){double temp = term();while (token == '+' || token == '-')switch(token){case '+': match('+'); temp += term(); break;case '-': match('-'); temp -= term(); break;}return temp;}double term(void){double temp = factor();while (token == '*' || token == '/')switch(token){case '*': match('*'); temp *= factor(); break;case '/': match('/'); temp /= factor(); break;}return temp;}double factor(void){double temp;if (token == '('){match('(');temp = exp();match(')');} else if (isdigit(token)){ungetc(token, stdin);scanf("%lf", &temp);token = getPrintableChar();} elseerror();return temp;}void error(void){fprintf(stderr, "Error!\n");exit(EXIT_FAILURE);}void match(char expectedToken){if (expectedToken == token)token = getPrintableChar();elseerror();}char getPrintableChar(void){char temp;dotemp = getchar();while (isblank(temp));return temp;}
程式實現的思路是按照EBNF規則實現,即:
<exp> -> <term> { <addop> <term> }<addop> -> + | -<term> -> <factor> { <mulop> <factor> }<mulop> -> * | /<factor> -> ( <exp> ) | Number
關於EBNF, 可以參考書上的內容,在這裡就不贅述了。
怎使用C語言實現一個簡單的計算機
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[101],x[101],y[101],*t,op;
gets(s);
int i,j,n=strlen(s);
double a,b;
for(i=j=0;s[i]!=' ';i++)
x[j++]=s[i];
x[j]=0;
a=strtod(x,&t);
i++;
for(j=0;i<n;i++)
{
if(j==0)
{ op=s[i++];
i++;
}
y[j++]=s[i];
if(s[i]==' ')
{
y[j]=0;
b=strtod(y,&t);
j=0;
}
if(j==0)
switch(op)
{
case '+':a+=b;break;
case '-':a-=b;break;
case '*':a*=b;break;
case '/':a/=b;break;
};
}
printf("%f\n",a);
}
用C語言編程實現一個簡單的四則運算計算機
#include <stdio.h>
//函數,讀數運算元
int getNextNum()
{
int ret;
scanf("%d",&ret);
return ret;
}
//函數,讀運算子
char getOpt()
{
return getchar();
}
//函數,計算
int caculate(int op1 , int op2 ,char opt)
{
if(opt=='+')return op1+op2;
if(opt=='-')return op1-op2;
if(opt=='*')return op1*op2;
if(opt=='/')return op1/op2;
return 0;
}
int main()
{
int op1,op2;
char opt;
//計算結果放在第一個運算元
op1 = getNextNum();
while(1)
{
opt = getOpt();
if ( opt == '=' ) break;
op2 = getNextNum();
op1 = caculate(op1,op2,opt);
}
printf("%d\n",op1);
}
return 0;
}