概述
2022秋季C语言专题实验07
- 指针应用-查找数组元素
- 请编写函数CHG(char *S)
- 7-1 秋天的第一杯奶茶
- 7-2 统计单词
- 7-3 找最大字符串
- 7-4 字符串排序
- 7-5 缩写期刊名
- 7-6 魔镜
- 7-7 书号判断与纠错
- 7-8 检查密码
- 7-9 六大门派身份识别
指针应用-查找数组元素
编写一个名为findX的函数,该函数的参数p指向一个int数组,数组的容量n由参数2指定。在该数组中,查找数据x所在的位置。如果数据x有出现多次,则返回其最后一次出现的位置对应的下标。如果没有找到,则固定返回-2。
int findX(int *p,int n,int x);
函数接口定义:
int findX(int *p,int n,int x);
在这里解释接口参数。例如:其中 p 和 n以及x 都是用户传入的参数。 p 是一个指针,指向的数组中有 n 个元素,在该数组中查找数据 x 最后一次出现的位置。
如果找到数据,返回其在数组中的最后一次出现位置的下标;如果没有找到,函数固定返回-2。
裁判测试程序样例:
#include<stdio.h>
#define N 12
//p指向int数组,数组容量为n,要找的数据是x
int findX(int *p,int n,int x);
int main()
{
int a[N];//int数组
int i,x; //循环变量i,要查找的整数x
int iRet; //函数调用的返回值//接收输入
for(i=0; i<N;i++)
iRet = scanf(“%d”, &a[i]);
iRet = scanf(“%d”,&x);//处理,调用函数
iRet=findX(a,12,x); //在名为a的容量为12的数组中,寻找数据x是否存在if ( iRet < 0)
printf(“Not Foundn”);
else
printf(“index=%d,value=%d” ,iRet ,a[iRet]);
}/* 请在这里填写答案 */
输入样例:
第一行是数组元素的值。第二行的3,表示要在数组中查找数据3出现位置。
1 2 3 4 5 6 7 8 9 10 11 12
3
输出样例:
数据3是数组的第3个元素,所对应的下标是2。
index=2,value=3
代码实现:
int findX(int *p,int n,int x)
{
int i;
//从后面往前找,即使数据重复也可以直接返回最后一次出现的;
for(i = n-1;i >= 0;i--)
{
if(p[i] == x)
return i;
}
return -2;
}
请编写函数CHG(char *S)
请编写函数CHG(char S)实现程序功能:
把S字符串中的所有字符左移一个位置,串中的第一个字符移到最后,之后把已处理的字符串逆转后仍存入原字符数组中
函数接口定义:
在这里描述函数接口。
void CHG(char *s);
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <string.h>void CHG(char *s);
int main()
{
char s[100], t[100];
scanf(“%s”, s);
CHG(s);
printf(“%s”, s);
return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
abcde
输出样例:
在这里给出相应的输出。例如:
aedcb
代码实现:
void CHG(char *s)
{
int n = strlen(s);
char *ps, kong = *s;
for(ps = s; ps < s+n-1; ps++) //把依次把元素向前挪一位
{
*ps = *(ps + 1);
}
*(s+n-1) = kong; //把刚才空变量存储的值放到最后
char *pb;
for(ps = s, pb = s+n-1; ps < pb; ps++, pb--)
{
char m = *ps; //交换
*ps = *pb;
*pb = m;
}
}
7-1 秋天的第一杯奶茶
2020年入秋后,朋友圈和微博上疯狂转发着自己收到的“秋天的第一杯奶茶”。然而小明却什么也没有收到,但是学校举行了这样一场活动:通过5道编写程序题目中的3道即可获得一杯奶茶。小明也想喝到秋天的第一杯奶茶。下面就请你判断小明是否有机会拿到学校的奶茶。
输入格式:
两行,第一行给出一个整数N(1<=N<=100),随后N行,每行给出一个长度为5的字符串(仅包含Y和N,分别代表5个题目小明是否通过),Y代表本题通过,N代表本题未通过。
输出格式:
可以拿到奶茶输出“YES”,否则输出“NO”(输出不含双引号)。
输入样例:
3
NNNYN
NNYYY
YYYNN
输出样例:
NO
YES
YES
代码实现:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n > 0)
{
int cnt = 0;
char str[6];
for(int i = 0; i < 6; i++)
{
scanf("%c",&str[i]);
if(str[i] == 'Y')
cnt++;
}
if(cnt >= 3)
printf("YESn");
else printf("NOn");
n--;
}
return 0;
}
7-2 统计单词
输入长度不超过80的英文文本,统计该文本中长度为n的单词总数(单词之间只有一个空格)。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。
每组数据首先输入1个正整数n(1≤n≤50),然后输入1行长度不超过80的英文文本(只含英文字母和空格)。注意:不要忘记在输入一行文本前吸收换行符。
输出格式:
对于每组测试数据,输出长度为n的单词总数。
输入样例:
2
5
hello world
5
acm is a hard game
输出样例:
2
0
代码实现:
#include <stdio.h>
#include <string.h> //字符的函数库
int main()
{
int n, l, i, j, times, cnt; //times用来记录出现要求长度的次数
char str[81];
scanf("%d",&n); //输入测试的组数
for(i = 1; i <= n; i++)
{
scanf("%d",&l); //输入要查找的长度
times = 0; //给次数和计数初始化
cnt=0;
getchar(); //吸收掉输入结束的回车字符,避免影响后面的字符输入
gets(str); //输入字符串
for(j = 0; j <= strlen(str); j++) //从零循环到结束字符,所以要<=,+1也行。
{
if(str[j] != ' ' && str[j] != '