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

写二个名为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
zzymoon
Rank: 1
等 级:新手上路
帖 子:82
专家分:1
注 册:2006-9-19
收藏
得分:0 

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


程序天下,C的亡魂。 偶``````来自地狱
2006-11-30 23:26
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
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
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.049527 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved