• 締切済み

C言語のプログラミング配列・forを使った検索

C言語のプログラミングで、配列とforを使った検索の表し方がわかりません。 numにはキーボードから任意の数字を入力し、 1ならば25、2ならば30、、、といったように 対応する数字を表示させ、1行目にない数字が入力された時は 「NoData」と表示させたいのですが、上手くいきません; 本当はもっと配列が多いのですが4つでやってみると #include <stdio.h> main() { int data[2][4]{{1,2,3,4},{25,30,45,50}} , num , i ; printf("num?"); scanf(&num); for(i=0; i>4;i++) if(num== data[0][i]){ printf("number is \n",data[1][i]);} else {printf("NoData\n"); } return0 ; } こうかと思ったのですが上手くいきません、、、 どなたかお願いします!

みんなの回答

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.5

>int data[2][4]{{1,2,3,4},{25,30,45,50}} >scanf(&num); C言語の文法をあまり理解できていないようです。 基礎からやり直してみてはどうでしょうか。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

とりあえず私が改造するなら、 struct elem { int key; int value; }; とか構造体を作って、 struct elem data[] = {{1, 25}, {2, 30}, {3, 45}, {4, 50}} , num , i; int data_size = sizeof(data) / sizeof(struct elem); と変数を定義した上で、 for(i = 0; i < data_size; i ++) { if(num == data[i].key) break; } if(i == data_size) { printf("NoData\n"); }else{ printf("number is %d\n", data[i].value); } とします。 こっちの方がソース上で意味が見やすいのと、配列も意味のあるデータ単位でまとまりますから。

回答No.3

>C言語のプログラミングで、配列とforを使った検索の表し方がわかりません。 ということなので、質問とは直接関係ありませんが 検索という目的ならば qsort()とbsearch()の使い方も調べておくと勉強になると思いますよ。 ↓はFreeBSDのページですが関数自体は標準規格なのでどのコンパイラにもあるはずです。 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=qsort&dir=jpman-8.3.2%2Fman§=0 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=bsearch&dir=jpman-8.3.2%2Fman§=0

回答No.2

修正すると、こんな感じになります。 #include <stdio.h> int main(void) { int data[2][4] = { {1, 2, 3, 4}, {25, 30, 45, 50} }, num, i, flug = 0; printf("num?"); scanf("%d", &num); for(i = 0; i < 4;i++) { if(num == data[0][i]){ printf("number is %d\n",data[1][i]); flug = 1; break; } } if(flug == 0) { printf("NoData\n"); } return 0; }

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

> for(i=0; i>4;i++) 条件が不正なのでforの中に入りません。 for内も、 ・ヒットしたら出力してbreak だけにして、NoDataは外に書かないとダメ。 まぁ、二次配列じゃなくて構造体の配列使った方がいいような気もしますが。 あとはキーが連番ならわざわざキー検索せずに一次配列でインデックス参照でもいいんじゃね?とか。

juju1212
質問者

補足

回答ありがとうございます。 実際のキーは連番ではありません><

