实验九 数组程序设计2 1. 自动应答器 说明 每当你跟智能机器人打招呼并报上自己的名字 xxx,机器人的输入设备就会录入你的名字,然后就会回复你 Hi xxx. What’s the matter?。这其实是机器人的自动应答器,请你根据机器人的自动应答器功能,设计一个程序,输出机器人的回答。
输入输出格式及样例 输入数据:输入包含 1 行,包含一个字符串 S,其中串长 len(1≤len≤100),表明自动应答器读入的名字。题目保证字符串中字符只包含大小写字母和数字。
suantou
输出数据:输出包含 1 行,包含一个字符串,表明机器人回答的内容。
Hi, suantou. What's the matter?
参考答案 1 2 3 4 5 6 7 #include <stdio.h> int main () { char s[100 ]; scanf ("%s" , s); printf ("Hi, %s. What's the matter?" , s); return 0 ; }
2.忽略大小写的字符串比较 说明 在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如”Hello”和”hello”在忽略字母大小写时是相等的。请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。
输入输出格式及样例 输入数据:输入为两行,每行一个字符串,共两个字符串。(每个字符串长度都小于 80 且只包含大小写字母)。
Hellohowareyou
helloHowareyou
输出数据:
如果第一个字符串比第二个字符串小,输出一个字符”<”;
如果第一个字符串比第二个字符串大,输出一个字符”>”;
如果两个字符串相等,输出一个字符”=”。
=
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <stdio.h> #include <string.h> char charupr (char x) { if (x >= 'a' && x<='z' ){ return x - 32 ; } return x; } int main () { char a[80 ], b[80 ]; int i, l; scanf ("%s" , a); scanf ("%s" , b); l = strlen (a); for (i=0 ; i < l; i++){ if (charupr(a[i]) < charupr(b[i])){ printf ("<" ); break ; }else if (charupr(a[i]) > charupr(b[i])){ printf (">" ); break ; } } if (i>=l){ printf ("=" ); } return 0 ; }
3. 输出亲朋字符串 说明 编写程序,求给定字符串 s 的亲朋字符串s1亲朋字符串 s1定义如下:给定字符串s的第一个字符的ASCII 值加第二个字符的 ASCII 值,得到第一个亲朋字符;给定字符串s的第二个字符的 ASCII 值加第三个字符的ASCII 值,得到第二个亲朋字符;依此类推,直到给定字符串 s 的倒数第二个字符。亲朋字符串的最后一个字符由给定字符串 s 的最后一个字符ASCII 值加 s 的第一个字符的ASCII 值。
输入输出格式及样例 输入数据:输入一行,一个长度大于等于 2,小于等于 100 的字符串。字符串中每个字符的ASCII 值不大于 63。
1234
输出数据:输出一行,为变换后的亲朋字符串。输入保证变换后的字符串只有一行。
cege
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> #include <string.h> int main () { char s[100 ]; int len; scanf ("%s" , s); len = strlen (s); for (int i=0 ; i<len-1 ; i++){ printf ("%c" , s[i] + s[i+1 ]); } printf ("%c" , s[len-1 ] + s[0 ]); return 0 ; }
4. 字符串判等 说明 判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。
输入输出格式及样例 输入数据:两行,每行包含一个字符串;字符串长度不超过 100。
a A bb BB ccc CCC
Aa BBbb CCCccc
输出数据:若两个字符串相等,输出”YES”,否则输出”NO”。
YES
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #include <stdio.h> #include <string.h> char charupr (char x) { if (x >= 'a' && x<='z' ){ return x - 32 ; } return x; } int main () { char a[100 ], b[100 ],ch; int i=0 , len=0 ; while (1 ){ ch=getchar(); if (ch == EOF || ch == '\n' ){ break ; } if (ch != ' ' ){ a[len] = ch; len++; } } a[len] = '\0' ; len=0 ; while (1 ){ ch=getchar(); if (ch == EOF || ch == '\n' ){ break ; } if (ch != ' ' ){ b[len] = ch; len++; } } b[len] = '\0' ; for (i=0 ; i < len; i++){ if (charupr(a[i]) != charupr(b[i])){ printf ("NO" ); return 0 ; } } if (i>=len){ printf ("YES" ); } return 0 ; }
5. 过滤多余的空格 说明 一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
输入输出格式及样例 输入数据:一行,一个字符串(长度不超过 200),句子的头和尾都没有空格。
Hello world.This is c language.
输出数据:过滤之后的句子。
Hello world.This is c language.
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main () { int flag = 0 ; char ch; while (ch = getchar()){ if (ch == '\n' || ch == EOF){ break ; } if (ch == 32 && flag == 1 ){ printf (" " ); flag = 0 ; } if (ch != 32 ){ printf ("%c" , ch); flag = 1 ; } } return 0 ; }
6. 恺撒加密术 说明 加密术最早应用于古代战争。古罗马时期,凯撒大帝曾是使用密码来传递信息,它是一种替代密码,对于信中的每个字母,会用它后面第i给字母代替。试编一个程序,将输入的一段英文字符加密后输出,只加密字母,加密的规则是用字母后来的第1个字母代替用来的字母,即用’b’代替’a’,用’c’代替’b’,······,用’a’代替’z’。
输入输出格式及样例 输入数据:一行字符串,不超过2000个字符。
Nike is excellent!
输出数据:加密后的字符串。
Ojlf jt fydfmmfou!
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main () { char ch; while (ch=getchar()){ if (ch=='\n' || ch ==EOF){ break ; } if (ch== 'z' ){ ch = 'a' ; }else if (ch == 'Z' ){ ch = 'A' ; }else if ((ch >= 'a' && ch < 'z' )||(ch >= 'A' && ch < 'Z' )){ ch++; }else { } printf ("%c" , ch); } return 0 ; }
7. 单词翻转 说明 输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入输出格式及样例 输入数据:只有一行,为一个字符串,不超过 500个字符。单词之间以空格隔开。注意字符串开头和结尾可能有空格。
hello world
输出数据:翻转每一个单词后的字符串,单词之间的空格需与原文一致。
olleh dlrow
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <stdio.h> int main () { char a[500 ]; int b[500 ]; char ch; int i=0 , j=0 ; while (ch = getchar()){ if (ch == '\n' || ch == EOF){ break ; } if (ch == ' ' ){ b[j] = i; j++; } a[i] = ch; i++; } b[j] = i; int start = 0 ; for (int i=0 ; i<=j; i++){ for (int end=b[i]-1 ; end>=start; end--){ printf ("%c" , a[end]); } printf (" " ); start = b[i]+1 ; } return 0 ; }
8. 判断字符串是否为回文 说明 输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。
输入输出格式及样例 输入数据:输入为一行字符串(字符串中没有空白字符,字符串长度不超过 100)。
abcdedcba
输出数据:如果字符串是回文,输出”yes”;否则,输出”no”。
yes
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> #include <string.h> int main () { char str[100 ]; int len; scanf ("%s" , str); len = strlen (str); for (int i=0 , j=len-1 ; i<j; i++, j--){ if (str[i]!=str[j]){ printf ("no" ); return 0 ; } } printf ("yes" ); return 0 ; }
9. 删除单词后缀 说明 给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为 0),否则不进行任何操作。
输入输出格式及样例 输入数据:输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为 32)。
referer
输出数据:输出按照题目要求处理后的单词。
refer
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> #include <string.h> int main () { char a[32 ]; int len; scanf ("%s" , a); len = strlen (a); if (a[len-1 ] == 'r' && a[len-2 ] == 'e' ){ a[len-2 ] = '\0' ; } if (a[len-1 ] == 'y' && a[len-2 ] == 'l' ){ a[len-2 ] = '\0' ; } if (a[len-1 ] == 'g' && a[len-2 ] == 'n' && a[len-3 ] == 'i' ){ a[len-3 ] = '\0' ; } printf ("%s" , a); return 0 ; }
10.字符替换 说明 把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。
输入输出格式及样例 输入数据:只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。字符串是待替换的字符串,字符串长度小于等于30个字符,且不含空格等空白符; 接下来一个字符为需要被替换的特定字符; 接下来一个字符为用于替换的给定字符。
hello-how-are-you o O
输出数据:一行,即替换后的字符串。
hellO-hOw-are-yOu
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> #include <string.h> int main () { char str[30 ]; int len; char a, b; scanf ("%s %c %c" , str, &a, &b); len = strlen (str); for (int i=0 ; i<len; i++){ if (str[i] == a){ printf ("%c" , b); }else { printf ("%c" , str[i]); } } return 0 ; }
11. 单词替换 说明 输入一个字符串,以回车结束(字符串长度≤200)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入输出格式及样例 输入数据:输入包括 3 行, 第 1 行是包含多个单词的字符串 s; 第 2 行是待替换的单词a(长度≤100); 第 3 行是a将被替换的单词b(长度≤200)。 s,a,b最前面和最后面都没有空格。
You want someone to help youYouI
输出数据:输出只有 1 行,将s中所有单词a替换成b之后的字符串。
I want someone to help you
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include <stdio.h> #include <string.h> int main () { char s[200 ], a[100 ], b[200 ]; char ch; int i = 0 , j = 0 , n,m; while ((ch = getchar()) != '\n' ){ s[i] = ch; i++; } scanf ("%s" , a); j = strlen (a); scanf ("%s" , b); for (m=0 ; m<i; m++){ if (m==0 || s[m-1 ] == ' ' ){ for (n=0 ; n<j; n++){ if (s[m + n] != a[n]){ break ; } } if (n>=j && (s[m+n] == ' ' || m+n == i)){ printf ("%s" , b); m = m + n-1 ; continue ; } } printf ("%c" , s[m]); } return 0 ; }
12. 简单密码 说明 Julius Caesar 曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后第 5 位对应的字符来代替,这样就得到了密文。比如字符’A’用’F’来代替。
如下是密文和明文中字符的对应关系。 密文A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 明文V W X Y Z A B C D E F G H I J K L M N O P Q R S T U 你的任务是对给定的密文进行解密得到明文。 你需要注意的是,密文中出现的字母都是大写字母。密文中也包括非字母的字符,对这些字符不用进行解码。
输入输出格式及样例 输入数据:一行,给出密文,密文不为空,而且其中的字符数不超过 200。
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
输出数据:输出一行,即密文对应的明文。
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { char ch; while (ch = getchar()){ if (ch == '\n' || ch == EOF){ break ; } if (ch>= 'A' && ch <= 'Z' ){ ch = ch - 5 < 65 ? ch + 26 - 5 : ch - 5 ; } printf ("%c" , ch); } return 0 ; }