【发布时间】:2011-07-28 00:04:16
【问题描述】:
我已经有几个月的时间自学了 C 语言,但我遇到了一个不知道如何解决的问题。
具体来说,当我尝试使用 gcc 编译时,我得到:
geometry.c:8: 错误:“梯形”的类型冲突 geometry.c:7: 注意:之前的“梯形”声明在这里 geometry.c:48: 错误:“梯形”的类型冲突 geometry.c:7: 注意:之前的“梯形”声明在这里 geometry.c:119:错误:“trapezoid_area”的类型冲突 geometry.c:59: 注意:之前隐含的“trapezoid_area”声明在这里 geometry.c:在函数“cone_volume”中: geometry.c:128: 错误: 调用对象‘3.14100000000000001421085471520200371742248535156e+0’不是函数 geometry.c:在函数“cylinder_volume”中: geometry.c:136: 错误: 调用对象‘3.14100000000000001421085471520200371742248535156e+0’不是函数现在,我想我可能需要对函数进行类型转换,但同样,我不确定。
它看起来想将我定义为 3.141 的 PI 作为函数读取。有没有办法避免使用幻数 3.141(尽管它比其他幻数少得多)?
//Geometric formulae
#include <stdio.h>
#include <math.h>
#define PI 3.141
float trapezoid(float b1, float b2, float h);
int trapezoid();
float sphere_volume(float r);
int sphere();
float cone_volume(float r, float h);
int cone();
float pyramid_volume(float b, float h);
int pyramid();
float cylinder_volume(float r, float h);
int cylinder();
int main(void) {
char selection = 0;
while(selection != 'q') {
printf("\t--Geometric Formulas--\n");
printf("\tSelection an option from the menu: ");
scanf("%c", & selection);
switch(selection) {
case 1: //Trapezoid area
printf("%d", trapezoid());
break;
case 2: //Sphere volume
printf("%d", sphere());
break;
case 3: //Cone volume
printf("%d", cone());
break;
case 4: //Pyramid volume
printf("%d", pyramid());
break;
case 5: //Cylinder volume
printf("%d", cylinder());
break;
default:
break;
}
}
}
// --Shape Menus--
//Trapezoid
int trapezoid() {
float h = 0, b1 = 0, b2 = 0;
float traparea;
printf("\tTrapezoid base 1: ");
scanf("%3f", &b1);
printf("\tTrapezoid base 2: ");
scanf("%3f", &b2);
printf("\tTrapezoid height: ");
scanf("%3f", &b2);
traparea = trapezoid_area(b1, b2, h);
printf("\tTrapezoid Area: %3f\n", traparea); }
//Sphere
int sphere() {
float r = 0;
float spherevol;
printf("\tSphere radius: ");
scanf("%f", &r);
spherevol = sphere_volume(r);
printf("\tSphere volume: %3f\n", spherevol); }
//Cone
int cone() {
float r = 0, h = 0;
float conevol;
printf("\tCone radius: ");
scanf("%f", &r);
printf("\tCone height: ");
scanf("%f", &h);
conevol = cone_volume(r, h);
printf("\tCone volume: %3f\n", conevol); }
//Pyramid
int pyramid() {
float b = 0, h = 0;
float pyramidvol;
printf("\tPyramid base: ");
scanf("%f", &b);
printf("\tPyramid height: ");
scanf("%f", &h);
pyramidvol = pyramid_volume(b, h);
printf("\tPyramid volume: %3f\n", pyramidvol); }
//Cylinder
int cylinder() {
float r = 0, h = 0;
float cylindervol;
printf("\tCylinder radius: ");
scanf("%f", &r);
printf("\tCylinder height: ");
scanf("%f", &h);
cylindervol = cylinder_volume(r, h);
printf("Cylinder volume: %3f", cylindervol); }
// --Geometric Formulas--
//Trapezoid Area Computation
float trapezoid_area(float b1, float b2, float h) {
return ((b1 + b2) * h) / 2; }
//Sphere Volume Computation
float sphere_volume(float r) {
return ((pow(r,3)) * (4 * PI)) / 3; }
//Cone Volume Computatioin
float cone_volume(float r, float h) {
return ((PI(pow(r,2)) * h)) / 3; }
//Pyramid Volume Computation
float pyramid_volume(float b, float h) {
return (b * h) / 3; }
//Cylinder Volume Computation
float cylinder_volume(float r, float h) {
return (PI(pow(r,2))) * h; }
【问题讨论】: