C编程初学者的家庭作业帮助

时间:2013-02-09 00:46:32

标签: c function user-defined-functions

我必须将我创建的程序分为1个主要功能和3个用户定义的功能。 我的工作说明如下:

  

//从用户获取一个整数并返回//调用3次   这个函数://从用户那里获取矩形的长度   将其返回到main //从用户获取矩形的宽度   将其返回主要//从用户获取圆的半径和   将它返回给main int GetNum(void);

     

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

     

//接受一个参数,即圆的半径并返回该区域   double CalculateAreaC(int radius);

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

#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 个答案:

答案 0 :(得分: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_valuescale_factor。我们没有要添加的术语的常量或变量,因此我们只传入一个文字0.0值。所以对于这个例子,我们传递了所有必需的参数。然后函数返回一个值,我们在变量adjusted中收集该输出值。

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

祝你好运。

答案 1 :(得分:1)

您不能同时返回3个值。如果您需要超过1个返回值,您必须这样做:

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

必须像这样声明myFunction

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字节地址)。

答案 2 :(得分:1)

int GetNum(void)
{
    ...
    return length, width, radius;
}

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

  1. 存储函数外部变量的长度,宽度,半径(即全局)
  2. 将要返回的元素打包在struct
  3. 将指向包含长度,宽度,半径的变量的指针传递给该函数
  4. 使用全局变量是这三者中最容易的,在这种情况下可能就足够了,但在实际程序中,我们倾向于避免使用全局变量。

    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);
    

答案 3 :(得分:0)

在main函数内部,您应该从输入函数接收输入: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;
}