• 締切済み

C言語で、次のプログラムを作ってみて頂けないでしょうか?

「キーボードから2以上の整数を入力して、 素数であるかどうか判断をする」 というプログラムをCで作るにはどうしたらいいですか? できたら、見本のプログラムを示して頂けると 一番助かります。 よろしくお願いします。

みんなの回答

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.5

>問題の解答もありましたが、それは理解ができなかったので とありましたが、具体的に何が書いてあってなにが理解できなかったかを 明記すると、適切な回答が得られる可能性が高まりますよ。 ちょっと考えるだけでも 1.解答にプログラム例があったが、その内容がわからない。 2.解答に解説があったが、実際のプログラムのイメージにならない。 3.解答のプログラム/解説のアルゴリズム(判断方法)がわからない。 くらい可能性があるでしょう。 最初の質問の「見本のプログラムが欲しい」から推測すると 2番に近いとは思うが、ずばりでもないような。 以下は、私なりの見本 int i, input; char *msg; scanf("%d", &input); msg = "素数です"; for(i=2; i<input; i++) { ・・if(input % i == 0) { ・・・・msg = "素数じゃない"; ・・・・break; ・・} } printf("%s\n", msg); 処理内容は、素数の定義そのもの(1とそれ自身以外では割り切れない) でテストしています。 (もっとも単純だが、無駄も多い)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.4

