求以下问题的完整代码,要求使用c++面向对象的程序设计方法和构造函数
n的类型有要求吗?下面的代码中,n按照int类型来处理的。
运行结果:
代码:
#include <iostream>
using namespace std;
class MathFunc
{
public:
MathFunc() {}
double pow(double x, int n)
{
double t = 1;
if (n > 0)
{
for (int i = 0; i < n; i++)
t = t * x;
return t;
}
else if (n == 0)
return 1;
else
{
for (int i = 0; i < -n; i++)
t = t / x;
return t;
}
}
};
int main()
{
double x;
int n;
char ch;
cin >> x >> ch >> n;
MathFunc f;
cout << f.pow(x, n);
return 0;
}
#include <iostream>
using namespace std;
class Power {
public:
Power(double a, int b): base(a), exponent(b){}
double pow(){
if(exponent == 0) return 1; //如果指数为0,直接返回1
double half = pow(base, exponent/2); //递归计算指数的一半幂
if(exponent % 2 == 0) return half * half; //如果指数为偶数,直接返回一半幂的平方
else if(exponent > 0) return half * half * base; //如果指数为奇数且大于0,返回一半幂的平方乘底数
else return half * half / base; //如果指数为奇数且小于0,返回一半幂的平方除以底数
}
private:
double base;
int exponent;
};
int main() {
double x;
int n;
cout << "请输入底数x:";
cin >> x;
cout << "请输入指数n:";
cin >> n;
Power p(x,n);
cout << p.pow() << endl;
return 0;
}
在这个例子中,我们定义了一个Power类,它有两个成员变量base和exponent,分别表示底数和指数。在构造函数中,我们将底数和指数作为参数传入,并分别赋给成员变量。在pow()函数中,我们使用递归计算指数。如果指数为0,直接返回1;如果指数为偶数,直接返回指数的一半幂的平方;如果指数为奇数且大于0,返回指数的一半幂的平方乘以底数;如果指数为奇数且小于0,返回指数的一半幂的平方除以底数。最后,我们在主函数中通过输入底数和指数,创建一个Power对象,并调用pow()函数输出结果。
需要注意的是,在这个例子中我们假定了指数为整数。如果指数可能是小数,我们需要通过一定的方法转换为整数,例如按照指定精度取整后转换,或者使用分数等方式进行转换。如果指数不能为负数,则需要进行额外的异常处理等。如有帮助,请采纳,谢谢
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!下面是完善界面后的源代码,以及一次运行的过程截图:
#include<iostream>
#include<time.h>
#include<string>
#include<map>
using namespace std;
#define random(x) rand()%(x)
int main()
{
srand(time(NULL));
map<int, int>insstream;
int count = 0;
while (count < 320) {
int m = random(319);
count++;
insstream.insert(pair<int, int>(count, m + 1));
int m1 = random(m + 1);
count++;
insstream.insert(pair<int, int>(count, m1));
count++;
insstream.insert(pair<int, int>(count, m1 + 1));
int m2 = random(319 - (m1 + 2) + 1) + m1 + 2;
count++;
insstream.insert(pair<int, int>(count, m2));
}
/*检测指令流
for (auto ins = insstream.begin(); ins != insstream.end(); ins++)
cout << ins->second << " ";
*/
map<int, int>pagestream;
for (auto ins = insstream.begin(); ins != insstream.end(); ins++)
pagestream.insert(pair<int, int>(ins->first, ins->second / 10));
//检测页面流
cout << "页面流如下:" << endl;
for (auto page = pagestream.begin(); page != pagestream.end(); page++)
{
cout << page->second << " ";
if (page->first % 32 == 0) { cout << endl; }
}
string choose;
cout << "*************************************************" << endl;
cout << "欢迎使用本程序~" << endl;
int allocation = random(6 - 3 + 1) + 3;
cout << "本次分配的物理块数为:" << allocation << "块!" << endl;
while (true) {
cout << "请选择您需要的算法(FIFO、LRU、OPT、LFU):" << endl;
cout << "或输入S或s停止程序~" << endl;
cin >> choose;
double miss = 0;
map<int, int>run;
if (choose == "FIFO" || choose == "fifo") {
for (auto page = pagestream.begin(); page != pagestream.end(); page++)
{
for (auto r = run.begin(); r != run.end(); r++)
{
if (r->second == page->second) { goto skip; }
}
run.insert(pair<int, int>(page->first, page->second));
miss++;
if (run.size() > allocation)
run.erase(run.begin());
skip:
cout << "*****************" << endl;
//检测运行流
for (auto r = run.begin(); r != run.end(); r++)
cout << r->second << " ";
cout << endl;
}
cout << "*********************" << endl;
cout << "FIFO算法的页面命中率=" << 1 - (miss / 320) << endl;
cout << "*********************" << endl;
}
else if (choose == "LRU" || choose == "lru") {
for (auto page = pagestream.begin(); page != pagestream.end(); page++)
{
for (auto r = run.begin(); r != run.end(); r++)
{
if (r->second == page->second) {
run.erase(r);
goto skip2;
}
}
miss++;
skip2:
run.insert(pair<int, int>(page->first, page->second));
if (run.size() > allocation)
run.erase(run.begin());
//检测运行流
cout << "*****************" << endl;
for (auto r = run.begin(); r != run.end(); r++)
cout << r->second << " ";
cout << endl;
}
cout << "*********************" << endl;
cout << "LRU算法的页面命中率=" << 1 - (miss / 320) << endl;
cout << "*********************" << endl;
}
else if (choose == "OPT" || choose == "opt") {
for (auto page = pagestream.begin(); page != pagestream.end(); page++)
{
for (auto r = run.begin(); r != run.end(); r++)
{
if (r->second == page->second) { goto skip3; }
}
if (run.size() == allocation) {
multimap<int, int>length;
for (auto r = run.begin(); r != run.end(); r++) {
for (auto page2 = page; page2 != pagestream.end(); page2++) {
if (r->second == page2->second) {
int len = page2->first - page->first;
length.insert(pair<int, int>(len, r->first));
break;
}
if (page2 == pagestream.find(pagestream.size())) {
int len = 321 - page->first;
length.insert(pair<int, int>(len, r->first));
break;
}
}
}
auto last = length.rbegin();
if (last != length.rend()) {
auto r = run.find(last->second);
if (r != run.end()) {
run.erase(r);
}
}
}
run.insert(pair<int, int>(page->first, page->second));
miss++;
skip3:
cout << "*****************" << endl;
//检测运行流
for (auto r = run.begin(); r != run.end(); r++)
cout << r->second << " ";
cout << endl;
}
cout << "*********************" << endl;
cout << "OPT算法的页面命中率=" << 1 - (miss / 320) << endl;
cout << "*********************" << endl;
}
else if (choose == "LFU" || choose == "lfu") {
for (auto page = pagestream.begin(); page != pagestream.end(); page++)
{
for (auto r = run.begin(); r != run.end(); r++)
{
if (r->second == page->second) { goto skip4; }
}
if (run.size() == allocation) {
int time = 0;
multimap<int, int>times;
for (auto r = run.begin(); r != run.end(); r++) {
for (auto page2 = pagestream.begin(); page2 != page; page2++) {
if (r->second == page2->second) {
time++;
}
}
times.insert(pair<int, int>(time, r->first));
time = 0;
}
run.erase(times.begin()->second);
}
run.insert(pair<int, int>(page->first, page->second));
miss++;
skip4:
cout << "*****************" << endl;
//检测运行流
for (auto r = run.begin(); r != run.end(); r++)
cout << r->second << " ";
cout << endl;
}
cout << "*********************" << endl;
cout << "LFU算法的页面命中率=" << 1 - (miss / 320) << endl;
cout << "*********************" << endl;
}
else if (choose == "S" || "s") { break; }
else {
cout << "您的输入有误!请输入:FIFO、LRU、OPT、LFU中的一个!" << endl;
}
}
cout << "感谢您的使用~祝您生活愉快!" << endl;
cout << "*************************************************" << endl;
}