实验10

#include<stdio.h>
#include<string.h>
void getx(char *c1);
void getr(char *c2);
int x;
int main(void)
{
    char s[80];
    printf("enter a string:");
    gets(s);
    printf("enter an integer:");
    scanf("%d",&x);
    printf("the new string is:");
    getx(s);//由这个函数可以指出指针c1已经指向了s;
    printf("the invert string is:");
    getr(s);//同理;
    return 0;
}
void getx(char *c1)
{
    char z[80];//再次定义一个数组用来存放复制后的;
    int i,y;
    y=strlen(c1);//y是数组s的长度。
    for(i=0;i<x;i++)
    {
        z[i]=*(c1+y-x+i);//因为是从第x个字符开始。数组的长度减去x再加上i的值就是ci向后那么多个数组。
    }
    z[x]='';
    printf("%s
",z);
}
void getr(char *c2)
{
    char m[80];//用来存放倒叙输出后的值
    int i,a;
    a=strlen(c2);//a数组s的长度
    for(i=0;i<x;i++)
    {
        m[i]=*(c2+a-1-i);//x-1-i是从倒数的开始
    }
    m[x]='';
    printf("%s
",m);
}

#include<stdio.h>
#include<string.h>
void encrypt(char *);//运用全局变量定义
int main(void)
{
    char s[80];
    printf("Input the string:");
    gets(s);//运用gets这个函数输入字符串数组
    encrypt(s);
    printf("密文:%s
",s);
    return 0;
}
void encrypt(char *a)
{
    for(;*a!='';a++)
        if(*a=='z')
            *a='a';
        else
            *a=*a+1;
}

#include<stdio.h>
#include<string.h>
void ccc(char *p);
int main(void)
{
    char s[80];
    printf("enter s:");
    gets(s);//输入数组
    ccc(s);//利用自定义函数
    puts(s);//输出数组
    return 0;
}
void ccc(char *p)
{
    char ch;//ch是指最后的位数
    int x;//x是字符串数组的长度
    x=strlen(p);
    ch=*(p+x-1);//最后一位
    //运用switch语句进行判断最后一位是否正确
    switch(ch){
        case'y':
            *(p+x-1)='i';
            *(p+x)='e';
            *(p+x+1)='s';
            *(p+x+2)='';
            break;
        case's':
            *(p+x)='e';
            *(p+x+1)='s';
            *(p+x+2)='';
            break;
        case'x':
            *(p+x)='e';
            *(p+x+1)='s';
            *(p+x+2)='';
            break;
        case'o':
            *(p+x)='e';
            *(p+x+1)='s';
            *(p+x+2)='';
            break;
        case'h':
            if((*(p+x-2)='s')||(*(p+x-2)='c')){
                *(p+x)='e';
                *(p+x+1)='s';
                *(p+x+2)='';
                break;
            }
            else{
                *(p+x)='s';
                *(p+x+1)='';
                break;
            }
        default:
            *(p+x)='s';
            *(p+x+1)='';
            break;
    }
}

//4、有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。如此循环,直到留下最后一个人。要求:
//n大于30;
//输出每次退出人的编号
//输出最后留下人的编号
#include<stdio.h>
int main(void)
{
    int i,n,m;//n大于30
    int k=0;//k是1,2,3循环时的指标。
    printf("enter n:");
    scanf("%d",&n);
    int a[80];
    int *p;
    p=a;//指针指向数组a
    for(i=0;i<n;i++){
        *(p+i)=i+1;//给数组赋值
    }
    i=0;
    m=n;
    while (m>1){
        if(*(p+i)!=0)
            k++;//不断向后编号;
        if(k==3)
        {
            printf("退出的是%d
",i);//输出数组的下标
            m--;//退出一个,m减少一个;
            k=0;//重新开始计算k
            *(p+i)=0;
        }
        i++;
        if(i==n){
            i=0;
        }
    }
    for(i=0;i<n;i++){
        if(*(p+i)!=0)
        printf("最后的是%d
",i);
    }
    return 0;
}

 虽然要求30以上,不过太大了。。。我还是用8举个例子

原文地址:https://www.cnblogs.com/xuqiongxiang/p/3422672.html