こんばんは、No.1のarukamunです。 入力ミスです。(腕が落ちたなぁ。) 誤  if ( p < 2 || n%2 == 0 ){ nなんて変数は定義して無いし、 p = 2の時、素数では無くなってしまいますね。 正  if ( p < 2 || ( p > 2 && p%2 == 0 ) ){ ところで、No.1のプログラムは理解出来ましたか? prime()という関数の引数にint型の数値を入れると、素数かを判断し、0(NOTPRIME)か1(PRIME)を返します。 int型を超える数値を入れると正しく動作しない事はNo.3の方が仰る通りですね。まあ、サンプルですので、バグが有っても構わないでしょう。 まずは、   if ( p < 2 || ( p > 2 && p%2 == 0 ) ){     return NOTPRIME ;   } で、pが2より小さい、または、2より大きくて2で割った時に余りが0であったら素数では無い。としています。 次に   for (i=3 ;i*i<=p ;i+=2){     if ( p%i == 0 ){       return NOTPRIME ;     }   } で、i=3で3で割った時の余りが0であったら素数では無い。 5で割った時の余りが0であったら素数では無い。 ・・・ の様に、i+=2で2ずつ加算して検査しています。 ループの終了条件が、i*i<=pというのは、出来るだけ計算回数を少なくしたかったからです。 なぜ、i*i<=pで良いかは考えてください。 別にi<pでもi<p/2でも良いですけど・・・。 解らない所が有れば、補足してください。

回答No.3

こんにちは。  答え。作れません。なぜなら、入力できる数の下限はありますが、上限がないからです。たとえば、9京なんて数字を入力されると、コンピュータは別の数字として扱い、答えが信用できません。  まぁ、学校の授業で出るような問題でこんな答えをしたら×ですが、実務で作るプログラムでは、こういうことを考えないといけません。

twinkle_light
質問者

補足

宿題等ではありませんが、 参考書の参考問題にあったので、聞いてみたのです。 その参考書には問題の解答もありましたが、それは理解ができなかったので、ほかのプログラムを聞いているのです。 ですから、できないことはないかと思われます。

  • coolguys
  • ベストアンサー率18% (351/1917)
回答No.2

#1の人の答えは宿題等である場合は、 使わないほうが吉です。 初心者の作ったものと違いますから、 見る人が見たら、他人が作ったことが分かってしまいますよ。

twinkle_light
質問者

補足

宿題等ではありませんが、 参考書の参考問題にあったので、聞いてみたのです。 その参考書には問題の解答もありましたが、それは理解ができなかったので、ほかのプログラムを聞いているのです。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんばんは とりあえず見本ですね。 エラトステネスのふるいでいいでしょう。 #include <stdio.h> #define PRIME 1 #define NOTPRIME 0 int prime(int p) {   int i ;   if ( p < 2 || n%2 == 0 ){     return NOTPRIME ;   }   for (i=3 ;i*i<=p ;i+=2){     if ( p%i == 0 ){       return NOTPRIME ;     }   }   return PRIME ; } void main() {   int p ;   printf("2以上の整数を入力してください : ");   scanf("%d",&p);   if ( prime(p) == PRIME ){     printf("%dは素数です。",p);   } else {     printf("%dは素数ではありません。",p);   } }

関連するQ&A

  • C言語の授業で

    C言語の授業で -------------------- 3以上の整数を入力してください:10 素数は以下の数です: 7 5 3 2 素数は4個ありました -------------------- という感じの、入力した数以下の素数を表示するプログラムをwhile文を用いて作成するように言われたんですが・・・。 まず、while文と素数を表示するプログラムがよくわからないので、もう何をすればいいのか・・・。 どうか、ご教授お願いします。

  • C++のプログラム

    C言語の問題を授業で出されたのですがさっぱり分かりません。教えて下さい。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作   れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、”dog”を逆さまにすると”god”になる。 6.キーボードから一つの整数を入力し、それは奇数か偶数かを判断するプログラムを作れ。 ちなみに6番は /* iftst.c */ #include <stdio.h> void main(void) { int n; printf("n="); scanf("%d",&n); if(n%2 == 0){ printf("偶数です\n"); } else{ printf("奇数です\n"); } } で合っているのでしょうか?

  • C言語について

    以前も同じことを質問したのですが、分からなかったので、また質問します。本を読んでも分かりませんのでプログラム全てを教えて下さい。2日も考えています。他人からすれば何で説明を読んでも分からないのか?と思われると思いますが、本当に全く分からないし見当もつきません。よろしくお願いします。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、"dog"を逆さまにすると"god"になる。 以上の5問です。できるだけ簡単で理解しやすいものでお願いします。

  • C言語-繰り返し処理

    キーボードから入力される1以上の整数に対して、次のような処理 をするプログラムを作りたいのです。 入力される整数が5であった場合、 正の整数:5 1***** 2 **** 3 *** 4 ** 5 * (0、または負の数であればエラー、終了するようにする) for文等の繰り返しを使って色々書いてみたのですが、 12345***** などとなってしまいます。 どのように書けばいいのか教えてくださるとありがたいです。

  • C言語プログラムの課題

    大学で以下のような課題が出ました。でも全然わかりません。わかる方がいらっしゃったら、是非教えてほしいです★ 1整数値123を変数iに代入して、iの値を表示するプログラムを作成せよ。 2実数値3.14159を変数xに代入して、xの値を表示するプログラムを作成せよ。 3文字型せーた'A'を変数chに代入して、chの値を表示するプログラムを作成せよ。ただし、chの値を表示する際には、%d,%x,%cの書式を用いること。 4キーボードから入力された2つの整数値i,jの値を画面に表示するプログラムを作成せよ。 5キーボードから2つの整数値を、変数in1とin2に入力して、以下の計算をした結果を画面に表示するプログラムを作成せよ。 in1+in2= in1-in2= in1*in2= in1/in2= in1%in2=

  • c言語でのプログラミング

    キーボードから複数個の正整数値を読み込み,合計値と平均値(小数第1位まで)を表示するプログラムを作りなさい。 ただし入力数値の個数はプログラミング時には決定していない。 負整数が入力されたら入力値はもうなくなったと判断することとし,負の数は計算には使用しないこととする。またデータは少なくとも1つは入力されるものとする。(p02ex15.c) 検証は1から10までの数字すべてを与え,合計値55,平均値5.5が表示されることを確かめること。 (「1,2,3,4,5,6,7,8,9,10,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) また,1から5までの数字すべてを与え,合計値15,平均値3が表示されることを確かめること。 (「1,2,3,4,5,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) このプログラムのソースコードを教えて下さい。 解説もよろしくお願いします。

  • C言語のプログラムについて

    大学のテストの確認をしているのですが、この問題の回答がどうしても分かりません。どなたか教えてください。 9桁以内の整数を入力し、int型の変数に格納し表示するプログラムを作成しなさい。 ただし、先頭は、数字か「+」か「-」とし、それ以外はすべて数字とする。この条件に合わないものおよび10桁以上のものは、「入力エラー」として表示後、再入力を行うこと。 例えば「-123456」や「45678989」は、整数としてint型の変数に格納し、「abcd」や「123-234」は、「入力エラー 」を表示し、再入力を行う。 ---------------------------------------------------------------- また、自動判定の都合上、表示は以下の表示例に準拠すること。 【 23-234 *12345 -123456 を入力した例】 入力エラー 入力エラー 整数は、-123456 です。 お願いします

  • 関数はあるがC言語で書けないプログラム

    数学的に関数はあるがC言語では書けないプログラムを 探しています。 関数自体は偶数か奇数(0以上の整数)を返す関数で しかしプログラムでは書けないというものです。 よろしくお願いします。

  • c言語プログラム

    加減乗除および剰余の演算記号(+-* / %)と2つの整数を入力し、入力した2つの整数に対して入力した演算を施して表示するプログラムをif文ではなくswitch文を用いて作成しなさいなお、演算記号入力の際に間違った記号(+ - * / % 以外)を入力した場合は+を入力したものとして計算するものとしなさい。 ヒントで 変数としては入力演算記号に対応する変数op、入力する2つの整数に対応する変数m,n、答えに対応する変数ansを使うとよいでしょう宣言についてはopは記号なのでcharで宣言しますが、あとはすべて整数ですのでintで宣言 まずやることは演算記号以外の場合に+であることを表示するプログラムを組むと思うんですけど どうしたらいいのかわかりません力を御貸しください

  • C言語についてなんですが

    プログラムの作成で分からないところがあります。 「二つの整数値を読み込み、小さいほうの数以上で大きい数以下の 整数を全て加えた値を表示するプログラムをdo文を使って 作成せよ。」 下の図のようにしたいです。 2つの整数を入力せよ。 整数A:37 整数B:28 28以上37以下の全整数の和は325です。 よろしくお願いします。

専門家に質問してみよう