真偽値を返却する関数について

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

真偽値を返却する関数について

#1

投稿記事 by Makoto » 8年前

学校の課題が分かりません。下記が問題文です。
次の返却値と引数の型をもつisOdd関数を定義し,aが奇数なら0以外(たとえば1)を,aが偶数なら0をそれぞれ返却する.返却値は,教整数値の真偽値である.
int isOdd(int a);
/* aが偶数か奇数かを判別する */
main関数では,scanf関数を使って整数xを入力し,isOdd関数を呼んでからxが奇数か偶数かを出力する.
isOdd関数にはprintf, scanfを書いてはいけない.大域変数を使ってはいけない.

実行例(下線部分がキーボード入力,%はコマンドプロンプト)
% ./ex41
整数を入力
3
3 は奇数です
% ./ex41
整数を入力
0
0 は偶数です
% ./ex41
整数を入力
-10
-10 は偶数です
%

以下は私が書いたソースコードですが、どのように間違っているのか見当がつきません。お願いします。

コード:

#include<stdio.h>

void is0dd(int);

int main(void)
{
            int x;

            printf("整数を入力");
            scanf("%d", &x);

}

int is0dd(void);
{
           if(x%2 == 0){
                      printf("偶数");
                            }else{
                      printf("奇数");
                                   }
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 真偽値を返却する関数について

#2

投稿記事 by みけCAT » 8年前

  • includeの前の#が全角になっている
  • isOdd(アイ・エス・オー・ディー・ディー)ではなく、is0dd(アイ・エス・ゼロ・ディー・ディー)関数になっている
  • 14行目に余計なセミコロンがあるので、is0dd関数の定義ができていない
  • is0dd関数のプロトタイプ宣言と定義になるべきもので戻り値の型が違っている
  • is0dd関数がmain関数から使われていない
  • 「isOdd関数にはprintf, scanfを書いてはいけない」という条件があるのに、is0dd関数の定義になるべきものの中にprintf関数がある
  • is0dd関数が戻り値を返していない
  • インデントが乱れている
という間違いがありますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 真偽値を返却する関数について

#3

投稿記事 by みけCAT » 8年前

Makoto さんが書きました:返却値は,教整数値の真偽値である.
「教整数値」とは何ですか?
オフトピック
Makoto さんが書きました:main関数では,scanf関数を使って整数xを入力し,isOdd関数を呼んでからxが奇数か偶数かを出力する.
isOdd関数を呼びさえすれば、その結果を利用する必要は無いのですね。 (名推理)
まあ、せっかく呼ぶのだから結果を使ったほうが良さそうですが。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 真偽値を返却する関数について

#4

投稿記事 by みけCAT » 8年前

みけCAT さんが書きました:is0dd関数のプロトタイプ宣言と定義になるべきもので戻り値の型が違っている
よく見たら引数も違いますし、どっちの関数も問題文に合っていないですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Makoto

Re: 真偽値を返却する関数について

#5

投稿記事 by Makoto » 8年前

みけCATさん回答ありがとうございます。「教整数値」についてですが、問題文の不必要な部分の消し忘れが残った物なので「整数値」です。また、書き直しましたが、main関数上でどのようにprintf()関数を使用して偶数と奇数の場合分けの結果を出力すればよいのか分かりませんでした。

コード:

#include<stdio.h>
 
int isOdd(int x);
 
int main(void)
{
            int n;
 
            printf("整数を入力");
            scanf("%d", &x);
            n = isOdd(x);
}
 
int isOdd(int x)
{
           if(x%2 == 0){
                      return 0;
                            }else{
                      return 1;
                                   }
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 真偽値を返却する関数について

#6

投稿記事 by みけCAT » 8年前

Makoto さんが書きました:main関数上でどのようにprintf()関数を使用して偶数と奇数の場合分けの結果を出力すればよいのか分かりませんでした。
普通に出力すればよいです。
また、xも宣言しなければいけません。
実装例

コード:

#include<stdio.h>

int isOdd(int x);

int main(void)
{
            int x, n;

            printf("整数を入力");
            scanf("%d", &x);
            n = isOdd(x);
            printf("%d は%sです\n", x, n ? "奇数" : "偶数");
}

int isOdd(int x)
{
            if(x%2 == 0){
                        return 0;
            }else{
                        return 1;
            }
}
%d → 対応する位置にある整数(int型)を出力する。
%s → 対応する位置にある文字列(char*型 : 文字列の先頭の文字へのポインタ)を出力する。
X ? Y : Z → まずXを評価する。その結果が0以外(真)ならYを、0(偽)ならZを評価し、その結果になる。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Makoto

Re: 真偽値を返却する関数について

#7

投稿記事 by Makoto » 8年前

xを宣言し、printf()関数の部分を追加すると解決しました!みけCATさん、ありがとうございました!!

返信

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