私は大学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というソフトを使っているようです。よろしくお願い致します。
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に挑戦するのがいいかなと思います。
#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も実在したりします。
こちらは穴埋め形式のため、なんとかがんばってみようと思います。
No.13
- 回答日時:
#7,#8,#12です。
>他におかしいところはないでしょうか?
nが初期化されていません。
>while(n != 0){
これでは、nが0の時のみ終了になります。問題文では「0以下」となっていますから、これでは違います。
>scanf("%d",&n);
>if(n<imin){
入力した値が0以下かどうかを判断する前に最小値と比較しています。
なので、終了するつもりで0を入力した場合、その0が最小値とされてしまいます。
f(n>0 && n<imin){
n=imin;
x=i+1;
こうしてみましたが、この以前でnが0以下かどうかを判断するには、またif文が必要なのでしょうか?なんだか混乱してきました。
#include <stdio.h>
int main(void)
{
int y;
printf("西暦年を入力してください");scanf("%d",&y);
if ((y%4==0 && y%100!=0) || y%400==0)
printf("%d年はうるう年です\n",y);
else
printf("%d年はうるう年ではありません\n",y);
return 0;
}
3番もやってみました。
No.12
- 回答日時:
>28日まで というのには理由があり、うちの大学は今月中に成績を出さなければなりません。
それなら、29日の朝までとか(^^;、今年は閏年です。
>問1で、do-while文中で最小値(iminとします)に入力した値をいれる場合、一番最初はどうすればいいのでしょうか?
>if文を使い、入力した文字(nとします)<iminの時にn=iminとしたかったのですが、一番最初はできないような気がします。
>これはdo-while文の前に非ループで1回だけ試行しろ ということでしょうか?
そのあたりが、問1が曖昧であるということにも関係しています。
例えば、いきなり0が入力された場合、どうすればいいのでしょうか?
問題文だけではそれがわかりません。
ループの外で一回だけ実行するのは、良いアイデアです。その場合、do-whileよりも、ただのwhileループのほうがいいでしょうね。
期限については、最終手段ということにします。
実行例を見る限り、0~9の整数を入力するみたいなので、暫定的にですがプログラムを作ってみました。
#include <stdio.h>
int main(void)
{
int n,i,x,imin;
i=0;
x=0;
imin=10;
while(n != 0){
printf("整数を入力:");
scanf("%d",&n);
if(n<imin){
imin=n;
x=i+1;
}
i++;
}
printf("最小値は%d番目の%d\n",x,imin);
return 0;
}
いきなり0を入力したらどうするの?とか、突っ込みどころは満載かと思います。
その不自然な所を敢えて見ないようにした場合で、他におかしいところはないでしょうか?
なければ他の問題に取り掛かろうと思います。
No.11
- 回答日時:
#7,#8です。
とりあえず、問1は問題に曖昧な点があるので、それを指摘して一日伸ばしてもらいましょう(^^;
問2もそう難しくはない。でも、この場合、行列式の値って、-2じゃないのかな?
28日まで というのには理由があり、うちの大学は今月中に成績を出さなければなりません。
なので期限を延ばしてもらうことはできないと思われます。
少し疑問に思ったことがあります。
問1で、do-while文中で最小値(iminとします)に入力した値をいれる場合、一番最初はどうすればいいのでしょうか?
if文を使い、入力した文字(nとします)<iminの時にn=iminとしたかったのですが、一番最初はできないような気がします。
これはdo-while文の前に非ループで1回だけ試行しろ ということでしょうか?
No.9
- 回答日時:
1番だけ作ってみました。
ただし、このまま提出すれば、ほぼ間違いなく留年確定でしょう。#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(void)
{
long long minimum = LLONG_MAX;
int n = -1;
for (int i = 1; i <= 6 + 1; i++)
{
printf("\u6574\u6570\u3092\u5165\u529b:");
fflush(stdout);
long long value;
scanf(" %lli", &value);
if (i > 6)
{
if (value != 0)
{
abort();
}
break;
}
if (value < minimum || n < 0)
{
minimum = value;
n = i;
}
}
printf("\u6700\u5c0f\u5024\u306f%d\u756a\u76ee\u306e%lld\n", n, minimum);
}
処理系が不明なので、「キーボードから」というのは「標準入力から」に読み替えました。また、「表示する」は「標準出力に出力する」の意味に読み替えました。
一般的な整数を扱うことはできませんので、最大の整数型であるlong long型を使用しました。
日本語の文字列は、基本ソース文字集合の範囲で表現するため、国際文字名を使用しました。
ありがとうございました。
>>ただし、このまま提出すれば、ほぼ間違いなく留年確定でしょう。
私もそう思います。なので、参考にさせて頂きます。
No.7
- 回答日時:
>この授業は文系では選択授業で、私は元々は受けていません。
>ただしセミナーでこの教授が担当だったため、単位を相談したところ、「明日(28日)の6時までにこれできたらあげてもいいよ」と言われた次第です。
どうなんだろうなあ。それって「留年しなさい」ってメッセージなような気も(^^;
人に作ってもらったのを持っていくのと、たとえ完成しなくても、最大限努力して持っていくのと、どっちが有利だろう?
とりあえず、3が一番簡単なので、頑張って3だけでも作って持っていってみては?
>入力した文字の表示の方法程度です。
とのことなので、ヒント
余りを求めるには、%を使います。
yearに西暦が入っているとして、
year % 4;
が0なら4で割り切れたということです。
留年してしまったらそれは再試験に受からなかった自分のせいなのでしょうがないですが、まだ可能性があるのならそれに縋りたいです。
ヒント、ありがとうございます。
現在はkamejiro様のヒントを元に、1番をやってみてる所です。
No.6
- 回答日時:
> その先生は私のことを文型で、C言語などやったことがないことを理解してるはずですから、
何かおかしくないですか?
やったことがない宿題なんか、あり得ないと思います。本来やるべきだったのを、怠っていただけではないのですか?
ところで、「文型」ではなく「文系」ではないでしょうか?
別の教科の再試験に落ち、進級するための単位が足りませんでした。
そこで、「授業は受けてないけどレポートか何かで単位をくれる教授」を探した結果がこうなったのです。
この授業は文系では選択授業で、私は元々は受けていません。
ただしセミナーでこの教授が担当だったため、単位を相談したところ、「明日(28日)の6時までにこれできたらあげてもいいよ」と言われた次第です。
文型は誤字です、失礼しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワードで文字を入力する時の変...
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミングの問題で、キー...
-
WindowsでEOF
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
EDITコントロールで入力できる...
-
cout関数を使っているのですが...
-
java初心者です。入力されたの...
-
C言語でgetchar();が上手く使え...
-
Eclipseでコマンドラインを入力...
-
Userformの入力順序をタブオー...
-
特定の文字が入力されるまで・・・
-
最大公約数と最小公倍数を求め...
-
C言語 While文(ループ)内の...
-
C言語 逆ピラミッドの作り方
-
*をユーザーが入力した数字の数...
-
[WOLF RPG エディター] 音ゲー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
Eclipseコンソール表示を、リセ...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
cout関数を使っているのですが...
-
ワードで文字を入力する時の変...
-
VB.NETで16進数+16進数や16進...
-
scanf が無視されます
-
batプログラム上で文字列を入力...
-
入力候補を表示させるには・・・?
-
getchar()について 教えてくだ...
-
プログラミングの問題です 「金...
-
Linuxで入力待ちなしkeyread関...
-
Userformの入力順序をタブオー...
-
コマンドプロンプトからのEOFの...
-
VisualStudio2019のコードアナ...
-
WindowsでEOF
-
"gets"は危険なのでしょうか?
おすすめ情報