0

我必须将我创建的程序分成 1 个主函数和 3 个用户定义函数。我的工作说明如下:

// 从用户那里获取一个整数并返回 // 对该函数进行 3 次调用: // 从用户那里获取矩形的长度并将其返回给 main // 从用户那里获取矩形的宽度并返回它to main // 从用户处获取圆的半径并返回给 main int GetNum(void);

// 接受两个参数,矩形的长度和宽度,并返回区域 int CalculateAreaR(int length, int width);

// 接受一个参数,圆的半径并返回面积 double CalculateAreaC(int radius);

不过,我很困惑。我已经编写了函数,但无法正确地将它们调用到主函数。我知道这可能很简单,但是我看不到正确的东西。我写的代码如下:

#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

在 C 中,函数只能通过return语句返回单个值。

对于一个简单的程序,您可以让您的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_valueand scale_factor。我们没有要添加术语的常量或变量,所以我们只传入一个文字0.0值。所以对于这个例子,我们传递了所有必需的参数。然后函数返回一个值,我们在变量中收集该输出值adjusted

如果您确实按照我的建议尝试了全局变量,则需要删除在main()函数内声明变量的行。否则,您将声明两组变量,一组是内部的私有变量,main()另一组是全局变量。里面的那些main()会隐藏全局的;我们称之为“遮蔽”,就像“内部的局部变量main()遮蔽了全局变量”一样。

祝你好运。

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

你不能那样做,C 函数只能返回 1 个返回值。你基本上可以按照三种方法来解决这个问题:

  1. 将长度、宽度、半径存储在函数外部(即全局)的变量中
  2. 将要返回的元素打包在structure中
  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 个值。如果您需要超过 1 个返回值,则必须这样做:

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

wheremyFunction必须这样声明:

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

您可以读取/写入xyy通过 * 运算符。你可以像这样使用它:

*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

在主函数内部,您应该从输入函数接收输入:getNum(); 我通常喜欢将输入数据封装到单独的函数中,所以我特别知道这个函数只做一件事。在 main 中声明长度、宽度和半径的重点是在我需要时能够实际使用这些值。最简单的方法可以这样做:

功能:

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 回答