我正在阅读我的C教科书,我完全被任何试图理解下面的代码片段所困扰。这本书没有给出一个完整的程序,只说明可变角度是一个双精度的,而angletype是一个int,它将以某种方式决定使用哪种情况?感谢您的帮助。
switch (angletype)
{
case DEG:
angle *= PI / 180.0; /* convert to radians */
/* fall through */
case RAD:
while (angle > PI) /* normalise radians */
angle -= 2.0*PI;
while (angle < -PI)
angle += 2.0*PI;
break;
default:
printf("Error: Invalid type\n");
break;
}
编辑:以下是我到目前为止对片段所做的工作:
#include <stdlib.h>
#include <stdio.h>
#define DEG
#define RAD
#define PI 3.14
void main()
{
int angletype;
double angle;
switch (angletype)
{
case DEG:
angle *= PI / 180.0; /* convert to radians */
/* fall through */
case RAD:
while (angle > PI) /* normalise radians */
angle -= 2.0*PI;
while (angle < -PI)
angle += 2.0*PI;
break;
default:
printf("Error: Invalid type\n");
break;
}
}
我只是想不出一个可以工作的原型。我不确定表达式“(angletype)”和DEG和RAD的大小写将如何交互。
最佳答案
switch
语句使用一个整型表达式作为其控件,每个case
标签也是一个整型表达式:
switch( some_integer )
{
case 1: // do something if some_integer == 1
break;
case 2: // do something else if some_integer == 2
break;
case 3: // do some completely different thing if some_integer == 3
break;
...
default: // do something else if some_integer isn't a value covered by
// any of the previous cases
}
将
switch
视为计算的GOTO,而每个case
标签都是可能的值之一。对于这个特定片段,
DEG
和RAD
是一些整数值的符号常量,可能定义为#define DEG 0
#define RAD 1
或类似的。
这个特定的代码片段正在使用弧度进行角度计算,因此它首先检查角度类型,看是否需要将其从度转换为弧度。如果
angletype
是DEG
,则在进行计算之前,它会分支到case DEG:
执行转换。如果angletype
是RAD
,则分支到case RAD:
执行计算。如果angletype
是任何其他值,它将分支到default
并打印错误消息。