超初歩的な問題?に関する質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
吹雪

超初歩的な問題?に関する質問です

#1

投稿記事 by 吹雪 » 9年前

えーと。。。
はじめまして。この春から高校生で学校でC言語を習っているものです。
早速なんですが、授業で出た課題がうまくいかなくて相談しに来ました。

1 以上 127 未満の整数のうち、3で割ると余りが1かつ 5で割ると余りが2 になる整数を、全て表示するプログラムを作成しなさい
ヒント: i を 1 から 126 までループさせ、if文を使って表示するかどうかを場合わけする

この問題なんです。
自分が書いたプログラムが

コード:

#include<stdio.h>

void main(void)
{
	int  i;

	for (i = 1; i <= 126; i++) {
		if ("%d %% 3 == %d\n" == 1) {
			printf("%d\n");
		}
		else
		{
			if ("%d %% 5 == %d\n" == 2) {
				printf("%d\n");
			}
		}
		printf("%d\n", i);
	}

}
これです。
しかしこれだと、1~126まで全整数ただ表示されただけで、うまくいきませんでした。
for文の条件が間違っているから表示されないのでしょうけど、いまいち何がおかしいのかわかりません。
だれか教えていただけませんか。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 超初歩的な問題?に関する質問です

#2

投稿記事 by usao » 9年前

このコードに関して
>いまいち何がおかしいのかわかりません
という状態だとすると今後も課題が出る度に大変なことになりそうです.(後になるほど課題の難易度も上がるでしょうし.)
学校でやってるなら,資料なり教科書なりあるでしょうから,いまのうちに復習しつつ

・余りを求める処理
・求めた余りが特定の値か否かを判定する処理


と一歩ずつ確実にクリアしていけばどうでしょうか.

オフトピック
>1~126まで全整数ただ表示された

>間違っているから表示されないのでしょうけど

「表示された」 のか 「表示されない」 のか…

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: 超初歩的な問題?に関する質問です

#3

投稿記事 by 沖 滉均 » 9年前

突っ込みどころが多すぎるコードなのでどこから突っ込めば良いかというところですがその辺はまぁ良いでしょう。
とりあえず、1~126がただ表示されてしまう原因は17行目が必ず実行されるからですね。

そして、if文の条件式が何を勘違いしているのかなぜ文字列なのか…
現状のコードではコンパイル時にWarningが出ている気がしますが出ていませんか?

と、上は置いておいて…

ヒント: i を 1 から 126 までループさせ、if文を使って表示するかどうかを場合わけする
とあるように、iを 1 から 126 までループさせ、if文で、(iを3で割ると余りが1) かつ (iを5で割ると余りが2)という条件を書きましょう。
そして、その条件を満たした時のみprintfで表示させるようにしましょう。
分からなければ教科書なり授業のノートなりを確認してみてください。
There is no royal road to learning.
codeタグで指定できる言語
画像

超初級者
記事: 56
登録日時: 10年前

Re: 超初歩的な問題?に関する質問です

#4

投稿記事 by 超初級者 » 9年前

答えの例です。まずはコードを読んでみてください。

コード:

#include <stdio.h>

int main(void)
{
   int i;

   for (i = 1; i < 127; i++) {
       if (i % 3 == 1 && i % 5 == 2) {
           printf("%d\n", i);
       }
   }
   return 0;
}

かずま

Re: 超初歩的な問題?に関する質問です

#5

投稿記事 by かずま » 9年前

割り算や余りを求める演算を使わないやり方を考えてみました。

コード:

#include <stdio.h>

int main(void)
{
    static int a[131];
    for (int i = 0; i <= 126; i += 3) a[i] = a[i+2] = 1;
    for (int i = 0; i <= 126; i += 5) a[i] = a[i+1] = a[i+3] = a[i+4] = 1;
    for (int i = 1; i <= 126; i++)
        if (a[i] == 0) printf("%d\n", i);
    return 0;
}

吹雪

Re: 超初歩的な問題?に関する質問です

#6

投稿記事 by 吹雪 » 9年前

皆さま。ありがとうございました

 ∧∧ 
(_ _ )
 ヽノ)
  || 

無事に解くことができました!!

やはりどんどん難易度が上がっていき、最初の

コード:

#include <stdio.h>
 
int main(void)
{
    printf("Hello, world!");
    return 0;
}
こんなプログラムばっかり作っていくのかなー。。。
なんて思っていたら、いつのまにかちんぷんかんぷんになっていました笑

もう一回しっかりと復習したいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る