我正在编写一个程序来打印数组中的数字,然后使用函数将数组拆分为奇数和偶数。我已完成此部分,然后我必须将每个奇数和偶数数组发送到另一个函数,该函数计算每个数组中的最大数字并返回计算值。似乎主要功能中缺少一些东西。
#include <stdio.h>
void split();
int largest(int arr[]);
int main() {
int a[11] = {2, 4, 5, 6, 7, 1, 8, 3, 9, 14, 17};
printf("the values of the array is :\n");
for (int i = 0; i < 11; i++) {
printf("%d ", a[i]);
}
split();
int z = largest(odd);
printf("the max value in odd array is :%d\n", z);
}
void split() {
int i, evenNumber = 0, oddNumber = 0;
int even[11], odd[11];
int a[11] = {2, 4, 5, 6, 7, 1, 8, 3, 9, 14, 17};
for (i = 0; i < 11; i++) {
if (a[i] % 2 == 0) {
even[evenNumber++] = a[i];
} else {
odd[oddNumber++] = a[i];
}
}
printf("\nEven :\n");
for (i = 0; i < evenNumber; i++) {
printf("%d ", even[i]);
}
printf("\nOdd :\n");
for (i = 0; i < oddNumber; i++) {
printf("%d ", odd[i]);
}
}
int largest(int odd[]) {
int max;
max = odd[0];
for (int i = 0; i < 11; i++) {
if (max < odd[i]) {
max = odd[i];
}
}
return max;
}
答案 0 :(得分:1)
你实际上可以在其他函数中使用数组。但是,您遇到的问题是范围。
在print("Pet's age is: " + str (item.get_pet_age()))
函数
main
行int main ()
{
int a[11] = {2,4,5,6,7,1,8,3,9,14,17};
printf("the values of the array is :\n");
for (int i = 0 ; i<11 ; i++){
printf("%d ",a[i]);
}
split();
int z = largest(odd);
printf("the max value in odd array is :%d\n",z);
}
使用变量int z = largest(odd);
。但是,odd
中永远不会定义odd
。相反,main
在odd
范围内定义。
您似乎认为,因为您在主电话中呼叫split()
,因此在您致电split()
后,您将能够在odd
中访问main
。 事实并非如此。即使在split()
中定义odd
,split()
中也只定义了 。因此即使split()
调用main
,split()
仍未定义odd
。
这是因为变量仅限于定义它的范围。如果在函数中定义了变量(即函数是其作用域),则只能在该函数内访问它,即使该函数在其他地方使用。如果你想在定义它的函数之外使用一个变量,你必须以某种方式&#34; return&#34;来自函数的变量。
我强烈建议您阅读有关&#34;范围&#34;在C中工作,例如this tutorial
您有两个主要选择:
main
以某种方式返回split()
。odd
的内容移至split()
。即不要让main
成为一个单独的职能部门。除非您有将split()
作为单独功能保留的具体原因,否则我强烈建议您将其内容移至split()
。否则,您必须传递多个参数作为参考,以使main
按您希望的方式工作。
如果我们将split()
的内容移动到split()
(并进行必要的调整以删除重复的变量),这就是新代码的样子:
main
无论何时将数组传递给函数,都应该始终传递数组的长度。例如:
#include <stdio.h>
int largest(int arr[]);
int main() {
int a[11] = { 2, 4, 5, 6, 7, 1, 8, 3, 9, 14, 17 };
printf("the values of the array is :\n");
for (int i = 0; i < 11; i++) {
printf("%d ", a[i]);
}
int evenNumber = 0, oddNumber = 0;
int even[11], odd[11];
for (int i = 0; i < 11; i++) {
if (a[i] % 2 == 0) {
even[evenNumber++] = a[i];
} else {
odd[oddNumber++] = a[i];
}
}
printf("\nEven :\n");
for (int i = 0; i < evenNumber; i++) {
printf("%d ", even[i]);
}
printf("\nOdd :\n");
for (int i = 0; i < oddNumber; i++) {
printf("%d ", odd[i]);
}
int z = largest(odd);
printf("the max value in odd array is :%d\n", z);
}
int largest(int odd[]) {
int max = odd[0];
for (int i = 0; i < 11; i++) {
if (max < odd[i]) {
max = odd[i];
}
}
return max;
}
然后你会像这样打电话给int largest(int odd[], int len) {
int max = odd[0];
for (int i = 0; i < len; i++) {
if (max < odd[i]) {
max = odd[i];
}
}
return max;
}
:
largest(int[], int)