您的位置:首页 > 其它

实验10 指针2

2013-11-14 09:04 609 查看
1、输入一个字符串和一个正整数x,将该字符串中的后x个字符复制到另一个字符串y中,输出字符串y;再对y串的内容前后倒置后存入数组z中并输出。
要求:用指针访问数组元素、用函数getx(char *c1)实现复制、用函数getr(char *c2)实现倒置。

#include<stdio.h>
#define N 100
void getx(char *c1);
void getr(char *c2);
int main(void)
{
char a
;
puts("输入一个字符串:");
gets_s(a);
getx(a);
}
void getx(char *c1)
{
int n,k=0;int j=0;char temp
;
puts("输入变换的位数:");
scanf_s("%d",&n);
while(*(c1+j)!='\0')
{
j++;}
for(int i=j-n;i<j;i++)
{
temp[k]=*(c1+i);
k++;
}
temp[k]='\0';
getr(temp);
puts("变完之后的结果: ");
puts(temp);
}
void getr(char *c2)
{
int i=0;
char temp
;
while(*(c2+i)!='\0')
{
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>                    //定义字符串
#define MAXLINE 80                    //不超过80字符
void encrypt(char*);
int main(void)
{
char line[MAXLINE];              //字符数组line用于存放输入的字符串
printf("输入电码明文:");
gets_s(line);
encrypt(line);                     //调用加密指针encrypt
printf("%s%s\n","转换后的密码为:",line);
return 0;
}
void encrypt(char*s)
{
for(;*s!='\0';s++)
if(*s=='z')
*s='a';
else *s=*s+1;
}




3、请编一个程序,可以将英语规则名词由单数变成复数。已知规则如下:
(a)以辅音字母y结尾,则将y改成i,再加es;
(b)以s、x、ch、sh结尾,则加es;
(c)以元音字母o结尾,则加es;
(d)其他情况直接加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)!='\0';i++){
j++;
}
if(*(p+j-1)=='y'){          //若以y结尾,加es
*(p+j)='e';
*(p+j+1)='s';
*(p+j+2)='\0';
}

//若以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)='\0';
}
else if(*(p+j-1)=='o'){  //若以o结尾,加es
*(p+j)='e';
*(p+j+1)='s';
*(p+j+2)='\0';
}
else{                      //否则,直接加s
*(p+j)='s';
*(p+j+1)='\0';
}
}




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_s("%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\t",i);
a[i]=0;
j=0;
count++;
}
i++;
}
printf("\n");
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: