c - 不要从函数中获取变量的值
问题描述
我必须创建一个 C 程序来计算 objekt 的高度,输入 alpha、beta 和它们之间的长度。
我认为我的程序运行良好,我还有一个函数可以计算 rad 中的 deg 以用于 sinus 函数。
我需要在我的主要功能中输出corner phi。当我尝试在我的双 h() 函数中打印 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
推荐阅读
- node.js - 使用 loadLayersModel 在 Tensorflow.js 中加载 Keras 模型时“仅支持绝对 URL”
- php - 闪烁消息不起作用,但错误起作用
- azure-devops - Linux VM 上的 Azure DevOps Pipeline PostSharp 失败
- google-drive-api - 如何获得与谷歌驱动器 UI 中可用的相同文件夹结构列表
- html - 为什么边框上这个`
- `标签消失?
- c# - C# 使用 SimpleJSON 写入 json 文件
- python - ElasticSearch Scroll api 问题
- c# - 如何获取每个文件夹的文件数
- c# - 如何改变每次碰撞时的音高?
- python - 在openpyxl中读取单元格编号格式