• ベストアンサー

このプログラムの説明合っていますか?

/* 線形探索(for文で実現)*/ #include <stdio.h> /*--- 要素数nの配列aからkeyと一致する要素を線形探索 ---*/ int search(const int a[], int n, int key)    { int i;            /*iを宣言*/ for (i = 0; i < n; i++)     /*iの値を設定し宣言*/ if (a[i] == key)       /*iにkeyで入力*/ return (i); /* 探索成功 */ return (-1); /* 探索失敗 */ } int main(void)          /*main関数*/ { int i, ky, idx;/*i,ky,idxを宣言*/ int x[7]; /*xは配列で7つの数字を入れられる*/ int nx = sizeof(x) / sizeof(x[0]);/*配列を宣言*/ printf("%d個の整数を入力してください。\n", nx); for (i = 0; i < nx; i++) { printf("x[%d]:", i); scanf("%d", &x[i]); }printf("探す値:"); scanf("%d", &ky); idx = search(x, nx, ky); /* 配列xから値がkyである要素を線形探索 */ if (idx == -1) puts("探索に失敗しました。"); else printf("%dは%d番目にあります。\n", ky, idx + 1); return (0);      /*0の数字で戻る*/ } 1行ずつ理解したいのですが分からない個所多いんです。 分からないの文は説明が書いてないので教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • edomin
  • ベストアンサー率32% (327/1003)
回答No.2

一行ずつ理解するのはかまいませんが、無駄が多くなりますよ。 /* 線形探索(for文で実現)*/ #include <stdio.h> /*--- 要素数nの配列aからkeyと一致する要素を線形探索 ---*/ int search(const int a[], int n, int key)    { int i;            /*ループカウンタ*/ for (i = 0; i < n; i++)     /*0から(N-1)までループで探索する*/ if (a[i] == key)       /*a[i]とkeyを比較して*/ return (i); /* 配列の中にkeyと同じ物が有ったら探索成功(iを返す) */ return (-1); /* 配列の中にkeyと同じ物がなかったら探索失敗(-1を返す) */ } int main(void) { int i, ky, idx; /*変数の宣言*/ int x[7]; /*今の状態では配列には最大7つの数字を入れられる*/ int nx = sizeof(x) / sizeof(x[0]);/*配列のサイズを変更したときに対応できるように配列の要素数を計算*/ printf("%d個の整数を入力してください。\n",nx); for (i = 0; i < nx; i++) { /*配列の要素分数字を入力させるループ*/ printf("x[%d]:", i+1); /*nx個なのに「0~nx-1」なので「1~nx」に補正*/ scanf("%d", &x[i]); } printf("探す値:"); /*探索させるkeyを入力させる*/ scanf("%d", &ky); idx = search(x, nx, ky); /* 配列xから値がkyである要素を線形探索 */ if (idx == -1) puts("探索に失敗しました。"); else printf("%dは%d番目にあります。\n", ky, idx + 1); return (0);      /*プログラムの戻り値は成功しても失敗しても「0」を返す*/ } こんな感じかな?

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>int nx = sizeof(x) / sizeof(x[0]);/*配列を宣言*/ 配列を宣言でなく、配列のサイズをnxに初期値として設定しています。 >return (0);      /*0の数字で戻る*/ プログラムの終了コードに0を設定してプログラムを終了します。