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

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

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

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

Q&A

解決済

4回答

1280閲覧

Cでのif 文について

Sprinkle_Egg

総合スコア14

C

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

0グッド

0クリップ

投稿2016/11/27 06:41

以下のコードを実行したらしっかりと5で割り切れるかどうかを見れるのですが
なぜこのコードで5で割り切れるかが判断しif文で処理できるのかわかりません

このコードはどのように流れていっているのでしょうか?

あとif (cast % 5)

if (cast / 5)
に変えたらどんな数字を入れてもifが実行されてしまいます
②なんで/ではできないのでしょうか?

①と②、解答お願いします!

コードです

C

1#include <stdio.h> 2 3int main(void) 4{ 5 int cast; 6 printf("5で割り切れる数を入力してください : "); scanf_s("%d", &cast); 7 8 if (cast % 5) 9 puts("Sorry!this number is 5 not divisible!"); 10 11 return 0; 12}

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

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

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

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

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

MasahikoHirata

2016/11/27 07:28

計算の答えの違いを'printf("(cast%5)%d (cast/5)%d\n ",cast%5,cast/5);'で確かめてみよう。
carimatics

2016/11/27 07:52

質問とはまったく関係ありませんが、puts()で出力するメッセージは”Sorry! This number is not divisible by 5!”が適当だと思います。
Sprinkle_Egg

2016/11/27 08:13

英語が間違っていたとは....お恥ずかしい
guest

回答4

0

ベストアンサー

①このコードはどのように流れていっているのでしょうか?

C言語では、値が、0以外ならば条件成立0ならば条件不成立、とみなします。

cast % 5 は 変数castを5で割ったときの余り を示します。

よって、if (cast % 5) は:
変数castを5で割ったときの余りが、0以外ならば条件が成立するので、
puts("Sorry!this number is 5 not divisible!"); が実行されます

変数castを5で割ったときの余りが、0ならば条件が成立しないので、
puts("Sorry!this number is 5 not divisible!"); が実行されません

「5で割り切れる数」とは「その数を5で割ったときの余りが0になる数」です。

よって、
変数castが「5で割り切れる数」ならば、if文の条件が不成立になるので、
Sorry!this number is 5 not divisible! が表示されません

変数castが「5で割り切れる数」でないならば、if文の条件が成立するので、
Sorry!this number is 5 not divisible! が表示されます

②なんで/ではできないのでしょうか?

演算子 / は、演算子 % と意味が異なるからです。
cast / 5 は 変数castを5で割った、余りではなく、割った数(小数点以下切り捨て)を示します。
castが0~4の場合、cast / 5 は0になります。

if (cast / 5)

に変えたらどんな数字を入れてもifが実行されてしまいます

そんなことはありません。
5以上のとき実行され5未満のとき実行されません

なお、説明を簡単にするために、castが負の数の場合、ならびに、
castがintではなく、floatやdoubleの場合は考慮しないことにしました。

投稿2016/11/27 07:49

naomi3

総合スコア1105

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

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

Sprinkle_Egg

2016/11/27 08:20

一番詳しい方をBAにさせていただきました みなさんありがとうございます!
guest

0

if (x) では、xが0ならfalse、以外はtrueと判定します。

cast / 5 では -4から4までの答えが0となります(整数)なのでfalse
以外はtureとなります。

printf("%d %d\n", cast % 5, cast / 5);文で確かめられます。

投稿2016/11/27 07:41

A.Ichi

総合スコア4070

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

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

Sprinkle_Egg

2016/11/27 08:18

確かめられる文まで.... ありがとうございます!
guest

0

こんにちは。

①このコードはどのように流れていっているのでしょうか?

(cast % 5)はcastを5で割った余りですね。
余りが0なら5で割り切れます。
割り切れた時、ifの条件式が0なので、then節は実行されません。

②なんで/ではできないのでしょうか?

/は商を求めます。0以上5未満の数字を入れると0になります。5以上の値を入れると1以上になります。
その結果でthen節が実行されます。

投稿2016/11/27 07:39

Chironian

総合スコア23272

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

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

Sprinkle_Egg

2016/11/27 08:17

ifの条件式が0だからもしも5で割り切れる場合は0があまりになるのでfalseになるからできないと.... なるほど! ありがとうございます!
guest

0

”/”は割った数
”%”は割ったあまり

例えば
”6 / 2”だと”/”は割った数なので”3”がでます。
”7 % 2”だと”%”は割ったあまりなので”1”がでます。
”%”がなにに使うかと言うと偶数奇数とか求めたりするときに使います。

投稿2016/11/27 07:38

d_red

総合スコア161

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

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

Sprinkle_Egg

2016/11/27 08:14

奇数グ数を求めるときに使うのですね/... ありがとうございます!
d_red

2016/12/08 09:52

時間がたってしまいましたが.... ”%”は偶数奇数だけじゃなくてほかにも使えます。詳しくは調べてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問