求解释这个C语言程序,谢谢!!!
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。解:#defineN10#inclu...
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
解:
#define N 10
#include<stdio.h>
void shift(float*p,int x)
{
floata[N],*q,*o;int i;
o=a;q=p;
for(i=0;i<x;i++)
*(o+i)=*(q+N-x+i); //什么意思?什么作用
for(p=p+N-1;p>=q;p--) //什么意思?什么作用
*p=*(p-x); //什么意思?什么作用
for(i=0;i<x;i++) //什么意思?什么作用
*(q+i)=*(o+i); //什么意思?什么作用
return;
}
void main()
{
floatshuzhu[N],*u,*v;
inth,i;u=v=shuzhu;
scanf("%f",&h);
for(;u<v+N;u++)
scanf("%f",u);
shift(v,h);
for(u=v;u<v+N;u++)
printf("%.2f",*u);
printf("\n");
} 展开
解:
#define N 10
#include<stdio.h>
void shift(float*p,int x)
{
floata[N],*q,*o;int i;
o=a;q=p;
for(i=0;i<x;i++)
*(o+i)=*(q+N-x+i); //什么意思?什么作用
for(p=p+N-1;p>=q;p--) //什么意思?什么作用
*p=*(p-x); //什么意思?什么作用
for(i=0;i<x;i++) //什么意思?什么作用
*(q+i)=*(o+i); //什么意思?什么作用
return;
}
void main()
{
floatshuzhu[N],*u,*v;
inth,i;u=v=shuzhu;
scanf("%f",&h);
for(;u<v+N;u++)
scanf("%f",u);
shift(v,h);
for(u=v;u<v+N;u++)
printf("%.2f",*u);
printf("\n");
} 展开
展开全部
*(o+i)=*(q+N-x+i); //循环取p数组里第x元素到数组最后一个元素到新的o数组中
其中:
q+N 指向最后一个元素;
q+N-x 指向要求移动的若干元素的第一个位置(一共x个元素要移动)
q+N-x+i i循环来取x个需要移动的元素
for(p=p+N-1;p>=q;p--)
*p=*(p-x); //循环,将剩余的不需要前移的元素往后移动x个位置(结果就是整天前边空出x个位置)
for(i=0;i<x;i++)
*(q+i)=*(o+i); //将o数组中保存的原先的q数组中的后x个元素,转移到o元素的前x个位置
再有不清楚的地方咱们再讨论。
其中:
q+N 指向最后一个元素;
q+N-x 指向要求移动的若干元素的第一个位置(一共x个元素要移动)
q+N-x+i i循环来取x个需要移动的元素
for(p=p+N-1;p>=q;p--)
*p=*(p-x); //循环,将剩余的不需要前移的元素往后移动x个位置(结果就是整天前边空出x个位置)
for(i=0;i<x;i++)
*(q+i)=*(o+i); //将o数组中保存的原先的q数组中的后x个元素,转移到o元素的前x个位置
再有不清楚的地方咱们再讨论。
追问
for(p=p+N-1;p>=q;p--)
*p=*(p-x); //循环,将剩余的不需要前移的元素往后移动x个位置(结果就是整天前边空出x个位置)
这里,为什么p>=q呢?
还有就是:p和q是不是一样的?为什么最后又改成了*(q+i)=*(o+i)?不是*(p+i)=*(o+i)吗?
追答
q和p指向同一块内存。应该是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询