学习任务:
今天主要做了几个关于整数算法的训练
1、有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的几号
#include<stdio.h>
int main()
{
int i,k,j,n,num[50],*p;//j:删除人数 k:计数
printf("input number of person: n=");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0;
k=0;
j=0;
while(j<n-1)
{
if(*(p+i)!=0)
k++;
if(k==3)
{
*(p+i)=0;
k=0;
j++;
}
i++;
if(i==n)
i=0;
}
while(*p==0)
p++;
printf("The original number of last one is %d\n",*p);
}
这一题刚看的时候大概知道流程是怎样的,但是这是一个圈子,执行到最后怎么回到开头不会。从尾部回头就是在指针到尾部:i=n时,令它=0,还有计数方式,定义一个k,当它为3时,就去掉它对应的那个人,然后清零,不断循环。
2.字符数组中在指定位置插入字符
代码如下
#include <stdio.h>
#include <string.h>
int main()
{
char a[20]="helloworld";
char b[20],str[20], ptr[20];
int i;
printf("Please input the address:");
scanf("%d",&i);
getchar();
printf("Please input the char:");
scanf("%c",ptr);
strcpy(str,a+i-1);
strcat(ptr,str);
strncpy(b,a,i-1);
b[i-1]='\0'; //strncpy复制前n个字符,不一定包含\0
strcat(b,ptr);
printf("%s",b);
}
strcpy:复制字符串,a中字符串复制到b中,b中的字符串将被覆盖。
strcat:字符串的连接,没有覆盖现象。
strncpy:复制字符串的前n个字符,如果是复制所有的字符会包含'\0',但是中间的话就没有,要自己添加,例如:
strncpy(b,a,i-1);
b[i-1]='\0';
将a中的前i-1个字符复制到b中,那么b的第i-1个字符就要设置为'\0',否则字符串连接成功后连接的地方会出现乱码。
另外,今天做趣味100题出现的错误:1、函数后面加了分号
2、单词拼写错误date写成data