鱼C论坛

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

[已解决]交换数

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

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

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

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

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

  18. int main (void)
  19. {
  20.         int num[9];//定义数组含十个元素
  21.         int i,j=9,t=0;//控制循环
  22.         printf("请输入十个数:");
  23.        
  24.         for (i=0;i<10;i++)
  25.         {
  26.                 scanf("%d",&num[i]);
  27.         }
  28.         for(i=0;i<10;i++)
  29.         {
  30.                 num[t]=num[j];
  31.                 num[j]=num[i];
  32.                 num[i]=num[t];
  33.                 --j;
  34.         }
  35.        
  36.         printf("交换后的数:");
  37.         for(i=0;i<10;i++)
  38.         {
  39.                 printf("%d  ",num[i]);
  40.         }
  41.         return 0;
  42. }
复制代码


        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]交换,会交换两遍,又换回来了。
  1. #include <stdio.h>
  2. int main (void)
  3. {
  4.         int num[9];//定义数组含十个元素
  5.         int i,j=9,t=0;//控制循环
  6.         printf("请输入十个数:");
  7.         
  8.         for (i=0;i<10;i++)
  9.         {
  10.                 scanf("%d",&num[i]);
  11.         }
  12.         for(i=0;i<10/2;i++)
  13.         {
  14.                 t=num[j];
  15.                 num[j]=num[i];
  16.                 num[i]=t;
  17.                 --j;
  18.         }
  19.         
  20.         printf("交换后的数:");
  21.         for(i=0;i<10;i++)
  22.         {
  23.                 printf("%d  ",num[i]);
  24.         }
  25.         return 0;
  26. }
复制代码
小甲鱼最新课程 -> https://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]交换,会交换两遍,又换回来了。
  1. #include <stdio.h>
  2. int main (void)
  3. {
  4.         int num[9];//定义数组含十个元素
  5.         int i,j=9,t=0;//控制循环
  6.         printf("请输入十个数:");
  7.         
  8.         for (i=0;i<10;i++)
  9.         {
  10.                 scanf("%d",&num[i]);
  11.         }
  12.         for(i=0;i<10/2;i++)
  13.         {
  14.                 t=num[j];
  15.                 num[j]=num[i];
  16.                 num[i]=t;
  17.                 --j;
  18.         }
  19.         
  20.         printf("交换后的数:");
  21.         for(i=0;i<10;i++)
  22.         {
  23.                 printf("%d  ",num[i]);
  24.         }
  25.         return 0;
  26. }
复制代码
小甲鱼最新课程 -> https://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

是不是哪里出现了问题
小甲鱼最新课程 -> https://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);看看是不是交换成功了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

它不能首尾互换吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

定义的是num[9],最大下标是8,索引num[9]是找不到的。所以就出错了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

懂了,我搞错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 16:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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