导航:首页 > 编程语言 > 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分数计算器代码相关的资料

热点内容
怎么他么怎么又网络了 浏览:649
java会出现内存泄露么 浏览:617
苹果4s锁屏后怎么还显示歌曲 浏览:207
鸿蒙系统文件管理哪些可以删除 浏览:550
ubuntuqt创建工程没有配置文件 浏览:126
网站登录变成其他网站怎么处理 浏览:202
ug数控编程学校有哪些 浏览:203
java图片上传显示 浏览:402
ppt的文件名后缀 浏览:902
ug编程软件下载到哪个盘 浏览:359
炫酷字体APP下载的文件在哪里 浏览:668
廊坊哪里有少儿编程机构 浏览:312
cad新文件能找回来吗 浏览:951
导出手机qq文件到u盘 浏览:456
电脑如何打开ppt文件怎么打开方式 浏览:782
魅族锁定区文件夹 浏览:357
刻字cnc怎么编程 浏览:182
学校的网络拓扑结构图 浏览:784
收集100个pdf文件里关键词 浏览:594
苹果关闭4g网络设置 浏览:289

友情链接