No.9ベストアンサー
- 回答日時:
#7 です。
禅問答みたいなので最後にしますが、以下について、
>>> もし負の値を入力されたら、というときに-1でいいのか0なのか。
>>0 をどちらに含めるかです。
これはちょっと誤解を招く表現でした。失礼しました。
たとえば、
if ( a > 0 ) { (真) printf("a は正の数です."); }else { (偽) printf("a は負の数です."); }
というのは厳密には間違いで、
if ( a > 0 ) { (真) printf("a は正の数です."); } else { (偽) printf("a は 0 か負の数です."); }
が正しい。
ここで、正の数のときは真、負の数は偽になるが、0 は偽になるから負に含まれているようにみえるという、条件の真偽と、数の正負の区別ができていないことが疑問の発端のようにみえたので、このような表現をしました。
>>> -1にすると負の値として扱っているように見えるのですが、実際のところどうなんでしょうか
>>扱っていません。
>>a = 0 のとき、 ( a < -1 ) は 偽です。
>ということはif(a < -1){正} else { 偽 } の場合
>偽のほうにいくということでしょうか?
は、
> if ( a < -1 ) { (1) } else { (2) }
> であるときは、
> 実際のところ、(2)を通ります。
と書いたとおりです。
「負の値を入力した場合、という条件」の正解についてご執心のようですが、
>むむ、ということはif(a<=0)かif(a>=0)にすると負の値を入力した場合、という
誤解を招いて申し訳なかったですが、両方なりません。
前者は a が 0 以下(a が 負と 0 )のとき真で、後者は、a が 0以上(a が 正 と 0 )のとき真、という条件で、0 が入ってしまっているので、もはや、正負とかの問題じゃなくなってしまう。
負の値は、0 より小さい数。これは定義だから、「負の値を入力した場合、という条件」は ( a < 0 ) で 正解です。
で。
この定義とプログラムの挙動のつじつまがあわないのであれば、if の条件よりも、その前後のコードや、実装の方法に問題があるんじゃないかと思います。だから、
> -1にすると負の値として扱っているように見えるのですが、
という疑問に至ったコードを示してもらえれば、エキスパートのみなさんも答えやすいと思いますよ。:-)
この回答への補足
一応No.9さんをベストアンサーにしておきたいと思いますが
エキスパートの人用にコードを書いておきます
昔のファイルから引っこ抜いてきたので間違ってるかもしれません・・・
****問題****
main()関数で10個のintの要素を持つ配列xを宣言する。
x[9]には-1を入れておく。
配列xにはforループを用いて、scanfで最大9個の値を読み込む。
(すなわちx[9]には決して値を入れない。)
ただし、負の値が入力されたら、その値(負の値)を
配列xに入れて、ループを終了し、関数kosuu()を呼ぶ。
関数kosuu()には引数としてxを渡す。
関数kosuu()は、与えられた配列に負の値が現れるまでに、何個
の要素があったかを返す関数である。
たとえば、3 4 1 -1であれば、3個あるとしてとして3を返す。
main()関数では、関数kosuu()から返された値を画面に出力する。
#include <stdio.h>
int kosuu(int []);
int
main()
{
int x[10],a;
x[9] = -1;
for(a=0;a<9;a++){
scanf("%d",&x[a]);
if(x[a]<-1){
x[0]=x[a];
break;
}
}
kosuu(x);
return 0;
}
int
kosuu(int x[])
{
int b=0;
int c;
for(c=0;c<9;c++){
}
if(x[c]>0){
b = b+1;
}
printf("%d\n",b);
return b;
}
No.8
- 回答日時:
現在のプロセッサにおいて0というのは特別な数字です。
1. 0かどうかの判定は1インストラクションで実行できる。
2. 0はイミディエイト値をロードする必要がない。
そのため
0とそれ以外の数値の判定においては
0と比較するほうが、資源(実行時間とメモリ)の消費が小さいのです。
従って、整数の正負の判定は
0と比較するのが最も合理的なのです。
if (a <= -1)
が
if (a < 0)
よりも実行速度が遅くなることはあっても
高速で実行される事は決してないからです。
同様の理由で、単純なループカウンタは
if (i = 0 ; i < 10; i++)
よりも
if (i = 10; i > 0; i--)
の方が優れています。
No.7
- 回答日時:
こんばんは。
C の if で 変数 a を評価するとき、
a = 0 で、
if ( a < 0 ) { (1) } else { (2) }
なら(1)を通るとわかるが、
if ( a < -1 ) { (1) } else { (2) }
であるときは、
> -1にすると負の値として扱っているように見えるのですが、
(1)を通っているようにみえるのですが、
> 実際のところどうなんでしょうか
実際のところ、(2)を通ります。
じっさいに
( 0 < -1 )
は、真か偽かと言われると偽ですよね。
> もし負の値を入力されたら、というときに-1でいいのか0なのか。
もし、
if ( a < 0 ) { (1) } else { (2) }
のとき、a が 負なら、(1)で、a が正なら (2)。
このとき、 a = 0 なら、a は 0 より小さくないので、(2)。
しかし、a = 0 のときに (1) に通したいなら、
if ( a <= 0 ) { (1) } else { (2) }
にしてください。
よって、
> -1にすると負の値として扱っているように見えるのですが、実際のところどうなんでしょうか
扱っていません。
a = 0 のとき、 ( a < -1 ) は 偽です。
> もし負の値を入力されたら、というときに-1でいいのか0なのか。
0 をどちらに含めるかです。
# ちょっと違うけど、and とか or が含まれるif の条件の話を後輩に ベン図を用いて説明したら、ベン図ってなんですか、といわれたから、数直線にしたら、「すごくわかりやすいです。」と言ったのを思い出しました。ベン図は高校生の数学。数直線は小学校の算数ぅぅぅ。
この回答への補足
わかりやすい説明ありがとうございます
>> -1にすると負の値として扱っているように見えるのですが、実際のところどうなんでしょうか
>扱っていません。
>a = 0 のとき、 ( a < -1 ) は 偽です。
ということはif(a < -1){正} else { 偽 } の場合
偽のほうにいくということでしょうか?
>> もし負の値を入力されたら、というときに-1でいいのか0なのか。
>0 をどちらに含めるかです。
むむ、ということはif(a<=0)かif(a>=0)にすると負の値を入力した場合、という条件になるのでしょうか。
ベン図は初めて僕も聞きました。
数直線は聞いたことなかったです・・・
y=axみたいな線でしょうか?
ベン図をネットで調べたらOSの絵みたいですね(あくまで感想)
ブロック図やフローチャートとはべつ のものですか?
No.6
- 回答日時:
> if(a(1や2)<0)の場合0は負で
> if(a=>0)でやると+の値で判定される ...
> まあ=>0だと0が負と判定されることはない ...
0は正の数でも負の数でもなく、これは変わりません。「a<0」でも「a=>0」でも他のどんな比較でも、0は正にも負にもなりません(C言語の整数なら)。上は0ではなく、aの値によって結果が変わります。
つまり、
> C言語では0をif文などで判定するときに
> 負の値になったら・・・という問題のときに
については、内容を読み取れていないか、問題そのものが間違っていると思います。問題は「aをif文などで判定する」のではないでしょうか?
この回答への補足
>問題は「aをif文などで判定する」のではないでしょうか?
もちろんそのとおりです
あー、そうか、というとうまく内容が読み取れてないのかな・・・
例でいうと
たとえばwhile(1)などで無限ループを作った際に
負の値が入った場合にbreakする、などという作業なのですが
No.5
- 回答日時:
>ということは
>a<0
>a<=-1
>a<-1(?)
>は同じということでしょうか
同じではない。
「未満」と「以下」の区別がついていないようです。(小学校で習ったと思いますが?)
aが-1の場合
a < 0 真(True)
a <= -1 真(True)
a < -1 偽(False)
となります。
No.3
- 回答日時:
> 0は負の値に入るんでしょうか?
整数は「正の値」「0」「負の値」に分類できます。
負の値が0を含むことはありません。
> コンパイルするとif(a<0)などでは0はもちろん含まないのですが
> -1にすると負の値として扱っているように見えるのですが、実際のところどうなんでしょうか
「何を」-1にしたのですか。
ちなみに,整数の範囲において,
・0より小さい
・-1以下
・負の値
は全て同じことを意味します。
この回答への補足
わかりやすい解説ありがとうございます
>「何を」-1にしたのですか。
if(a<0)をif(a<-1)ということです
>ちなみに,整数の範囲において,
>・0より小さい
>・-1以下
>・負の値
>は全て同じことを意味します。
ということは
a<0
a<=-1
a<-1(?)
は同じということでしょうか
>ちなみに,整数の範囲において,
>・0より小さい
>・-1以下
>・負の値
>は全て同じことを意味します。
この部分とても参考になりました。
補足で説明しましたのでまたご意見あればお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 1から20までの逆数の和を求めたいのですが、このようにプログラミングしたら値が負になってしま 3 2023/05/22 18:31
- 高校受験 中3、受験生です。高校受験についてお聞かせください。 最近、兵庫V模試で偏差値63という結果を出しま 2 2022/09/13 21:36
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- 工学 三相誘導電動機の比例推移に関する問題です。 定格出力200kW、4極、50Hzの巻線形三相誘導電動機 1 2023/05/28 12:29
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
正負を反転させて出力するプログラム
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一致する項目の検出?
-
最大・最小を求めるプログラム
-
【デバッグ】変数の値が変わる...
-
ASP.NETで開発しますが・・・
-
Vba TextBox1.ControlSourceに...
-
テキストボックスのvalueとtext...
-
Excel vba ユーザーフォームテ...
-
プログラミング 2つの整数を読...
-
VB2008EEのラジオボタンのチェ...
-
Powershellのparamについて
-
変数名の取得
-
vbscriptを使いexcelを参照して...
-
Excel VBA 複数選択したリスト...
-
i=cells(Rows.Count, 1)とi=cel...
-
「Excel VBA」 Webクエリ マク...
-
エクセルVBA リストボック...
-
”戻り値”が変化したときに、マ...
-
TODAY()で設定したセルの日付...
-
Excelで指定した日付から過去の...
-
Excel VBAで、 ヘッダーへのセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
値を返さないコード パス
-
VB.NETでコンボボックスの1行目...
-
Excel VBAのリストボックスの値...
-
C#の質問です
-
Vba TextBox1.ControlSourceに...
-
VB初心者。小数点以下の表示で...
-
PL/SQLでのTO_DATEの時間取得に...
-
変数名の取得
-
Excel VBA 複数選択したリスト...
-
マクロ 特定のセル値のみクリ...
-
Powershellのparamについて
-
フォーム間での変数の受け渡し
-
vb6のVSFlexGridで選択行、列の...
-
Excel vba ユーザーフォームテ...
-
ユーザーフォームのテキストボ...
-
シーケンサで最小値を保持する
-
ISDBNULLをスルーしてDBNULLが...
-
マクロで奇数と偶数の値を2か所...
-
【C++/CLI.NET】コンボボックス...
おすすめ情報