一個計算機的C語言實現,計算機C語言實現

來源:互聯網
上載者:User

一個計算機的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;
}
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.