【发布时间】:2021-02-17 18:26:51
【问题描述】:
我最近才开始做 C,一直被这个问题困扰。
偶数数组中有一些整数。编写一个 C 程序重新排列数组,使左半部分按升序排列,右半部分按降序排列。打印左半边和右半边对应元素从最小值到最大值的距离(正差)。
注意:数组必须通过指针表示。必须为必要的重新排列定义一个函数 sort()。
示例输入: 输入元素数量:6
输入元素:2 7 4 9 10 3
输出: 2 4 7 10 9 3
1 5 3
for (j=0;j<((num/2)-1);j++)
{
for (i=0;i<((num/2)-1);i++)
{
if (arr[i]>arr[i+1])
{
temp=arr[i]; /* swapping elements (arranging left half in ascending order) */
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
for (j=1;j<(num/2);j++)
{
for (i=(num/2);i<num;i++)
{
if (arr[i]<arr[i+1])
{
temp=arr[i]; /* arranging right half in descending order */
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
for (i=0;i<num;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
for (i=0;i<(num/2);i++)
{
if (arr[i]>arr[((num-1)-i)])
{
diff=arr[i]-arr[(num-1)-i];
}
else
{
diff=arr[(num-1)-i]-arr[i];
}
printf("%d ",diff);
}
}
这是我想出的代码,它可以工作,但是我需要用一个指针表示的数组来编写它,并且我需要将它包含在一个函数中。
请帮帮我
【问题讨论】:
-
不清楚“表示为指针”是什么意思。如果他们的意思是使用指针表示法而不是数组下标表示法,请将
a[i]的所有实例替换为*(a + (i)) -
数组和指针有着密切的关系。如果您的代码在
arr被声明为数组时有效,那么如果arr是指向数组第一个元素的指针,则它的工作方式完全相同。 -
但是数组不能用指针“表示”。您可以将指针 指向 数组元素或整个数组,但此类指针不能很好地表征为“表示”指向的数据。
-
@Mathew Thomas 这个输出 1 5 3 是什么意思?
-
好的,所以输出基本上是排序数组的最左边元素和最右边元素之间的正差。因此,如果我的输入是 6 3 4 1 2 9,则排序后的数组将为 3 4 6 9 2 1,最终输出为 (3-1) (4-2) (9-6)