ページ 11

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

Posted: 2016年6月24日(金) 11:10
by 吹雪
えーと。。。
はじめまして。この春から高校生で学校で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文の条件が間違っているから表示されないのでしょうけど、いまいち何がおかしいのかわかりません。
だれか教えていただけませんか。

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

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

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


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

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

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

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

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

Posted: 2016年6月24日(金) 14:56
by 沖 滉均
突っ込みどころが多すぎるコードなのでどこから突っ込めば良いかというところですがその辺はまぁ良いでしょう。
とりあえず、1~126がただ表示されてしまう原因は17行目が必ず実行されるからですね。

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

と、上は置いておいて…

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

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

Posted: 2016年6月25日(土) 01:25
by 超初級者
答えの例です。まずはコードを読んでみてください。

コード:

#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: 超初歩的な問題?に関する質問です

Posted: 2016年6月25日(土) 04:05
by かずま
割り算や余りを求める演算を使わないやり方を考えてみました。

コード:

#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: 超初歩的な問題?に関する質問です

Posted: 2016年6月29日(水) 09:40
by 吹雪
皆さま。ありがとうございました

 ∧∧ 
(_ _ )
 ヽノ)
  || 

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

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

コード:

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

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