ANSWERS TO LOOP EXERCISES 1. (a) i = 10, j = 45 (b) i = 10, j = 2^10 = 1024 (c) i = 15, j was not initialized so it can have any integer value 2. It reads in a sequence of integers and prints their sum. The while(scanf("%d", &val) != EOF) is a C idiom that repeatedly reads in integers and stores them in variable val. The scanf() function returns EOF if there is no more input; this signals the end of the while loop. 3. #include <stdio.h> #include <math.h> int main(void) { double val, sum = 0.0, sum2 = 0.0, avg, stddev; int n = 0; while (scanf("%lf", &val) != EOF) { n++; sum += val; sum2 += val*val; } avg = sum / n; stddev = sqrt(sum2 / n - avg * avg); printf("Average = %f\n", avg); printf("Standard deviation = %f\n", stddev); return 0; } The "%lf" is needed with scanf() to read in doubles, but "%f" works with printf(). The sqrt() function is in the math library; in order to compile you should #include <math.h> and you may need to compile with "gcc myprog.c -lm" to link in the math library. 4. #include <stdio.h> int main(void) { int pos = 0, neg = 0; /* counter variables */ int val; /* integer just read in */ while (scanf("%d", &val) != EOF) { if (val > 0) pos++; else if (val < 0) neg++; } if (pos > neg) printf("positive\n"); else if (pos < neg) printf("negative\n"); else printf("equal\n"); return 0; } This could also be done with a single counter variable that equals the number of positive integers minus the number of negative ones. 5. #include <stdio.h> int main(void) { int val; /* integer just read in */ int prev = 0; /* previous integer */ int streak = 0; /* streak length of current integer */ int best_val = 0; /* value of best streak */ int best_streak = 0; /* streak length of best integer */ while (scanf("%d", &val) != EOF) { if (prev == val) streak++; else streak = 1; if (streak > best_streak) { best_streak = streak; best_val = val; } prev = val; } printf("Streak of %d %d's in a row.\n", best_streak, best_val); return 0; } 6. (b) #include <stdio.h> int main(void) { int height, width, i, j; printf("Enter the height followed by the width.\n"); scanf("%d %d", &height, &width); for (j = 0; j < height; j++) { for (i = 0; i < width; i++) { printf("*"); } printf("\n"); } return 0; } 7. #include <stdio.h> int main(void) { int n, i, j; printf("Enter the size of the triangle.\n"); scanf("%d",&n); for (j = 0; j < n; j++) { for (i = 0; i < n; i++) { if (i >= j) printf("*"); else printf("."); } printf("\n"); } return 0; } 8. #include <stdio.h> int main(void) { int i, j, m, n; double x, y; printf("Enter number of x and y points.\n"); scanf("%d %d", &m, &n); for (j = 0, y = 1.0; j < n; j++, y -= 1.0/(n-1)) { for (i = 0, x = 0.0; i < m; i++, x += 1.0/(m-1)) { printf("(%.2f, %.2f) ", x, y); } printf("\n"); } return 0; }