给定椭圆体的三个轴的长度计算物体的体积并确定 形状是球体(D),球体(P)还是斜角椭球体(C)。
禁止使用选择,包括逻辑和关系运算符。
到目前为止,这是我的代码:
*/
#include<stdio.h>
#define PI 3.1416
int main (void)
{
//Local Declarations
double axis1;
double axis2;
double axis3;
double Vellipsoid;
int factor;
//Statements
printf("Enter the length of all three axes: ");
scanf("%lf %lf %lf", &axis1, &axis2, &axis3);
Vellipsoid = ( 4 * PI * axis1 * axis2 * axis3 ) / 3;
printf("\nObject volume: %10.2lf \n ", Vellipsoid);
printf("Object Shape: ");
return 0;
} //main
我需要帮助编码以显示以下执行的方式:
示例输出#1(形状为球体):
输入所有三个轴的长度:10 5 10
对象量:2094.40
物体形状:D
示例输出#2(形状是球体):
输入所有三个轴的长度:7 7 7
对象量:1436.76
物体形状:P
示例输出#3(形状是斜角椭球):
输入所有三个轴的长度:9 4 6
对象量:904.78
对象形状:C
我如何能够对此进行编码,以便我可以将这些字符显示为类型形状的名称。
任何想法/例子都将不胜感激!
答案 0 :(得分:0)
由于逻辑(&&
,||
,!
)和关系(<
,<=
,>
,>=
运算符出来了,我也不允许按位,这就是纯粹的平等:==
。
您可以先使用数学为这些案例定义一些指标。假设您的轴名为A,B,C。您可以确定:
A - B
和B - C
为零。A - B
,B - C
或C - A
中只有一个为零。A - B
,B - C
或C - A
均为非零。所以你可以按如下方式编写代码:
int abz = (axis1 - axis2) == 0.0;
int bcz = (axis2 - axis3) == 0.0;
int caz = (axis3 - axis1) == 0.0;
int is_sphere = (abz + bcz) == 2;
int is_spheroid = (abz + bcz + caz) == 1;
int is_scalene = (abz + bcz + caz) == 0;
请注意is_sphere
,is_spheroid
和is_scalene
如何基于(差不多)相同计算的不同值:is_sphere
除外,我们总是如此使用abz + bcz + caz
。所以让我们改变它以使用相同的计算:
int is_sphere = (abz + bcz + caz) == 3;
现在,你也不允许选择,所以case语句和if语句都没有了。所以你甚至不需要is_XXXX
值(它们只是为了说明)。相反,您可以使用数组:
char shape[4] = { 'C', 'D', '?', 'P' };
printf( "Shape: %c\n", shape[abz+bcz+caz] );
请注意,由于相等的传递属性,实际上不可能存在第3个值'?'
。
当然,这仍然是不必要的复杂。我们已经在使用平等。为什么要减去?
int abz = (axis1 == axis2);
int bcz = (axis2 == axis3);
int caz = (axis3 == axis1);
除非绝对必要,否则我建议你不要养成做这种无分支代码的习惯。在行业中,只有在具有合法优化要求时才能执行此操作。所有其他时间,您应该编写清晰且易于理解的代码。