问题:在moodle上显示调用了受限函数应该怎么修改
原题:若有n个数的数组arr,循环右移一位指每个数移到相邻的右边一个位置,最右边的数移到最左边。如数组1,2,3,4,5;循环右移1位的结果为5,1,2,3,4;右移3位的结果为3,4,5,1,2。
使用指针方法,编写数组右移k位的函数。
编写主函数输入若干元素和右移位数,调用函数右移,在主函数中输出结果。元素个数不超过100。
输入:两行,第1行为若干用空格分隔的整数,以9999表示结束;第2行一个整数,表示右移的位数。
输出:一行,移位的结果,各个数值用一个空格隔开,末尾无空格。
【输入输出样例】
输入:
1 2 3 4 5 9999
3
输出:
3 4 5 1 2
#include <stdio.h>
int main()
{
int a[20], n=0, m;
int i;
while ( a[i-1]!=9999 ){ scanf("%d", &a[i]);i++;} //i = 0; i < n; i++
n=i-1;
scanf("%d",&m);
ArrayShift(a, n, m);
for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}
int ArrayShift( int a[], int n, int m )
{
int i;
int k;
for(k=1;k<=m;k++)
{
int temp=a[n-1];
for(i=n-1;i>0;i--)
{
a[i]=a[i-1];
}
a[0]=temp;
}
}
你题目的解答代码如下:
#include <stdio.h>
int ArrayShift(int a[], int n, int m)
{
int i;
int k;
if (m >= n)
m = m % n;
for (k = 1; k <= m; k++)
{
int temp = a[n - 1];
for (i = n - 1; i > 0; i--)
{
a[i] = a[i - 1];
}
a[0] = temp;
}
}
int main()
{
int a[101], n = 0, m;
int i = 0;
while (1)
{
scanf("%d", &a[i]);
if (a[i] == 9999)
break;
i++;
}
n = i;
scanf("%d", &m);
ArrayShift(a, n, m);
for (i = 0; i < n; i++)
{
if (i != 0)
printf(" ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!