『新・明解C言語 入門編 第2版』演習問題解答例 6ー11

演習6ー11

問:要素数nの配列v内のkeyと等しい全要素の添字を配列idxに格納する関数search_idxを作成せよ。返却するのはkeyと等しい要素を個数とする。たとえば、vに受け取った配列の要素が{1, 7, 5, 7, 2, 4, 7}で key が 7 であれば、idxに {1, 3, 6}を格納した上で3を返却する。

 int search_idx(const int v[], int idx[], int key, int n)

// Ex0611.c

#include <stdio.h>
#define NUMBER 10

int search_idx(const int v[], int idx[], int key, int n)
{
    int j = 0;
    for (int i = 0; i < n; i++) {
        if (v[i] == key) {
            idx[i] = i + 1;
            j++;
        }
    }
    return j;
}

int main(void)
{
    int i, n, y, x3;
    int x1[NUMBER] = {0};
    int x2[NUMBER] = {0};

    do {
        printf("入力する要素数を指定してください:");
        scanf("%d", &n);

        if (n <= 0 || n > NUMBER) {
            printf("1 以上 %d 以下の整数を入力してください。\n", NUMBER);
        }
    } while (n <= 0 || n > NUMBER);

    printf("%d 個の整数を入力して下さい。\n", n);
    for (i = 0; i < n; i++) {
        printf("x[%d] : ", i);
        scanf("%d", &x1[i]);
    }
  
    printf("探す値を入力してください。:");
    scanf("%d", &x3);

    y = search_idx(x1, x2, x3, n);

    puts("格納されている配列番号");
    for (i = 0; i < n; i++) {
        if (x2[i] > 0)
            printf("%d ", x2[i]);
    }
    
    puts("\n");
    printf("格納数:%d\n", y);

    return 0;
}

コメント

 問いの文章の意味がわからなくて何度も読み返したけど、楽しい試行錯誤だった。

 


書籍情報


コメント

タイトルとURLをコピーしました