实验十
//输入一个字符串和一个正整数x,将该字符串中的后x个字符复制到另一个字符串y中,输出字符串y;再对y串的内容前后倒置后存入数组z中并输出。 // 要求:用指针访问数组元素、用函数getx(char *c1)实现复制、用函数getr(char *c2)实现倒置。 #include<stdio.h> #include<string.h> void getx(char *c1); void getr(char *c2); int x; int main() { char s1[80]; printf("输入字符串x:"); gets(s1);//输入字符串 printf("输入x:"); scanf("%d",&x); getx(s1); getr(s1); return 0; } void getx(char *c1) { char s2[80]; int i,m; m=strlen(c1); for(i=0;i<x;i++) s2[i]=*(c1+m-x+i); s2[x]='\0'; printf("输出字符串%s\n",s2); } void getr(char *c2) { char s3[80]; int i=0,n=0; n=strlen(c2); for(i=0;i<x;i++) s3[i]=*(c2+n-1-i); s3[n]='\0'; printf("输出%s\n",s3); }
//为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:小写字母z变换成为a,其它字符变换成为该字符ASCII码顺序后1位的字符,比如o变换为p。 // 要求输入一个字符串(少于80个字符),输出相应的密文;要求定义和调用函数encrypt(s),该函数将字符串s变换为密文。 #include<stdio.h> #include<string.h> void encrypt(char *); int main() { char s[80]; printf("输入字符串:"); gets(s);//输入字符串 encrypt(s);//调用自定义函数 printf("%s\n",s); return 0; } void encrypt(char *p) { for(;*p!='\0';p++){ if(*p=='z') *p='a'; else *p=*p+1; } }
//有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。如此循环,直到留下最后一个人。 // 要求: //n大于30; // 输出每次退出人的编号 //输出最后留下人的编号 #include<stdio.h> int main(void) { int i,n,m; int k=0; printf("enter n:"); scanf("%d",&n); int s[80]; int *p; p=s; 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\n",i); m--; k=0; *(p+i)=0; } i++; if(i==n) i=0; } for(i=0;i<n;i++){ if(*(p+i)!=0) printf("最后的是%d\n",i); } return 0; }
//请编一个程序,可以将英语规则名词由单数变成复数。已知规则如下: // (a)以辅音字母y结尾,则将y改成i,再加es; // // (b)以s、x、ch、sh结尾,则加es; // (c)以元音字母o结尾,则加es; // (d)其他情况直接加s。 // 要求用键盘输入英语规则名词,屏幕输出该名词的复数形式。 #include<stdio.h> #include<string.h> int main() { int x; char s[80],ch; printf("enter a word:"); gets(s); x=strlen(s); ch=s[x-1]; switch(ch){ case 'y': s[x-1]='i'; s[x]='e'; s[x+1]='s'; s[x+2]='\0'; case ('s'||'x'||'sh'||'ch'): s[x]='e'; s[x+1]='s'; s[x+2]='\0'; case 'o': s[x]='e'; s[x+1]='s'; s[x+2]='\0'; default: s[x]='s'; s[x+1]='\0'; } printf("%s\n",s); return 0; }