求以下问题的完整代码

求以下问题的完整代码,要求使用c++面向对象的程序设计方法和构造函数

img

n的类型有要求吗?下面的代码中,n按照int类型来处理的。
运行结果:

img

代码:

#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()函数输出结果。

需要注意的是,在这个例子中我们假定了指数为整数。如果指数可能是小数,我们需要通过一定的方法转换为整数,例如按照指定精度取整后转换,或者使用分数等方式进行转换。如果指数不能为负数,则需要进行额外的异常处理等。如有帮助,请采纳,谢谢

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7662771
  • 你也可以参考下这篇文章:基于邻接矩阵存储的图的广度优先搜索遍历算法的实现(附C++实现代码)
  • 除此之外, 这篇博客: 操作系统页面置换算法在C++中的实现中的 源代码及运行过程图片 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 下面是完善界面后的源代码,以及一次运行的过程截图:

    #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;
    }
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 您还可以看一下 董洪伟老师的算法设计与分析课程中的 分治递归求平面点集的最近点对的C++代码实现小节, 巩固相关知识点