ch03/fact_agent.c17 lines
#include <stdio.h>
long factorial(int n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
int main(void) {
int n;
if (scanf("%d", &n) != 1) {
return 1;
}
printf("%d! = %ld\n", n, factorial(n));
return 0;
}
ch03/lab3_counts.c49 lines
#include <stdio.h>
#include <stdlib.h>
long loop_a(int n) { /* every other value */
long count = 0;
for (int i = 0; i < n; i += 2) {
count++;
}
return count;
}
long loop_b(int n) { /* inner starts at i */
long count = 0;
for (int i = 0; i <= n; i++) {
for (int j = i; j < n; j++) {
count++;
}
}
return count;
}
long loop_c(int n) { /* skip the diagonal */
long count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i != j) {
count++;
}
}
}
return count;
}
int main(int argc, char *argv[]) {
printf("%5s %8s %8s %8s\n", "n", "A", "B", "C");
if (argc > 1) { /* ./lab3_counts 3 */
int n = atoi(argv[1]);
printf("%5d %8ld %8ld %8ld\n",
n, loop_a(n), loop_b(n), loop_c(n));
return 0;
}
for (int n = 1; n <= 1000; n *= 10) {
printf("%5d %8ld %8ld %8ld\n",
n, loop_a(n), loop_b(n), loop_c(n));
}
printf("%5d %8ld %8ld %8ld\n",
7, loop_a(7), loop_b(7), loop_c(7));
return 0;
}
ch03/running.c27 lines
#include <stdio.h>
static long sample_calls = 0;
/* Stand-in for reading one minute from the logger. */
double sample(int minute) {
sample_calls++;
return 20.0 + (minute % 7) * 0.25;
}
void running_means(int minutes) {
for (int i = 1; i <= minutes; i++) {
double sum = 0.0;
for (int j = 1; j <= i; j++) {
sum += sample(j);
}
if (i % 480 == 0) {
printf("minute %4d: mean %.3f\n", i, sum / i);
}
}
}
int main(void) {
running_means(1440);
printf("sample() called %ld times\n", sample_calls);
return 0;
}