开启掘金成长之旅!这是我参与「掘金日新计划 · 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*/
}
}
}