1.
本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。
输入格式:
输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。
输出格式:
在一行中输出给定字符在给定字符串中出现的次数。
输入样例:
programming is More fun!
m
输出样例:
2
(代码截图+运行结果截图):
#include <stdio.h>
#include <string.h>
int main() {
int count = 0;
char word;
char input[81] = { 0 };
int i;
gets(input); // 使用gets函数来获取输入的字符串
scanf_s("%c",&word,1); // 使用scanf读取单个字符
for (i = 0; input[i] != '\0'; i++) {
if (input[i] == word) {
count++;
}
}
printf("%d\n",count);
return 0;
}
2.
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
(代码截图+运行结果截图):
#include <stdio.h>
int main()
{
int count=0; //count用来计算单词数
char ch;
ch=getchar ();//首次输入,根据输入设置while循环的条件
while(ch!='\n'){ //单词计数循环,若非回车则执行循环
if(ch!=' '){ //若为ch为非空格
ch=getchar (); //则继续输入字符
if (ch == ' '||ch=='\n') //对输入的下一个字符进行判断,如果下一个输入的字符是空格或者回车
count++; //则可以确定这个单词已经结束,单词计数+1
continue; //此时ch只可能是带着是空格或者回车的字符变量,把其中的值带给while进行下一轮输入条件判断
}
else if(ch == ' ') //若为空格,则继续输入下一个字符
ch=getchar (); //while循环变量控制
}
printf("%d", count);
return 0;
}
3.
输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。
输入格式:
输入在一行中给出一个不超过80
个字符长度的、以回车结束的非空字符串。
输出格式:
输出在第1行中输出字符串。如果它是回文字符串,在第2行中输出Yes
,否则输出No
。
输入样例1:
level
输出样例1:
level
Yes
输入样例2:
1 + 2 = 2 + 1 =
输出样例2:
1 + 2 = 2 + 1 =
No
(代码截图+运行结果截图):
#include <stdio.h>
#include <string.h>
int main() {
int i, n, z, k, f;
char arr[81] = { 0 };
gets(arr);
n = strlen(arr);
for (i = 0; i < (n - 1) / 2; i++) {
if (arr[i] == arr[n - 1 - i]) {
z = 1;
}
else {
z = 0;
}
if (z == 1) {
for (k = 0; k < n; k++) {
printf("%c", arr[k]);
}
printf("\n");
printf("YES\n");
}
else {
for (f = 0; f < n; f++) {
printf("%c", arr[f]);
}
printf("\n");
printf("NO\n");
}
return 0;
}
}
4.
本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:
原字母 | 对应字母 |
---|---|
A | Z |
B | Y |
C | X |
D | W |
… | … |
X | C |
Y | B |
Z | A |
输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:
输出在一行中给出替换完成后的字符串。
输入样例:
Only the 11 CAPItaL LeTtERS are replaced.
输出样例:
Lnly the 11 XZKRtaO OeGtVIH are replaced.
(代码截图+运行结果截图):
#include <stdio.h>
int main() {
int i,k;
char arr[81] = { 0 };
gets(arr);
for (i = 0; arr[i] != '\0'; i++) {
if (arr[i] >= 'A' && arr[i] <= 'Z') {
arr[i] = 'Z' - (arr[i] - 'A'); // 进行大小写字母的转换
}
}
for (k = 0; k < 81; k++) {
printf("%c", arr[k]);
}
}
5.
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
输出格式:
按照以下格式输出排序后的结果:
After sorted:
每行一个字符串
输入样例:
red yellow blue black white
输出样例:
After sorted:
black
blue
red
white
yellow
(代码截图+运行结果截图):
#include <stdio.h>
#include <string.h>
int main() {
char strings[5][80];
// 输入5个字符串
for (int i = 0; i < 5; i++) {
scanf("%s", strings[i]);
}
// 使用冒泡排序按照由小到大的顺序排序字符串
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5 - i - 1; j++) {
if (strcmp(strings[j], strings[j+1]) > 0) {
char temp[80];
strcpy(temp, strings[j]);
strcpy(strings[j], strings[j+1]);
strcpy(strings[j+1], temp);
}
}
}
// 输出排序后的字符串
printf("After sorted:\n");
for (int i = 0; i < 5; i++) {
printf("%s\n", strings[i]);
}
return 0;
}
实验结果分析
第一小题 (不少于20字):
这段代码的功能是统计输入字符串中特定字符出现的次数。程序首先使用gets函数获取一行输入的字符串,然后使用scanf_s函数读取一个单个字符。接下来,程序使用for循环遍历输入的字符串,每当找到与特定字符相同的字符时,计数器count就会增加。最后,程序打印出特定字符在输入字符串中出现的次数。
第二小题 (不少于20字):
这段代码的功能是统计输入字符串中单词的个数。程序使用getchar函数逐个读取输入的字符,然后在while循环中对读取的字符进行判断。当读取的字符不是换行符时,程序会检查字符是否为空格,如果是空格则继续读取下一个字符,直到遇到非空格字符,此时计数器count加1。最后,程序打印出单词的个数。
第三小题 (不少于20字):
这段代码的功能是判断输入的字符串是否是回文。程序首先使用gets函数获取一行输入的字符串,然后使用strlen函数计算字符串的长度。接下来,程序使用for循环遍历字符串的前一半字符,同时与对应位置的后一半字符进行比较,判断是否对称相等。如果是回文,则输出字符串和"YES";如果不是回文,则输出字符串和"NO"。
第四小题 (不少于20字):
这段代码的功能是将输入的字符串中的大写字母转换成对应的小写字母,小写字母转换成对应的大写字母,然后输出转换后的字符串。
在这段代码中,首先使用gets函数获取一行输入的字符串,然后使用for循环遍历整个字符串。在循环中,如果当前字符是大写字母,则通过对应关系将其转换成小写字母;如果是小写字母,则将其转换成大写字母。接下来,使用另一个for循环遍历整个数组,并输出转换后的字符串。
第五小题 (不少于20字):
这段代码的功能是输入5个字符串,然后使用冒泡排序对这5个字符串按照由小到大的顺序进行排序,最后输出排序后的字符串。
在这段代码中,首先定义了一个二维字符数组strings,用来存储5个字符串。接下来使用for循环,通过scanf函数输入5个字符串。然后使用两层嵌套的for循环进行冒泡排序,比较相邻的字符串并进行交换,以实现排序。最后使用for循环输出排序后的字符串。
六、实验总结 (不少于50字):
从这次实验收获大概也很多吧,首先就是知道如何输入字符串进入数组中,其次学习到二维数组的运用法,数组和while循环也大抵知道如何运用。