0

作成したプログラムを1つのメイン関数と3つのユーザー定義関数に分ける必要があります。私の仕事の説明は次のとおりです。

//ユーザーから整数を取得し、それを返します//この関数を3回呼び出します://ユーザーから長方形の長さを取得し、それをメインに返します//ユーザーから長方形の幅を取得し、それを返しますto main //ユーザーから円の半径を取得し、それをmainに返しますint GetNum(void);

//長方形の長さと幅の2つの引数を取り、面積を返しますintCalculateAreaR(int length、int width);

// 1つの引数、円の半径を取り、面積を返しますdoubleCalculateAreaC(intradius);

私はかなり立ち往生しています。関数を作成しましたが、メイン関数を正しく呼び出すことができません。簡単かもしれませんが、正しく見えないことがあります。私が書いたコードは次のとおりです。

#include <stdio.h>
#include <math.h>
#define PI 3.14

int GetNum(void)
{
    int length;
    int width;
    int radius;

    printf( " Please enter the length of a rectangle  \n");
    scanf(" %d", &length);
    printf(" Please enter the width of a rectangle \n");
    scanf(" %d", &width);
    printf(" Please enter the radius of a circle \n");
    scanf(" %d", &radius);

    return length, width, radius;
}

int CalculateAreaR(int length, int width)
{   
    return length*width;
}

double CalculateAreaC(int radius)
{
    return PI*radius*radius;
}

int main(void)
{   
    int length;
    int width;
    int radius;
    int areaR;
    double areaC;

    GetNum();


    printf("\nThe area of the rectangle is %d\n", CalculateAreaR);

    printf("\nThe length is %d, the width is, %d and thus the area of the rectangle is %d\n\n", length, width, areaR);

    areaC = CalculateAreaC();

    printf("\nThe area of the circle is %.3f\n", CalculateAreaC);

    printf("\n\n The radius of the circle is %d and the area of the circle is %.3f\n\n", radius, areaC);

    return 0;
}

誰か助けてくれませんか?とてもありがたいです。私は学ぶために最善を尽くしています。

4

4 に答える 4

2

returnCでは、関数はステートメントを介して単一の値のみを返すことができます。

GetNum()単純なプログラムの場合、関数にグローバル変数を変更させることができます。

// variables placed outside any function have global scope
int length;
int width;
int radius;

int GetNum(void)
{

    printf( " Please enter the length of a rectangle  \n");
    scanf(" %d", &length);
    printf(" Please enter the width of a rectangle \n");
    scanf(" %d", &width);
    printf(" Please enter the radius of a circle \n");
    scanf(" %d", &radius);

    return 0;
}

これは、グローバルスコープで変数を宣言し、関数でそれらを使用することを示しています。

複数の値を返すためのより高度な、しかし通常はより良い方法は、呼び出し元が変数へのポインターを渡すことと、ポインターを使用して変数を設定する関数です。@bash0rは彼/彼女の答えでこのテクニックを示しました。

ここで、関数を呼び出すには、関数名の後に常に括弧を付ける必要があります。常に常に常に。名前を括弧なしで入力すると、関数は呼び出されません。関数を参照しているだけです(関数のアドレスを参照しています)。関数を呼び出したい場所がいくつかありますが、括弧を入れていません。

一部の関数は引数を取ります。引数を取る関数を呼び出すときは、引数を渡す必要があります。これは、数値に係数を掛けてから項を追加する関数の例です。

float adjust_num(float x, float factor, float term)
{
    return x * factor + term;
}

// example of calling the above:

float adjusted;

adjusted = adjust_num(input_value, scale_factor, 0.0f);

input_valueこの例では、とを渡しscale_factorます。追加する項を含む定数または変数がないため、リテラル0.0値を渡すだけです。したがって、この例では、必要なすべての引数を渡します。次に、関数は値を返し、その出力値を変数に収集しますadjusted

私が提案したようにグローバル変数を試す場合は、main()関数内で変数を宣言している行を削除する必要があります。それ以外の場合は、2つの変数セットを宣言します。1つは内部でプライベートでmain()、もう1つはグローバル変数です。にあるものはmain()、グローバルなものを隠すようになります。main()「内部のローカル変数がグローバル変数をシャドウイングしている」のように、これを「シャドウイング」と呼びます。

幸運を。

于 2013-02-09T00:53:30.787 に答える
1
int GetNum(void)
{
    ...
    return length, width, radius;
}

それはできません。C関数は1つの戻り値しか返すことができません。この問題を解決するには、基本的に3つのアプローチに従うことができます。

  1. 関数の外部にある変数(つまり、グローバル)に長さ、幅、半径を格納します
  2. 返される要素をstructureにパッケージ化します
  3. その関数への長さ、幅、半径を含む変数へのポインターを渡します

グローバル変数の操作は、これら3つの中で最も簡単で、この場合はおそらく十分ですが、実際のプログラムでは、グローバル変数を避ける傾向があります。

printf("\nThe area of the rectangle is %d\n", CalculateAreaR);

関数を呼び出す必要がある別の関数(この場合はprintf)の呼び出し内で関数を呼び出すことができます。ここで行っているのは、printfへの関数へのポインターを与えることです。また、関数をパラメーターを取るものとして宣言する場合は、次のように、これらのパラメーターを関数に指定する必要があります。

printf("\nThe area of the rectangle is %d\n", CalculateAreaR(length,width));

同等の問題はここで見つけることができます:

areaC = CalculateAreaC();
printf("\nThe area of the circle is %.3f\n", CalculateAreaC);

上記と同じ注意(パラメータを指定する必要があります)が、ここではすでに結果をareaCに保存しているので、次のように言うことができます。

printf("\nThe area of the circle is %.3f\n", areaC);
于 2013-02-09T01:01:10.803 に答える
1

3つの値を同時に返すことはできません。複数の戻り値が必要な場合は、次のようにする必要があります。

int x = 0, y = 0, z = 0;
myFunction( &x, &y, &z );

myFunctionこのように宣言する必要がある場所:

void myFunction( int *x, int *y, int *z ) { }

からの読み取り/書き込みxyおよびy*演算子を使用できます。次のように使用できます。

*x = 10; // write 10 to the variable behind x.
*y = *x; // write to variable behind y and read from variable behind x.

int *xポインタ変数/パラメータと呼ばれます。値の代わりにアドレスを格納します。ポインタを使用すると、別の変数を「ポイント」して、別の場所(たとえば、呼び出す関数内)からその値を変更できます。ポインタのサイズはオペレーティングシステムによって異なります(32ビットシステムには4バイトのアドレスがあり、64ビットシステムには8バイトのアドレスがあります)。

于 2013-02-09T00:53:39.120 に答える
0

main関数内で、入力関数から入力を受け取る必要があります。getNum(); 私は通常、入力データを別々の関数にカプセル化するのが好きなので、この関数が1つのことしか実行しないことを明確に知っています。メイン内で長さ、幅、半径を宣言することの重要な点は、必要なときにこれらの値を実際に使用できるようにすることです。最も単純なアプローチは、次のように実行できます。

働き:

int get_length() 
{
    int length = 0;

    printf("Enter length of rectangle: ");
    scanf("%d", &length);

    return length; 
}

主な機能:

int main()
{
    int length = 0;

    length = get_length(); 

    // collect additional input...

    return 0;
}
于 2013-05-08T23:29:56.973 に答える