C 时钟坐标

C 时钟坐标,c,C,我是c编程新手,不久前我收到了一份作业,结果做得足够好(因为没有使用for循环而被扣分)。这是我的作业。编写一个程序,提示用户输入模拟时钟的半径,然后打印该时钟12小时标记的x和y坐标。您可以假定x和y轴的原点位于时钟的中心 我对如何使用for循环感到困惑,因为我试图找到一种方法。我知道这很容易,但我为小事而挣扎。这最终导致复制粘贴代码,从而导致大量代码。我想知道我是否可以得到一些关于如何使用for循环来编写这个程序的提示,而不必编写所有这些代码。这里是我的代码,但我不会显示所有这些代码,因为这

我是c编程新手,不久前我收到了一份作业,结果做得足够好(因为没有使用for循环而被扣分)。这是我的作业。编写一个程序,提示用户输入模拟时钟的半径,然后打印该时钟12小时标记的x和y坐标。您可以假定x和y轴的原点位于时钟的中心

我对如何使用for循环感到困惑,因为我试图找到一种方法。我知道这很容易,但我为小事而挣扎。这最终导致复制粘贴代码,从而导致大量代码。我想知道我是否可以得到一些关于如何使用for循环来编写这个程序的提示,而不必编写所有这些代码。这里是我的代码,但我不会显示所有这些代码,因为这没有意义。(还想知道我是否需要数组?请让我也知道这一点,为奇怪的格式感到抱歉,我还没有弄明白如何使代码混合在一起)

我对所有12个数组使用printf语句


假设输出是这样的:“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是一个问答网站,但不是一个有充分理由的教程网站。此外,提问者还需要自己展示一些研究成果,并提出具体问题。这里还没做完,我想你的问题