#include<stdio.h>
#include<stdlib.h>
struct sp {double thuc;
double ao; };
struct sp a;
double t1,t2;
char dau;
int tinh(struct sp a, char dau);
int toan(struct sp b, char dau2);
main() ///HAM TINHTOAN
{
printf("nhap so:\nthuc\tao\n");
scanf("%lf", &a.thuc);
scanf("%lf", &a.ao);
printf("\t phep tinh: \n\t ");
fflush(stdin);
scanf("%c",&dau);
tinh(a,dau);
}
////HAM CON////////
int tinh(struct sp a, char dau) //HAM TINH
{
struct sp b;
char dau1;
switch(dau)
{
case '+': /// phep tinh cong
printf("nhap so:\nthuc\tao\n");
scanf("%lf", &b.thuc);
scanf("%lf", &b.ao);
printf("\t phep tinh: \n\t ");
fflush(stdin);
scanf("%c", &dau1);
if(dau1=='+'||dau1=='-'||dau1=='=')
{
a.thuc += b.thuc;
a.ao += b.ao ;
tinh(a,dau1);
}
else if(dau1=='*'||dau1=='/')
{
struct sp c;
char dau2;
printf("nhap so:\nthuc\tao\n");
scanf("%lf", &c.thuc);
scanf("%lf", &c.ao);
printf("\t phep tinh: \n\t ");
fflush(stdin);
scanf("%c", &dau2);
if(dau1=='*') //Uu tien nhan
{
t1=b.thuc;
t2=b.ao;
b.thuc = c.thuc*t1 - t2*c.ao;
b.ao = c.ao*t1 + t2*c.thuc;
}
else if(dau1=='/') //Uu tien chia
{
t1=b.thuc;
t2=b.ao;
b.thuc = (t1*c.thuc+t2*c.ao)/(c.thuc*c.thuc + c.ao*c.ao);
b.ao = (t2*c.thuc-t1*c.ao)/(c.thuc*c.thuc + c.ao*c.ao);
}
toan(b,dau2);
}
break;
case '-': /// phep tinh tru
printf("nhap so:\nthuc\tao\n");
scanf("%lf", &b.thuc);
scanf("%lf", &b.ao);
printf("\t phep tinh: \n\t ");
fflush(stdin);
scanf("%c", &dau1);
if(dau1=='+'||dau1=='-'||dau1=='=')
{
a.thuc -= b.thuc;
a.ao -= b.ao ;
tinh(a,dau1);
}
else if(dau1=='*'||dau1=='/')
{
struct sp c;
char dau2;
printf("nhap so:\nthuc\tao\n");
scanf("%lf", &c.thuc);
scanf("%lf", &c.ao);
printf("\t phep tinh: \n\t ");
fflush(stdin);
scanf("%c", &dau2);
if(dau1=='*') //Uu tien nhan
{
t1=b.thuc;
t2=b.ao;
b.thuc = c.thuc*t1 - t2*c.ao;
b.ao = c.ao*t1 + t2*c.thuc;
}
else if(dau1=='/') //Uu tien chia
{
t1=b.thuc;
t2=b.ao;
b.thuc = (t1*c.thuc+t2*c.ao)/(c.thuc*c.thuc + c.ao*c.ao);
b.ao = (t2*c.thuc-t1*c.ao)/(c.thuc*c.thuc + c.ao*c.ao);
}
toan(b,dau2);
}
break;
case '*': //ham nhan
printf("nhap so:\nthuc\tao\n");
scanf("%lf", &b.thuc);
scanf("%lf", &b.ao);
printf("\t phep tinh: \n\t ");
fflush(stdin);
scanf("%c", &dau1);
t1=a.thuc;
t2=a.ao;
a.thuc = b.thuc*t1 - t2*b.ao;
a.ao = b.ao*t1 + t2*b.thuc;
tinh(a,dau1);
break;
case '/': //ham chia
printf("nhap so:\nthuc\tao\n");
scanf("%lf", &b.thuc);
scanf("%lf", &b.ao);
printf("\t phep tinh: \n\t ");
fflush(stdin);
scanf("%c", &dau1);
t1=a.thuc;
t2=a.ao;
a.thuc = (t1*b.thuc+t2*b.ao)/(b.thuc*b.thuc + b.ao*b.ao);
a.ao = (t2*b.thuc-t1*b.ao)/(b.thuc*b.thuc + b.ao*b.ao);
tinh(a,dau1);
break;
case '=': //ham bang
printf("______________________\n");
printf("ket qua la:\n %lf + %lfi\n",a.thuc, a.ao);
break;
}
}
int toan(struct sp b, char dau2) //// HAM TOAN
{
struct sp c;
switch(dau2)
{
case '*': ///vong lap nhan
printf("nhap so:\nthuc\tao\n");
scanf("%lf", &c.thuc);
scanf("%lf", &c.ao);
printf("\t phep tinh: \n\t ");
fflush(stdin);
scanf("%c", &dau2);
t1=b.thuc;
t2=b.ao;
b.thuc = c.thuc*t1 - t2*c.ao;
b.ao = c.ao*t1 + t2*c.thuc;
toan(b,dau2);
break;
case '/': //vong lap chia
printf("nhap so:\nthuc\tao\n");
scanf("%lf", &c.thuc);
scanf("%lf", &c.ao);
printf("\t phep tinh: \n\t ");
fflush(stdin);
scanf("%c", &dau2);
t1=b.thuc;
t2=b.ao;
b.thuc = (t1*c.thuc+t2*c.ao)/(c.thuc*c.thuc + c.ao*c.ao);
b.ao = (t2*c.thuc-t1*c.ao)/(c.thuc*c.thuc + c.ao*c.ao);
toan(b,dau2);
break;
default:
if(dau=='+')
{
a.thuc += b.thuc;
a.ao += b.ao;
}
else if(dau=='-')
{
a.thuc -= b.thuc;
a.ao -= b.ao ;
}
dau=dau2;
tinh(a,dau);
break;
}}
Em mới phát hiện là sau một hồi tính toán bằng biến toàn cục a, nó lại in ra giá trị đầu tiên mà mình nhập, thế là biến toàn cục mất giá trị à mọi người?