刚开始接触指针,不是很熟悉,写了个代码没法输出了。不知道是我操作不对还是怎么,不管怎么加断点调试就是不进函数,输入完之后按回车直接灭了,于是我就加了一行printf当调试,结果加上之后正常输出了,但去掉就输出为空。。。
题目是这样的:
1162: 循环移动(指针专题)
时间限制: 1 Sec 内存限制: 128 MB
提交: 5479 解决: 3532
[状态] [讨论版] [提交] [命题人:admin]
题目描述
有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。
题目没有告诉你n的范围,希望你读入n之后用malloc()函数动态申请内存空间,不要提前定义数组的大小。不要偷懒哦。
另外要求定义并使用函数ringShift()
void ringShift(int *a, int n, int k)
{
//循环移动后的数值仍然存入数组a中
}
输入
输入分3行,第一行是一个整数n,第二行是n个整数,用空格隔开。第三行是一个整数k。
输出
输出n个整数,由空格隔开。输出占一行。
样例输入 Copy
6
1 2 3 4 5 6
2
样例输出 Copy
5 6 1 2 3 4
来源/分类
我的代码:
#include<stdio.h>
#include<malloc.h>
void ringShift(int *a, int n, int k)
{
int i;
int b[k];
for(i=0;i<k;i++)//把后面k位放入b
{
b[i]=a[n-k+i];
}
for(i=n-k;i>=0;i--)//移位
{
a[i+k]=a[i];
}
for(i=0;i<k;i++)//把后面k位放到前面
{
a[i]=b[i];
}
for(i=0;i<n;i++)//打印
printf("%d ",a[i]);
}
int main()
{
int n,*p;
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);//题目要求
int c,i=0;
while(i<n)
{
scanf("%d",&c);
*(p+i)=c;
printf("%d ",*(p+i));//这行是测试用的,去掉后没法输出了
i++;
}
int k;
scanf("%d",&k);
ringShift(p,n,k);
return 0;
}
没删那行测试的输出结果:
删了的: