电子计算器用C语言怎么编,请大家帮帮忙
追问:能不能智能化一点
追问:能不能智能化一点
答案:#include <stdio.h>
#include <string.h>
//-----------------------------------------------//将字符串转化为整形数组
void str2int(char *a,char *b,int ia[1024],int ib[1024],int ir[1024])
{
int i,len;
//对数组初始化
for (i=0;i<1024;i++)
{
ia[i]=0;
ib[i]=0;
ir[i]=0;
}
//将a翻转后输入到数组
i=strlen(a);
len=strlen(a);
while(i)
{
i--;
ia[len-i-1]=*(a+i)-48;
}
//将b翻转后输入到数组
i=strlen(b);
len=strlen(b);
while(i)
{
i--;
ib[len-i-1]=*(b+i)-48;
}
}
//-----------------------------------------------
//比较大小
int cmp(char *a,char *b)
{
int i,sg;
if (strlen(a)>strlen(b))
{
sg=0;
}
else if (strlen(a)<strlen(b))
{
sg=1;
}
else
{
for (i=0;i<(int)strlen(a);i++)
{
if (*(a+i)>*(b+i))
{
sg=0;
break;
}
else if (*(a+i)<*(b+i))
{
sg=1;
break;
}
else
sg=0;
}
}
return sg;
}
//-----------------------------------------------
//加法函数
char *add(char *a,char *b){
int len,i,c;
int ia[1024],ib[1024],ir[1024];
str2int(a,b,ia,ib,ir);
if (strlen(a)>strlen(b)) len=strlen(a);
else len=strlen(b);
c=0;
//加法运算
for (i=0;i<len;i++)
{
ir[i]=(ia[i]+ib[i]+c)%10;
c=(ia[i]+ib[i]+c)/10;
}
if (c==1)
{
ir[len]=1;
len++;
}
for (i=0;i<len;i++)
{
*(a+i)=ir[len-i-1]+48;//翻转输出
}
*(a+len)='\0';
return a;
}
//-----------------------------------------------
//减法函数
char *sub(char *a,char *b)
{
int len,i,c,sg;
int ia[1024],ib[1024],ir[1024];
char str[1024];
char *strrt;
str2int(a,b,ia,ib,ir);
//符号判断
sg=cmp(a,b);
if (sg==0) len=strlen(a);
else len=strlen(b);
c=0;
//减法运算
for (i=0;i<len;i++)
{
if (sg==0)
{
if ((ia[i]-ib[i]-c)>=0)
{
ir[i]=ia[i]-ib[i]-c;
c=0;
}
else
{
ir[i]=10+ia[i]-ib[i]-c;
c=1;
}
}
else
{
if ((ib[i]-ia[i]-c)>=0)
{
ir[i]=ib[i]-ia[i]-c;
c=0;
}
else
{
ir[i]=10+ib[i]-ia[i]-c;
c=1;
}
}
}
if (sg==1) str[0]='-';
for (i=0;i<len;i++)
{
str[i+sg]=ir[len-i-1]+48;//翻转输出
}
str[len+sg]='\0';
strrt=str;
//去零处理
if (sg==0)
{
while(len>1&&*strrt=='0')
{
strrt++;
len--;
}
}
if (sg==1)
{
strrt++;
while(len>1&&*strrt=='0')
{
*strrt='-';
strrt++;
len--;
}
strrt--;
}
strcpy(a,strrt);
return a;
}
//-----------------------------------------------//乘法函数
char *mul(char *a,char *b)
{
int len,lena,lenb,i,j,c,jin;
int ma[1024],mb[1024],mr[1024];
char stra[1024],strb[1024];
char *strrta,*strrtb;
stra[0]='0';
stra[1]='\0';
strrta=stra;
str2int(a,b,ma,mb,mr);
//乘法运算
lena=strlen(a);
lenb=strlen(b);
for (j=0;j<lena;j++)
{
c=0;
jin=0;
for (i=0;i<lenb;i++)
{
mr[i]=(ma[j]*mb[i]+c)%10;
c=(ma[j]*mb[i]+c)/10;
}
len=lenb;
if (c>0)
{
strb[0]=c+48;
jin=1;
}
for (i=0;i<len;i++)
{
strb[i+jin]=mr[len-i-1]+48;
}
for (i=len;i<len+j;i++) strb[i+jin]='0';
strb[len+j+jin]='\0';
strrtb=strb;
add(strrta,strrtb);
}
strcpy(a,strrta);
return a;
}
//--------------------------------------------------
//除法函数
char *div(char *a,char *b)
{
int len,lena,i,j;
char stra[1024],strb[1024],strc[1024],strd[1024];
char *strbp;
strbp=strc;
strcpy(stra,a);
strcpy(strb,b);
strcpy(strd,a);
if (cmp(stra,strb)==1)
{
//被除数小于除数
*a='0';
*(a+1)='\0';
strcpy(b,stra);
}
else
{
//被除数大于除数
mul(strb,"10");
len=strlen(a)-strlen(b);
if (len==0||(len==1&&cmp(stra,strb)==1))
{
strcpy(stra,a);
strcpy(strb,b);
i=1;
strc[0]='1';
strc[1]='\0';
while(cmp(stra,strc)==0)
{
strc[0]=i+48;
strc[1]='\0';
mul(strc,strb);
i++;
}
*a=i+46;
*(a+1)='\0';
strcpy(strc,a);
mul(strc,strb);
sub(stra,strc);
strcpy(b,stra);
}
else
{
len=strlen(a)-strlen(b);
for (j=0;j<=len;j++)
{
for (i=0;i<=(int)strlen(b);i++)
{
if ((i+j-1)<0) stra[i]='0';
else stra[i]=*(a+i+j-1);
}
stra[strlen(b)+1]='\0';
strcpy(strb,b);
strbp=stra;
lena=strlen(strbp);
while(lena>1&&*strbp=='0')
{
strbp++;
lena--;
}
div(strbp,strb);
strc[j]=*strbp;
strbp=strb;
for (i=0;i<(int)(strlen(b)-strlen(strb));i++)
{
strbp--;
*strbp='0';
}
for (i=strlen(b)-1;i>=0;i--)
{
*(a+i+j)=*(strbp+i);
}
}
strc[len+1]='\0';
strbp=strc;
lena=strlen(strbp);
while(lena>1&&*strbp=='0')
{
strbp++;
lena--;
}
strcpy(a,strbp);
mul(strbp,b);
sub(strd,strbp);
strcpy(b,strd);
}
}
return a;
}
void main(){
char a[1024],b[1024],c;
c='0';
while(c!='q')
{
printf(">>请输入命令\n>>+ 加\n>>- 减\n>>* 乘\n>>/ 除\n>>q 退出\n>>");
c=getchar();
getchar();
switch(c)
{
case 'q':break;
case '+':
printf(">>请输入第一个加数\n>>");
gets(a);
printf(">>请输入第二个加数\n>>");
gets(b);
printf(">>和为%s",add(a,b));
getchar();
break;
case '-':
printf(">>请输入被减数\n>>");
gets(a);
printf(">>请输入减数\n>>");
gets(b);
printf(">>差为%s",sub(a,b));
getchar();
break;
case '*':
printf(">>请输入第一个乘数\n>>");
gets(a);
printf(">>请输入第二个乘数\n>>");
gets(b);
printf(">>积为%s",mul(a,b));
getchar();
break;
case '/':
printf(">>请输入被除数\n>>");
gets(a);
printf(">>请输入除数\n>>");
gets(b);
div(a,b);
printf(">>商为%s余数为%s",a,b);
getchar();
break;
default:break;
}
}
}
这个行吗?
童鞋 你应该申请个百度帐号这里都是路人而已你想实现控制台的还是界面的?控制台有点麻烦,你要实现输入表达式回车得结果,要用到数据结构中的栈来辅助操作,数据一个栈,符号一个栈,具体实现比较麻烦