如何把一组数反转?用c语言定义一个数组,这组数据从键盘中获取。

如题所述

#include "stdio.h"
int main()
{
   int a[10]={0};
   int i,tmp;
   printf("请输入10个数:\n");
   for(i=0;i<10;i++)
     scanf("%d",&a[i]);
   //第一个数跟最后一个数交换,第二个与倒数第二个交换,
   //直到数组中间的元素,那么。数组元素肯定就全反转了
   for(i=0;i<10/2;i++)
   {
       tmp=a[i];
       a[i]=a[9-i];
       a[9-i]=tmp;
   }  
   printf("反转后输出:\n");
   for(i=0;i<10;i++)
     printf("%d ",a[i]);
   printf("\n");  
}

原来存的是1到10

反转后存的是10到1 

目的达到。

追问

还有其他办法么?

追答

这是最有效的方法,还有个方法就是
再用一个数组,倒序存原来的数组的值,再存回来。这样的话,时间就浪费了。

追问

可以把控制输出的循环变量递减呀

这个我不知道为什么只打印了一个数?

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-02

1 输入数组。

2 遍历数组前半部分,将每个元素,与后半部分对称位置交换值。

3 输出结果。

代码:

int main()
{
    int a[10];
    int i;
    for(i = 0; i < 10; i ++)
        scanf("%d",a+i);
    for(i = 0; i < 5; i ++)
    {
        int t = a[i];
        a[i] = a[9-i];
        a[9-i] = t;
    }
    
    for(i = 0; i < 10; i ++)
        printf("%d ",a[i]);
}

第2个回答  2014-01-16
for循环,从最大一直做自减运算不就好了。追问

但是在屏幕上只打印了一个数

追答

#include "stdio.h"
int main()
{
  float a[10]={0};
  int i;
  printf("请输入10个数:\n");
  for(i=0;i<10;i++)
    scanf("%f",&a[i]);
       printf("反转后输出:\n");
  for(i=9;i>=0;i--)
    printf("%0.0f ",a[i]);
  printf("\n");  
}

追问

为什么只输出了一个数?

追答

楼主 你把数组定义成浮点型的,printf输出那里也是弄成浮点型的 用 %0.0f 这个格式;问题就解决了,但是为什么是这样,我也说不清楚,前段时间我做个矩阵的LU分解时发现的。我这样做就行得通了,作业也交了,但是原因真不知道。

相似回答