麻烦哪位高手,帮我看一个C语言程序,一个计算器程序。。。不知到哪里出现问题了33+33=65?。谢啦!

#include "stdio.h"
#include "conio.h"
char copy=0;/*copy计入按下+-*/前的c值*/
long play,j=1;/*play运算类型的判断 j值的位数*/
long float c=0;/*读取键盘的数字*/
void shu()/*刷新屏幕*/
{gotoxy(20,20);
printf("%lf",c);
}
void reout(play)/*处理运算结果*/
{switch (play)
{case 1:
clrscr();
c=(c*j+copy);
gotoxy(20,20);
printf("%lf",c);
break;
case 2:
clrscr();
c=copy-c*j;
gotoxy(20,20);
printf("%f",c);
break;
case 3:
clrscr();
c=copy*c*j;
gotoxy(20,20);
printf("%f",c);
break;
case 4:
clrscr();
c=copy/(c*j);
gotoxy(20,20);
printf("%f",c);
break;
}
}
main()
{char key;/*判断按键的变量*/
clrscr();
gotoxy(20,20);
printf("%lf",c);
while(1)
{
while(bioskey(1)==1);
key=bioskey(0);
switch (key)
{
case '1':
if(c!=0)/*屏幕显示不是0时*/
{
j*=10;/*增加位数*/
c*=j;
c+=1;/*个位数加*/
shu();/*刷新屏幕*/
c=c/j;
}
if(c==0)
{
c=1;
shu();
}
break;
case '2':
if(c!=0)
{
j*=10;
c*=j;
c+=2;
shu();
c=c/j;
}
if(c==0)
{
c=2;
shu();
}
break;
case '3':
if(c!=0)
{
j*=10;
c*=j;
c+=3;
shu();
c=c/j;
}
if(c==0)
{
c=3;
shu();
}
break;
case '4':
if(c!=0)
{
j*=10;
c*=j;
c+=4;
shu();
c=c/j;
}
if(c==0)
{
c=4;
shu();
}
break;
case '5':
if(c!=0)
{
j*=10;
c*=j;
c+=5;
shu();
c=c/j;
}
if(c==0)
{
c=5;
shu();
}
break;
case '6':
if(c!=0)
{
j*=10;
c*=j;
c+=6;
shu();
c=c/j;
}
if(c==0)
{
c=6;
shu();
}
break;
case '7':
if(c!=0)
{
j*=10;
c*=j;
c+=7;
shu();
c=c/j;
}
if(c==0)
{
c=7;
shu();
}
break;
case '8':
if(c!=0)
{
j*=10;
c*=j;
c+=8;
shu();
c=c/j;
}
if(c==0)
{
c=8;
shu();
}
break;
case '9':
if(c!=0)
{
j*=10;
c*=j;
c+=9;
shu();
c=c/j;
}
if(c==0)
{
c=9;
shu();
}
break;
case '0':
if(c!=0)
{
j*=10;
c*=j;
c+=0;
shu();
c=c/j;
}
if(c==0)
{
c=0;
shu();
}
break;
case 'q':
exit(0);
break;
case 'r':/*加法运算*/
play=1;
copy=(c*j);/*记录此时屏幕的值*/
clrscr();/*清空屏幕*/
j=1;/*位数*/
c=0;/*屏幕显示为0*/
shu();/*刷新屏幕,重新输出*/
break;
case 't':/*减法运算*/
play=2;
copy=(c*j);
clrscr();
j=1;
c=0;
shu();
break;
case 'y':/*乘法运算*/
play=3;
copy=(c*j);
clrscr();
j=1;
c=0;
shu();
break;
case 'u':/*除法运算*/
play=4;
copy=(c*j);
c=0;
j=1;
clrscr();
shu();
break;
case 'e':/*等于*/
reout(play);
break;
case 'f':
clrscr();
c=0;
shu();
j=0;

break;
}
}
}

