質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

2回答

1405閲覧

c言語・while文を用いたコードについて

mimi33

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2020/06/19 16:30

問題

今日は1円、明日は2円、明後日は4円というように翌日には2倍の金額を 貯金して合計1万円を超える日を、下記の実行結果のように 表示させたい。プログラムを作成して、 正しく実行されることを確認する。

理想の実行結果

1日目までの合計金額 1円
2日目までの合計金額 3円
3日目までの合計金額 7円
4日目までの合計金額 15円
5日目までの合計金額 31円
6日目までの合計金額 63円
7日目までの合計金額 127円
8日目までの合計金額 255円
9日目までの合計金額 511円
10日目までの合計金額 1023円
11日目までの合計金額 2047円
12日目までの合計金額 4095円
13日目までの合計金額 8191円
14日目までの合計金額 16383円

自力でかける範囲のプログラム

c

1#include <stdio.h> 2int main(void){ 3 int i,j,sum; 4 i = 1; //お金 5 j = 1; //日にち 6 sum = 1; //合計金額 7 8 while(sum >= 10000){ 9 sum = sum + i; 10 printf("%d日までの合計金額 %d円", j, sum); 11 j = j + 1; 12 i = i * 2; 13 } 14} 15

プログラミング初心者です。教えて頂けると嬉しいです!
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javahack

2020/06/19 16:43

まずはwhile文の条件を見直してみてはいかがでしょうか。
javahack

2020/06/19 17:13

質問の連投はおすすめしません。 なるべく一つの質問に集中して、解決したら次の質問をするようにしましょう。
pepperleaf

2020/06/20 00:09

連投してる質問、同じ誤りがありません? while(条件) は、条件が真の間、ループです。
guest

回答2

0

まず、

int i,j,sum;
i = 1; //お金
j = 1; //日にち

コメント付けないと変数の意味が分からんような変数名を避けよう。

C

1#include <stdio.h> 2int main(void) { 3 int amount; // 預金額 4 int days; // 経過日数 5 int sum; // 預金総計 6 7 amount = 1; // 1円から始める 8 days = 1; // 1日目から始める 9 sum = 0; // 合計金額は現時点で(当然)0 10 11 while ( 1 ) { 12 sum = sum + amount; // 預金する 13 printf("%d日までの合計金額 %d円\n", days, sum); 14 if ( sum > 10000 ) { // 一万円を超えたら終了 15 break; 16 } 17 days = days + 1; // 一日経過するたびに 18 amount = amount * 2; // 預金額を二倍に 19 } 20 return 0; 21}

※ do~while使うのが自然なんだが、
while縛りなので無限loopから(条件を満たした時点で)途中脱出した。

投稿2020/06/19 22:17

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

公式までは使わずに、
式の変形だけ使ってみた。

#include <stdio.h> int main() { int j = 1, sum = 0; while (sum <= 10000) { sum = 1 + sum * 2; printf("%2d日までの合計金額 %5d円\n", j, sum); j++; } return 0; }

数Bの範囲だと思うので、やってることはわかりますよね。

追加:変形無しも出てるみたいだから、公式使ったのもついでに

#include <stdio.h> int main() { const int a = 1; //初項(使ってないに等しい) const int r = 2; // 公比 int n = 1; // 項数 (日数) int r_n = 1; // 公比の n 乗累積用 int Sn = 0; // 等比数列の和 while (Sn <= 10000) { r_n = r_n * r; // 公比の n 乗計算 Sn = a * (1 - r_n) / (1 - r); //合計金額計算 printf("%2d日までの合計金額 %5d円\n", n, Sn); n++; // 項数(日数)を増やす } return 0; }

これを展開して

#include <stdio.h> int main() { const int r = 2; // 公比 int n = 1; // 項数 (日数) int r_n = 1; // 公比の n 乗累積用 while (r_n - 1 <= 10000) { r_n *= r; // 公比の n 乗計算 printf("%2d日までの合計金額 %5d円\n", n, r_n - 1); n++; // 項数(日数)を増やす } return 0; }

投稿2020/06/19 18:58

編集2020/06/21 01:35
PingHermit

総合スコア478

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問