| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 284 人关注过本帖
标题:小白又来求助啦,对编程中的函数问题有疑惑,求大佬们解答
只看楼主 加入收藏
啦啦啦帆帆
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2019-10-8
  问题点数:0  回复次数:12   
小白又来求助啦,对编程中的函数问题有疑惑,求大佬们解答
本题要求实现一个函数,可统计任一整数中某个位数出现的次数。例如-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
搜索更多相关主题的帖子: int 出现 函数 const 编程 
2019-10-12 14:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:328
帖 子:6798
专家分:39454
注 册:2011-1-18
  得分:0 
你声明了一个函数 int Count_Digit( const int x, const int y );
但并没有这个函数的实现呀,你要根据题目的要求写出函数实现。
2019-10-12 14:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:328
帖 子:6798
专家分:39454
注 册:2011-1-18
  得分:0 
程序代码:
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;
}
2019-10-12 14:45
啦啦啦帆帆
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2019-10-8
  得分:0 
回复 2楼 rjsp
其实我不怎么会,不明白
2019-10-12 15:08
啦啦啦帆帆
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2019-10-8
  得分:0 
回复 3楼 rjsp
for语句中的不很理解
2019-10-12 15:09
啦啦啦帆帆
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2019-10-8
  得分:0 
回复 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
2019-10-12 15:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:328
帖 子:6798
专家分:39454
注 册:2011-1-18
  得分:0 
回复 5楼 啦啦啦帆帆
你总得了解一点点C吧,你让我怎么讲?
2019-10-12 15:59
啦啦啦帆帆
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2019-10-8
  得分:0 
回复 7楼 rjsp
嗯。。有一点点了解,刚入门
2019-10-12 16:06
自学的数学
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:746
专家分:3154
注 册:2017-11-15
  得分:0 
程序代码:
#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;
}
2019-10-12 16:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:328
帖 子:6798
专家分:39454
注 册:2011-1-18
  得分:0 
回复 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,这是个特殊的情况
2019-10-12 16:37
快速回复:小白又来求助啦,对编程中的函数问题有疑惑,求大佬们解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.116819 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved