二级C的题目,不懂

来源:百度知道 编辑:UC知道 时间:2024/05/31 23:51:00
fun函数那一块不懂,大家帮我讲解下。。。能逐行讲解就更好了
1.填空题
请补充函数fun(),该函数的功能是:按'0'到'9'统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。
例如:输入"x=112385713.456+0.909*bc",结果为:1=3,3=2,5=2,7=1,9=2。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdlib.h>
#include<stdio.h>
#define N 1000
void 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(【1】)
{
if(*p>='0'&&*p<='9')
【2】;
p++;
}
for(i=1,j=0;i<10;i=i+2,j++)
【3】;
}
void main()
{
char str[N];
int num[10],k;
system("CLS");
printf("\nPlease enter a char string:");
gets(str);
printf("\n**The original string**\n");
puts(str);
fun(str,num);

void 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(【1】) \因为是*p指向了,你输入的字符数组的首地址,所以所以后面的p++家到‘\0’就结束,可以理解为查找结束。
{
if(*p>='0'&&*p<='9')
【2】; \bb[*p-'0']++ 这就是就是 如果*p等于那个数,
就让那个数做为数组下标自加,而判断语句if限定了 0到9,例如你在输入的数组中有出现6次5,哪bb[5]的值也就等于6么。

p++;
}
for(i=1,j=0;i<10;i=i+2,j++) \因为我们上面的bb[*p-'0']++ 是0到9出现的都有放在数组里,但是我们只要奇数所以i+=2;因为是从bb[1]开始所以都是奇数,就可以把所得奇数出现次数放在num[j],
【3】;
}
就如:
bb[1]、bb[3]、bb[5]、bb[7]、bb[9]中,中的值分别放在
num[0]、num[1]、num[2]、num[3]、num[4]。

你试着做下统计偶数的,你自己~就理解了。

第一空呢 while(*p) 跟while(true)差不多 p所指向有值就是真继续执行 要是到\0 就是假了 就跳出了 你也可以while(*p!='\0')也是对的
第二 bb[*p-'0']++ 比如说 这时*p指向的值为5 那么5的ASCII码为35 减掉0的ASCII码30 就等于5了 这时bb[5]就++ 5的个数就张一个数 其他以此