- ベストアンサー
C言語への変換について
- VBでnCrを求めるプログラムを作成したが、C言語に移植したい
- サイトを探したが良い解決策に巡り合わず、助けを求めている
- nとrの値を入力し、計算をクリックすると結果が表示され、nCrの計算ができる
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
補足がないので CUI で作ってみました。 インデントは全角空白でつけているので、コピペ後タブ文字なり半角空白×2なりに置換してください。 #include <stdio.h> #include <stdlib.h> int nkaijyou(int n, int nr); int rkaijyou(int r); int main(int argc, char** argv) { int n, r, nr, kazu; int ret; /* scanf の戻り値の確認用変数 */ printf("nCr を計算します。\n"); /* n の入力 */ do { fflush(stdin); /* VC だとこれを入れないと数字以外のものを入力した場合におかしくなる */ printf("n の値を入力してください:"); ret = scanf("%d", &n); } while ((ret == EOF) || (n < 0)); /* r の入力 */ do { fflush(stdin); /* 前のほうと同じ理由で挿入 */ printf("r の値を入力してください:"); ret = scanf("%d", &r); } while ((ret == EOF) || (r < 0)); /* nr の計算とその値の確認 */ nr = n - r; if (nr < 0){ printf("r が n に対して大きすぎます : n = %d, r = %d\n", n , r); exit(1); } /* nCr の計算と表示 */ kazu = nkaijyou(n, nr) / rkaijyou(r); printf("%dC%d = %d\n", n, r, kazu); return 0; } /* Function nkaijyou(ByVal n) */ /* そのままだと nr の値がわからないので引数に追加 */ int nkaijyou(int n, int nr) { if (n <= nr){ return 1; } return n * nkaijyou(n - 1, nr); } /* Function rkaijyou(ByVal r) */ int rkaijyou(int r) { if (r < 2){ return 1; } return r * rkaijyou(r - 1); }
その他の回答 (1)
- hitomura
- ベストアンサー率48% (325/664)
……難しい話ですね。 まず、C言語にはVBのようにGUI(ウィンドウやダイアログなどによるユーザーインターフェース)を行う標準ライブラリはありません。 マイクロソフトがライブラリのすべてを決められるVBと違って、WindowsやLinux、はては「GUI?何それ美味しいの?」というレベルの組み込みシステムで動くプログラムを書けるC言語ではGUIの標準的なライブラリの仕様決定が不可能なためです。 従って、GUIは何らかのライブラリを使用して行うわけですが……。 C言語で使用可能なGUI(を含む)ライブラリで簡単なウィンドゥを作ろうとしたら以下のような感じになります。 Win32API(Windows限定): http://homepage2.nifty.com/c_lang/sdk/sdk_00.htm GTK+(クロスプラットフォーム): http://developer.gnome.org/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD ……これでも本当に簡単なウィンドウ表示をしているだけなんですよ。 はっきり言ってあなたがVBで作ったようなダイアログを表示するだけでこの回答欄の文字制限を越えてしまいます。 で、補足要求ですが、それでもGUIが必要ですか? CUI(コマンドプロンプトで表示されるような文字だけのユーザーインターフェース)でもよろしいでしょうか?