首页 > 解决方案 > 在C编程中的数组元素中分别显示出现在偶数和奇数下标位置的元素

问题描述

问题是:编写一个读取整数数组的程序。程序应分别显示出现在偶数和奇数下标位置的元素。这是书中的程序,但我不明白为什么这个程序会这样输出。而不是在奇数位置打印奇数,在偶数位置打印偶数,这里的输出完全不同。'''

#include <stdio.h>

int main()
{
    int even,odd,i,n,a[50];
    printf("Enter the number of terms: ");
    scanf("%d",&n); //input
    for(i=0;i<n;i++)
    {
        printf("Enter number %d:",i+1);
        scanf("%d",&a[i]);
    }
    printf("\nOdd\tEven\n");
    for(i=0;i<n;i++)
     {
       /*if(a[i]%2!=0) */  
        if(i%2!=0) //array index starts from 0.
        printf("\n%d\t",a[i]);
         else 
           printf("%d\t",a[i]);
        }
     return 0;
}

预期的答案

在此处输入图像描述

标签: c

解决方案


您希望按列打印偶数和奇数数组下标值,其中奇数下标值应在偶数下标值之前打印。这意味着,i + 1第 th下标值应该在i第 th下标值之前打印(前提是ii + 1下标都有效,即在数组大小内)。几点:

  • 输出的行数将是half数组的大小,如果数组的大小为half + 1偶数,则为数组的大小,如果数组的大小为奇数。
  • 需要考虑的情况是,如果数组的大小为奇数,则输出的最后一行应仅打印偶数值,奇数列应留空。

执行:

#include <stdio.h>

#define ARR_SZ 50

int main(void) {
    int n, a[ARR_SZ];

    printf("Enter the number of terms: ");
    scanf("%d",&n);

    // Add input validation code.
    // Below code based on assumption that 
    // input is valid i.e. 0 <= n <= ARR_SZ.

    for(int i = 0; i < n; ++i) {
        printf("Enter number %d:", i + 1);
        scanf("%d", &a[i]);
    }

    int count = n % 2 ? n/2 + 1 : n/2;
    int i = 0;

    printf("\nOdd\tEven\n");
    while (count--) {
        if (i + 1 < n) {
            printf ("%d", a[i + 1]);
        }
        printf ("\t%d\n", a[i]);
        i = i + 2;
    }

    return 0;
}

输出:

# ./a.out
Enter the number of terms: 6
Enter number 1:2
Enter number 2:3
Enter number 3:4
Enter number 4:5
Enter number 5:6
Enter number 6:7

Odd Even
3   2
5   4
7   6

# ./a.out
Enter the number of terms: 1
Enter number 1:5

Odd Even
    5

# ./a.out
Enter the number of terms: 3
Enter number 1:7
Enter number 2:6 
Enter number 3:5

Odd Even
6   7
    5

推荐阅读