我必须将我创建的程序分为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;
}
任何人都可以帮助我吗?我会非常感激的。我尽力学习。
答案 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_value
和scale_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 ) { }
您可以通过*运算符读取/写入x
,y
和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字节地址)。
答案 2 :(得分:1)
int GetNum(void)
{
...
return length, width, radius;
}
你不能这样做,C函数只能返回1个返回值。您基本上可以采用三种方法来解决此问题:
struct
使用全局变量是这三者中最容易的,在这种情况下可能就足够了,但在实际程序中,我们倾向于避免使用全局变量。
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;
}