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

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

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

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

Q&A

解決済

3回答

4088閲覧

倍数を昇順に表す(while文)

tikuno

総合スコア18

C

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

0グッド

0クリップ

投稿2020/05/28 11:19

キーボードから正の整数kを入力させ、1から100までの整数のうち、kの倍数を全て昇順に表示させるためのプログラミングをwhile文を用いて作成したいとき、以下のように書いたところ例えば5と入力すると5 10 20 40 80 160とでてきました。1から100までのうちのkの倍数を全て表示させる方法を教えていただけないでしょうか。

#include<stdio.h> int main(void) { int k; scanf("%d",&k); while(k>=1 && k<=100){ printf("%d\n",k+=k); } return 0; }

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

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

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

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

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

guest

回答3

0

C

1#include <stdio.h> 2 3int main(void) { 4 int k=0,i=1; 5 scanf("%d", &k); 6 while (0 < k && k*i <= 100) { 7 printf("%d\n", k*i++); 8 } 9 return 0; 10}

というのもありだと思う。

一般論としては、
整数ならいいけど、浮動小数点だと繰り返し足していくと誤差が累積してしまう場合もあったりするから掛け算のほうがいいんじゃないかと思う。

kに初期値を与えたのは数値じゃない入力への対策。誤入力対策は始めるとキリがないので、「正の整数を入力する」という設定を素直に信じるのがいいのかも知れないけれど。

投稿2020/05/28 23:21

thkana

総合スコア7703

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

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

tikuno

2020/05/29 07:23

これをfor文とif分を組み合わせて書きたいときはどのようにすればよろしいですか?
thkana

2020/05/29 23:48

for文の構文は for(初期化; 継続条件式; 更新式) 文 です。各項目の意味は理解しているものとして、プログラム中変化しているのは i だけですから、その変化を考えれば初期化処理と更新式は難しくないと思います。 また、while文は whlie(継続条件式)文 ですから、継続条件式はそのまま流用できます。 なにか自分で出来ないような難しさがありますか?
tikuno

2020/05/30 08:11

例えば「キーボードから2以上の整数nを1つ入力し、2以上n以下の整数のうち4で割ると1余る数数をすべて表示する」という問題をwhileを使って表したいとき、 #include<stdio.h> int main(void) { int n; int i=1; scanf("%d",&n); while(n>=2 && i+4<=n){ printf("%d\n",i+=4); } return 0; } のように正確に実行はするものの、書き方がごちゃごちゃになってしまいます。この例で行くともっと簡略してかける方法はありますか?
thkana

2020/05/30 09:26

簡略というのとは別の話になりますが、 nが2以上でなければおかしな話になるのでn>=2を検査するということを、n<2であればループを継続しないという形でループの継続条件に織り込むことで意味をわかりにくくしている、ということは言えると思います。 もとの質問であればk>=1ってのが同じ話。承知の上でそうしているのかと思って放置していましたけど。
guest

0

質問文のコードをベースに書いてみました。

c

1#include<stdio.h> 2 3int main(void) 4{ 5 int k, n; 6 scanf("%d", &k); 7 8 n = k; 9 while(k > 0 && 1 <= n && n <= 100) { 10 printf("%d\n", n); 11 n += k; 12 } 13 return 0; 14}

k に マイナス値 や 0 を入力した場合のことも考慮しています。

投稿2020/05/28 22:01

katoy

総合スコア22324

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

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

0

ベストアンサー

こんな感じです?

c

1int main(void) 2{ 3 int k; 4 scanf("%d",&k); 5 int sum = k; 6 while(sum<=100){ 7 printf("%d\n",sum); 8 sum += k; 9 } 10 return 0; 11}

for文なら

cpp

1int main(void) 2{ 3 int k; 4 scanf("%d",&k); 5 for (int i = k; i <= 100; i += k) { 6 printf("%d\n",i); 7 } 8 return 0; 9}

投稿2020/05/28 11:22

編集2020/05/28 12:28
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tikuno

2020/05/28 11:58

回答ありがとうございます。whileの中身は<=じゃないんですか?
退会済みユーザー

退会済みユーザー

2020/05/28 11:59

これだと100は出ないですね。 100も含めたいのであれば<=にしてくださいー。
tikuno

2020/05/28 12:08

丁寧に教えてくださりありがとうございます。もう一つ気になることがあるのですが、これをfor文で表すとどんな感じになりますか?聞いてばかりで申し訳ありません。
退会済みユーザー

退会済みユーザー

2020/05/28 12:11

追記しておきました。
kazuma-s

2020/05/28 12:27

for文の方で i += 5 は i += k の間違いですよね。
退会済みユーザー

退会済みユーザー

2020/05/28 12:29

あああ…ありがとうございます。思いっきり間違えてますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問