我得到了这个计算器的问题,我需要使用以前的运算结果(如果我想),但当我这样做,它给出正确的,如果只给它相同的以前的运算
下面是代码:
#include<stdio.h>
#include<math.h>
double addition (double a, double b)
{
double add;
add=a+b;
return add;
}
double soustraction (double a, double b)
{
double sous;
sous=a-b;
return sous;
}
double multiplication (double a,double b)
{
double multi;
multi=a*b;
return multi;
}
double division (double a, double b)
{
double div;
div=a/b;
return div;
}
double reste_de_division (int a,int b)
{
double rest;
rest=a%b;
return rest;
}
double puissance( double a,double b)
{
int i;
double r;
i = 0;
r = 1;
while (i < b){
r = r * a;
i ++;
}
return r;
}
double factorielle (double a)
{
int i;
double facto;
facto=1;
for(i=0;i<a;i++)
{facto=(a-i)*facto;
}
return facto;
}
double PGCD (int a,int b)
{
int i;
double pgcd;
for(i=1; i <= a && i <= b; ++i)
{
if(a%i==0 && b%i==0)
pgcd = i;
}
return pgcd;
}
double PPCM (int a,int b)
{
int ppcm;
ppcm = (a > b) ? a : b;
while(ppcm%a !=0 || ppcm%b !=0)
ppcm=ppcm+1;
return ppcm;
}
double inverse (double a)
{
double inv;
inv=1/a;
return inv;
}
int main(){
double a,b,r;
char ch;
printf("\n***************************************\n");
printf (" \n + Addition \t \t - Subtraction \n * Multiplication \t / Division \n Reste de division \t c Puissance \n ! Factorielle \t \t g PGCD \n p PPCM \t \t i Inverse \n q Quitter \n");
printf("\n***************************************\n");
printf("Donner les deux nombres et l'operation:\n");
do
{b=r;
scanf("%lf %lf %c",&a,&b,&ch);
switch (ch)
{case '+':
r=addition(a,b);
printf("%lf\n",r);
break;
case '-':
r=soustraction(a,b);
printf("%lf\n",r);
break;
case '*':
r=multiplication(a,b);
printf("%lf\n",r);
break;
case '/':
r=division(a,b);
printf("%lf\n",r);
break;
case '%':
printf("%lf\n",reste_de_division(a,b));
break;
case 'c':
printf("%lf\n",puissance(a,b));
break;
case '!':
printf("%lf\n",factorielle(a));
break;
case 'g':
printf("%lf\n",PGCD(a,b));
break;
case 'p':
printf("%lf\n",PPCM(a,b));
break;
case 'i':
printf("%lf\n",inverse(a));
break;
}
}while(ch !='q');
return 0;
}
抱歉我英语不好
示例:5 6 +
11 6 + 17 3 - 20 //这是错误,应该给予14而不是20
1条答案
按热度按时间6ie5vjzr1#
你的问题就在这里:
你希望用户总是输入两个双精度型和一个字符,如果用户只输入一个双精度型和一个字符,
ch
(和b
)的值不变,程序将执行与上次相同的操作。示例:
第一次输入:
这将使
a
等于6,b
等于5,ch
等于+
,因此程序将把5和6相加,并产生结果11,该结果存储在b
中。下一次输入:
这将使
a
等于1,但b
和ch
保持不变,即b
仍然等于11,ch
仍然等于+
,因此程序将把两个数1和11相加,并产生结果12,该结果存储在b
中。这只是执行
scanf("%lf %lf %c",&a,&b,&ch);
时可能出错的一个示例。还有其他输入序列会导致(甚至更多)bizar输出。你需要对用户输入进行更严格的解析。
scanf
函数并不适用于此。考虑使用fgets
读取整行,然后解析它。使用sscanf
可以小心地完成这一点。