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

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个数


A_z空空 1年前 已收到1个回答 举报

非正点_ii 幼苗

共回答了26个问题采纳率:88.5% 举报

以下代码测试通过:#include
#include
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;ip[i] = a[n-m+i];


//将从m个元素开始的数组数据移m个位置
for(i =n -1;i>=m;i--)
{
a[i] = a[i-m];
}

//将数组的前m个元素赋值
for(i = 0;ia[i] = p[i];

//释放申请的内存空间
free(p);

//打印数组元素
for(i = 0;iprintf("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语言不支持这种语法,不支持可变长度的数组,这时候只能动态分配内存来解决。

1年前

8
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.026 s. - webmaster@yulucn.com