C语言问题,大家都来看一下咯

来源:百度知道 编辑:UC知道 时间:2024/06/18 10:30:47
#include <stdio.h>
#include <string.h>
int ac(int ab[],int k,int len);
main()
{
int a[6]={2,52,12,21,52,65};
int len,k=2,i;
len=strlen(a);
ac(a[],k,len);
for(i=0;i<len;i++)
printf("%d\t",a[i]);
}
int ac(int a[],int k,int len)
{ int i,j,t,temp,count;
count=0;
k=k%len;
if(k)
{
i=0;
while(count<len){
j=i;t=i;
temp=a[i];
while((j=(j-k+len)%len)!=i)
{ a[t]=a[j];
t=j;
count++;
}
a[t]=temp; count++;
i++;
}

}
}

我的问题就是程序运行不出来,出错,希望那个位帮我改一下,不要改动子函数了,如果行的话,把程序运行的过程跟我说一下咯,我很菜的了,,谢了
我的目的是:将数组中的元素向右平移2位位置,移的次数不能超过元素的个数.

//程序是把数组a的元素循环后移k位

#include <stdio.h>
#include <string.h>

void ac(int ab[],int k,int len); //该函数不需要返回值应定义为void类型

void main()
{
int a[6]={2,52,12,21,52,65};
int len=6,k=2,i; //元素个数len直接可以得到,并且不能用strlen来求整形数组长度
ac(a,k,len); //这里传入数组a的首地址,而不是a[]
for(i=0;i<len;i++)
printf("%d\t",a[i]);
}
void ac(int a[],int k,int len) //程序不需要返回值
{
int i,j,t,temp,count;
count=0;
k=k%len;
if(k) //如果k能被len整除则不用移位,例:6个元素循环后移6位或12位元素位置不变
{
i=0;
while(count<len){
j=i;t=i;
temp=a[i];
while((j=(j-k+len)%len)!=i) //将循环移出的元素储存在前面,即实现循环,LZ这里用了两个循环分别移动奇数位和偶数位的元素
{
a[t]=a[j];
t=j;
count++;
}
a[t]=temp; count++;
i++;
}

}
}

也不知道你这代码干嘛的 我就把他修改成无错误而已。。。

#include <stdio.h>
#include <string.h>