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;
}