编程练习:
1.用指针实现报数问题
/*用指针的方法解决3人报数问题*/
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
int m = 0;
int n = 0;
int num[50];
int *p;
printf("please input num:\n");
scanf("%d",&n);
p = num;
for(i = 0;i < n;i++)
{
*(p+i) = i+1;//给数组每个成员编号
}
i = k = m = 0; //i是数组计数,k是循环3次计数,m是退出的人计数
while(m < n-1) // *n是总人数,退出的人数要比总人数少一个人结束循环
{
if(*(p+i) != 0)
{
k++; //成员的值不为0则k+1
}
if(k == 3)
{
*(p+i) = 0;
k = 0;
m ++;
}
i ++;
if(i == n) //如果i到了成员最后,返回最前面
{
i = 0;
}
while(*p == 0)
{
p ++; //找值不为0的数,即最后留下的数
}
}
printf("%d is left\n",*p);
return 0;
}
2.
/*请编写函数fun,函数功能是:移动一维数组中的内容;若数组中n个整数,要求把下标0~p的数组元素平移到数组的最后*/
#include <stdio.h>
#define N 80
void fun(int *w,int p,int n)
{
int i = 0;
int k = 0;
int t = 0;
for(i = 0;i <= p;i ++) //循环移动p位数到最后
{
t = w[0]; //移动第一位数到最后一位
for(k = 1;k < n;k ++)
{
w[k-1]=w[k];
}
w[n-1] = t;
}
}
int main()
{
int a[N];
int n;
int p;
int i = 0;
printf("plase input n :\n"); //输入要输入的数字的个数
scanf("%d",&n);
printf("please input n number:\n"); //分别输入n个数
for(i = 0;i < n;i ++ )
{
scanf("%d",&a[i]);
}
printf("plase input p:\n");
scanf("%d",&p);
fun(a,p,n);
for(i = 0;i < n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}