![](/img/trans.png)
[英]C loop doesn't properly run all aspects of the loop. Loops only on a certain part of the loop
[英]The output of a certain part of my for loop
#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
生物多樣性公約
我完全理解第一行的輸出如何,但對第二部分感到相當困惑。
for(k=0;k<5;k++){
printf("%c ",65+a[k]);
這一點讓我感到困惑,因為根據我的理解,循環第一次應該是 k=0 然后打印 %c 來自 65+a[k] 其中 k 當前為 0 所以 65+a[0]。 從前面的部分,我們看到 a[0]=2 和 65+2 是 67,它是字符“C”。 這在輸出上是正確的,但如果我對第二個循環 65+a[k] 遵循相同的邏輯,其中 k=1 所以 65+a[1] 和 a[1] 是 11,65+11 是 76,這將等於字符“K”但這是錯誤的,因為它應該是字符“B”。
我覺得這行代碼是我遺漏的地方:
a[i]=num%4
但它實際上並沒有設置一個數字,所以仍然很困惑。
任何幫助表示贊賞
a[i]=num%4
確實設置了數字。 這是如何:
在你的循環中:
while(num>0){
a[i]=num%4;
num=num/3;
printf("%d ",num);
i--;
}
num
與輸出的第一行相同。
a[i]=num%4;
實際上設置數組中的值如下:
最初, i=4
和num=28
。 所以,
a[i]=num%4;
將a[4]
為28%4=0
。 因此,您的最后一個字符是A+0=A
。
然后i=3
和num=9
。 所以,
a[i]=num%4;
將a[3]
為9%4=1
。 因此,您的倒數第二個字符是A+1=B
。
然后i=2
和num=3
。 所以,
a[i]=num%4;
將a[2]
為3%4=3
。 因此,您的倒數第三個字符是A+3=D
。
然后i=1
和num=1
。 所以,
a[i]=num%4;
將a[1]
為1%4=1
。 因此,您的倒數第四個字符是A+1=B
。
然后i=0
和num=0
。 所以,
我們不進入循環。 a[0]=C
,它的初始值。
因此我們得到: CBDBA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.