【发布时间】:2020-12-26 23:20:00
【问题描述】:
我的任务是:如果我们查看数组中的任意两个相邻值,如果右侧的值是左侧的两倍,则应将它们的平均值插入到由旧数组组成的新数组之间并且应该打印新元素。我在平均后移动其他元素有问题。并且不允许使用特殊函数或库。我是初学者,希望您能提供帮助。
#include <stdio.h>
int main() {
int n, i, j;
double a[100], average;
printf("Enter the number of elements: ");
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%lf", &a[i]);
}
for (i = 0; i < n; i++) {
if ((a[i + 1] / a[i]) == 2) {
for (i = j = 0; i < n; ++i)
b[j++] = a[i];
if (a[i + 1] / a[i] == 2)
average = (a[i + 1] + a[i]) / 2;
b[j++] =average;
}
}
for (i = 0; i < j; ++i) {
printf("%lf\n", b[i]);
}
}
【问题讨论】:
-
总是检查scanf的返回值,出错则中止。
-
您可能需要在 printf 格式字符串中添加一个 \n,以分隔打印的数字。
-
您的数组
a可以容纳100 个元素。如果n > 100,您应该中止。 -
不允许使用字符串。每次插入元素时我都应该增加数组的大小,我只是不知道如何将其他元素向前移动。
-
你可以考虑倒过来做。创建一个足够大的输出数组并从输入数组的末尾而不是开头填充它,以防止必须进行任何插入。最后,只需反向打印输出数组。