鱼C论坛

 找回密码
 立即注册
查看: 798|回复: 6

[已解决]交换数

[复制链接]
发表于 2020-3-23 14:03:03 | 显示全部楼层 |阅读模式

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

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

x
/*
2020年3月23日12:50:36
目的: 做题
题目: 输入10个数存放于数组num中,然后将num[0]于num[9]交换num[1]与num[8]交换.....输出交换后的值
问题分析:

用scanf函数 输入,并存放在数组中 
再交换 : 
int i,j=9,t=0;
for (i=0;i<10;i++)
{
        num[t]=num[j];
        num[i]=num[t];
        num[j]=num[i];
        j--;
}
*/
#include <stdio.h>

int main (void)
{
        int num[9];//定义数组含十个元素 
        int i,j=9,t=0;//控制循环 
        printf("请输入十个数:");
        
        for (i=0;i<10;i++)
        {
                scanf("%d",&num[i]);
        }
        for(i=0;i<10;i++)
        {
                num[t]=num[j];
                num[j]=num[i];
                num[i]=num[t];
                --j;
        }
        
        printf("交换后的数:"); 
        for(i=0;i<10;i++)
        {
                printf("%d  ",num[i]); 
        }
        return 0;
}

        for(i=0;i<10;i++)
        {
                num[t]=num[j];
                num[j]=num[i];
                num[i]=num[t];
                --j;
        }

应该是这里写错了。

输入10个数存放于数组num中,然后将num[0]于num[9]交换num[1]与num[8]交换.....输出交换后的值
最佳答案
2020-3-23 14:15:34
数组内数据交换需要用一个其他变量作为中间量,你不能直接在数组的连个数之间来回复制,这样原数据就被覆盖掉了。例如:num[0]=12,num[9]=44,你的程序执行完第一句num[t]=num[j]之后,num[0]和num[9]都编程44了,原来的12消失了。

还有一点,首尾交换,循环不需要0~9,你这样的话,num[0]和num[9]交换,到后面在进行num[9]和num[0]交换,会交换两遍,又换回来了。
#include <stdio.h>
int main (void)
{
        int num[9];//定义数组含十个元素 
        int i,j=9,t=0;//控制循环 
        printf("请输入十个数:");
        
        for (i=0;i<10;i++)
        {
                scanf("%d",&num[i]);
        }
        for(i=0;i<10/2;i++)
        {
                t=num[j];
                num[j]=num[i];
                num[i]=t;
                --j;
        }
        
        printf("交换后的数:"); 
        for(i=0;i<10;i++)
        {
                printf("%d  ",num[i]); 
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-23 14:15:34 | 显示全部楼层    本楼为最佳答案   
数组内数据交换需要用一个其他变量作为中间量,你不能直接在数组的连个数之间来回复制,这样原数据就被覆盖掉了。例如:num[0]=12,num[9]=44,你的程序执行完第一句num[t]=num[j]之后,num[0]和num[9]都编程44了,原来的12消失了。

还有一点,首尾交换,循环不需要0~9,你这样的话,num[0]和num[9]交换,到后面在进行num[9]和num[0]交换,会交换两遍,又换回来了。
#include <stdio.h>
int main (void)
{
        int num[9];//定义数组含十个元素 
        int i,j=9,t=0;//控制循环 
        printf("请输入十个数:");
        
        for (i=0;i<10;i++)
        {
                scanf("%d",&num[i]);
        }
        for(i=0;i<10/2;i++)
        {
                t=num[j];
                num[j]=num[i];
                num[i]=t;
                --j;
        }
        
        printf("交换后的数:"); 
        for(i=0;i<10;i++)
        {
                printf("%d  ",num[i]); 
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 14:24:14 | 显示全部楼层
sunrise085 发表于 2020-3-23 14:15
数组内数据交换需要用一个其他变量作为中间量,你不能直接在数组的连个数之间来回复制,这样原数据就被覆盖 ...

好的,我编译后:
请输入十个数:1 2 3 4 5 6 7 8 9 10
交换后的数:1  9  8  7  6  5  4  3  2  6

是不是哪里出现了问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 14:53:06 | 显示全部楼层
一只程序猫 发表于 2020-3-23 14:24
好的,我编译后:
请输入十个数:1 2 3 4 5 6 7 8 9 10
交换后的数:1  9  8  7  6  5  4  3  2  6

啊哦,刚刚发现,你的程序定义数组的时候了。定义含有十个元素的数组,为什么是num[9]?应该是num[10].
若是还有问题的话,你可以在第二个for循环中添加一句printf("%d  %d\n",num[j],t);看看是不是交换成功了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 15:15:11 | 显示全部楼层
sunrise085 发表于 2020-3-23 14:53
啊哦,刚刚发现,你的程序定义数组的时候了。定义含有十个元素的数组,为什么是num[9]?应该是num[10].
...

它不能首尾互换吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 15:26:45 | 显示全部楼层
一只程序猫 发表于 2020-3-23 15:15
它不能首尾互换吗?

定义的是num[9],最大下标是8,索引num[9]是找不到的。所以就出错了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 15:32:57 | 显示全部楼层
sunrise085 发表于 2020-3-23 15:26
定义的是num[9],最大下标是8,索引num[9]是找不到的。所以就出错了。

懂了,我搞错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 16:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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