forの直後で1+2+3+4+5+・・・・・・・と加算し続ける式がわからないので教えてください。
#include<stdio.h>
int main(void)
{
char moji;
int i,sum;
printf("正の整数を1から順に加算します。n\");
printf("加算を開始してよろしいですか。(Y=実行。N=終了)\n");
moji=getchar();
if(moji==y)
{
for(i=2;sum>=1001;i++)
{
この部分がわかりません;
printf("加算値は%dです。¥n",sum);
}
}else if(moji=='n'){
printf("終了します。\n");
}else{
printf("YまたはNを入力してください。\n");
}
return 0;
}
No.4ベストアンサー
- 回答日時:
密かに、あなたの考えていることと、例示されているソースに書いてあることが違うような気がします。
まぁ、実際に動かしてみるのがいちばんの勉強な訳ですが・・・
printf("正の整数を1から順に加算します。n\");
この行は少しおかしいですね。最後の改行文字は、「\n」です。ちなみに、元のままだと、「"」をエスケープしますので、文字列が終わりません。多分、一見意味不明のコンパイルエラーになります。(プログラムが終わるまでにeofになっただのそんなエラーかな?)
printf("正の整数を1から順に加算します。\n");
moji=getchar();
この行までは、たぶん問題はありません。
if(moji==y)
{
ここは、文法上の問題がひとつ。運用上の微妙な問題がひとつあります。
まず文法上正しくすると次の通り。
if ( moji == 'y' )
{
「y」は文字定数ですから「'」で囲う必要がありますね。
もう一つは、キーボードの状態の問題。
説明文では、大文字のYを打つように指定されてますが、判定は小文字のyですね。まぁ、Yのキーを打てばいいんだ!というのが普通の発想でしょうが、そうするとプログラムは
if (moji == 'y' || moji == 'Y')
{
となります。
さて、本題。ここには、けっこうたくさんの問題が潜んでいそうです。
for(i=2;sum>=1001;i++)
{
この部分がわかりません;
printf("加算値は%dです。¥n",sum);
}
まず、最初は、sumの初期値です。最初にsum>=1001が判定されるときには、まだsumには何も代入されていません。よって不定値となりますので、この条件はその時の運で成立するかどうかが決まります。sumには、加算値が入るようですから、何も足していないときの値は0です。for文の前に
sum=0;
が必要です。
さらに、最初の1も表示しないといけないでしょうから、for文の初期値設定項は、
for (i=1;
となると思います。
次に、for文の条件判定項ですが「sum >= 1001」です。これは、「sumが1001以上の間、forの中を繰り返す。」ですから、何もしないことになってしまいます。等号が逆ですね。
for (i=1; sum <=1001;
ところで、あなたは、表示が終了するのはどの段階にしたかったですか?ちなみに、このままだと、「答えの数字が1001より大きくなったら」計算を終了します。もし、期待されている結果が、1から1001までの数字の足し算なら、for文の条件は
for (i=1; i <= 1001;
ですね。
ところで、1001は計算したかったですか?それとも不要ですか?もし不要なら
for (i=1; i < 1001;
か
for (i=1; i <= 1000;
です。両方の行を混同してしまっている気配が1001という中途半端な数字にかすかに見えるので書いておきます。
ここまでで、for文の行は次の通り。
for (i=1; i <= 1000 ; i++)
{
ですね。
で、不明の行には、
sum += i;
が入ります。sumにiを加算してその結果を表示すると素直に書いただけ。
printf("加算値は%dです。¥n",sum);
ですが、最後の改行が全角文字で書いているような・・・これは、半角にしてくださいね。でないと「¥n」と表示します。
このブロックをまとめると
sum=0;
for (i=1 ; i < 1001 ; i++)
{
sum += i;
printf("加算値は%dです。\n",sum);
}
となります。もし、本当に加算結果が1001より大きくなったら停止でよいなら、for文を
for (i=1 ; sum <=1001 ; i++)
に戻してください。
あと、微妙な問題ですが、1から1000までの加算とすると、その結果は、500500になります。もしかすると、sumの型は、long以上の精度にしておいた方がよいかもしれません。(環境がわからないので?です。もしその環境がintで、50万を表現できるならok)
}else if(moji=='n'){
この行は、さっきと同じ。多分、
} else if (moji == 'n' || moji == 'N') {
でしょう。
また、プログラムのスタイルの問題として、ifやforとおなじ行に「{」を書くか、次の行に書くかは自分の好みでよいですからちゃんと決めておく方がよいです。今回は、両方のパターンが混在してますが、こうなると、「{}」の対応が見つけにくくなり、入れ子が深くなったとき苦労することになります。
後は、多分問題ありません。
相当お節介に書いててみました。(本来は、「この部分が・・・」と書いてある行だけでよかったのかも?)
No.3
- 回答日時:
#1です。
。#2さん、正解。
済みません細部まで見て無かったです。見直してびっくりした。
あっちもこっちも。。。ったく(; ̄□ ̄)yヾ ポロ
※「この部分が…」と書いてあったじゃないか!w
No.2
- 回答日時:
if(moji=='y')
では?
for(i=2;sum<=1001;i++)
では?(sum>=1001じゃ、ループが回らない。)
単純に書くなら、for文の前後ですけど、、、
sum = 1;
for(i=2;sum<=1001;i++)
{
sum = sum + i;
printf("加算値は%dです。\n",sum);
}
でしょう。
単純に足していくだけですね。
でも、こういう場合、普通はfor文で2から始めるのではなく、1から始めます。
やるなら、↓こう。
sum = 0; /* 明示的に 0 にしてるだけ */
for(i=1;sum<=1001;i++)
{
sum = sum + i;
printf("加算値は%dです。\n",sum);
}
※sum += i;
※って使えたかな?忘れた。(^^;
No.1
- 回答日時:
#include<stdio.h>
int main(void)
{
char moji;
int i,sum;
sum=0; /*追加:一応初期化*/
printf("正の整数を1から順に加算します。n\");
printf("加算を開始してよろしいですか。(Y=実行。N=終了)\n");
moji=getchar();
if(moji==y)
{
for(i=2;sum>=1001;i++)
{
sum+=i;/*この部分がわかりません;*/
printf("加算値は%dです。¥n",sum);
}
}else if(moji=='n'){
printf("終了します。\n");
}else{
printf("YまたはNを入力してください。\n");
}
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
for文の中にswitch文はいれられ...
-
構文エラー";"が型の前にあり...
-
販売金額の合計などを求める問題
-
#if 1 #elseの意味について
-
getcの改行判定
-
C言語階乗の総和を求める
-
c言語のwhile文を使った計算で...
-
配列を関数に渡す方法
-
C言語
-
VHDLで、case文とwhen文のどち...
-
C言語 入力した数値の平均値の...
-
全角文字の判定
-
行列をべき乗させるプログラム
-
C言語です
-
Aの値からBの値を除するとは??
-
20'(角度)の計算がわかりま...
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
「指定されたキャストは有効で...
-
「{ } で囲むだけ」は正しい?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
#if 1 #elseの意味について
-
プログラミングで二番目に大き...
-
getcの改行判定
-
配列を関数に渡す方法
-
配列を使って魔方陣
-
10進数からN進数に変換するプロ...
-
scanf関数を用いての加減乗除%...
-
while文について、c言語...
-
初心者です。for文、if文を使っ...
-
C言語階乗の総和を求める
-
行列をべき乗させるプログラム
-
プログラム
-
C言語のwhile文を使った素数判...
-
C言語プログラムが理解できなくて…
-
scanfが実行されません
-
C言語。どうしてコンパイルでき...
-
while文を使った問題なのですが...
-
C言語 入力した数値の平均値の...
おすすめ情報