gpt4 book ai didi

c - 通过计算帮助选择,无需 if 语句

转载 作者:行者123 更新时间:2023-11-30 16:57:19 25 4
gpt4 key购买 nike

问题

给定构成椭球体的三个轴的长度,计算物体的体积并确定形状是椭球体 (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

我如何能够对此进行编码,以便我可以使这些字符出现在类型形状的指定中。

任何想法/例子将不胜感激!

最佳答案

由于逻辑( &&||! )和关系( <<=>>= )运算符已经过时,并且我认为按位也是不允许的,剩下纯粹的平等:== .

您可以首先使用数学为这些情况定义一些指标。假设您的轴称为 A、B、C。您可以确定:

  • 球体:A - BB - C为零。
  • 球体:正是 A - B 之一, B - CC - A为零。
  • 斜角肌:A - B中的每个, B - CC - 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_spheroidis_scalene全部基于(几乎)相同计算的不同值:除了 is_sphere ,我们总是使用abz + bcz + caz 。因此,让我们将其更改为使用相同的计算:

int is_sphere = (abz + bcz + caz) == 3;

现在,您也不允许进行选择,因此 case 语句和 if 语句已不再适用。所以你甚至不需要 is_XXXX值(value)观(它们只是为了说明)。相反,您可以使用数组:

char shape[4] = { 'C', 'D', '?', 'P' };
printf( "Shape: %c\n", shape[abz+bcz+caz] );

请注意,第三个值 '?'由于平等的传递性,实际上是不可能的。

当然,这仍然是不必要的复杂。我们已经在使用平等了。为什么要费心做减法呢?

int abz = (axis1 == axis2);
int bcz = (axis2 == axis3);
int caz = (axis3 == axis1);

最后,我建议您不要养成执行此类无分支代码的习惯,除非绝对必要。在工业界,只有当您有合法优化需求时才这样做。在其他时候,您应该编写清晰且易于理解的代码。

关于c - 通过计算帮助选择,无需 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com