【c语言pat】

1. 实验7-1-11 求整数序列中出现次数最多的数(15 分)

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式: 输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。

输出格式: 在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。

输入样例: 10 3 2 -1 5 3 4 3 0 3 2

输出样例: 3 4

#include  <stdio.h>
#define N 1000
int main()
{
	int i, j, n;
	int a[N];  //用来保存输入数据
	int b[N] = { 0 };  //用来保存出现次数(类似哈希表)
	int max;
	int index = 0;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}
	for (i = 0; i < n; i++)
	{
		b[a[i]]++;
	}
	max = b[0];
	for (i = 1; i <= n; i++)  //注意小于等于n
	{
		if (max < b[i])
		{
			max = b[i];
			index = i;
		}
	}
	printf("%d %d\n", index, max);
	return 0;
}

2. 实验7-3-3 统计大写辅音字母 (15 分)

英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。
输入格式:输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式: 输出在一行中给出字符串中大写辅音字母的个数。
输入样例:HELLO World!
输出样例: 4

#include  <stdio.h>
int main()
{
	char str[81];
	char* p = str;
	int cnt = 0; 
	gets(str, 81);
	while (*p != '\0')
	{
		if (*p >= 'A' && *p <= 'Z')
		{
			if (*p != 'A' && *p != 'E' && *p != 'I' && *p != 'O' && *p != 'U')
				cnt++;
		}
		p++;
	}
	printf("%d", cnt);
}

3. 实验2-3-2 求N分之一序列前N项和 (15 分)

本题要求编写程序,计算序列 1 + 1/2 + 1/3 + … 的前N项之和。
输入格式: 输入在一行中给出一个正整数N。
输出格式: 在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
6
输出样例:
sum = 2.450000

#include  <stdio.h>
int main()
{
	int n,i;
	scanf("%d", &n);
	double sum = 0;
	for (i = 1; i <= n; i++)
	{
		sum=sum+(1.00/i);
	}
	printf("sum = %.6f", sum);
}

4. 实验7-3-7 字符转换 (15 分)

本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。
输入格式:输入在一行中给出一个不超过80个字符且以回车结束的字符串。
输出格式: 在一行中输出转换后的整数。题目保证输出不超过长整型范围。
输入样例: free82jeep5
输出样例: 825

#include  <stdio.h>
int main()
{
	int i;
	char ch;
	char str[N];
	char* p = str;
	ch = getchar();
	for (i = 0; ch != '\n'; i++)
	{
		str[i] = ch;
		ch = getchar();
	}
	while (*p != '\n')
	{
		if (*p >= '0' && *p <= '9')
			printf("%c", *p);
		p++;
	}
}

6. 实验7-3-6 字符串转换成十进制整数 (15 分)

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式: 输入在一行中给出一个以#结束的非空字符串。
输出格式: 在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
±P-xf4±1!#
输出样例:
-3905

#include  <stdio.h>
#include <math.h>
#define N 1000
int num(char c)
{
	if (c == 'a' || c == 'A')
		return 10;
	if (c == 'b' || c == 'B')
		return 11;
	if (c == 'c' || c == 'C')
		return 12;
	if (c == 'd' || c == 'D')
		return 13;
	if (c == 'e' || c == 'E')
		return 14;
	if (c == 'f' || c == 'F')
		return 15;
}
int main()
{
	int i, j = 0, flag = 0, sum = 0, count = 0;
	char str1[N], str2[N];
	char* p = str1;
	gets_s(str1, N);
	while (*p != '#')
	{
		if (flag==0 && *p == '-')
			flag = 1;
		if ((*p >= '0' && *p <= '9') ||
			(*p >= 'A' && *p <= 'F') ||
			(*p >= 'a' && *p <= 'f'))
		{
			if(flag == 0)
				flag = 2;
			str2[j++] = *p;
		}
		p++;
	}
	for (i = j - 1; i >= 0; i--)
	{
		if (str2[i] >= '0' && str2[i] <= '9')
			sum += (str2[i] - '0')*pow(16, count);
		else
			sum += (num(str2[i]))*pow(16, count);
		count++;
	}
	if (flag == 1)
		printf("-%d", sum);
	else
		printf("%d", sum);
}

7. 实验7-3-5 输出大写英文字母 (15 分)

