三道C语言程序设计关于指针的题目,高分求高手解答,最好解释下,好的话追分,谢谢~

1.有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到3的人退出圈子,下一个人从1开始报数,报到3的人退出圈子。如此下去,直到留下最后一个人。请按退出顺序输... 1.有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到3的人退出圈子,下一个人从1开始报数,报到3的人退出圈子。如此下去,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号。
2.输入一个字符串,将该字符串中从第m个字符开始的全部字符复制成另一个字符串。m由用户输入,值小于字符串的长度。要求编写一个函数mcopy(char *s,int m)来完成。
3.输入10个整数存储到数组a,再输入一个整数x,在数组a中查找x,若找到则输出相应的下标,否则显示"Not found"。要求定义和调用函数search(int list[ ],int n,int x),在数组list中查找元素x,若找到则返回相应下标,否则返回-1,参数n代表数组list中元素的数量。
不要只有一个主程序啊,要全啊~~~
谢谢各位大大了~~~
泪奔着跪求解答啊...
展开
 我来答
Roc_Chou
2010-10-12 · TA获得超过2097个赞
知道小有建树答主
回答量:1007
采纳率:0%
帮助的人:702万
展开全部
第一题:
#include<stdio.h>

int m,n,k;
int main()
{
m = 3;
while(scanf("%d",&n) == 1){
int an = 0;
int i;
for(i = 2;i <= n;i ++) {
k = m%i;
an = (an+k)%i;
}
an += 1;
printf("%d\n",an);
}
return 0;
}

第二题
#include<stdio.h>
#include<string.h> //支持strlen()的应用
#include<stdlib.h> //支持exit(1)

char *mcopy(char*s ,int m); //函数的定义

void main(void)
{
char str1[100];
char *str2;

int m;
printf("请输入你要输入的字符串\n");
gets(str1);
printf("请输入你要开始复制字符的位置m\n");
scanf("%d",&m);

if(m>=strlen(str1)) //若输入m值过大,结束程序
{
printf("输入值超出字符串长度...\n");
exit(1);
}

str2=mcopy(str1,m); //程序的调用

for(int j=0;j<strlen(str2);j++) //把数组进行输出
printf("字符串第%d个元素是%c\n",m++,str2[j]); //字符的输出

}

char *mcopy(char*s ,int m)
{
static char array[100];
int count=0;
for(int i=m-1;i<strlen(s);i++)
{
array[count]=s[i];
count++;
}
return array;
}

第三题
#include "stdio.h"
main( )
{
int a[5]={1,2,3,4,5};
int x,i;
scanf("%d",&x);
for(i=0;i<5;i++) //循环比较
if(a[i]==x) //把数组中的数字和查找键进行比对,如果相等
{
printf("find"); //表示找到
break;
}
if(i==5) //当i=5的时候,说明数组中的所有元素都比对过了,且没有发现相等的
printf("no find"); //表示查找失败
}
乱世同人
2010-10-12
知道答主
回答量:32
采纳率:0%
帮助的人:0
展开全部
第一题

#include<stdio.h>
int kill(int,int,int);
int main()
{
int ki,num; //参与的人数为num,每数ki个杀之
scanf("%d%d",&num,&ki);
printf("The survivor is %d\n",kill(0,ki,num));//输出最终幸存者(1到num之间的一个数)
while(1);
}
int kill(int k,int ki,int num)
{
int x=0,i,m,j=0;
static int a[100]={0};//只初始化一次,且初始化为零 代表人活着
while(1) //有num个人,在数组中从a[1]到a[num]
{
if(k>=num)k=0;
if(a[++k]==0)x++;//此号人没死,数一次x加1
if(x==ki)break;//数到ki,跳出
}
a[k]=1; //置1表示 该人被杀之
for(i=1;i<=num;i++)
if(a[i]==0){
j++; //数出没被杀的人数
m=i;} //最后一位没被杀的
if(j>1)kill(k,ki,num);// 剩下的人数大于两人时,递归调用函数,继续杀之
else
return m;
}

第二题思路
char *mcopy(char *s,int m)
{
int i = strlen(s) - m + 1;
char *dest = (char *)malloc(i);
strncpy(dest,s+m,i);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式