1.填空題
下列給定程序中,函數fun()的功能是:將長整型數中每一位上為偶數的數依次取出,構成一個新數放在t中。
【答案】
【1】long d 【2】d%2==0
3.編程題
請編寫一個函數void fun(char *tt,int pp[]),統(tǒng)計在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語句、數據統(tǒng)計的應用。
【解析】
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語句是從前到后運行的,所以當已經找出一個小寫字母后不能自動 退出循環(huán),因而break語句不能省略*/
case’b’:pp[1]++;break;
……
}
tt++;/*指向字符串的指針t t指向下一個字符*/}
}
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |