導航:首頁 > 編程語言 > c分數計算器代碼

c分數計算器代碼

發布時間:2023-05-17 01:13:42

❶ c語言編寫計算器程序

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int num1;
int num2;
int resule=0;
char sign;

setbuf(stdout,NULL);

printf("請輸入兩個要進行運算的數字,以逗號隔開:\n");
scanf("%d,%d",&num1,&num2);

sign=getchar();/*scanf從緩沖區中讀取數,此句讀取兩個數之後的
回車符。否則回車符被下面的scanf語句讀去賦給
sign */

printf("請輸入運符號(+、-、*、/):\n");
scanf("%c",&sign);
if(sign!='+' && sign!='-' && sign!='*' && sign!='/'){
printf("您輸入的運算符有問題!\n");
system("PAUSE");
return 0;
}

switch(sign){
case '+':resule=num1+num2;break;
case '-':resule=num1-num2;break;
case '*':resule=num1*num2;break;
case '/':
if(0==num2){
printf("當您使用除法時,您輸入的第二個數不能用0!\n");
system("PAUSE");
return 0;
}
else
resule=num1/num2;
}

printf("%d",resule);
system("PAUSE");
return 0;
}

❷ C語言編程問題:分數計算器

所有數據都可以用分數來表示,比如整數可以認為分母為1,這樣,所有數據可以這樣保存(數據結構為:)

struct
{
intz;//分子
intm;//分母
};

我沒寫過具體的可以計算分數的計算器,下面是加減乘除和括弧的計算器源代碼,你參考一下,如果看懂了應該不難改,應該是數據結構課程里堆棧這一塊的內容。

測試樣例:

輸入:

2*(3+6*(8/2+1))

輸出:

66

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedefstructpriority
{
charsymb;
intpri;
}priority;

prioritykuPriority[7]={{'+',1},{'-',1},{'*',2},{'/',2},{'(',3},{')',3},{'',0}};
charco[100];
charsymbol[100];
intnumb[100];
intsPoint,nPoint;
intsHead,nHead;

