113日目 等差数列の和
まず末項を計算させる
#include <stdio.h> /* arithmetic progression (print last term)*/ #include <stdlib.h> int main(int argc, char *argv[]) { int i, sum; int first = atoi(argv[1]), diff = atoi(argv[2]), num = atoi(argv[3]); for (i = 1, sum = first; i < num; i++) sum += diff; (num >= 1) ? (printf("a(%d) = %d", num, sum)) : (printf("error!")); return 0; }
んで関数化します。
配列を表示して挙動を確認
#include <stdio.h> /* arithmetic progression (print array)*/ #include <stdlib.h> int func(int first, int diff, int num) { int i, sum; for (i = 1, sum = first; i < num; i++) sum += diff; return sum; } int main(int argc, char *argv[]) { int i, sum, first = atoi(argv[1]), diff = atoi(argv[2]), num = atoi(argv[3]); for (i = 1, sum = first; i < num; i++) sum += diff, printf(" %3d", sum); printf("\n%3d", first); for(i = 1, sum = first; i < num; i++) sum += func(first, diff, i+1), printf(" %3d", sum); printf("\nsum(%d) = %d", num, sum); return 0; }
和だけを表示させる
#include <stdio.h> /* arithmetic progression (ver 2.0) */ #include <stdlib.h>/* a(1) + a(2)+ ... + a(n-1) + a(n) */ int func(int first, int diff, int num) { int i, sum; for (i = 1, sum = first; i < num; i++) sum += diff; /* calc a(n) */ return sum; } int main(int argc, char *argv[]) { int i, sum; int first = atoi(argv[1]), diff = atoi(argv[2]), num = atoi(argv[3]); for(i = 1, sum = first; i < num; i++) /* sum = a(1) */ sum += func(first, diff, i+1); /* sum + a(2)+ ... + a(n-1) + a(n) */ (num >= 1) ? (printf("sum(%d) = %d", num, sum)) : printf("error!"); return 0; }