Arrays and Strings
Array Sum
A loop can visit part or all of an array and accumulate a total.
accumulator
An accumulator variable keeps the running result as the loop visits elements.
bounded loop
The loop condition keeps array access within the intended range.
Array Sum
array_sum.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int main(void) {
int values[5] = {2, 4, 6, 8, 10};
int count = 3;
int sum = 0;
for (int i = 0; i < count; i++) {
sum += values[i];
}
printf("sum=%d\n", sum);
return 0;
}
#include <stdio.h>
int main(void) {
int values[5] = {2, 4, 6, 8, 10};
int count = 2;
int sum = 0;
for (int i = 0; i < count; i++) {
sum += values[i];
}
printf("sum=%d\n", sum);
return 0;
}
#include <stdio.h>
int main(void) {
int values[5] = {2, 4, 6, 8, 10};
int count = 5;
int sum = 0;
for (int i = 0; i < count; i++) {
sum += values[i];
}
printf("sum=%d\n", sum);
return 0;
}
values ← ⟨addr A⟩, count ← 3, sum ← 0
3int main(void) {4 int values→ ⟨addr A⟩[5] = {2, 4, 6, 8, 10};5 int count→ 3 = 3; //@count=2, 56 int sum→ 0 = 0;sum ← 2
pass 1 of 38for (int i0 = 0; i < count3; i++) {9 sum→ 2 += values[i]2;10}All 3 passes — pass 1 is the card above pass ivalues[i]sum1 0 2 0 → 2 2 1 4 2 → 6 3 2 6 6 → 12 printf("sum=%d ", sum);
12 printf("sum=%d\n", sum12);13 return 0;14}outputsum=12
values ← ⟨addr A⟩, count ← 2, sum ← 0
3int main(void) {4 int values→ ⟨addr A⟩[5] = {2, 4, 6, 8, 10};5 int count→ 2 = 2;6 int sum→ 0 = 0;sum ← 2
pass 1 of 28for (int i0 = 0; i < count2; i++) {9 sum→ 2 += values[i]2;10}sum ← 6
pass 2 of 28for (int i1 = 0; i < count2; i++) {9 sum→ 6 += values[i]4;10}printf("sum=%d ", sum);
12 printf("sum=%d\n", sum6);13 return 0;14}outputsum=6
values ← ⟨addr A⟩, count ← 5, sum ← 0
3int main(void) {4 int values→ ⟨addr A⟩[5] = {2, 4, 6, 8, 10};5 int count→ 5 = 5;6 int sum→ 0 = 0;sum ← 2
pass 1 of 58for (int i0 = 0; i < count5; i++) {9 sum→ 2 += values[i]2;10}All 5 passes — pass 1 is the card above pass ivalues[i]sum1 0 2 0 → 2 2 1 4 2 → 6 3 2 6 6 → 12 4 3 8 12 → 20 5 4 10 20 → 30 printf("sum=%d ", sum);
12 printf("sum=%d\n", sum30);13 return 0;14}outputsum=30