• ベストアンサー

c言語でキーボードから入力しての表をつくりたいのですが・・・

ハンガリー法を作るために、何行何列かをキーボードから入力して、表を表示したいのですが、なかなかうまく作れません。 nを3、mを4などと入力し、その後3*4=12この数値もキーボードから入力できるようなプログラムをわかりやすく教えてください。 お願いします。その他にも表の作り方があればそちらの方もお願いします。

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

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

コンソールベース(CUI)ですか?カーソルキーを使ってその表のセルを行ったり来たりというのはなかなか面倒になると思います。また、Windows等、GUIでしたら表入力、表示用の widgetがありますのでそれを利用するのが楽だと思います。 CUI でやるばあい、scanf を使って n, m を入力。その後n, m を最大値にforで回しながら scanf (等)で入力が一般的ですね。 int *arr; int n, m, i, j; printf ("n > "); scanf ("%d", &n); printf ("m > "); scanf ("%d", &m; arr = (iint*)malloc (sizeof(int) * m * n); for (i = 0; i < m; i++) {  for (j = 0; j < n; j++) {   printf ("%d 行 %d 列 > ", i, j);   scanf ("%d", &arr[i][j]);  } } 入力部分だけですが、こんな感じになると思います。出力も同じようなループで、表示する数値の桁数を指定し、改行位置を工夫してあげれば簡単にできます。

kazutaro-
質問者

お礼

どうもありがとうございました。 昨日から自分なりに頑張ってみましたが、ちょうど繰り返しのループに つまずいていました。 ちょっと自分には理解できない点がありますが、また頑張ってみます。 よくわかる回答本当にありがとうございます。

関連するQ&A

  • C言語

    課題なんですが、C言語で 「文字列と正数nをキーボードから入力して、1行n文字で改行するプログラム」 をつくりたいのですが、わかりません。どうすればよいのですか?

  • C言語で困っています...

    入力した数値の列だけ○と×を縦に、段々になるように表示する (最後の行は×にならなければいけない)プログラムを作成しています。 (実行例) ○と×を表示します。何列?:10            ×           ○×          ×○×         ○×○×         ×○×○×       ○×○×○×      ×○×○×○×    ○×○×○×○× ×○×○×○×○× ○×○×○×○×○× 途中までプログラミングできたのですが、 偶数の数値を入れたときはきちんと最後の行は×になっても 奇数の数値を入力すると○が最後の行になってしまい、うまくいきません。 どこがだめなのでしょうか? どなたか教えてください。 /* 入力した数値の列だけ、○と×を縦に、   段々になるように表示する(最後の行は×になる) */ #include <stdio.h> int main(void) { int i, j, n; printf("○と×を表示します。何列?:"); scanf("%d", &n); for (i=0; i<n; i++){ for (j=0; j<n; j++){ if (j >= (n - 1) - i){ if (j % 2 == 0) printf("○"); else printf("×"); } else printf(" ");//全角スペース } printf("\n"); } return 0; }

  • C言語をなるべく早く教えてください

    C言語の問題集の回答がないので困っているので誰か教えてください。 私はまだ始めたばかりなので手におえません。 今私が理解しているif文、switch文、for文、while文、do-while文、配列、を 使用してでお願いします。 入力した行列を表示させるプログラムを作成しなさい。ただし、行列は任意に指定できるものにし、表示のさせ方にも気を付けること。 実行結果例1 N×M行列数を入力してください N=3 M=2 3×2行列を入力して下さい 1行1列を入力して下さい 1 1行2列を入力して下さい 2 2行1列を入力して下さい 3 2行2列を入力して下さい 4 3行1列を入力して下さい 5 3行2列を入力して下さい 6 入力した3×2行列は次のようなものです 1.00 2.00 3.00 4.00 5.00 6.00 <実行結果例2> N×M行列数を入力してください N=3 M=4 3×4行列を入力して下さい 1行1列を入力して下さい 1 1行2列を入力して下さい 2 1行3列を入力して下さい 3 1行4列を入力して下さい 4.23 2行1列を入力して下さい 5.1224 2行2列を入力して下さい 92.12 2行3列を入力して下さい 2.12 2行4列を入力して下さい 36.54 3行1列を入力して下さい 2.213 3行2列を入力して下さい 9.56 3行3列を入力して下さい 8 3行4列を入力して下さい 5.23153 入力した3×4行列は次のようなものです 1.00 2.00 3.00 4.23 5.12 92.12 2.12 36.54 2.21 9.56 8.00 5.23

  • C言語について

    以前も同じことを質問したのですが、分からなかったので、また質問します。本を読んでも分かりませんのでプログラム全てを教えて下さい。2日も考えています。他人からすれば何で説明を読んでも分からないのか?と思われると思いますが、本当に全く分からないし見当もつきません。よろしくお願いします。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、"dog"を逆さまにすると"god"になる。 以上の5問です。できるだけ簡単で理解しやすいものでお願いします。

  • 表の入力を自動的に改行したい

    office2007,W7 のユーザーです。 大きいエクセル表を作っております。N列M行の表のデータを入力するとき、第1列の全セルの入力を終わり、次行のデータを入力する際、アクチブセルが自動的に次行先頭セルに移るようにすることはできないでしょうか。範囲指定して反転したセルの 第1セルから始めることはできますが、表の記入を中断したのち再開すると、アクチブセルがまた第1列第1行に戻ってしまって、前回の入力の続きができません。 よろしくお願いします。

  • C言語のwhile文はネストできますか?

    「*」を使用して、n列、m行の四角を表示させるプログラムを考えました。 --------------------------------------------------------------------------------------------- #include<stdio.h> int main(void) { int i=0,j=0,n,m; printf("n入力:"); scanf("%d",&n); printf("\nm入力:"); scanf("%d",&m); printf("\n"); while(i<m){ while(j<n){ printf("*"); j++; } printf("\n"); i++; } return 0; } --------------------------------------------------------------------------------------------- しかし、1行分しか表示されません。 n=2、m=2の場合 ----------------- n入力: m入力: ** ----------------- としか表示されません。 whileのネストが悪いのでしょうか? それとも、初歩的なミスがあるのでしょうか?

  • ファイル入力方法(C言語)

    C言語のファイル入力について教えてください。 入力ファイルinput.txtが以下である時、 *********** abcdefg *********** 2 3 5 6 3 8 1 7 ●最初の3行を無視する ●4行目以降の数値を配列に格納し、表示する (4行目以降は2列で固定、行数は最大100列) 以上の条件でプログラムを作成したいのです。 最初の3行がない入力ファイルinput2.txt 2 3 5 6 3 8 1 7 を入力し、表示するソースコードは以下のように作成できましたが、「最初の3行を無視する」方法が分かりません。 お手数ですが、ご存じの方教えてください。 よろしくお願いいたします。 #include <stdio.h> #include <stdlib.h> int main() { int i,N,a[100],b[100]; FILE *fpi; if((fpi=fopen("input2.txt","r"))==NULL) { fprintf(stderr,"ファイルを開けません\n"); exit(1); } for (N=0; N<100 && fscanf(fpi,"%d %d",&a[N],&b[N]) != EOF; N++); printf("データ行数:%d\n\n",N); for(i=0;i<N;i++) { printf("%d %d\n",a[i],b[i]); } fclose(fpi); return 0; }

  • C++

    forを使って mとnを入力し(m、nとも最大10)、 m*n個の実数を入力して、m行n列の行列を作る。 この行列に対して、各行の合計、平均及び最大と各列の合計、平均及び最大を求めるプログラムを作成。-----------------------------------------------------------------教えてください。

  • C言語でのプログラム

    23481 34958 432 ・・・   83829 93828 210 ・・・     ・     ・    ・   ・     ・    ・   ・     ・    ・ 上の様に各列に対して決まったビット数で表示されている数値のデータの 一番最後の桁(一番上の行なら 1、8、2)を消去するプログラムを 作りたいのですが、 各数値の間にスペースがあるので、ヌルコードの一つ手前の数値を消去すると考えたほうが良いのか、それともビット数(桁数)が決まっているので各列に対して最後の桁を指定して消去した方が良いのでしょうか? また、その「消去する」という プログラムには何の関数を使ったら良いのでしょうか? このプログラムへの取っ掛りが見つからず、困っています。よろしくお願いします。

  • C言語のプログラミングについて

    私は大学2年なのですが、現在留年するかしないかというぎりぎりのところに立っています。好意で単位をなんとかしてくれる教授を探し出し、C言語の宿題を出されました。ですが私は根っからの文型で、プログラミングなどしたこともありません。教科書を図書館で借りて読んでみるものの、すぐ理解できるような難易度ではないことだけがわかりました。 そこでもしよろしければ、プログラムを教えてもらいたいです。 1.キーボードから整数の入力を繰り返す。0以下の値が入力されたら終了し、入力した値の中の最小値を表示する。また、それが何番目に入力された値かもあわせて表示する。(6つの整数を入力、最後の整数は0を入力することとする。) 実行結果例 整数を入力: 6 整数を入力: 5 整数を入力: 4 整数を入力: 3 整数を入力: 2 整数を入力: 1 整数を入力: 0 最小値は6番目の1 2.キーボードから整数の入力を4回繰り返し、それらの値を2次元配列Aの各要素に順に代入し、その行列のそれぞれの要素と行列式を表示するプログラムを作成せよ。 実行結果例 1行1列の要素? 6 1行2列の要素? 5 2行1列の要素? 4 2行2列の要素? 3 行列A = 6 5 4 3 行列式 = 2 3.キーボードから西暦年を入力し,その年が閏年のときは「○○年はうるう年です」と表示し,そうでないならば「○○年はうるう年ではありません」と表示するプログラムを作成しなさい. なお,閏年の定義は以下の通りである. ・西暦年が4で割り切れる年は閏年 ・ただし,西暦年が100で割り切れる年は平年 ・ただし,西暦年が400で割り切れる年は閏年 実行結果例 西暦年を入力してください. 1987 1987 年はXXXXXXXX 一時的ではありますが、皆様のお力をお借りしたいです。 もちろん、ここでお答えをもらってもわからないままにせずに、無事進級することができたら独学で勉強しようとは思ってます。 なお、理系の人たちはVisualBasicというソフトを使っているようです。よろしくお願い致します。

専門家に質問してみよう