这是我的导师给出的一项活动。
创建一个接受用户数字输入的程序。如果用户输入偶数,请将其存储到数组中以获得偶数。如果用户输入奇数,则将其存储到另一个奇数的数组中。如果用户已输入10个数字,则输入终止。显示每个数组及其元素的大小。
示例:的
输入:5, 6, 12, 10, 0, 3, 4, 100, -1, 7
偶数(6): 6 12 10 0 4 100
奇数(4): 5 3 -1 7
这是我提出的代码。
#include <stdio.h>
int sort(int);
int main(){
int input, count;
for(count=0;count!=10;count++){
printf("Enter 10 digits: ");
scanf("%d", &input);
sort(input);
}
printf("%d", input);
return 0;
}
int sort(int inp){
int odd[10];
int even[10];
if(inp%2==0){
odd[]=inp;
}
else
even[]=inp;
return 0;
}
请帮我解释如何将数字存储到两个单独的数组中。任何提示将不胜感激。
答案 0 :(得分:0)
除了Sourav的评论表明你不应该int[]
数组是sort
的本地数组之外,这种语法对于在C中分配数组是不正确的:
odd[]=inp;
在我的编译器上,它会生成以下错误:
24:9: error: expected expression
odd[]=inp;
要存储到odd
,您需要指明您要存储的索引,例如:
odd[1]=inp;
这也意味着你需要跟踪你为每个阵列写的最新索引!
答案 1 :(得分:0)
您需要告诉编译器您要存储数据的数组的索引。在sort
:
if(inp%2==0){
odd[]=inp;
}
else
even[]=inp;
return 0;
}
应该看起来像:
if(inp%2==0){
odd[endofoddindex]=inp;
}
else
even[endofevenindex]=inp;
return 0;
}
也就是说,你不会在数组中使用局部变量,因为它们在每次调用时都会被释放。最好的办法是在main
中声明数组并将其传入。
答案 2 :(得分:0)
您需要将数组作为全局变量或将它们传递给sort函数。它们目前在哪里,每次调用sort函数时都会重新创建它们,并且程序的其余部分无法访问它们。 您还需要跟踪每个阵列中的最大整数数和当前数。
您的排序测试将是这样的:
if( inp % 2 == 0)
{
//TODO check that currentEvenCount < maxEvenCount
even[ currentEvenCount ] = inp;
currentEvenCount++
}
else
{
//TODO check that currentOddCount < maxOddCount
odd[ currentOddCount ] = inp;
currentOddCount++;
}
要将数组声明为全局变量,只需将声明移到上面引用的任何函数之外
int even[10];
int odd[10];
int main() ...
要将它们作为参数传递给sort函数,您可以声明如下排序:
sort( int inp, int even[], int maxEvenCount, int* currentEvenCount, int odd[]. int maxOddCount, int* currentOddCount)
{
...
if( inp % 2 == 0)
{
//TODO check that currentEvenCount < maxEvenCount
even[ *currentEvenCount ] = inp;
(*currentEvenCount)++
}
}
currentEventCount前面的*取消引用指针并获取/设置指向的实际值。
然后你会这样调用sort:
int main()
{
int evenArray[10];
int oddArray[10];
int currentEvenCount = 0;
int currentOddCount = 0;
...
sort( input, evenArray, 10, ¤tEvenCount, oddArray, 10, ¤tOddCount);
}
答案 3 :(得分:0)
希望这个程序能解决你的问题。这是工作代码。
#include <stdio.h>
int sort(int[]);
int main(){
int input[10], count;
printf("Enter 10 digits: ");
for(count=0;count<10;count++){
scanf("%d", &input[count]);
}
sort(input);
return 0;
}
int sort(int inp[]){
int odd[10];
int even[10];
int oddCount=0, evenCount=0;
int i;
for(i=0; i<10;i++)
{
if(inp[i]%2==0){
even[evenCount]=inp[i];
evenCount++;
}
else
{
odd[oddCount]=inp[i];
oddCount++;
}
}
printf("ODD COUNT is %d \n", oddCount);
for(i=0; i<oddCount;i++)
{
printf("ODD VALUE %d \n", odd[i]);
}
printf("EVEN COUNT is %d \n", evenCount);
for(i=0; i<evenCount;i++)
{
printf("EVEN VALUE %d \n", even[i]);
}
return 0;
}
答案 4 :(得分:0)
将数组定义为函数排序的局部变量没有任何意义,因为每次调用函数时,都会重新创建数组。
该程序可以采用以下方式
#include <stdio.h>
#define N 10
enum Type { Even, Odd };
enum Type sort( int x )
{
return x % 2 == 0 ? Even : Odd;
}
int main( void )
{
int odd[N];
int even[N];
int odd_count = 0;
int even_count = 0;
int i;
printf( "Enter %d numbers: ", N );
for( i = 0; i < N; i++ )
{
int num;
scanf( "%d", &num );
switch ( sort( num ) )
{
case Even:
even[even_count++] = num;
break;
case Odd:
odd[odd_count++] = num;
break;
}
}
printf( "Even numbers (%d):", even_count );
for ( i = 0; i < even_count; i++ ) printf( " %d", even[i] );
printf( "\n" );
printf( "Odd numbers (%d):", odd_count );
for ( i = 0; i < odd_count; i++ ) printf( " %d", odd[i] );
printf( "\n" );
return 0;
}
如果要输入
5 6 12 10 0 3 4 100 -1 7
然后输出
Even numbers (6): 6 12 10 0 4 100
Odd numbers (4): 5 3 -1 7
只需复制,粘贴和调查该程序。:)
答案 5 :(得分:0)
您的even
和odd
阵列都是本地的。这意味着只要函数存在它们就存在。因此,您无法检索已存储的数据(您也无法正确存储)。
所以你需要main
中的两个数组以及另外两个变量来用作下面程序中数组(i
和j
)的索引。修改后的程序如下:
#include <stdio.h>
int sort(int);
int main(){
int input, count,i=0,j=0; //i and j to be used as array indices
int odd[10];
int even[10]; //arrays in main
for(count=0;count!=10;count++){
printf("Enter 10 digits: ");
scanf("%d", &input);
if(sort(input)) //if odd number was found
odd[i++]=input;
else //even number found
even[j++]=input;
}
printf("%d", input);
//print even and odd arrays here
return 0;
}
int sort(int inp){
if(inp%2==0)
return 0; //if number is even,return 0
return 1; //else return 1
}
答案 6 :(得分:0)
检查以下代码。它是自我解释的。
#include <stdio.h>
#include <stdlib.h>
#define NUM 10
int main()
{
int input, i;
int oddcounter = 0, evencounter =0;
int oddarr[NUM];
int evenarr[NUM];
printf("Enter 10 integers\n");
for (i = 0; i < NUM; i++)
{
if ( scanf("%d", &input) == 1 )
{
if ((input % 2) == 0)
{
evenarr[evencounter++] = input;
}
else
{
oddarr[oddcounter++] = input;
}
}
}
printf("Number of elem in oddarray : %d, evenarray : %d\n\n", oddcounter, evencounter);
printf("Odd elements are :");
for (i = 0; i < oddcounter ; i++) printf("%d\t", oddarr[i]);
printf("\n");
printf("Even elements are :");
for (i = 0; i < evencounter; i++) printf("%d\t", evenarr[i]);
printf("\n");
return 0;
}
答案 7 :(得分:-2)
您的变量input
只是int
,它不是数组。你需要两个数组:
int even[10], odd[10];
然后,您需要跟踪目前已读过的数字的数量,并且每个数字都要检查存储它的数组。
我没有看到需要进行排序,所以不确定为什么你有一个名为sort()
的函数。
应该是这样的:
int even[10], odd[10];
int oddindex = 0, evenindex = 0;
while(scanf(" %d", &x) == 1)
{
if(x % 2 == 0)
even[evenindex++] = x;
else
odd[oddindex++] = x;
if((evenindex + oddindex) >= 10)
break;
}
/* Loop here to print numbers. */
答案 8 :(得分:-2)
适合作业问题的答案:
int main()
{
int i,c,o[10],e[10];int oc=0;int ec=0;int*pc;for(c=0;c<10;c++){scanf("%d",&i);pc=(i&1)?&o[oc++]:&e[ec++];*pc=i;}
// Now print out the values as requested in oc, o, ec and e.
}