我在掌握指针的概念时遇到了麻烦。我遇到了以下问题。
N的平方根可以通过使用公式NG = 0.5(LG + N / LG)重复计算来近似得出,其中NG代表下一个猜测,LG代表最后一个猜测。编写使用此方法计算数字平方根的函数。最初的猜测将是LG的起始值。程序将使用给定的公式计算NG的值。检查NG和LG之间的差异,以查看这两个猜测是否几乎相同。如果是,则将NG视为平方根。否则,下一个猜测(NG)变为最后一个猜测(LG),然后重复该过程(为NG计算另一个值,检查差异,依此类推)。应该重复循环,直到差值小于0.005。使用初始猜测值1.0。
必须在主函数和所有函数中都尽可能使用指针编写程序。在main中声明指针,以猜测要猜测其平方根的数字,并在函数中声明近似的平方根答案,该答案将被计算并返回/返回给main。该函数将是一个void函数,因此必须将近似的平方根答案作为函数的输出参数返回/引用给main,即函数调用语句中的参数。您必须使用指针将要猜测的数字的实际值传递给函数。
在函数中,让用户输入“猜测”数字,这是用户对传递给函数的数字平方根的初始猜测。
(对冗长的解释感到抱歉,我觉得我应该周全)
我写了以下代码:
#include <stdio.h>
#include <math.h>
void fctn(double *nPtr,double *NGPtr){
double n;
nPtr=&n;
double NG;
double LG;
NGPtr=&NG;
printf("Enter guess\n");
scanf_s("%lf",&LG);
do{
NG=(.5*(LG+n/LG));
LG=NG;
}while(fabs(NG*NG-n)>.005);
}
int main(){
double *NGPtr;
double *nPtr;
printf("Enter number\n");
scanf_s("%lf",&nPtr);
fctn(NGPtr,nPtr);
double root=*NGPtr;
printf("The approximate root of the function is %f",root);
}
我想知道是否有人对它为什么不起作用有任何想法?感谢您的阅读。
double *nPtr;
printf("Enter number\n");
scanf_s("%lf",&nPtr);
让我们看看这里发生了什么。首先,您声明一个指向的指针double
。该指针没有指向任何地方。没有double
创建任何对象,只有一个指针。然后&nPtr
,将指向指针的指针传递到scanf_s
,尝试将值读入指针。因此,您要让用户输入一个内存地址!那是不对的。
相反,您想要的是拥有一个double
您随后要读入的对象。为此,您应该声明一个double
(不是指针),然后将指向该指针的指针传递double
给scanf_s
:
double n;
printf("Enter number\n");
scanf_s("%lf", &n);
您也有类似的问题NGptr
。它应该只是一个double NG;
代替。否则,当您这样做时*NGPtr
,将取消引用不指向任何内容的指针。
我相信您随后会将您的论点传递给fctn
错误的途径。宣言建议n
应该先走,然后NG
再走。
由于您只需要使用n
函数内部的值,因此应按值传递它:
void fctn(double n, double *NGPtr){
需要传递一个指向的指针,NG
因为您希望在函数内部对其进行修改,但是引用类型会更好:
void fctn(double n, double& NG){
然后,您会在开始时遇到一系列问题fctn
。您不再需要创建n
和NG
double
s了,因为我们正在将它们传递给函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句