对于函数
isqroot()
,使用具有一个精度的Babylonian方法计算平方根,并将其返回到结构中。
我无法将值返回给结构体,当我编译它时返回垃圾值。
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct rootStruct {
int rootInt;
int rootFraction;
};
typedef struct rootStruct RootStruct;
RootStruct* isqroot (int n) {
/*We are using n itself as initial approximation*/
RootStruct* root=(RootStruct* )malloc(sizeof(RootStruct));
float x = n;
float y = 1;
float e = 0.1; /* e decides the accuracy level*/
while(x - y > e) {
x = (x + y)/2;
y = n/x;
}
root->rootInt = (int)x/2;
root->rootFraction = (int)(x-root->rootInt)*100;
return root;
}
int main(){
RootStruct* roo+t=(RootStruct* )malloc(sizeof(RootStruct));
printf("the sqrt is %d\n%d\n",root->rootInt,root->rootFraction);
return 0;
}
此代码有什么问题?
答案 0 :(得分:2)
您永远不会致电isqroot()
...因此永远不会设置root->rootInt
和root->rootFraction
。
你也有输入错字
RootStruct* roo+t=(RootStruct* )malloc(sizeof(RootStruct));
应该是
RootStruct* root=(RootStruct* )malloc(sizeof(RootStruct));
没有+
。但是,这是不必要的,因为您在isqroot()
中分配内存并且可能应该替换为
RootStruct* root = isqroot(9);
然后忘记free()
main()
末尾的RootStruct* isqroot (int n) {
RootStruct* root=(RootStruct* )malloc(sizeof(RootStruct));
float y = 1;
float e = 0.1; /* e decides the accuracy level*/
while(fabs(n - y*y) > e) {
y = (y + (n / y)) / 2;
}
root->rootInt = (int) y;
root->rootFraction = (int) (y - root->rootInt) * 100;
return root;
}
记忆。
请注意,您还shouldn't case the result of malloc()
in C。
你也错误地实现了算法,它应该是
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct rootStruct {
int rootInt;
int rootFraction;
};
typedef struct rootStruct RootStruct;
RootStruct* isqroot (int n) {
RootStruct* root=(RootStruct* )malloc(sizeof(RootStruct));
float y = 1;
float e = 0.1; /* e decides the accuracy level*/
while(fabs(n - y*y) > e) {
y = (y + (n / y)) / 2;
}
root->rootInt = (int) y;
root->rootFraction = (int) (y - root->rootInt) * 100;
return root;
}
int main() {
RootStruct* root = isqroot(9);
printf("The sqrt is %d.%d\n", root->rootInt, root->rootFraction);
return 0;
}
那么完整的修正程序就是
.*?(:label=\w+ ).*
关于Computing Square Roots的维基百科文章在Babylonian method上有一个非常容易理解的部分。