c - 在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;
}
解决方案
您希望按列打印偶数和奇数数组下标值,其中奇数下标值应在偶数下标值之前打印。这意味着,i + 1
第 th下标值应该在i
第 th下标值之前打印(前提是i
和i + 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
推荐阅读
- javascript - 无法使用日历读取未定义的属性“拆分”
- python - 是否可以遍历函数中的所有 if 语句?
- angular - node_modules/@types/three/three-core.d.ts(7800,18) 中的错误:错误 TS2304:找不到名称“VRDisplay”
- javascript - 如何在 javascript 中翻译 3D 对象
- django - 获取通过网络传输的 HTTP 请求(Django)
- mongodb - 如何在 MongoDB 中查询嵌套文档?
- dependency-injection - 如何在不访问类 impl 代码的情况下强制注入特定实例?
- firebase - 反应导航“导航”功能在firebase异步登录功能中不起作用
- c# - 使用代理与 HttpWebRequest if/else
- ios - 如何在swift中使用嵌套的json和结构