请补充fun函数,该函数的功能是:按’0’到’9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。
例如,输入“x=1123.456+0.909*bc”,结果为:1=2,3=1,5=1,7=0,9=2。
[注意] 部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
[试题源程序]
#include<conio.h>
#include<stdio.h>
#define N 20
fun(char*tt, int num[])
int i, j;
int bb[10];
char *p=tt;
for(i=0;i<10; i++)
num[i]=0;
bb[i]=0;
while( )
if(*p>=’0’&&*p<=’9’)
;
p++;
for(i=i, J=0; i<10; i=i+2, j++)
;
main()
char str[N];
int num[10], k;
cirscr();
printf("\\nplease enter a string:");
gets(str);
printf("\\n*******The original string*******\\n");
puts(str);
fun(str, num);
printf("\\n******The number of letter********\\n”);
for(k=0; k<5; k++)
printf("\\n");
printf("%d=%d ", 2*k+1, hum[k]);
printf("\\n");
return;
参考答案:[1] *D
[2] bb[*p-’0’]++
[3] num[j]=bb[i]
解析: 本题的设计思路是:①先把数组num的各元素清0;②遍历字符串,利用数字字符在ASCAII码中的连续规律,使用(数字字符-’0’)作为数组的下标,个数作为数组元素的值。
填空1:此处应该是使用临时指针p遍历字符串str,所以应填*p。
填空2:因为10个数字字符是连续的,将它们和’0’做差运算刚好构成数组的下标。所以此处应该填bb[*p-’0’]++。
填空3:最后要把奇数数字出现的次数赋给数组num保存。所以此处应填num[j]=bb[i]。