演習 6-11

#include <stdio.h>
#define NUMBER 7

int idx[NUMBER];

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

int i;

for (i = 0; i < NUMBER; i++){
if (v[i] == key){
idx[n] = i;
n++;
}
}
return n;
}

int main(){

int i, key, n = 0;
int v[NUMBER];

for (i = 0; i < NUMBER; i++){
printf("v[%d]:", i);
scanf("%d", &v[i]);
}
printf("探す値:");
scanf("%d", &key);

n = search_idx(v, idx, key, n);

printf("keyと等しい要素の数は%dで、idxの中身は{", n);
for (i = 0; i < n; i++){
if (i == n - 1){
printf("%d", idx[n - 1]);
break;
}
printf("%d, ", idx[i]);
}
printf("}です。\n");

return 0;
}

2 件のコメント:

  1. すいません
    このプログラムで最初に#define NUMBER 7とマクロされてますが上限を決めずに、自分で上限を入力してから配列一つ一つの入力をするみたいな事は可能ですか?

    返信削除
    返信
    1. 可能です. やり方はいくつかあるのですが, 例えば入力サイズがある程度分かっている場合, 必要以上に(例えばint v[10000000])大きい配列を確保して一部を使うやり方があります.
      また, ちょうどの大きさがいい場合, 動的に確保することになるので, mallocなどによる配列の確保があります(ただしこちらは確保されるメモリ領域が異なる).
      C言語だとこの辺りの方法がベターだと思います. C++などですとnew演算子による確保やvectorなどによる動的な確保ができるので便利です.

      削除