| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1152 人关注过本帖
标题:[经验]用C来写一 个计算器的程序
只看楼主 加入收藏
取消关键字高亮
加内特21
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-4-10
收藏
 问题点数:0 回复次数:1 
[经验]用C来写一 个计算器的程序

我想用的是用C来写一计算器

我也想和你想的一 样把它放在一个数组内,一 次性把要 计算的式放入数组,然后慢慢把它读出来计算,我不知道怎么来写这个 程序,你能帮我一 下吗

希望你能帮帮我呀

搜索更多相关主题的帖子: 计算器 经验 
2007-04-10 10:52
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 

上次有人也发过这样的问题.
我写过一个.下面是我写的.看看对你有没有帮助:
支持多级别的括号和括号嵌套,支持负数和小数.如果使用中缀表达式,那么在处理括号的嵌套和匹配应该能更加漂亮点

#include<stdio.h>//关键是括号要匹配,我的基本思想是找到一对括号就进行第归
#include<stdlib.h>
#include<string.h>
#include<math.h>
double transform(char [],int );
void del(char* ,char *);
void del2(double [],int );
void convert(char [],char *,char *);
double jisuan(char []);

void main()
{
char str[100];
printf("IF you want to exit,press twice CTRL+Z will help you!!\n");
while(scanf("%s",str)!=EOF)
printf("%f\n",jisuan(str));
}
double jisuan(char str[])//匹配括号
{
char *p;
char ss[100]={'\0'},fuhao[100]={'\0'};//num[]是用来放表达试中的数字,
double number[100]={0.0},num[100]={0.0};//number[]是用来放括号中的计算结果
int kk=0,right,left,i,j=0,flag=0;
p=strchr(str,'(');
while(p!=NULL)
{
for(left=right=i=0;str[i]!='\0';i++)
{
if(str[i]=='(')left++;
if(str[i]==')')right++;
if(left==right&&left!=0)
{ //这里就是找到括号并且把括号内的内容倒出,之后进入第归
convert(ss,++p,&str[i-1]);//导出括号内的内容
number[kk++]=jisuan(ss);//进入第归
*(--p)='q';
p++;
del(p,&str[i+1]);//删除str[]中前面传递出来的括号内的内容
left=right=0;
i=-1;
break;
}
}
p=strchr(str,'(');//继续查找知道没有括号为只
} //经过上面的处理这时候字符数组中已经没有括号了
if(str[0]=='-')//确定负号
flag=1;
for(i=1,kk=0;str[i-1]!='\0';i++)//导出str中的数据和符号比如1.02+3.01
{ //就把1.02和3.02放到数组num[0],num[1]中,把符号放到fuhao[]中
if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/'||str[i]=='\0')
{
if(str[i-1]!='q')
{
num[j]=transform(str,i);
fuhao[j++]=str[i];
}
else
{
num[j]=number[kk++];
fuhao[j++]=str[i];
}
}
}
if(flag)//修正num[0]的值,也就是如果str[]的第一个字符是'-'那么代表的是第一个数字是负数
{
num[0]=0-num[0];
flag=0;
}
for(i=0;fuhao[i]!='\0';i++)
{
if(fuhao[i]=='*'||fuhao[i]=='/')//开始计算乘除
{
if(fuhao[i]=='*')
num[i]*=num[i+1];
else
num[i]/=num[i+1];
del(&fuhao[i],&fuhao[i+1]);
del2(num,i+1);
i=-1;//继续查找直到没有为止
}
}
for(i=0;fuhao[i]!='\0';i++)
{
if(fuhao[i]=='+'||fuhao[i]=='-')
{
if(fuhao[i]=='+')
num[i]+=num[i+1];
else
num[i]-=num[i+1];
del(&fuhao[i],&fuhao[i+1]);
del2(num,i+1);
i=-1;
}
}
return num[0];
}
void del(char *i,char *j)
{
for(i;*j!='\0';j++)
*(i++)=*j;
*i=*j;
}
void del2(double num[],int i)
{
for(;i<100;i++)
num[i]=num[i+1];
}
void convert(char ss[],char *p,char *q)
{
int i=0;
char *pp;
for(pp=p;pp<=q;pp++)
ss[i++]=*pp;
}

double transform(char str[],int j)
{
char temp[100]={'\0'};
int k=0,i;
i=j;
while(i--)
{
if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')
break;
}
for(i++;i<j;i++)
temp[k++]=str[i];
return atof(temp);
}

我自己也没有测试很复杂的数据.大家帮忙找找错误



2007-04-10 12:17
快速回复:[经验]用C来写一 个计算器的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012289 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved