实验 10 指针2

1、输入一个字符串和一个正整数x,将该字符串中的后x个字符复制到另一个字符串y中,输出字符串y;再对y串的内容前后倒置后存入数组z中并输出。
     要求:用指针访问数组元素、用函数getx(char *c1)实现复制、用函数getr(char *c2)实现倒置。
     运行示例
     Enter a string: abcABCD
     Enter an integer: 4
     The new string is: ABCD
     The invert string is: DCBA

#include<stdio.h>
#define N 99
void getx(char *c1);
void getr(char *c2);
void main()
{
char a[N];
puts("请输入一组字符:");
gets (a);
getx(a);
}
void getx(char *c1)
{
int n,k=0;
int j=0;
char temp[N];
puts("请输入选取个数:");
scanf ("%d",&n);
while(*(c1+j)!='')
{j++;}
for(int i=j-n;i<j;i++)
{temp[k]=*(c1+i);k++;}
temp[k]='';
getr(temp);
puts("新的排序数为:");
puts(temp);
}
void getr (char *c2)
{
int i=0;
char temp[N];
while(*(c2+i)!='')
{i++;}
for (int j=0;j<i;j++)
{temp[i-j-1]=*(c2+j);}
for(int k=0;k<i;k++)
{*(c2+k)=temp[k];}
}

 2、为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:小写字母z变换成为a,其它字符变换成为该字符ASCII码顺序后1位的字符,比如o变换为p。
     要求输入一个字符串(少于80个字符),输出相应的密文;要求定义和调用函数encrypt(s),该函数将字符串s变换为密文。

#include<stdio.h>
#include<string.h>
void fushu(char *p);       //定义求复数的指针函数
int main(void)
{
    char str[80];
    printf("请输入一个英语单词:");
    scanf_s("%s",str);     //输入英语单词
    fushu(str);
    puts(str);            //从键盘输入
    return 0;
}
void fushu(char *p)          //调用指针函数
{
int i,j=0;                   //循环至最后一位字母
for(i=0;*(p+i)!='';i++){
    j++;
}
if(*(p+j-1)=='y'){          //若以y结尾,加es
    *(p+j)='e';
        *(p+j+1)='s';
        *(p+j+2)='';
    }

    //若以s,x,ch,sh结尾,加es
else if((*(p+j-1)=='s')||(*(p+j-1)=='x')||((*(p+j-2)=='c')&&(*(p+j-1)=='h'))||((*(p+j-2)=='s')&&(*(p+j-1)=='h'))){
        
        *(p+j)='e';
        *(p+j+1)='s';
        *(p+j+2)='';
    }
    else if(*(p+j-1)=='o'){  //若以o结尾,加es
        *(p+j)='e';
        *(p+j+1)='s';
        *(p+j+2)='';
    }
    else{                      //否则,直接加s
        *(p+j)='s';
        *(p+j+1)='';
    }
}

3、请编一个程序,可以将英语规则名词由单数变成复数。已知规则如下:
     (a)以辅音字母y结尾,则将y改成i,再加es;
     (b)以s、x、ch、sh结尾,则加es;
     (c)以元音字母o结尾,则加es;
     (d)其他情况直接加s。
     要求用键盘输入英语规则名词,屏幕输出该名词的复数形式。

void fushu(char *p);       /*定义求复数的指针函数*/
int main(void)
{
    char str[80];
    printf("请输入一个英语单词:");
    scanf("%s",str);     /*输入英语单词*/
    fushu(str);
    puts(str);            /*从键盘输入*/
    return 0;
}
void fushu(char *p)          /*调用指针函数*/
{
int i,j=0;                   /*循环至最后一位字母*/
for(i=0;*(p+i)!='';i++){
    j++;
}
if(*(p+j-1)=='y'){          /*若以y结尾,加es*/
    *(p+j)='e';
        *(p+j+1)='s';
        *(p+j+2)='';
}               /*若以s,x,ch,sh结尾,加es*/
else if((*(p+j-1)=='s')||(*(p+j-1)=='x')||((*(p+j-2)=='c')&&(*(p+j-1)=='h'))||((*(p+j-2)=='s')&&(*(p+j-1)=='h'))){
        
        *(p+j)='e';
        *(p+j+1)='s';
        *(p+j+2)='';
    }
    else if(*(p+j-1)=='o'){  /*若以o结尾,加es*/
        *(p+j)='e';
        *(p+j+1)='s';
        *(p+j+2)='';
    }
    else{                            /*否则,加s*/
        *(p+j)='s';
        *(p+j+1)='';
    }
}

4、有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。如此循环,直到留下最后一个人。

     要求:

  • n大于30;
  • 输出每次退出人的编号
  • 输出最后留下人的编号
  • #include<stdio.h>
    int main(void)
    {
        int i,j,n,count,a[100];     /*定义整型变量,count=退出人数,j=报数值*/
        printf("输入n:");              /*输入n个人数*/
        scanf("%d",&n);           /*从键盘输入一个整数*/
        for(i=0;i<=n;i++)
            a[i]=i;             
        count=0;
        i=1;
        j=0;
        while(count<n){    
             
            if(i>n)i=1;             /*循环完成一遍后,重新从第一个开始*/
            if(a[i]!=0)
                j++;
            if(j==3)
                
            {
                
                printf("%3d	",i);
                a[i]=0;
                j=0;
                count++;
            }
            i++;
        }
        printf("
    ");
    return 0;
    }

原文地址:https://www.cnblogs.com/chaoyue0806/p/3422650.html