gpt4 book ai didi

c - 不要从函数中获取变量的值

转载 作者:行者123 更新时间:2023-11-30 16:19:21 24 4
gpt4 key购买 nike

我必须创建一个 C 程序来计算对象的高度,输入 alpha、beta 以及它们之间的长度。

我认为我的程序运行良好,我还有一个函数可以计算正弦函数的 rad 度。

我需要主函数中角点 phi 的输出。当我尝试在 double h() 函数中 printf phi 时,我得到了 phi 的值,但该值没有进入我的主函数。

希望你能帮助我。

#include <stdio.h>
#include <math.h>

double bogen(double x){ /*Umrechnung Winkelmaß in Bogenmaß*/
double rad;

rad = (M_PI/180) * x;

return rad; /*Return Wert in Radius*/
}


double phiWinkel(double a, double b){ /*Funktion für Berechnung Winkel phi*/
double phi;

phi = b - a;

return phi; /*Return Wert für h()*/
}

double uLaenge(double a, double p, double s){ /*Funktion für Berechnung u Länge*/
double u;

a = bogen(a); /*Umrechnung Winkelmaß in Bogenmaß*/
p = bogen(p); /*Umrechnung Winkelmaß in Bogenmaß*/

u = s * sin(a) / sin(p);

return u; /*Return Wert für h()*/
}

double h(double a, double b, double p, double s){ /*Funktion für Berechnung der Höhe*/
double h;
double u;

p = phiWinkel(a, b); /*Aufruf Phi Funktion mit Parameter*/

u = uLaenge(a, p, s); /*Aufruf u Funktion mit Parameter*/

b = bogen(b); /*Umrechnung Winkelmaß in Bogenmaß*/

h = u * sin(b); /*Berechnung Höhe*/

return h; /*Return Wert für main()*/
}

int main(){
double alpha; /*Initialisierung der Variablen*/
double beta;
double phi;
double strecke;
double hoehe;

printf("\n\n\t\t+++ Landvermessung - Höhenbestimmung +++\n"); /*Einleitung in das Programm mit Aufforderung zur Nutzereingabe*/
printf("\n\t+++ Dieses Programm berechnet die Höhe eines Objektes +++");
printf("\n+++ Benötigt werden Werte für Strecke zwischen den Winkeln, alpha und beta in Grad +++");
printf("\n\t+++ Bestätigen Sie Ihre Eingabe mit der Eingabe-Taste +++\n");
printf("\nBitte geben Sie den Wert für die Strecke - s - ein: ");
scanf("%lf", &strecke);
printf("\nBitte geben Sie den Wert für den Winkel Alpha - a - ein: ");
scanf("%lf", &alpha);
printf("\nBitte geben Sie den Wert für den Winkel Beta - b - ein: ");
scanf("%lf", &beta);


hoehe = h(alpha, beta, phi, strecke); /*Aufruf h() mit Parameter*/

printf("\nDer Turm hat eine Höhe von:\t%.2lf Metern.\n", hoehe); /*Ausgabe*/
printf("Die Strecke - s - beträgt:\t%.2lf Meter.\n", strecke);
printf("Der Winkel alpha beträgt:\t%.2lf Grad.\n", alpha);
printf("Der Winkel beta beträgt:\t%.2lf Grad.\n", beta);
printf("Der Winkel phi beträgt:\t\t%.2lf Grad.\n", phi);

return 0;
}

非常感谢 Liamcomp。这是工作代码:

#include <stdio.h>
#include <math.h>

double bogen(double x){ /*Umrechnung Winkelmaß in Bogenmaß*/
double rad;

rad = (M_PI/180) * x;

return rad; /*Return Wert in Radius*/
}

double winkel(double rad){
double x;

x = (rad/M_PI)*180;

return x;
}

double phiWinkel(double a, double b){ /*Funktion für Berechnung Winkel phi*/
double phi;
double tmp; /*Zwischenspeicher für if*/

if(a > b){ /*Falls alpha größer als beta um negativ Wert zu verhindern*/
tmp = b;
b = a;
a = tmp;

}

phi = b - a;

return phi; /*Return Wert für h()*/
}

