我的for循环

时间:2015-06-14 16:22:25

标签: c

#include <stdio.h>
int num, i, k, a[5];
int main() {
    a[0]=2;
    a[1]=11;
    a[2]=12;
    a[3]=16;
    a[4]=28;
    num=a[1+3]
    i=4;
    while(num>0){
        a[i]=num%4;
        num=num/3;
        printf("%d ",num);
        i--;
    }
    printf("8\n");
    for(k=0;k<5;k++){
        printf("%c ",65+a[k]);
    }
    printf("\n);
}

该程序的输出是:

9 3 1 0 8

C B D B A

我完全理解第一行的输出是如何,但我对第二部分感到困惑。

for(k=0;k<5;k++){
    printf("%c ",65+a[k]);

这一点让我感到困惑,因为循环第一次从我的理解应该是k = 0然后打印%c来自65 + a [k],其中k当前是0所以65 + a [0]。从其设置的前一部分我们看到[0] = 2和65 + 2是67,这是字符&#34; C&#34;。这在输出上是正确的,但是如果我对第二个循环65 + a [k]遵循相同的逻辑,其中k = 1,那么65 + a [1]和a [1]是11而65 + 11是76将等于角色&#34; K&#34;但那应该是错的 角色&#34; B&#34;。

我觉得这行代码是我遗漏的东西:

a[i]=num%4

但它实际上并没有设置一个仍然混淆的数字。

感谢任何帮助

1 个答案:

答案 0 :(得分:3)

a[i]=num%4确实设置了数字。这是如何:

在你的循环中:

 while(num>0){
    a[i]=num%4;
    num=num/3;
    printf("%d ",num);
    i--;
}

num与第一行输出相同。

a[i]=num%4;

实际上按如下方式设置数组中的值:

最初是i=4num=28。因此,

a[i]=num%4;a[4]设为28%4=0。因此,您的上一个字符为A+0=A

然后i=3num=9。因此,

a[i]=num%4;a[3]设为9%4=1。因此,您的倒数第二个字符为A+1=B

然后i=2num=3。因此,

a[i]=num%4;a[2]设为3%4=3。因此,您的第三个最后一个字符是A+3=D

然后i=1num=1。因此,

a[i]=num%4;a[1]设为1%4=1。因此,您的第四个最后一个字符是A+1=B

然后i=0num=0。因此,

我们不进入循环。 a[0]=C,它的初始值。

因此我们得到:C B D B A