7.24日报

学习任务:

今天主要做了几个关于整数算法的训练

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

猜你喜欢

转载自blog.csdn.net/qq_42487214/article/details/81186675