增量式开发
编写一个程序求圆的面积,圆的半径以两个端点的坐标(x1,y1) 和(x2,y2) 给出. 首先 分析和分解问题 ,把大问题分解成小问题,再对小问题分别求解
初始版本
#include <math.h>
#include <stdio.h>
double distance(double x1, double y1, double x2, double y2)
{
double dx = x2 - x1;
double dy = y2 - y1;
// printf("dx is %f\n dy is %f\n",dx,dy);
//printf("distance is %f\n",distance(1.0, 2.0, 4.0,6.0));
double dsquared = dx * dx + dy * dy;
// printf("dsquared is %f\n", dsquared);
double result = sqrt(dsquared);
return result;
}
double area(double radius)
{
return 3.1416 * radius * radius;
}
int main(void)
{
// printf("distance is %f\n",distance(1.0, 2.0, 4.0,6.0));
// distance is 5.000000
// printf("area is %f\n",);
double radius=distance(1.0, 2.0, 4.0,6.0);
double result = area(radius);
printf(" area is %f\n",result);
// area is 78.540000
return 0;
}
/****
evan@kalipc:~/github/learn-c/one-stop-c$ gcc -Wall p57.c
/tmp/ccbMqPPq.o:在函数‘distance’中:
p57.c:(.text+0x69):对‘sqrt’未定义的引用
collect2: error: ld returned 1 exit status
gcc -Wall -lm p57.c
***/
改进
#include <math.h>
#include <stdio.h>
double distance(double x1, double y1, double x2, double y2)
{
double dx = x2 - x1;
double dy = y2 - y1;
// printf("dx is %f\n dy is %f\n",dx,dy);
//printf("distance is %f\n",distance(1.0, 2.0, 4.0,6.0));
double dsquared = dx * dx + dy * dy;
// printf("dsquared is %f\n", dsquared);
double result = sqrt(dsquared);
return result;
}
double area(double radius)
{
return 3.1416 * radius * radius;
}
double area_point(double x1, double y1, double x2, double y2)
{
return area(distance(x1, y1, x2, y2));
}
int main(void)
{
// printf("distance is %f\n",distance(1.0, 2.0, 4.0,6.0));
// distance is 5.000000
// radius=distance(1.0, 2.0, 4.0,6.0);
// double result = area(radius);
printf(" area is %f\n",area_point(1.0, 2.x, 4.0, 6.0));
// area is 78.540000
return 0;
}