関連するQ&A

  • C言語の配列の入れ方について質問です。

    下記のプログラムで1234という連続した数字を入れたら配列val[0]~[3]に val[0] = 1 val[1] = 2 val[2] = 3 val[3] = 4 というように入れたいのですが、どのようにして別々にすれば良いですか?宜しくお願いします。 #include<stdio.h> int main(void) { int num[10]; int val[4]; int i; printf("式:"); scanf("%d",num); for(i=0;i<4;i++){ val[i] = 0; } for(i=0; i<4; i++){ if((num[i] >= 1) && (num[i] <= 9)){ /*1から9の数値が入ったならば*/ val[i] = num[i]; } } for(i=0; i<4; i++){ printf("答え%d:%d\n",i,val[i]); } }

  • C言語の配列について

    配列を20 定義し値を入力して合計値を出したいのですがどうすればよいのでしょうか 下のソースでエラーはおこりませんでした 何がちがうのでしょうか #include <stdio.h> int main() { int a[20]={}; int i, sum; printf("整数を入力してください:"); scanf("%d",&a); printf("\n"); for (i = 0; i < 10; i++) { sum += a[i]; } printf("sum= %d\n", sum); return 0; }

  • C言語の問題です。よろしくお願いいたします。

    C言語の問題です.。10個の整数を入力し配列に保存した後、入力された数字の中に5の倍数が含まれているかを調べ、 含まれていた時には「5の倍数が含まれています」含まれていない時に「5の倍数が含まれていません」と表示させるプログラムを作りなさい。 自分なりに考えて作ったのですが、以下の通りでよろしいのでしょうか? #include <stdio.h> main() { int i; double c[10]; for (i = 0; i < 10; i++) { printf("整数を10個入力してください.(%d つ目) : ", i+1); scanf("%lf", &c[i]); } if(c[i] % 5 == 0){ printf("5の倍数が含まれています\n"); } else{ printf("5の倍数が含まれていません\n"); } return 0; }

  • Cプログラミング 

    素数を判定するプログラミングの作成で以下のプログラミングを作成したのですが、すべて 素数でないとでてしまいます。どなたか間違いをおしえていただけませんでしょうか。 #include<stdio.h> int main(void) { int num,i; printf("Please input a number:"); scanf("%d",&num); for (i=2; i < num ; i++){num % i; if (num % i == 0) break; } if (num % i == 0) printf("%d is not prime. \n" ,num); else printf("%d is prime. \n" ,num); return 0; }

  • C言語のプログラミング (基礎)配列の問題ですが。

    次のような問題があって、プログラミングしてみたのですが、 コンパイルすると永久ループになってしまいます。 また、入力されるはずの整数が表示されません。 どうすればよいか教えていただけると助かります。 よろしくお願いします。 整数を順番に入力し、負の数が入力されたら、それまでに入力された非負の整数を、 入力された順番とは逆に全角空白で区切って出力するプログラムを作成しなさい。 自動評価の都合上、上記以外は表示しないこと。なお、入力は最大10回とする。 【0 1 2 3 4 -1 が入力された場合の表示例】 4 3 2 1 0       ************************************** #include <stdio.h> int main(void) { int num[10]; int n; for(n=1;n<11;n++){ printf("整数入力:¥n"); scanf ("%d", &num[n]); if(num[n]<0){ for(n=10;n>0;n--){ printf("%d ",num[n]); } } } }

  • c言語のプログラミングについて聞きたいのですが

    自分は課題で「10人分の名前と点数を入力して降順に並び替える」というプログラムを作ろうとしているのですが、なかなかうまくいきません。一応↓の形までできたのですがなぜか数字が変になります。 どうしてか教えていただけないでしょうか。 #include<stdio.h> int main(void) {     int i,j;     int tensu[10][3];     char namae[10][6]; for(i=0;i<10;i++){ printf("名前の入力>>"); scanf("%s",&namae[i]); printf("点数の入力>>"); scanf("%d",tensu[i]); } printf("名前   点数\n"); for(j=0;j<10;j++) { printf("%s ",&namae[j]); printf("%10d\n",tensu[j]); } return 0; } それとポインタ?みたいなのもよく理解できず、点数で降順にしたあとに点数を使って名前を並び替えるのかなと思うのですがそれもよくわかりません。 どなたか教えてください

  • C言語プログラミングで・・・

    つい最近、C言語プログラミングのお勉強をはじめた中学生です。 ある程度かけるようになってきて、こちらのサイトに掲載されている練習問題を解いていました。 http://akabas.net/lib/CExercise.aspx いろいろといていく中で、配列の章にはいりました。 配列の章の中の6問目と7問目の九九についてのコードを書いていたところ、どちらも問題なく実行を終了した後 「○○.exeは動作を停止しました。」というメッセージが現れました。 これはコードに何か問題があるのでしょうか? _____________________________________________________________________ //6問目 #include <stdio.h> void line (void){ int cnt; for (cnt = 0; cnt < 30; cnt++) printf("_"); printf("\n"); } int main() { int kuku[9][9], i, j; printf("九九を表示します\n"); for (i = 1; i <= 9; i++){ for (j = 1; j <= 9; j++){ kuku[i][j] = i * j; printf("%d * %d = %d\n", i, j, kuku[i][j]); } line(); } return 0; } ____________________________________________________________________ //7問目 #include <stdio.h> int main() { int kuku[9][9]; int i, j; for (i = 1; i <= 9; i++){ for (j = 1; j <= 9; j++) kuku[i][j] = i * j; } printf("1桁の数値(1 ~ 9に限定)を入力してください 1回目---"); scanf("%d", &i); printf("1桁の数値(1 ~ 9に限定)を入力してください 2回目---"); scanf("%d", &j); printf("\n"); printf("%d * %d = %d", i, j, kuku[i][j]); return 0; } ________________________________________________________________________________ まだ初心者のレベルなので、回答はできたらきつい言葉をつかってほしくないです^^; よろしくおねがいします ※こちらでは、Tabをうっているのですが、表示されてないみたいです。見づらいかと思いますが、よろしくおねがいします

  • C言語

    次のプログラムは、自然数を入力して,その約数を表示するものである。ブログラム中の0 ~に適するものを答えなさい。ただし,a%bはaをbで割ったときの会りを求める演算 である。 参考 約数とは、入カした自然数に対して,その数を割り切ることのできる整数である。 例えば、6の約数は、1, 2, 3,6となる。 #include <stdio.h> int main (void) int i, num; printf("自然数を入カしてください。"): scanf ("%d", &num); printf("%dの約数は", num) ; for (i =@;i <= num; i++) ( if (num % i @ 0) { printf ("%d,i@1): printf("です。 ¥n"): return 0; 9 この問題の@の部分に入る数字、記号を教えて欲しいのとなぜそうなるのかも教えていただきたいです(-。-;

  • c言語 プログラム ピラミッド

    プログラミングについて教えてください プログラムは ピラミッドの図形をユーザーが指定した数字で正三角形の ピラミッドの段数を指定できるプログラムです 例えば「5」と打てば ********* ■ ********■■■ ******■■■■■ ****■■■■■■■ **■■■■■■■■■ このような感じに表示されます *の部分は空白です #include<stdio.h> int main (void) { int num,i,j,h; printf("ピラミッドの高さを入力してください : "); scanf("%d" ,&num); for(i=1; i<=num; i++){ for(j=num; j>=i+1; j--){ printf(" ",j); } for(h=1; h<=j; h++){ printf("■"); } printf("\n"); } return 0; } ここまで出来ています、詰まっているのでご教授ください よろしくお願いします

  • C言語の配列を使ったプログラミングについてです。

    5人の数学と英語の点数の合計が入る二次元配列を用意し、5人の数学 (scores [i] [0]) と英語 (scores [i] [1]) の点数の入力する.5人の数学と英語の合計点を計算し配列に入れる (scores [i] [2]).数学と英語と合計の一覧を表示したあと,合計点の最高点と最低点を表示するプログラムを作れ.という問題で #include<stdio.h> int main() { char score[5][3]; int i, min=0,max=0; for(i=0; i<5; i++){ printf("%d: M E?",i+1); scanf("%d %d", &score[i][0], &score[i][1]); score[i][2]= score[i][0]+score[i][1]; if(score[max]<score[i][2]) max=i; if(score[min]>score[i][2]) min=i; } printf("id Math Eng Total\n"); for(i=0; i<5; i++){ printf("%d %d %d %d\n", i+1, score[i][0], score[i][1], score[i][2]); } printf("min: %d max: %d",score[min], score[max]); } というプログラムを作ったのですが、scanfで改行を入れていないのに、1つ目の数字を入れると2つ目の数字はなぜか改行してしまい、さらに最低点と最高点が正しく出力されませんでした。なぜでしょうか。回答よろしくお願いします。