Em gần nộp bài tập lớn, bên dưới là hàm em rút lại phần em sai, còn dưới nữa là bản đầy đủ, cho em hỏi là khi mình khai biến ngoài hàm thì nó là biến global, nhưng sao sau khi em cho biến đó vào hàm con, sử dụng chính biến đó lại để nhận giá trị, nó lại thành biến khác, không lưu lại giá trị ạ, em debug thì hình như biến a em khai nó thành biền local trong hàm con ấy, dù trùng tên với biến global nhưng lưu 2 giá trị khác nhau??? em cảm ơn!
Hàm rút lại:
#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;
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);
toan(b,dau1);
}
int toan(struct sp b, char dau2) // HAM TOAN
{
struct sp c;
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);
toan(c,dau2);
}
Hàm đầy đủ
HÀM ĐẦY ĐỦ:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct sp {double thuc; /// cau truc phuc
double ao; };
int tinhtoan(); /// HAM TINH TOAN
int tinh(struct sp a, char dau); /// ham con tinh toan
int toan(struct sp b, char dau2);
struct sp a;
double t1,t2;
char dau;
int lt(); /// HAM LUY THUA
struct sp luythua(struct sp d,int somu); /// ham con luy thua
struct sp luythuaam(struct sp d,int somu);
int can2(); /// HAM CAN 2
void menu(); /// HAM MENU
main()
{
menu();
}
void menu() /// HAM MENU
{ int g;
printf("----- Hay chon chuc nang ban can -----");
printf("\n Chon 1 de tinh toan mot day so phuc");
printf("\n chon 2 de tinh luy thua so phuc");
printf("\n Chon 3 de tinh can bac 2 so phuc");
printf("\n Chon 4 de thoat");
printf("\n \n \t BAN CHON:\n \t ");
do scanf("%i",&g);
while (g != 1 && g!=2 && g!=3 && g!=4);
printf("\n");
switch(g)
{
case 1:
tinhtoan();
break;
case 2:
lt();
break;
case 3:
can2();
break;
case 4:
exit (0);
}
}
int tinhtoan() ///HAM TINHTOAN
{
printf("________________________TINH SO PHUC_____________________________________\n\n");
printf("\t Cach nhap so phuc: THUC -> TAB -> AO -> ENTER (cho dep :v)\n");
printf("\t Nhap dau + , - , * , / , = -> ENTER \n\n");
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;
}
printf("\n\n_____________________________________________________________\n\n");
menu();
}
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;
}}
int lt() /// HAM LUY THUA
{
printf("__________________________TINH LUY THUA___________________________________\n\n");
printf("\t Cach nhap so phuc: THUC -> TAB -> AO -> ENTER (cho dep :v)\n");
printf("\t Nhap so mu -> ENTER\n\n");
struct sp d;
int somu;
printf("nhap so:\nthuc\tao\n");
scanf("%lf",&d.thuc);
scanf("%lf",&d.ao);
printf ("\tso mu: ");
scanf("%i", &somu);
if (somu==0)
{ printf("__________________________\n");
printf("ket qua la: 1\n");}
else if(somu>0)
{d=luythua(d,somu);
printf("_______________________________\n");
printf("ket qua la:\n");
printf("%lf + %lfi\n", d.thuc, d.ao);}
else if(somu<0)
{d=luythuaam(d,somu);
printf("_______________________________\n");
printf("ket qua la:\n");
printf("%lf + %lfi\n", d.thuc, d.ao);}
printf("\n_____________________________________________________________\n\n");
menu();
}
///HAM CON
struct sp luythua(struct sp d,int somu) //CON LUY THUA DUONG
{
int i;
double t1,t2,k1,k2;
t1=d.thuc;
t2=d.ao;
k1=d.thuc;
k2=d.ao;
for(i=1;i<somu;i++)
{
k1=t1*d.thuc-t2*d.ao;
k2=t1*d.ao+t2*d.thuc;
t1=k1;
t2=k2;}
d.thuc=k1;
d.ao=k2;
return d;
}
struct sp luythuaam(struct sp d,int somu) ///luy thua am
{ double k1,k2;
somu=abs(somu);
d=luythua(d,somu);
k1=d.thuc/(d.thuc*d.thuc + d.ao*d.ao);
k2=-d.ao/(d.thuc*d.thuc + d.ao*d.ao);
d.thuc=k1;
d.ao=k2;
return d;
}
int can2() ///CAN 2
{
printf("_______________________TINH CAN BAC 2______________________________________\n\n");
printf("\t Cach nhap so phuc: THUC -> TAB -> AO -> ENTER (cho dep :v)\n\n");
double e,f,x1,y1,x2,y2;
printf("\t\tnhap so:\n\t\tthuc\tao\n\t\t ");
scanf("%lf",&e);
scanf("%lf",&f);
y1=sqrt((-e+sqrt(e*e+f*f))/2);
x1=f/(2*y1);
y2=-sqrt((-e+sqrt(e*e+f*f))/2);
x2=f/(2*y2);
printf("__________________________________\n\n");
printf("nghiem 1 la: %lf + %lfi\n",x1,y1);
printf("nghiem 2 la: %lf + %lfi\n\n",x2,y2);
printf("\n_____________________________________________________________\n\n");
menu();
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?