『新・明解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;
}

コメント

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

 


書籍情報



Copyright (C) 2016 "HYOGOKURUMI" All Rights Reserved./「来未炳吾・平極ルミ・HYOGOKURUMI」の発達障害考察を主とした全ての発信は、相互不干渉など特別な約束をした者達を除き、どなたでもご活用できます。ただし著作権は放棄しておりません。あしからずご了承ください。詳細は著作権に関するガイドラインをご一読ください。/「HYOGOKURUMI.site」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。