实现数组排序反转,但是只输出了前半部分,还有要用指针知识。
#include <stdio.h>
int main()
{
int i,j;
int a={11,22,33,44,56,67,78,98,93,100};
int *p=a;
for(i=0,j=9;i<10;i++,j--)
{
*(p+j)=*(a+i);
}
for(i=0;i<10;i++)
{
printf("%d\n",*(p+i));
}
for(i=0;i<10;i++)
{
printf("%d",*(p+i));
}
return 0;
}
{:5_107:} 又得麻烦大佬了 这段代码试图把数组的元素反转,但是并没有正确地做到这一点。问题在于你的两个循环(i和j)同时在数组两端开始,并向中间移动。这会导致你反转的前半部分被后半部分覆盖。所以,你看到的输出只是原始数组的前半部分。
解决方法是仅使用一个索引,从头开始,并只反转到数组的中间。这样,你可以将数组的每个元素与其对应的反向元素交换,而不会覆盖已经反转的元素。以下是修改后的代码:
#include <stdio.h>
int main() {
int i;
int a = {11, 22, 33, 44, 56, 67, 78, 98, 93, 100};
int temp;
int *p = a;
for(i = 0; i < 5; i++) {
temp = *(p+i);
*(p+i) = *(p+9-i);
*(p+9-i) = temp;
}
for(i = 0; i < 10; i++) {
printf("%d\n", *(p+i));
}
for(i = 0; i < 10; i++) {
printf("%d ", *(p+i));
}
return 0;
}
在这个程序中,我创建了一个临时变量 temp 来帮助在数组中交换元素。这个循环仅运行到数组的中点(在这种情况下是索引5,因为数组有10个元素),这样我们就可以交换对应的元素,从而反转整个数组。
这个程序将输出正确反转的数组。 isdkz 发表于 2023-5-22 21:00
这段代码试图把数组的元素反转,但是并没有正确地做到这一点。问题在于你的两个循环(i和j)同时在数组两端 ...
真的谢谢大佬给你跪下了{:5_95:} 天真的小白 发表于 2023-5-22 21:07
真的谢谢大佬给你跪下了
不客气,如果对你有帮助的话给个最佳支持一下呗{:5_92:}
页:
[1]