C 时钟坐标
我是c编程新手,不久前我收到了一份作业,结果做得足够好(因为没有使用for循环而被扣分)。这是我的作业。编写一个程序,提示用户输入模拟时钟的半径,然后打印该时钟12小时标记的x和y坐标。您可以假定x和y轴的原点位于时钟的中心 我对如何使用for循环感到困惑,因为我试图找到一种方法。我知道这很容易,但我为小事而挣扎。这最终导致复制粘贴代码,从而导致大量代码。我想知道我是否可以得到一些关于如何使用for循环来编写这个程序的提示,而不必编写所有这些代码。这里是我的代码,但我不会显示所有这些代码,因为这没有意义。(还想知道我是否需要数组?请让我也知道这一点,为奇怪的格式感到抱歉,我还没有弄明白如何使代码混合在一起) 我对所有12个数组使用printf语句C 时钟坐标,c,C,我是c编程新手,不久前我收到了一份作业,结果做得足够好(因为没有使用for循环而被扣分)。这是我的作业。编写一个程序,提示用户输入模拟时钟的半径,然后打印该时钟12小时标记的x和y坐标。您可以假定x和y轴的原点位于时钟的中心 我对如何使用for循环感到困惑,因为我试图找到一种方法。我知道这很容易,但我为小事而挣扎。这最终导致复制粘贴代码,从而导致大量代码。我想知道我是否可以得到一些关于如何使用for循环来编写这个程序的提示,而不必编写所有这些代码。这里是我的代码,但我不会显示所有这些代码,因为这
假设输出是这样的:“12点钟标记的x和y坐标是(0.000000,1.000000),它根据半径而变化。”谢谢 我不会使用数组,我会做更多类似的事情:
int dir = 0;
char hour = 3;
for(int i=0; i<12; i++){
float xcoord = rad * cos(dir*M_PI/180);
float ycoord = rad * sin(dir*M_PI/180);
printf(...);
dir += 30;
hour++;
hour = (hour > 12) ? 1 : hour+1;
}
int dir=0;
半小时=3;
对于(int i=0;i 12)?1:小时+1;
}
如果我不使用数组,我会做更多类似的事情:
int dir = 0;
char hour = 3;
for(int i=0; i<12; i++){
float xcoord = rad * cos(dir*M_PI/180);
float ycoord = rad * sin(dir*M_PI/180);
printf(...);
dir += 30;
hour++;
hour = (hour > 12) ? 1 : hour+1;
}
int dir=0;
半小时=3;
对于(int i=0;i 12)?1:小时+1;
}
仅将这样的顺序语句提取到循环中是一项任务,需要分解出常见的部分
从以下两对语句开始:
x[0] = rad * cos(90*M_PI/180);
y[0] = rad * sin(90*M_PI/180);
x[1] = rad * cos(60*M_PI/180);
y[1] = rad * sin (60*M_PI/180);
第一对和第二对之间有什么变化?只有x
/y
的索引和输入角度
通过扫描其余语句,我们可以看到索引在后续的每对语句中顺序递增(值增加1)。因此,我们可以使用一个简单的循环索引作为数组索引:
for (int i = 0 ; i < 12; i++) {
x[i] = rad * cos(90*M_PI/180);
y[i] = rad * sin(90*M_PI/180);
}
现在,我们有了一个好的开始。我们将以这种方式涵盖x
和y
的所有12个值。但我们与原始代码并非100%相同。订单是否关键?让我们假设它是关键的,这将稍微提高标准
为了保持在有效度数范围内并保持输出函数的连续性,我们需要使用或余数除法
const size_t divisions = 12;
const size_t degrees_per_iter = 360 / divisions;
const size_t start_angle_deg = 90;
for (int i = 0 ; i < divisions; i++) {
const size_t angle_deg = (start_angle_deg + (i * degrees_per_iter)) % 360;
const float x = rad * cos(angle_deg * M_PI/180);
const float y = rad * sin(angle_deg * M_PI/180);
printf("The x and y coordinates of the 12 o'clock mark are (%f , %f)\n", x, y);
}
const size\u t divisions=12;
常数大小为360度/分;
const size_t start_u angle_deg=90;
对于(int i=0;i
还想知道我是否需要数组
是的,的确如此!但是您已经将它们用于
x
和y
。不需要进一步的阵列。不需要数组。只需将这样的顺序语句提取到一个循环中,这是一项需要分解常见部分的任务
从以下两对语句开始:
x[0] = rad * cos(90*M_PI/180);
y[0] = rad * sin(90*M_PI/180);
x[1] = rad * cos(60*M_PI/180);
y[1] = rad * sin (60*M_PI/180);
第一对和第二对之间有什么变化?只有x
/y
的索引和输入角度
通过扫描其余语句,我们可以看到索引在后续的每对语句中顺序递增(值增加1)。因此,我们可以使用一个简单的循环索引作为数组索引:
for (int i = 0 ; i < 12; i++) {
x[i] = rad * cos(90*M_PI/180);
y[i] = rad * sin(90*M_PI/180);
}
现在,我们有了一个好的开始。我们将以这种方式涵盖x
和y
的所有12个值。但我们与原始代码并非100%相同。订单是否关键?让我们假设它是关键的,这将稍微提高标准
为了保持在有效度数范围内并保持输出函数的连续性,我们需要使用或余数除法
const size_t divisions = 12;
const size_t degrees_per_iter = 360 / divisions;
const size_t start_angle_deg = 90;
for (int i = 0 ; i < divisions; i++) {
const size_t angle_deg = (start_angle_deg + (i * degrees_per_iter)) % 360;
const float x = rad * cos(angle_deg * M_PI/180);
const float y = rad * sin(angle_deg * M_PI/180);
printf("The x and y coordinates of the 12 o'clock mark are (%f , %f)\n", x, y);
}
const size\u t divisions=12;
常数大小为360度/分;
const size_t start_u angle_deg=90;
对于(int i=0;i
还想知道我是否需要数组
是的,的确如此!但是您已经将它们用于
x
和y
。不需要进一步的阵列。不需要任何数组。我想你的问题是:“我应该如何更改此设置以使用for
循环?”这是你的问题吗?如果是,请澄清。是。如何将代码更改为for循环?您有一个360度的圆。你想得到12个等距圆直径的坐标。那么一个循环看起来会是什么样子呢?对不起,这是非常基本的东西,减分比修正的还要多。只是一个提示:您是如何为显示的代码生成值的?(反问)@Olaf,让我们集中精力尽可能地提供帮助。表示它“非常基本”并不能帮助你回答这个问题。@BrianCain:评论不是为了回答,我也没有,因为支持纯粹的懒散是没有意义的。显然他已经知道如何计算坐标了。计算出他必须步进1/12圈是非常基本的数学,而任何教程的循环都是其中的一部分。对“C for loop”的简单搜索提供了例如tutorialPoint作为第一个匹配项(其他人立即跟随)。stack overflow是一个问答网站,但不是一个有充分理由的教程网站。此外,提问者还需要自己展示一些研究成果,并提出具体问题。这里还没做完,我想你的问题