🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

1055閲覧

[初心者]関数の処理について困ってます。

SmaSTATION

総合スコア29

C

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/03/12 00:53

・int 型引数を 1 つ受け取り、それが正であれば true を、それ以外は false を返
す関数 ispositive() を作れ。(true は 1 を、false は 0 を返せばよい(C では、0 が false で、0 以外は全て
true と決まっている)

上記を満たす関数の処理について困ってます。以下、正解コードです。

#include <stdio.h> int ispositive(int n){ return n > 0; } int main(void){ int n = 2; if(ispositive(n)){ printf("%d is positive.\n", n); }else{ printf("%d is NOT positive.\n", n); } n = -1; if(ispositive(n)){ printf("%d is positive.\n", n); }else{ printf("%d is NOT positive.\n", n); } n = 0; if(ispositive(n)){ printf("%d is positive.\n", n); }else{ printf("%d is NOT positive.\n", n); } return 0; }

関数節の「return n>0」の処理でなぜ関数が出来上がりなのかがわからず困ってます。
自分はif文を使いnについて条件分岐をするのかなと思っており、あまりの違いに理解できていません。
もっと言うと、()内の言ってることも分かってません...
宜しくお願いいたします。

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

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

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

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

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

guest

回答2

0

すでに回答が出ていますが、補足的な説明として。

おそらく、質問者が想像していたコードは次のようなものでしょう。

C

1int ispositive(int n) { 2 if (n > 0) { 3 return 1; 4 } 5 return 0; 6}

あるいは、return 0;else {}の中に書くコードを想像していたかもしれません。条件n >0が成立するとreturn 1;で関数から抜けてしまうので、両者は同じ処理になります。

このコードは間違いではありませんが、もっと短く書くことができます。

C言語では、条件式n > 0の評価結果は、「変数nの値が0より大きいときは1」、「変数nの値が0以下のときは0」になります。これって、関数is_positiveが返すべき値そのものですよね?

ということは、いちいちif文で場合分けしてreturn 1;return 0;を書く代わりに、return n > 0;と書けば、「変数nの値が0より大きいときは1」、「変数nの値が0以下のときは0」がreturnで呼び出し元に返されます。

投稿2021/03/12 01:32

Daregada

総合スコア11990

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

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

Daregada

2021/03/12 01:33

って書いている間にコメントで補足されて終わってたわ。
SmaSTATION

2021/03/21 04:40

ご回答ありがとうございます。さらに理解が深まる形になりました! ありがとうございます。
guest

0

ベストアンサー

関数節の「return n>0」の処理でなぜ関数が出来上がりなのかがわからず困ってます。

>という比較演算子自体が、適切な値を返すので、そのまま値を返せばOKです。

投稿2021/03/12 00:59

maisumakun

総合スコア145975

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

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

maisumakun

2021/03/12 01:00

> もっと言うと、()内の言ってることも分かってません... C言語では、if()やwhile()のカッコ内に書かれる条件も、「0か0でないか」だけで判定されます。
SmaSTATION

2021/03/12 01:15

「>という比較演算子自体が、適切な値を返すので、そのまま値を返せばOKです。」 解答、ありがとうございます。 「>」の部分がもう関数の役目を果たしてくれているということでしょうか。
maisumakun

2021/03/12 01:18

>の返り値も、「0」あるいは「0以外」です。必要とする条件を満たします。
SmaSTATION

2021/03/12 01:27

nが正の数であれば、if文の()内にあてはまり、そうでない場合はelseってことですね! 納得できました、ありがとうございます。<(_ _)>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問