double uLaenge(double a, double p, double s){ /*Funktion für Berechnung u Länge*/
double u;

a = bogen(a); /*Umrechnung Winkelmaß in Bogenmaß*/
p = bogen(p); /*Umrechnung Winkelmaß in Bogenmaß*/

u = s * sin(a) / sin(p);

return u; /*Return Wert für h()*/
}

double h(double *a, double *b, double *p, double *s){ /*Funktion für Berechnung der Höhe*/
double h;
double u;

*p = phiWinkel(*a, *b); /*Aufruf Phi Funktion mit Parameter*/

u = uLaenge(*a, *p, *s); /*Aufruf u Funktion mit Parameter*/

*b = bogen(*b); /*Umrechnung Winkelmaß in Bogenmaß*/

h = u * sin(*b); /*Berechnung Höhe*/

*b = winkel(*b); /*Rückrechnung Bogenmaß in Winkelmaß*/

return h; /*Return Wert für main()*/
}

int main(){
double alpha; /*Initialisierung der Variablen*/
double beta;
double phi;
double strecke;
double hoehe;

printf("\n\n\t\t+++ Landvermessung - Höhenbestimmung +++\n"); /*Einleitung in das Programm mit Aufforderung zur Nutzereingabe*/
printf("\n\t+++ Dieses Programm berechnet die Höhe eines Objektes +++");
printf("\n+++ Benötigt werden Werte für Strecke zwischen den Winkeln, alpha und beta in Grad +++");
printf("\n\t+++ Bestätigen Sie Ihre Eingabe mit der Eingabe-Taste +++\n");
printf("\nBitte geben Sie den Wert für die Strecke - s - ein: ");
scanf("%lf", &strecke);
printf("\nBitte geben Sie den Wert für den Winkel Alpha - a - ein: ");
scanf("%lf", &alpha);
printf("\nBitte geben Sie den Wert für den Winkel Beta - b - ein: ");
scanf("%lf", &beta);


hoehe = h(&alpha, &beta, &phi, &strecke); /*Aufruf h() mit Parameter*/

printf("\nDer Turm hat eine Höhe von:\t%.2lf Metern.\n", hoehe); /*Ausgabe*/
printf("Die Strecke - s - beträgt:\t%.2lf Meter.\n", strecke);
printf("Der Winkel alpha beträgt:\t%.2lf Grad.\n", alpha);
printf("Der Winkel beta beträgt:\t%.2lf Grad.\n", beta);
printf("Der Winkel phi beträgt:\t\t%.2lf Grad.\n", phi);

return 0;
}

最佳答案

当您将参数传递给 C 中的函数时,该参数会被复制,因此,如果您更改函数中的参数,则从函数返回后,该参数实际上不会更改。如果您传递某些内容的地址,则该函数可以更改它。

所以你需要更改h:

double h(double *a, double *b, double *p, double *s);

现在您已经有了地址,当您想要访问 a 处的数据时,您将需要使用 *a

所以你的函数现在看起来像这样:

double h(double *a, double *b, double *p, double *s){   /*Funktion für Berechnung der Höhe*/
double h;
double u;

*p = phiWinkel(*a, *b); /*Aufruf Phi Funktion mit Parameter*/

u = uLaenge(*a, *p, *s); /*Aufruf u Funktion mit Parameter*/

*b = bogen(*b); /*Umrechnung Winkelmaß in Bogenmaß*/

h = u * sin(*b); /*Berechnung Höhe*/

return h; /*Return Wert für main()*/
}

您可以通过传递地址来调用它,如下所示:

hoehe = h(&alpha, &beta, &phi, &strecke);

如果您不想使用指针,那么您可以删除 h 函数并执行以下操作:

double h;
double u;

p = phiWinkel(a, b); /*Aufruf Phi Funktion mit Parameter*/

u = uLaenge(a, p, s); /*Aufruf u Funktion mit Parameter*/

b = bogen(b); /*Umrechnung Winkelmaß in Bogenmaß*/

h = u * sin(b); /*Berechnung Höhe*/

直接在main

关于c - 不要从函数中获取变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55642289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com