実習9-3 C実践プログラミング

CATEGORYc / c++
「実習9-3 C実践プログラミング」なんてキーワードで検索してたどり着いた人がいたみたいなので、問題を見てみた。
C++実践プログラミング - Google ブックス
実習 9-3
配列 array に数値 number がいくつ含まれているかをカウントする関数 count(number, array, length) を作成する。length は配列の要素数を示す。この関数は再帰関数になるはずである。また、この関数をテストするプログラムを作成する。
どこが「再帰関数になるはずである」か、分からないけど、問題の意図に沿うとこんな感じか。
#include <stdio.h>

int count(int number, int* array, int length) {
    if (length == 0) {
        return 0;
    }
    return (*array == number ? 1 : 0) + count(number, array + 1, length - 1);
}


int main(void) {
    int a[] = {5, 3, 2, 9, 8, 7, 5, 2, 0, 9, 3, 2, 5, 5, 1, 9, 7};
    int n = 5;
    int ans = count(n, a, sizeof(a) / sizeof(int));
    printf("count of %d = %d\n", n, ans);
}
ループでカウントした方が素直だと思うけどなあ。
int count(int number, int* array, int length) {
    int n = 0;
    for (int i = 0 ; i < length ; ++i) {
        if (array[i] == number) {
            n += 1;
        }
    }
    return n;
}
和訳が間違いなのかもしれないけど、「再帰関数で実装してみなさい」だよね。
関連記事
スポンサーサイト

C

0 Comments

Leave a comment