鱼C论坛

 找回密码
 立即注册
查看: 1052|回复: 3

[已解决]实现数组排序反转,但是只输出了前半部分,还有要用指针知识。

[复制链接]
发表于 2023-5-22 20:57:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

#include <stdio.h>
int main()
{
        int i,j;
        int a[10]={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;
}
又得麻烦大佬了
最佳答案
2023-5-22 21:00:56
这段代码试图把数组的元素反转,但是并没有正确地做到这一点。问题在于你的两个循环(i和j)同时在数组两端开始,并向中间移动。这会导致你反转的前半部分被后半部分覆盖。所以,你看到的输出只是原始数组的前半部分。

解决方法是仅使用一个索引,从头开始,并只反转到数组的中间。这样,你可以将数组的每个元素与其对应的反向元素交换,而不会覆盖已经反转的元素。以下是修改后的代码:
#include <stdio.h>

int main() {
    int i;
    int a[10] = {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个元素),这样我们就可以交换对应的元素,从而反转整个数组。

这个程序将输出正确反转的数组。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-22 21:00:56 | 显示全部楼层    本楼为最佳答案   
这段代码试图把数组的元素反转,但是并没有正确地做到这一点。问题在于你的两个循环(i和j)同时在数组两端开始,并向中间移动。这会导致你反转的前半部分被后半部分覆盖。所以,你看到的输出只是原始数组的前半部分。

解决方法是仅使用一个索引,从头开始,并只反转到数组的中间。这样,你可以将数组的每个元素与其对应的反向元素交换,而不会覆盖已经反转的元素。以下是修改后的代码:
#include <stdio.h>

int main() {
    int i;
    int a[10] = {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个元素),这样我们就可以交换对应的元素,从而反转整个数组。

这个程序将输出正确反转的数组。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-22 21:07:26 | 显示全部楼层
isdkz 发表于 2023-5-22 21:00
这段代码试图把数组的元素反转,但是并没有正确地做到这一点。问题在于你的两个循环(i和j)同时在数组两端 ...

真的谢谢大佬给你跪下了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-22 21:10:03 | 显示全部楼层
天真的小白 发表于 2023-5-22 21:07
真的谢谢大佬给你跪下了

不客气,如果对你有帮助的话给个最佳支持一下呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 15:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表