注册 登录
编程论坛 C语言论坛

小白又来求助啦,对编程中的函数问题有疑惑,求大佬们解答

啦啦啦帆帆 发布于 2019-10-12 14:19, 2744 次点击
本题要求实现一个函数,可统计任一整数中某个位数出现的次数。例如-21252中,2出现了3次,则该函数应该返回3。
函数接口定义:
int Count_Digit ( const int N, const int D );
其中N和D都是用户传入的参数。N的值不超过int的范围;D是[0, 9]区间内的个位数。函数须返回N中D出现的次数。
#include<stdio.h>

int Count_Digit( const int x, const int y );

int main(){
    int x,y;
    scanf("%d%d",&x,&y);
    printf("%d\n",Count_Digit(x,y));
    return 0;
}
运行结果为[Error] ld returned 1 exit status
12 回复
#2
rjsp2019-10-12 14:42
你声明了一个函数 int Count_Digit( const int x, const int y );
但并没有这个函数的实现呀,你要根据题目的要求写出函数实现。
#3
rjsp2019-10-12 14:45
程序代码:
int Count_Digit( const int N, const int D )
{
    int count = (N==0 && D==0);
    for( unsigned t=N<0?-N:+N; t!=0; t/=10 )
        count += (t%10==D);
    return count;
}
#4
啦啦啦帆帆2019-10-12 15:08
回复 2楼 rjsp
其实我不怎么会,不明白
#5
啦啦啦帆帆2019-10-12 15:09
回复 3楼 rjsp
for语句中的不很理解
#6
啦啦啦帆帆2019-10-12 15:57
回复 3楼 rjsp
无法编译
[Error] 'for' loop initial declarations are only allowed in C99 or C11 mode
[Note] use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
#7
rjsp2019-10-12 15:59
回复 5楼 啦啦啦帆帆
你总得了解一点点C吧,你让我怎么讲?
#8
啦啦啦帆帆2019-10-12 16:06
回复 7楼 rjsp
嗯。。有一点点了解,刚入门
#9
自学的数学2019-10-12 16:18
程序代码:
#include<stdio.h>

int Count_Digit( const int N, const int D )

 {
int tmp[10] = {0};
int n = N;
if (n < 0)
{
n = -n;
}
if ((n == 0) && (D == 0))
{
return 1;
}
while (n > 0)
{
for (int i = 0; i < 10; i++)
{
if (n % 10 == i)
{
tmp[i] += 1;
}
}
n = n / 10;

 }
for (int i = 0; i < 10; i++)
{
if (D == i)
{
return tmp[i];
}
}
return 0;
}

int main(){
    int N,D;
    scanf("%d %d",&N,&D);
    printf("%d\n",Count_Digit(N,D));
    return 0;
}
#10
rjsp2019-10-12 16:37
回复 8楼 啦啦啦帆帆
unsigned t = N<0?-N:+N;
是在N为负数的情况下转化为正数。假如不转化为正数的话,后面代码中的判断条件 t%10==D 就要变为 t%10==+D || t%10==-D,运行效率不高
另外之所以 t 的类型定为 unsigned 而不是 int,是因为 int最小值 更换符号后可能超出int范围。

for( unsigned t=……; t!=0; t/=10 ) …… t%10 ……
是循环获取 t 的十进制形式上的每一位。
假设 t = 12345; 那么 t%10 就是 5
执行 t/=10 后 t 变为 1234,t%10 就是 4
执行 t/=10 后 t 变为 123,t%10 就是 3
执行 t/=10 后 t 变为 12,t%10 就是 2
执行 t/=10 后 t 变为 1,t%10 就是 1
执行 t/=10 后 t 变为 0, 循环条件(t!=0)不满足,退出循环

然后再看第一句 int count = (N==0 && D==0),
这个 N==0 && D==0 是因为 0 中有1个0,这是个特殊的情况
#11
啦啦啦帆帆2019-10-14 17:09
回复 9楼 自学的数学
非常谢谢你呀
#12
啦啦啦帆帆2019-10-14 17:11
回复 10楼 rjsp
谢谢你,新手进门,有点难,你不要生气哦
#13
啦啦啦帆帆2019-10-14 17:13
谢谢两位大佬对小白的关心,我会加油的,向你们学习!😊
1