计算机二级C语言程序设计题

90 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

计算机二级C语言程序设计题

题目:

请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中"a"到"z"26个小写字母各自出现的次数,并依次放在pp所指的数组中。例,当输入字符abcdefgabcdeabc后.程序的输出结果应该是:3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h>
void fun (char*tt, int pp[])
{
?
}
main()
{
	char aa[1000];
	int bb[26], k;
	void NONO();
	printf("\nPlease enter a char string: ");
	scanf("%s", aa);
	fun(aa, bb);
	for(k=0; k<26; k++)
	{
		printf("%d ", bb[k]);
	}
	printf("\n\n");
	NONO();
	system("pause");
}
void NONO()
{/* 本函数用于打开文件,输入测试数据,
 调用函数,输出数据,关闭文件。*/
	char aa[1000];
	int bb[26], k, n;
	FILE *rf, *wf;
	rf=fopen("in.dat","r");
	wf=fopen("out.dat","w");
	for(n=0; n<8; n++)
	{
		fscanf(rf, "%s", aa);
		fun(aa, bb);
		for(k=0; k<26; k++) 
		{
			fprintf (wf, "%d ", bb[k]);
		}
		fprintf(wf, "\n");
	}
	fclose(rf);
	fclose(wf);
}

题目分析:

通过循环判断语句来判断tt所指字符串中的字符是否为小写字母,若是则相应的pp数组元素值加1。

解题思路:

定义一个字符数组,用于保存用户输入的字符串,定义一个长度为26的数组,每一个下标对应的空间用于分别记录26个字母中每个字母的个数。在while循环中历字符串中的字符,遍历到字符的ASCll码值减去'a'的ASCll码值就是对应的统计字母的变量的下标,此时变量值加1。

参考答案:

void fun (char*tt, int pp[])
{
	int i;
	for(i=0; i<26; i++)
	{
		pp[i]=0;/*初始化pp数组备元素为0*/
	}
	for(; *tt!='\0'; tt++)/*遍历字符串,统计小写字母出现的个数*/
	{
		if(*tt>='a' && *tt<='z')	/*如果字符为小写字母*/
		{
			pp[*tt-'a']++;/*使统计小写字母个数的数组pp中的对应元素加A*/
		}
	}
}

结果如下:

3.png