我有一個50個指針的數組,指向包含x和y中心座標以及圓的半徑的圓形結構。我分配了所有內存,並使用rand_float
爲圓圈創建隨機x,y和z。我的計劃的關鍵是找到面積最大的圓圈並將其打印出來。我遇到了我的程序問題,我知道隨着rand結果不會每次都是一樣的,但我的價值是沒有接近預期的輸出。我也沒有在輸出中看到來自largestcircle
的printf
輸出。最後,當我嘗試使用free(circleptr
運行程序時,我收到一個錯誤)。指向圓的指針的數組struct
#include <stdio.h>
#include <stdlib.h>
#define PI 3.14
double rand_float(double a,double b){ //function provided my teacher.
return ((double)rand()/RAND_MAX)*(b-a)+a;
}
struct circle{
double x;
double y;
double z;
};
void largestcircle(struct circle **circleptr){
float max = 0, radius =0, x= 0, y=0;
int i;
for(i = 0; i<50; i++){
if(circleptr[i]->z *circleptr[i] ->z *PI > max){
max = circleptr[i]->z*2*PI;
radius = circleptr[i]->z;
x = circleptr[i] ->x;
y = circleptr[i] ->y;
}
}
printf("Circle with largest area (%f) has center (%f, %f) and radius %f\n", max,x,y,radius);
}
int main(void) {
struct circle *circleptr[50];
//dynamically allocate memory to store a circle
int i;
for(i=0; i<50; i++){
circleptr[i] = (struct circle*)malloc(sizeof(struct circle));
}
//randomly generate circles
for(i=0; i<50; i++){//x
circleptr[i]->x = rand_float(100, 900);
circleptr[i]->y = rand_float(100, 900);
circleptr[i]->z = rand_float(0, 100);
//printf("%11f %11f %11f \n", circleptr[i] ->x, circleptr[i]->y, circleptr[i]->z);
}
largestcircle(circleptr);
for(i=0; i<50; i++){
free(circleptr[i]);
}
return 0;
}
輸出應該是這個樣子:
Circle with largest area (31380.837301) has center (774.922941,897.436445) and radius 99.969481
我當前的X,Y和Z值的樣子:
1885193628 -622124880 -622124884
1885193628 -622124868 -622124872
1885193628 -622124856 -622124860
1885193628 -622124844 -622124848
1885193628 -622124832 -622124836
1885193628 -622124820 -622124824
1885193628 -622124808 -622124812
1885193628 -622124796 -622124800
1885193628 -622124784 -622124788
1885193628 -622124772 -622124776......etc.
的思考?
你不要叫'largestcircle'。那麼你如何看待printf? – Arash
'max = circleptr [i] - > z * 2 * PI;'這不是一個圓的面積公式。應該是'max = circleptr [i] - > z * circleptr [i] - > z * PI;'。並建議你使用比'z'更好的變量名稱 - 'radius'會更有意義。 – kaylum
'免費(circleptr)'當然你不能那樣做。你在哪裏有'circleptr = malloc()'?無處。所以如果你沒有分配這個指針,你就不能釋放它。用'free(circleptr [i])'嘗試循環。 – kaylum