本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。
输入格式: 输入为一个以回车结束的字符串(少于80个字符)。
输出格式: 按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。
输入样例1: FONTNAME and FILENAME
输出样例1: FONTAMEIL
输入样例2: fontname and filrname
输出样例2: Not Found

#include  <stdio.h>
#define N 1000
int main()
{
	int i, len=0, flag = 0;
	char ch;
	char str[N];
	int alp[N] = { 0 };
	char* p = str;
	ch = getchar();
	for (i = 0; ch != '\n'; i++)
	{
		str[i] = ch;
		len++;
		ch = getchar();
	}
	for (i = 65; i <= 90; i++)
	{
		alp[i] = 1;
	}
	for(i=0;i<len;i++)
	{
		if ((*p >= 'A') && (*p <= 'Z'))
		{
			if (alp[*p] == 1)
			{
				printf("%c", *p);
				alp[*p] = 0;
				flag = 1;
			}
		}
		p++;
	}
	if (flag == 0)
		printf("Not Found");
}

8. 实验7-3-4 字符串替换 (15 分)

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换: 原字母 对应字母 A Z
B Y
C X
D W
… …
X C
Y B
Z A
输入格式: 输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式: 输出在一行中给出替换完成后的字符串。
输入样例: Only the 11 CAPItaL LeTtERS are replaced.
输出样例: Lnly the 11XZKRtaO OeGtVIH are replaced.

#include  <stdio.h>
#define N 1000
int main()
{
	int i, j, len = 0;
	char ch;
	char str[N];
	char* p = str;
	int alp[N];
	ch = getchar();
	for (i = 0; ch != '\n'; i++)
	{
		str[i] = ch;
		len++;
		ch = getchar();
	}
	for (i = 65, j = 90; i <= 90; i++, j--)
	{
		alp[i] = j;
	}
	for (i = 0; i < len; i++)
	{
		if ((*p >= 'A') && (*p <= 'Z'))
		{
			printf("%c", alp[*p]);
		}
		else
			printf("%c", *p);
		p++;
	}
}

9. 实验7-3-2 查找指定字符 (15 分)

本题要求编写程序,从给定字符串中查找某指定的字符。
输入格式:输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。
输出格式:如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。
输入样例1: m programming
输出样例1: index = 7
输入样例2: a 1234
输出样例2: Not Found

#include  <stdio.h>
#define N 1000
int main()
{
	int i, len = 0, max = -1, flag = 0;
	char ch, findx;
	char str[N];
	scanf("%c\n", &findx);  //注意添加\n,否则只读一个字符就结束了
	ch = getchar();
	for (i = 0; ch != '\n'; i++)
	{
		str[i] = ch;
		len++;
		ch = getchar();
	}
	for (i = 0; i < len; i++)
	{
		if (str[i] == findx && i > max)
		{
			max = i;
			flag = 1;
		}
	}
	if (flag == 1)
		printf("index = %d", max);
	else
		printf("Not Found");
}

10. 实验7-3-1 字符串逆序 (15 分)

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
输入格式:输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式: 在一行中输出逆序后的字符串。
输入样例:
Hello World!
输出样例:
!dlroW olleH

#include  <stdio.h>
#define N 1000
int main()
{
	int i, len = 1;
	char ch;
	char str[N];
	ch = getchar();
	for (i = 0; ch != '\n'; i++)
	{
		str[i] = ch;
		len++;
		ch = getchar();
	}
	for (i = len - 1; i >= 0; i--)
	{
		printf("%c", str[i]);
	}
}

11. 实验7-1-10 交换最小值和最大值 (15 分)

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例:
5
8 2 5 1 4
输出样例: 1 2 5 4 8

#include<stdio.h>
#define N 100
int main()
{
	int n, min, max, temp, i, index;
	int num[N];
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf("%d", &num[i]);
	}
	min = num[0];
	for (i = 1; i < n; i++)
	{
		if (num[i] < min)
		{
			min = num[i];
			index = i;
		}		
	}
	temp = num[0];
	num[0] = min;
	num[index] = temp;
	max = num[1];
	for (i = 2; i < n; i++)
	{
		if (num[i] > max)
		{
			max = num[i];
			index = i;
		}
	}
	temp = num[n - 1];
	num[n - 1] = max;
	num[index] = temp;
	for (i = 0; i < n; i++)
	{
		printf("%d ", num[i]);
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值