实验十
输入一个字符串和一个正整数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 n; int main() { char str1[80]; printf("请输入字符串1:"); gets(str1); printf("Enter a integer:"); scanf("%d",&n); getx(str1); getr(str1); return 0; } void getx(char *c1){ char y[80]; int i=0,len=strlen(c1); for(i=0;i<n;i++){ y[i]=*(c1+len-n+i); } y[n]='\0'; printf("The new string is:%s\n",y); } void getr(char *c2){ char z[80]; int i=0,len=strlen(c2); int m=n; while(m--!=0){ z[i]=*(c2+len-1-i); i++; } z[n]='\0'; printf("The invert string is:%s\n",z); }
为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:小写字母z变换成为a,其它字符变换成为该字符ASCII码顺序后1位的字符,比如o变换为p。
要求输入一个字符串(少于80个字符),输出相应的密文;要求定义和调用函数encrypt(s),该函数将字符串s变换为密文。
#include<stdio.h> #include<string.h> void encrypt(char *s); int main() { char str[80]; printf("请输入一串字符:"); gets(str); encrypt(str); printf("After being encrypted:%s\n",str); return 0; } void encrypt(char *s){ for(;*s!='\0';s++) if(*s=='z') *s='a'; else *s=*s+1; }
有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。如此循环,直到留下最后一个人。
要求:
- n大于30;
- 输出每次退出人的编号
- 输出最后留下人的编号
#include<stdio.h> #define MAXLINE 200 int main() { int a[MAXLINE]; int i,n,count=0,index; printf("Input a number:"); scanf("%d",&n); index=n; for(i=0;i<n;i++){ a[i]=0; } i=0; while(n>1){ if(a[i]==0){ count++; if(count==3){ a[i]=1; printf("%d号退出\n",i); n--; count=0; } } i++; if(i==index) i=0; } for(i=0;i<index;i++){ if(a[i]==0) printf("最后留下人的编号:%d",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> void change(char *s); int main() { char str[80]; printf("Enter a word:"); gets(str); change(str); return 0; } void change(char *s){ char y[80],op; int len=strlen(s); op=*(s+len-1); switch(op){ case 'y': *(s+len-1)='i'; *(s+len)='e'; *(s+len+1)='s'; break; case 's': *(s+len)='e'; *(s+len+1)='s'; break; case 'x': *(s+len)='e'; *(s+len+1)='s'; break; case 'h': if(*(s+len-2)=='s'||*(s+len-2)=='c'){ *(s+len)='e'; *(s+len+1)='s'; break; } else{ *(s+len)='s'; break; } case 'o': *(s+len)='e'; *(s+len+1)='s'; break; default: *(s+len)='s'; break; } printf("变复数以后:%s\n",s); }