当前位置:编程学习 > C/C++ >>

电子计算器用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;

}

}

}

这个行吗?

童鞋 你应该申请个百度帐号这里都是路人而已
你想实现控制台的还是界面的?控制台有点麻烦,你要实现输入表达式回车得结果,要用到数据结构中的栈来辅助操作,数据一个栈,符号一个栈,具体实现比较麻烦

上一个:学生成绩管理系统C语言【急求!!!谢谢!!!】
下一个:从C语言编程方面来讲,怎么样才算是好程序员?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,