首页 > 代码库 > 简易计算器c语言源码,

简易计算器c语言源码,

本人新学,

用的都是最基本的语句,

程序功能不完善,

有以下问题,

1.大数据无法计算,

2.较大整型数据输出为浮点型,(因为是老师布置的作业,有要求含实数的算术计算输出要含小数。

3.无法用()提升运算优先级,

欢迎提出改进意见

代码附上:

void fun1()//算术运算函数
{
char a[20][30],b[20];
double c[20],s;
int i,j,k,flag;
system("cls");//
printf("输入算术式\n格式如:31+42*21/43-2\n回车输出运算结果.");
do{
fflush(stdin);
flag=0;
system("pause");
system("cls");
for(i=0; i<20; i++)//循环语句输入
{
k=i;
for(j=0;; j++)
{
a[i][j]=getchar();//字符数组中每行保存一串数字与一个运算符或回车符
if(a[i][j]==‘\n‘||a[i][j]==‘+‘||a[i][j]==‘-‘||a[i][j]==‘*‘||a[i][j]==‘/‘)
{
b[i]=a[i][j];
a[i][j+1]=‘\0‘;
break;
}
}
if(b[i]==‘\n‘)break;
}
for(i=0; i<=k; i++)//判断输入是否合法
{
if(!(a[i][0]<=‘9‘&&a[i][0]>=‘0‘||a[i][0]==‘\n‘))
flag=1;
for(j=0; a[i][j+1]!=‘\0‘; j++)
{
if(!(a[i][j]<=‘9‘&&a[i][j]>=‘0‘||a[i][j]==‘\n‘))
flag=1;
if(flag)break;
}
if(flag)break;
}
if(flag)printf("输入错误,请重新输入!\n");
}
while(flag);
for(i=0; i<=k; i++)//判断输入数字是否有浮点型
{
for(j=0; j<10; j++)
if(a[i][j]==‘.‘)flag=1;
c[i]=atof(a[i]);//将字符串中数字字符转换为浮点型
}
for(i=0; b[i]!=‘\n‘; i++)//根据优先级先计算乘除
{
switch(b[i])
{
case ‘*‘:
c[i]*=c[i+1];
c[i+1]=c[i];
for(j=i; j!=0; j--)
{
if(b[j-1]==‘*‘||b[j-1]==‘/‘)
c[j-1]=c[j];
else break;
}
break;
case ‘/‘:
c[i]/=c[i+1];
c[i+1]=c[i];
for(j=i; j!=0; j--)
{
if(b[j-1]==‘*‘||b[j-1]==‘/‘)
c[j-1]=c[j];
else break;
}
break;
}
}
s=c[0];
for(i=0; b[i]!=‘\n‘; i++)
switch(b[i])
{
case ‘+‘:
s+=c[i+1];
break;
case ‘-‘:
s-=c[i+1];
break;
}
if(!flag)//整型浮点型判断
if(!(s==(int)s)) flag=1;
if(!flag) printf("%d\n",(int)s);//判断输出为浮点型还是整形并输出
else printf("%f\n",s);
system("pause");
}

简易计算器c语言源码,