| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:[讨论]重载练习,大家做做
只看楼主 加入收藏
zzymoon
Rank: 1
等 级:新手上路
帖 子:82
专家分:1
注 册:2006-9-19
收藏
 问题点数:0 回复次数:9 
[讨论]重载练习,大家做做

写二个名为mod的重载函数,要求一个用来求两个整数的余数,一个用来求两个实数之间的余数,写出完整的程序,特别要注意容错功能!
OK,不要小看这个题目,写出来再说``````
实数的求模就是将实数先转换成int型(采用四舍五入法):-9.5变成-10,2.2变成2

环境:VC++/VS/C 不限
输入:提示用户输入m和n
输出:输出m%n=?

[此贴子已经被作者于2006-12-1 12:59:46编辑过]

搜索更多相关主题的帖子: 重载 练习 
2006-11-30 23:17
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
实数的%具体操作结果是什么样子的,举个例子吧.

倚天照海花无数,流水高山心自知。
2006-11-30 23:21
zzymoon
Rank: 1
等 级:新手上路
帖 子:82
专家分:1
注 册:2006-9-19
收藏
得分:0 

恩,实数的求模就是将实数先转换成int型(采用四舍五入法):-9.5变成-10,2.2变成2


程序天下,C的亡魂。 偶``````来自地狱
2006-11-30 23:26
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
long mod(double a,double b)
{
long c,d;
c=(long)a;
d=(long)b;
if(c<0)
{
c--;
}
if(d<0)
{
d--;
}
return c%d;
}


倚天照海花无数,流水高山心自知。
2006-12-01 11:10
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 

#include<math.h>
...

int mod(double m,double n)
{
int a,b;
a=(m-0.5)>=int(m)?ceil(m):floor(m);
if(n==0) exit(0);
b=(n-0.5)>=int(n)?ceil(n):floor(n);
return a%b;
}


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-12-01 11:46
zzymoon
Rank: 1
等 级:新手上路
帖 子:82
专家分:1
注 册:2006-9-19
收藏
得分:0 
以下是引用nuciewth在2006-12-1 11:10:33的发言:
long mod(double a,double b)
{
long c,d;
c=(long)a;
d=(long)b;
if(c<0)
{
c--;
}
if(d<0)
{
d--;
}
return c%d;
}

如果传进来的a= -9.2,b= -3.4,依题意,KEY=-9%-3=0;而上面的KEY=-10%-4= -2!
所以不对!
而且要求是用函数重载,而上面未用到``````


程序天下,C的亡魂。 偶``````来自地狱
2006-12-01 12:37
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用zzymoon在2006-12-1 12:37:20的发言:

如果传进来的a= -9.2,b= -3.4,依题意,KEY=-9%-3=0;而上面的KEY=-10%-4= -2!
所以不对!
而且要求是用函数重载,而上面未用到``````

我看错了,是用四舍五入.改一下吧,我只写了一个,整数的应该可以直接写吧.

long mod(double a,double b)
{
long c,d;
if(a<0)
{
c=(long)(a-0.5);
}
else
{
c=(long)(a+0.5);
}
if(b<0)
{
d=(long)(b-0.5);
}
else
{
d=(long)(b+0.5);
}
return c%d;
}


倚天照海花无数,流水高山心自知。
2006-12-01 12:50
zzymoon
Rank: 1
等 级:新手上路
帖 子:82
专家分:1
注 册:2006-9-19
收藏
得分:0 
以下是引用unicorn在2006-12-1 11:46:08的发言:

#include<math.h>
...

int mod(double m,double n)
{
int a,b;
a=(m-0.5)>=int(m)?ceil(m):floor(m);
if(n==0) exit(0);
b=(n-0.5)>=int(n)?ceil(n):floor(n);
return a%b;
}

也不对,要求是对实数四舍五入,如果传进来的a= -1.2,
那经过这一句:a=(m-0.5)>=int(m)?ceil(m):floor(m);
即:-1.7>= -1为假,a=floor(-1.2)= -2,而我们的要求是a= -1!


程序天下,C的亡魂。 偶``````来自地狱
2006-12-01 12:57
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

long mod(double a, double b)
{
long m, n;

if (a > 0)
m = (long) (a + 0.5);
else
m = (long) (a - 0.5);
if (b > 0)
n = (long) (b + 0.5);
else
n = (long) (b - 0.5);
if (n == 0)
exit(1);
return m % n;
}


2006-12-01 14:56
zzymoon
Rank: 1
等 级:新手上路
帖 子:82
专家分:1
注 册:2006-9-19
收藏
得分:0 

// 实验一:实数求余.cpp : 定义控制台应用程序的入口点。
//利用函数重载求二个数的余数(包括实数)

#include <stdafx.h>
#include <iostream>
using namespace std;
int mod(float m,float n)
{
//cout<<"int mod(float m,float n) is transfer.\n";use to test which function is transtered
int tmp_m,tmp_n;
tmp_m=int(m>0?m+0.5:m-0.5);//if m>0,m add 0.5 else m reduce 0.5 then get its integer
tmp_n=int(n>0?n+0.5:n-0.5);//the same as preceding
return tmp_m%tmp_n;
}
int mod(int m,int n)
{
//cout<<"int mod(int m,int n) is transfer.\n";use to test which function is transtered
return m%n;
}
int _tmain(int argc, _TCHAR* argv[])
{
float m,n=1;//initialize n and y to 1
int x,y=1;
int value,flag;
cout<<"[0]:整数求余\t[1]:实数求余\n";
handle:cout<<"CHOOSE>>";
cin>>flag;
if(flag!=0&&flag!=1)//avoid the wrong number input
{
cout<<"CHOICE IS WRONG!\n";
goto handle;
}
cout<<"Input m:";
if(flag)
cin>>m;
else
cin>>x;
here:cout<<"Input n:";
if(flag)
cin>>n;
else
cin>>y;
if(!n||!y)//if user input 0,this will do
{
cout<<"Input error,n can't be 0!\n";
goto here;
}

if(flag)
value=mod(m,n);
else
value=mod(x,y);
cout<<"m%n="<<value<<endl;
return 0;
}

我写出完整的程序如上,但是其中还有一个bug,谁能找出??


程序天下,C的亡魂。 偶``````来自地狱
2006-12-01 19:03
快速回复:[讨论]重载练习,大家做做
数据加载中...
 
   



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

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