intfindPri(charsymb)
{
for(inti=0;i<7;i++)
{
if(kuPriority[i].symb==symb)
returnkuPriority[i].pri;
}
return-1;
}
intcalc(inta,intb,charsymb)
{
switch(symb)
{
case'+':returna+b;
case'-':returna-b;
case'*':returna*b;
case迅弊'/':
if(b==0)
{
printf("除數為0 ");
system("pause");
exit(0);
}
else
{
returna/b;
}
}
}
voidf()
{
intlen;
inti,a;
intflag,negative;
scanf("%s",co);//scanf能解決行末空格問題,gets不行
len=strlen(co);
sPoint=nPoint=0;
//棧的准備
intsum=0;
flag=-1;
negative=1;

for(i=0;i<len;i++)
{
if(i==0&&co[0]=='-')
{
negative=-1;
continue;
}
if(co[i]<='9'&&co[i]>='0')
{
if(i!=0)
{
if(co[i-1]==')')
{
printf("不合法:右括弧後面不能是數字 ");
system("pause");
return;
}
}
flag=0;
sum=sum*10+co[i]-'0';
if(i==len-1)
{
numb[nPoint++]=sum*negative;
sum=0;
negative=1;
}
elseif(!(co[i+1]<='9'&&co[i+1]>='0'))
{
numb[nPoint++]=sum*negative;
sum=0;
negative=1;
}
}
else//是運算符
{
if(co[i]=='('||co[i]==')')
{
if(co[i]=='('&&flag==0)
{
printf("不合法:左括弧前面不能是數字 ");
system("pause");
return;

}
elseif(co[i]==')'&&flag!=0&&斗昌尺co[i-1]!=')')
{
printf("不合法:右括弧前面不能是非右括弧運算符 ");
system("pause");
return;
}
flag=2;
}
else//不是括弧
{

if(sPoint!=0)
{
if(co[i-1]=='('&&co[i]!='(')//非左括弧運空高算符前面不能是左括弧
{
if(co[i]=='-')//負號
{
negative=-1;
continue;
}
elseif(co[i]=='+')
{
continue;
}
if(co[i]!='(')
{
printf("不合法:左括弧後面不能有非括弧運算符 ");
system("pause");
return;
}
}
}
if(flag==1)
{
printf("不合法:運算符前後不能有除括弧以外的運算符 ");
system("pause");
return;
}
flag=1;
}

symbol[sPoint++]=co[i];
}
}
//棧准備完畢
a=0;
for(i=0;i<=sPoint;i++)
{
if(symbol[i]=='(')
{
a++;
}
elseif(symbol[i]==')')
{
a--;
}
if(a==-1)
{
printf("括弧符不匹配 ");
system("pause");
return;
}
}
if(a!=0)
{
printf("括弧符不匹配 ");
system("pause");
return;
}
//檢查匹配括弧完畢
if(sPoint!=0)
{
sPoint--;
}
if(nPoint!=0)
{
nPoint--;
}

//開始計算
intformal,current;

sHead=-1;
nHead=0;
if(symbol[0]=='(')
{
nHead--;
}
while(1)
{
sHead++;

if(nPoint==0)
{
printf("%d",numb[0]);
break;
}
if(sHead==0)
{
continue;
}
formal=findPri(symbol[sHead-1]);
current=findPri(symbol[sHead]);

if(formal==-1||current==-1)
{
printf("非法字元 ");
system("pause");
return;
}


if(symbol[sHead]!='(')//非左括弧
{
nHead++;
}
if(current==3)//括弧
{
if(symbol[sHead]=='(')
{
continue;
}
else
{
//消掉括弧
if(symbol[sHead-1]!='(')
{
numb[nHead-1]=calc(numb[nHead-1],numb[nHead],symbol[sHead-1]);
for(a=nHead;a<nPoint;a++)
{
numb[a]=numb[a+1];
}
numb[a]=0;
nPoint--;

for(a=sHead-1;a<sPoint;a++)
{
symbol[a]=symbol[a+1];
}
symbol[sPoint]='';
sPoint--;
nHead=0;
sHead=-1;
if(symbol[0]=='(')
{
nHead--;
}
continue;//重新開始
}
else
{
for(a=sHead-1;a<=sPoint-2;a++)
{
symbol[a]=symbol[a+2];
}
symbol[sPoint-1]=symbol[sPoint]='';
sPoint-=2;
sHead=-1;
nHead=0;
if(symbol[0]=='(')
{
nHead--;
}
continue;//重新開始
}

}
}
if(formal<current)
{
continue;
}
elseif(formal>=current&&formal!=3)//且不是括弧
{
numb[nHead-1]=calc(numb[nHead-1],numb[nHead],symbol[sHead-1]);
for(a=nHead;a<nPoint;a++)
{
numb[a]=numb[a+1];
}
numb[nPoint]=0;
nPoint--;

for(a=sHead-1;a<sPoint;a++)
{
symbol[a]=symbol[a+1];
}
symbol[sPoint]='';
sPoint--;
sHead=-1;
nHead=0;
if(symbol[0]=='(')
{
nHead--;
}
continue;
}
}
}
intmain()
{
while(1)
{
f();
printf(" ");
}
}

❸ 用C語言寫的計算器源代碼

