[英]Need help understanding this C Code (Array)
我需要幫助才能清楚地理解這段代碼,請幫忙。 我無法弄清楚該程序如何跟蹤響應數組中給出了多少個數字。 我不明白 for 循環發生了什么,特別是這條線 ++frequency[responses[answer]];
#include<stdio.h>
#define RESPONSE_SIZE 40
#define FREQUENCY_SIZE 11
int main(void)
{
int answer; /* counter to loop through 40 responses */
int rating; /* counter to loop through frequencies 1-10 */
/* initialize frequency counters to 0 */
int frequency[FREQUENCY_SIZE] = {0};
/* place the survey responses in the responses array */
int responses[RESPONSE_SIZE] = {1,2,6,4,8,5,9,7,8,10,1,6,3,8,6,10,3,8,2,7,6,5,7,6,8,6,7,5,6,6,5,6,7,5,6,4,8,6,8,10};
/* for each answer, select value of an element of array responses
and use that value as subscript in array frequency to determine element to increment */
for(answer = 0 ; answer < RESPONSE_SIZE; answer++){
++frequency[responses[answer]];
}
printf("%s%17s\n", "Rating", "Frequency");
/* output the frequencies in a tabular format */
for(rating = 1; rating < FREQUENCY_SIZE; rating++){
printf("%6d%17d\n", rating, frequency[rating]);
}
return 0;
}
for(answer = 0 ; answer < RESPONSE_SIZE; answer++){
++frequency[responses[answer]]; // <---
}
上面的循環只計算一個數字出現在數組responses
的次數,並存儲在數組frequency
中該數字的索引處。 此行在第一個循環中執行此操作 -
++frequency[responses[answer]];
因此,它在數組frequency
索引responses[answer]
處增加值。
假設responses[answer]
值為1
,然后數組frequency
索引1
的值遞增。
如前所述,第二個for
循環僅用於輸出。
++frequency[responses[answer]]
是一種密集的寫作方式
int r = response[answer];
frequency[r] = frequency[r] + 1;
需要注意的是frequency[r]
只評估一次。
因此,如果answer
等於0
,則responses[answer]
等於1
,因此我們將1
添加到frequency[1]
。
編輯
下表顯示了循環中frequency
的變化(舊值 => 新值):
answer response[answer] frequency[response[answer]]
------ ---------------- ---------------------------
0 1 frequency[1]: 0 => 1
1 2 frequency[2]: 0 => 1
2 6 frequency[6]: 0 => 1
3 4 frequency[4]: 0 => 1
... ... ...
10 1 frequency[1]: 1 => 2
等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.