書籍やさしいCで納得行かない部分がありまして・・・

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

書籍やさしいCで納得行かない部分がありまして・・・

#1

投稿記事 by かちくんくん » 8年前

今現在 やさしいCという書籍でC言語を勉強しているものです。


練習問題の一つに
 
 キーボードから数を入力し、その数が素数
 (1またはその数以外で割り切れない数)であるかどうかを
 判断するコードを記述してください。

という問題で
実行した際の画面結果の具体例はこちらで

 ・7を入力した際の画面結果
  2以上の整数を入力してください。
  7
 7は素数です。
 ・10を入力した際の画面結果
  2以上の整数を入力してください。
  10
 10は素数ではありません。


そして
このコードの答えがこちらでした。

コード:

 
#include <stdio.h>

int main(void)
{
  int num,i;

 printf("2以上の整数を入力してください。\n");
 scanf("%d", &num);

for(i=2; i<=num; i++){
    if(i == num){
     printf("%dは素数です。\n", num);
    }
   else if((num%i)==0){
     printf("%dは素数ではありません。\n", num);
     break;
    }

}



お聞きしたい点は
numに7をいれても10をいれたとしても
繰り返すたびにiの数は増えて最終的には
if(i == num)の条件には合うと思うのですが
なぜ10を入れた際にelse if((num%i)==0)の条件分岐になるのでしょうか??
またどういう処理をしているのかが気になっています
もやもやして寝るに寝れなくて困っています。宜しくお願いします!

yuni

Re: 書籍やさしいCで納得行かない部分がありまして・・・

#2

投稿記事 by yuni » 8年前

まずご存知かもしれませんが、予備知識として。
・素数は1かその数でしか割れない値、です。
・ % 演算は、割った余りを求めます。
・割った余りが0のときは割り切れている状態なので、素数ではありません。

つまり、7のときは2で割った余りは1、3で割った余りは1、…となり、 num == i つまり 7 == 7になるので素数です。
10の場合は2で割ったら余りが0なので、num%i==0 つまり素数ではない、ということですね。

box
記事: 2002
登録日時: 13年前

Re: 書籍やさしいCで納得行かない部分がありまして・・・

#3

投稿記事 by box » 8年前

自分がコンピュータになったつもりで
コードを1行ずつ追いかけてみると
解決へのきざしが見えてくるかもしれません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 13年前

Re: 書籍やさしいCで納得行かない部分がありまして・・・

#4

投稿記事 by non » 8年前

17行目のbreakは、forループから抜け出すという意味です。非素数の場合は最後(i==num)まで行きません。
non

かちくんくん

Re: 書籍やさしいCで納得行かない部分がありまして・・・

#5

投稿記事 by かちくんくん » 8年前

皆さんの解説でやっと納得できました。

10を入力した際は1回目の繰り返しの時点で
はelse ifの条件に合い、分岐するのでforループから抜け出せてますね・・・

皆さんの解説を読むまで気が付かなかった自分が恥ずかしいです。
私が考えすぎて頭がおかしくなっていたかもしれません。

教えてくださりありがとうございました。

閉鎖

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