|#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
typedef float DataType;
typedef struct
{
DataType *data;
int max;
int top;
}Stack;
void SetStack(Stack *S,int n)
{
S->data=(DataType*)malloc(n*sizeof(DataType));
if(S->data==NULL)
{
printf("overflow");
exit(1);
}
S->max=n;
S->top=-1;
}
void FreeStack(Stack *S)
{
free(S->data);
}
int StackEmpty(Stack *S)
{
if(S->top==-1)
return(1);
return(0);
}
DataType Peek(Stack *S)
{
if(S->top==S->max-1)
{
printf("Stack is empty!\n");
exit(1);
}
return(S->data[S->top]);
}
void Push(Stack *S,DataType item)
{
if(S->top==S->max-1)
{
printf("Stack is full!\n");
exit(1);
}
S->top++;
S->data[S->top]=item;
}
DataType Pop(Stack *S)
{
if(S->top==-1)
{
printf("Pop an empty stack!\n");
exit(1);
}
S->top--;
return(S->data[S->top+1]);
}
typedef struct
{
char op;
int inputprecedence;
int stackprecedence;
}DataType1;
typedef struct
{
DataType1 *data;
int max;
int top;
}Stack1;
void SetStack1(Stack1 *S,int n)
{
S->data=(DataType1*)malloc(n*sizeof(DataType1));
if(S->data==NULL)
{
printf("overflow");
exit(1);
}
S->max=n;
S->top=-1;
}
void FreeStack1(Stack1 *S)
{
free(S->data);
}
int StackEmpty1(Stack1 *S)
{
if(S->top==-1)
return(1);
return(0);
}
DataType1 Peek1(Stack1 *S)
{
if(S->top==S->max-1)
{
printf("Stack1 is empty!\n");
exit(1);
}
return(S->data[S->top]);
}
void Push1(Stack1 *S,DataType1 item)
{
if(S->top==S->max-1)
{
printf("Stack is full!\n");
exit(1);
}
S->top++;
S->data[S->top]=item;
}
DataType1 Pop1(Stack1 *S)
{
if(S->top==-1)
{
printf("Pop an empty stack!\n");
exit(1);
}
S->top--;
return(S->data[S->top+1]);
}
DataType1 MathOptr(char ch)
{
DataType1 optr;
optr.op=ch;
switch(optr.op)
{
case'+':
case'-':
optr.inputprecedence=1;
optr.stackprecedence=1;
break;
case'*':
case'/':
optr.inputprecedence=2;
optr.stackprecedence=2;
break;
case'(':
optr.inputprecedence=3;
optr.stackprecedence=-1;
break;
case')':
optr.inputprecedence=0;
optr.stackprecedence=0;
break;
}
return(optr);
}
void Evaluate(Stack *OpndStack,DataType1 optr)
{
DataType opnd1,opnd2;
opnd1=Pop(OpndStack);
opnd2=Pop(OpndStack);
switch(optr.op)
{
case'+':
Push(OpndStack,opnd2+opnd1);
break;
case'-':
Push(OpndStack,opnd2-opnd1);
break;
case'*':
Push(OpndStack,opnd2*opnd1);
break;
case'/':
Push(OpndStack,opnd2/opnd1);
break;
}
}
int isoptr(char ch)
{
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(')
return(1);
return(0);
}
void Infix(char *str)
{
int i,k,n=strlen(str);
char ch,numstr[10];
DataType opnd;
DataType1 optr;
Stack OpndStack;
Stack1 OptrStack;
SetStack(&OpndStack,n);
SetStack1(&OptrStack,n);
k=0;
ch=str[k];
while(ch!='=')
if(isdigit(ch)||ch=='.')
{
for(i=0;isdigit(ch)||ch=='.';i++)
{
numstr[i]=ch;
k++;
ch=str[k];
}
numstr[i]='\0';
opnd= atof(numstr);
Push(&OpndStack,opnd);
}
else
if(isoptr(ch))
{
optr=MathOptr(ch);
while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)
Evaluate(&OpndStack,Pop1(&OptrStack));
Push1(&OptrStack,optr);
k++;
ch=str[k];
}
else if(ch==')')
{
optr=MathOptr(ch);
while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)
Evaluate(&OpndStack,Pop1(&OptrStack));
Pop1(&OptrStack);
k++;
ch=str[k];
}
while(!StackEmpty1(&OptrStack))
Evaluate(&OpndStack,Pop1(&OptrStack));
opnd=Pop(&OpndStack);
cout<<"你輸入表達式的計算結果為"<<endl;
printf("%-6.2f\n",opnd);
FreeStack(&OpndStack);
FreeStack1(&OptrStack);
}
void main()
{
cout<<"請輸入你要計算的表達式,並以「=」號結束。"<<endl;
char str[50];
gets(str);
Infix(str);
=================================================================
哈哈!給分吧!

閱讀全文

與c分數計算器代碼相關的資料

熱點內容
炫酷字體APP下載的文件在哪裡 瀏覽:668
廊坊哪裡有少兒編程機構 瀏覽:312
cad新文件能找回來嗎 瀏覽:951
導出手機qq文件到u盤 瀏覽:456
電腦如何打開ppt文件怎麼打開方式 瀏覽:782
魅族鎖定區文件夾 瀏覽:357
刻字cnc怎麼編程 瀏覽:182
學校的網路拓撲結構圖 瀏覽:784
收集100個pdf文件里關鍵詞 瀏覽:594
蘋果關閉4g網路設置 瀏覽:289
如何監測資料庫 瀏覽:967
拷貝過來的pdf文件 瀏覽:751
抖音小店的訪客數據怎麼看 瀏覽:670
怎麼把c語言編程的字元向下移動 瀏覽:786
sql刪除文件組代碼 瀏覽:978
安卓post請求多重json 瀏覽:776
微信消除數據怎麼恢復 瀏覽:918
小米刷機顯示系統找不到指定文件 瀏覽:528
蘋果手機小風扇圖app叫什麼 瀏覽:292
繁體中文輸入工具 瀏覽:916

友情鏈接