作业帮 > 综合 > 作业

c语言,改错,语法正确,请问为什么输出结果是2,3,1,2,3,1,2,3,1,1?帮我改正,结果应该是8,9,10,1

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/13 10:10:24

c语言,改错,语法正确,请问为什么输出结果是2,3,1,2,3,1,2,3,1,1?帮我改正,结果应该是8,9,10,1,2,3,4,5,6,7

题目是有n个整数,使其前面个数顺序向后移m个位置,最后m个数变成最前面m个数


c语言,改错,语法正确,请问为什么输出结果是2,3,1,2,3,1,2,3,1,1?帮我改正,结果应该是8,9,10,1
以下代码测试通过:#include <stdio.h>
#include <string.h>
void f(int a[],int n,int m)
{
 int i = 0; 
 
 int *p; //用于存放前m个元素的值 
 p =(int *)malloc(sizeof(int)*m);
 
 
 //在p指向的区域内保存数组中的最后m个元素 
 for(i = 0;i<m;i++)
  p[i] = a[n-m+i];
  
  
  //将从m个元素开始的数组数据移m个位置 
  for(i =n -1;i>=m;i--)
  {
   a[i] = a[i-m];
  } 
  
  //将数组的前m个元素赋值
  for(i = 0;i<m;i++)
   a[i] = p[i];
  
   //释放申请的内存空间 
   free(p);
   
   //打印数组元素
   for(i = 0;i<n;i++)
   printf("a[%d] = %d",i,a[i]); 
  
 
}
void main()
{
 int a[10] ={1,2,3,4,5,6,7,8,9,10};
 int n =10,m = 3;
 f(a,n,m);
 
}你的主要问题:    数组的赋值存在覆盖情况。本来想具体写的呢,不过看到已经有人具体描述了,我就不多说了,不过如果有问题,欢迎再来讨论。不过他的代码也有问题,比如说int b[n],这一句是无法编译通过的,C语言不支持这种语法,不支持可变长度的数组,这时候只能动态分配内存来解决。