• ベストアンサー

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というソフトを使っているようです。よろしくお願い致します。

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

  • ベストアンサー
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.14

>f(n>0 && n<imin){ >n=imin; >x=i+1; これは、 if(n>0 && n<imin){ imin=n; x=i+1; の写し間違いでしょうか。ならば、これはこれでいいと思います。 あとは、nの初期値と >while(n != 0){ この部分ですね。 それと、 >実行例を見る限り、0~9の整数を入力するみたいなので この仮定ですが、問題文には記述されていないことなので、できればこの仮定なしでいきたいですね。方法はあります。 まあ、問3についてはこれで問題ないと思いますので、先に問2を仕上げて、時間があった場合に仮定なしの問1に挑戦するのがいいかなと思います。

yuuki03211
質問者

お礼

#include <stdio.h> int main(void) { int n,i,x,imin; x=0; n=0; printf("整数を入力:"); scanf("%d",&n); imin=n; i=1; while(n>0){ printf("整数を入力:"); scanf("%d",&n); if(n>0 && n<imin){ imin=n; x=i+1; } i++; } printf("最小値は%d番目の%d\n",x,imin); return 0; } ループ前に一度試行し、iの初期値を1にしてみました。 whileでのループ定義を勘違いしていたため、そこを修正。 問2 #include <stdio.h> int main(void) { int a[2][2],i,j; for(i=0;i<2;i++){ for(j=0;j<2;j++){ printf("%d行%d列の要素? ",i+1,j+1); scanf("%d",&a[i][j]); } } printf("行列A =\n%d %d\n%d %d\n",a[0][0],a[0][1],a[1][0],a[1][1]); printf("行列式= %d",a[0][0]*a[1][1]-a[0][1]*a[1][0]); return 0; } ちょっと行列の計算の式があってるか不安です。 質問には載せてないですが、問4と問5も実在したりします。 こちらは穴埋め形式のため、なんとかがんばってみようと思います。

すると、全ての回答が全文表示されます。

その他の回答 (14)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

ご自分で調べ どこまで理解なさっているのかを明示しましょう この程度の問題なら『教科書』に載っている例題を少々応用するだけのように思います # Visual BasicはC言語系の処理系ではありません

yuuki03211
質問者

お礼

図書館から借りてきた本と睨めっこを続けているのですが、自分にとってはまったく未知の言語なため、非常に理解し難いです。 とりあえず時間がないため、原理などはすっ飛ばし、プログラム構築のところから覚えるようにはしています。現在理解していることは、関数の宣言、入力した文字の表示の方法程度です。

すると、全ての回答が全文表示されます。
  • kamejiro
  • ベストアンサー率28% (136/479)
回答No.3

適当に思いつくままコメントします。 1の問題は、  型宣言する変数は、入力する変数、何番目かをカウントする変数、最大値を保持する変数、何番目かを覚えておく変数等が必要です。全てintまたはlongを使い整数型で宣言します。  入力する前に、カウントする変数、最大値を保持する変数、何番目かを覚えておく変数を全て0にします。  0以下の値が入力されるまで、入力を繰り返しますから、while文またはdo~while文の中に入力命令scanfを入れます。入力処理するごとに、カウントする変数を1加算していきます。繰り返し処理終了するには、if文で条件を入力値が0以下にし、break命令で脱出します。  if文を使い、最大値が出てきたら、最大値を保持する変数と何番目かを覚えておく変数を書き換えます。  繰り返し処理が終わったら、何番目かをカウントする変数と最大値を保持する変数をprintf命令で画面表示します。 2、3の問題までは頭が回りません。  何より「進級するため」にC言語のプログラミングを取り組むのであれば、その教授にどんどん質問したらどうですか。その際に「全部分からない」と言わず、「ここまで取り組んだけれど、この点でつまづいた」と努力の証をアピールして下さい。とにかく頑張って下さい。

yuuki03211
質問者

お礼

1の問題についてのヒント、ありがとうございます。 回答のほうを参考にしてがんばりたいと思います。 教授に質問をしたかったのですが、教授は研究室のほうで忙しく、期限が今日までなのでそうもいかないようです。 「とりあえずどんな本を見てもいいからがんばってこい」といわれているので、ネットの知り合いで理解してる人に相談しつつ進めたいと思います。

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

最近同じ指摘ばかりしているような気がしますが... > キーボードから キーボードから入力するための一般的な方法はありません。 処理系を明示してください。あるいは、キーボードのハードウェアの仕様やI/Oのマッピング等を明示してください。 そもそも真の要求は、キーボードではなく、標準入力ではないのですか?

yuuki03211
質問者

お礼

問題文に「キーボードから」と書いていたのでそのまま載せたのですがおかしいのでしょうか? 無知なために理解ができません。 処理系というのは・・・scanf等のことなのでしょうか・・・?

すると、全ての回答が全文表示されます。
  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

解らない所は何処ですか? >無事進級することができたら独学で勉強しようとは思ってます。 ぜひ、今すぐに勉強をなさる事をお勧めします。もしくは留年して。 http://www.bohyoh.com/CandCPP/C/index.html お勧めの教科書です。

yuuki03211
質問者

お礼

解らない所と言われると、ほぼ全て、としか言いようがありません。 URL先のHPを参考にさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A