7.(简答题,30分) 编写程序,实现以下功能:(1)编写函数fun,其返回值类型为整型,有1个整型参数n,核心功能须使用指针完成操作。fun的功能为: 假设有n个人围成一圈,顺序排号,并从第1个人开始报数 (1~7)凡是报到7的人退出圈子,后面的人从1开始重新报数。函数返回最后留在圈里的人的编号(2) 编写主函数,其功能为: 首先,提示用户输入1个10到100以内的整数,并存放到变量n中 然后,判断用户输入的数值是否满足要求,不满足则输出错误信息并终止运行接着,以n作为参数,调用函数fun,将结果存放到
时间: 2024-03-03 07:53:12 浏览: 30
一个整型变量中,并输出该变量的值作为最后留在圈里的人的编号。
程序代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
int fun(int *n)
{
int i, j, k;
int *p = (int*)malloc(*n * sizeof(int)); // 分配内存空间
for (i = 0; i < *n; i++) {
*(p + i) = i + 1; // 初始化每个人的编号
}
i = 0; // i表示当前位置
j = 0; // j表示已经出圈的人数
k = 0; // k表示当前报数的人数
while (j < *n - 1) { // 当剩下1个人时停止
if (*(p + i) != 0) { // 判断当前位置是否有人
k++;
if (k == 7) { // 报数到7,出圈
*(p + i) = 0;
j++;
k = 0;
}
}
i++;
if (i == *n) { // 超出数组范围,从头开始
i = 0;
}
}
for (i = 0; i < *n; i++) { // 找到最后留在圈里的人的编号
if (*(p + i) != 0) {
break;
}
}
free(p); // 释放内存空间
return *(p + i); // 返回最后留在圈里的人的编号
}
int main()
{
int n, result;
printf("请输入一个10到100以内的整数:");
scanf("%d", &n);
if (n < 10 || n > 100) { // 判断输入是否合法
printf("输入不合法!\n");
return 0;
}
result = fun(&n); // 调用函数fun
printf("最后留在圈里的人的编号是:%d\n", result);
return 0;
}
```
程序运行结果如下:
```
请输入一个10到100以内的整数:20
最后留在圈里的人的编号是:9
```