////你的那个错得太多了,你可以看一下这个

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
char token[61]; /*存放表达式字符串的数组*/
int n=0;
void error(void) /*报告错误函数*/
{
printf("ERROR!\n");
exit(1);
}
void match(char expected) /*检查字符匹配的函数*/
{
if(token[n]==expected)
token[++n]=getchar();
else error();
}
double term(void); /*计算乘除的函数*/
double factor(void); /*处理括号和数字的函数*/
double exp(void) /*计算加减的函数*/
{
double temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return temp;
}
double term(void)
{
double div;
double temp=factor();
while((token[n]=='*')||(token[n]=='/'))
switch(token[n])
{
case'*':match('*');
temp*=factor();
break;
case'/':match('/');
div=factor();
if(div==0) /*处理除数为零的情况*/
{
printf("The divisor is zero!\n");
exit(1);
}
temp/=div;
break;
}
return temp;
}
double factor(void)
{
double temp;
char number[61];
int i=0;
if(token[n]=='(')
{
match('(');
temp=exp();
match(')');
}
else if(isdigit(token[n])||token[n]=='.')
{
while(isdigit(token[n])||token[n]=='.') /*将字符串转换为浮点数*/
{
number[i++]=token[n++];
token[n]=getchar();
}
number[i]='\0';
temp=atof(number);
}
else error();
return temp;
}
main()
{
double result;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return 0;
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else error();
fclose(data);
return 0;
getchar();
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-09
1)是不是就是想写个计算器程序?另外,因为写程序的逻辑不一样,与其让别人看这么长的程序,不如让别人自己再写一个,我自己写的,加减乘除程序:(希望能够帮上忙)
/************************************************************************/
/*
加减乘除四则运算
*/
/************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(void)
{
float a,b,f;
int ctl=0,p;
char Cflag='Y';
char c;
char sa[10],sb,sc[10];
while((Cflag == 'Y') || (Cflag == 'y') )
{
for(p=0;p<10;p++) sa[p]='\0';
sb='\0';
for(p=0;p<10;p++) sc[p]='\0';
p=0;
ctl=1;
printf("加、减、乘、除四则运算算式:\n");
scanf("%c", &c);
while(c!='\n')
{
if (c>='0' && c<='9' || c=='.')
{
if ( ctl==1 ) sa[p]=c;
if ( ctl==2 ) sc[p]=c;
p++;

}else if ( c=='+'||c=='-'||c=='*'||c=='/')
{
ctl=2;
sa[p]='\0';
sb=c;
p=0;
}

scanf("%c", &c);
}
sc[p]='\0';
//printf("[%s%c%s]",sa,sb,sc);
a=atof(sa);
b=atof(sc);
switch(sb)
{
case '+':
f=a+b;
break;
case '-':
f=a-b;
break;
case '*':
f=a*b;
break;
case '/':
f=a/b;
break;
defalt:
;
}
printf("[%.2f%c%.2f]=%.2f",a,sb,b,f);

printf("\n是否继续计算(Y/N)?");
scanf("%c", &Cflag);
getchar();

}
}追问

谢啦,但是我还是想弄明白,我写的哪里错了,能不能麻烦你点时间帮我看下。。谢啦!能不能告诉我你的QQ。。

第2个回答  2011-12-07
我也没有看完.感觉问题不大
可以提出些建议
1、定义 long float c 之后再使用过程中if(C!=0) 这里不对,建议看下C中各种与0的比较
2、注意你程序中定义变量的类型,TC下的程序 使用debug跟踪调试几次就好了.现在不是
在校的不一定有tc环境追问

嗯,谢谢,你能不能在帮我看下,我变量都跟踪了看过,但检查不出哪里错了,测试时有些计算正确有些计算错误,纠结啊!还有你说的long float c与if(C!=0)有什么关系吗?不理解。。

第3个回答  2011-12-07
教lz一个简单的方法,把最后结果+1
第4个回答  2011-12-07
太长了,又很乱,看起来太慢

C语言。帮我看看,笑脸返回时,出现问题了
int x=1,y=1,xy=1;void gotoxy(int x,int y){ COORD c;c.X=x-1;c.Y=y-1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);} main(){ while(1){ gotoxy(x+1,y);printf(" ");if(x>5) xy=-1;if(x<1)xy=1;x=x+xy;printf("%c",2);Sleep(1000);} } ...

为什么每个月的天数不一样?
7、8、9月连续三个月都是大月,看起来很不顺眼,使用也不方便, 就把9月改为30天,10月为31天,11月为30天,12月为31天。这样,大小月相间的规律破坏了,一直到两千年后的今天还受到影响。奥古斯都修改过的历法格式与现行公历一模一样了,但它的纪元,即计算年代的起算点还不是公元元年,它的闰年方法与现行公历还不...

我想问一个很不可思议的问题:我看时间的时候老是不经意的遇到重复的数字...
无尽的巧合,会让人感到恐慌,别在意了,世界巧合之事多了去了,或许下个站点你会遇到我,而我穿了44码的鞋,33的腰一样。如果你不留意它就没发生,在意了,巧合无处不在

学习C语言需要掌握哪些基本知识?
因为系统会根据数组中元素的总个数来分配空间,当知道元素总个数以及列的维数后,会直接计算出行的维数; 采用第二种初始化时数组声明必须同时指定行和列的维数。 18.多维度数组的遍历 使用嵌套循环 注意:多维数组的每一维下标均不能越界! 19.结构体 C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另...

我没有装过系统,想学一下,请教有经验的高手
1、找一张带光盘启动的WIN98 或WIN ME或WIN 2000的光盘,然后在准备一张XP的安装盘!2、现在电脑里下载好冲击波和震荡波病毒的免疫补丁,并保存在除C区外的分区里,比如D E都可以 3、重启电脑,插入WIN98光盘(以WIN98盘为例子,其他一个道理),当电脑重启后,一直狂点DEL键,进如BIOS,选择“...

一个关于折半插入排序的程序(C语言)出现问题了!?请帮忙改一下可以吗...
我仔细看了下 你的写法错的地方不是一点点 你的思想是要用折半方法在前面的序列里找到一个值小于新的数将这个数插入在找到值之后 所以才有 for(j=i-1;j>=high+1;j--)a[j+1]=a[j];a[high+1]=a[i];但是你必须有一个位置做为标量 将新的数放在这个标量里 比如新的数a[i] 用a[0...

我这有C语言的题,哪位大侠能解决一下,必有重谢!
C)将文件位置指针从文件末尾处后退20个字节 D)将文件位置指针移到距离当前位置20个字节处 PS:仔细看下fseek函数就可以了。3.在下述程序中,if (i>j) 语句共执行的次数是( )。main(){ int i=0,j=14,k=2,s=0;for(;;){ i+= k ;if(i>j){ printf(“%d”,s);break ;}...

有一个圣诞快乐的程序据说是用C语言写的,我想把它改成生日快乐的,跪求...
21,a);printf("%*.*s\n",57,17,a);printf("%*.*s\n",55,13,a);printf("%*.*s\n",53,9,a);printf("%*.*s\n",51,5,a);printf("%*.*s\n",50,3,a);printf("%*.*s\n",49,1,a);return0;} ...

计算工具的发展过程
1、手动式计算工具 人类最初用手指进行计算。人有两只手,十个手指头,所以,自然而然地习惯用手指记数并采用十进制记数法。用手指进行计算虽然很方便,但计算范围有限,计算结果也无法存储。2、机械式计算工具 17世纪,欧洲出现了利用齿轮技术的计算工具。1642年,法国数学家帕斯卡(Blaise Pascal)发明...

C语言中怎么把上一个函数的值用到下一个函数
程序如下:include <stdio.h> int main(void){ const int iTimes=sizeof(int) * 8;int iMask=1;int x = 12345; \/\/这个就是要转换的数 int x2[iTimes];int i;for( i=0 ; i<iTimes ; i++ ){ x2[i]=x & iMask;iMask = iMask << 1;\/\/ printf("%d",iMask);} printf("\\...

相似回答
大家正在搜