1.填空题
下列给定程序中,函数fun()的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。
【答案】
【1】long d 【2】d%2==0
3.编程题
请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。
例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
void fun(char*tt,int pp[])
{
}
main()
{ char aa[1000];
int bb[26],k,n;
clrscr();
printf("\nplease enter a char string:");
scanf("%s",aa);
fun(aa,bb);
for(k=0;k<26;k++)printf("%d",bb[k]);
printf("\n");
}
【答案】
void fun(char*tt,int pp[])
{
int i;
for(i=0;i<26;i++)
pp[i]=0;
while(*tt)
{switch(*tt)
{
case'a':pp[0]++;break;
case'b':pp[1]++;break;
case'c':pp[2]++;break;
case'd':pp[3]++;break;
case'e':pp[4]++;break;
case'f':pp[5]++;break;
case'g':pp[6]++;break;
case'h':pp[7]++;break;
case'i':pp[8]++;break;
case'j':pp[9]++;break;
case'k':pp[10]++;break;
case'l':pp[11]++;break;
case'm':pp[12]++;break;
case'n':pp[13]++;break;
case'o':pp[14]++;break;
case'p':pp[15]++;break;
case'q':pp[16]++;break;
case'r':pp[17]++;break;
case's':pp[18]++;break;
case't':pp[19]++;break;
case'u':pp[20]++;break;
case'v':pp[21]++;break;
case'w':pp[22]++;break;
case'x'p:pp[23]++;break;
case'y':pp[24]++;break;
case'z':pp[25]++;break;
}
tt++;
}
}
【考点】字符串、switch语句、数据统计的应用。
【解析】
void fun(char*tt,int pp[])
{ int i;/*声明一个局部变量i*/
for(i=0;i<26;i++)/*pp[]是在main函数中声明的数组bb[26]的形参,用于返回小写字母的个数,由于其初始值 是不确定的,因此必须赋初值,计数前字母的个数为0*/
pp[i]=0;
while(*tt)/*while用于判断字符串是否结束,也可以写为while(*tt!=‘\0’)*/
{switch(*tt)/*逐个访问字符,判断字符是否为小写字母并分别计数*/
{
case ’a’:pp[0]++;break;/ *由于switch语句是从前到后运行的,所以当已经找出一个小写字母后不能自动 退出循环,因而break语句不能省略*/
case’b’:pp[1]++;break;
……
}
tt++;/*指向字符串的指针t t指向下一个字符*/}
}
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |