while 循环有终止符号仍然有效
while loop has terminating sign still works well
我正在用 C 实现 Newton Raphson 方法。代码运行良好。代码没有错误。
#include<stdio.h>
#include<math.h>
#define f(x)(x * sin(x)+cos(x))
#define df(x)(x*cos(x))
int main()
{
float x,h,e;
e=0.0001;
printf("Enter the initial value of x:\n");
scanf("%f",&x);
do
{
h=-f(x)/df(x);
x=x+h;
}
while(fabs(h)>e);
printf("The value of the root is=%f",x);
return(0);
}
/*
Output:
Enter the initial value of x: 3
The value of the root is = 2.798386
但是,我很惊讶我的意思是这段代码是如何工作的?根据 c 规则,while 语句没有任何终止分号。但是,在我的代码中 while(fabs(h)>e); 有一个分号,但它 运行 很好。
谁能告诉我它是如何工作的?
你的意思是把
while(...);
{
//some code
}
将被解释为
while(...){
//looping without any instruction (probably an infinite loop)
}
{
//some code that will be executed once if the loop exits
}
do-while
循环在条件之前执行代码(因此至少一次不同于简单的 while 循环)。正确的语法有分号:
do{
//your code to be executed at least once
}while(...);
所以你的问题的答案是:
do
{
h=-f(x)/df(x);
x=x+h;
}
while(fabs(h)>e);
不是 while
语句,它是 do-while
语句。
我正在用 C 实现 Newton Raphson 方法。代码运行良好。代码没有错误。
#include<stdio.h>
#include<math.h>
#define f(x)(x * sin(x)+cos(x))
#define df(x)(x*cos(x))
int main()
{
float x,h,e;
e=0.0001;
printf("Enter the initial value of x:\n");
scanf("%f",&x);
do
{
h=-f(x)/df(x);
x=x+h;
}
while(fabs(h)>e);
printf("The value of the root is=%f",x);
return(0);
}
/*
Output:
Enter the initial value of x: 3
The value of the root is = 2.798386
但是,我很惊讶我的意思是这段代码是如何工作的?根据 c 规则,while 语句没有任何终止分号。但是,在我的代码中 while(fabs(h)>e); 有一个分号,但它 运行 很好。
谁能告诉我它是如何工作的?
你的意思是把
while(...);
{
//some code
}
将被解释为
while(...){
//looping without any instruction (probably an infinite loop)
}
{
//some code that will be executed once if the loop exits
}
do-while
循环在条件之前执行代码(因此至少一次不同于简单的 while 循环)。正确的语法有分号:
do{
//your code to be executed at least once
}while(...);
所以你的问题的答案是:
do
{
h=-f(x)/df(x);
x=x+h;
}
while(fabs(h)>e);
不是 while
语句,它是 do-while
语句。