尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

OOP - 实验一

OOP - 实验一
📅 发布时间:2026/6/18 5:25:32
任务1:代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>template<typename T>
void output(const T &c);
void test1();
void test2();
void test3();
int main() {std::cout << "测试1: \n";test1();std::cout << "\n测试2: \n";test2();std::cout << "\n测试3: \n";test3();
}template <typename T>
void output(const T &c) {for(auto &i : c)std::cout << i << ' ';std::cout << '\n';
}void test1() {using namespace std;string s0{"0123456789"};cout << "s0 = " << s0 << endl;string s1(s0);reverse(s1.begin(), s1.end()); cout << "s1 = " << s1 << endl;string s2(s0.size(), ' ');reverse_copy(s0.begin(), s0.end(), s2.begin()); cout << "s2 = " << s2 << endl;
}void test2() {using namespace std;vector<int> v0{2, 0, 4, 9};cout << "v0: "; output(v0);vector<int> v1{v0};reverse(v1.begin(), v1.end());cout << "v1: "; output(v1);vector<int> v2{v0};reverse_copy(v0.begin(), v0.end(), v2.begin());cout << "v2: "; output(v2);
}void test3() {using namespace std;vector<int> v0{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};cout << "v0: "; output(v0);vector<int> v1{v0};rotate(v1.begin(), v1.begin()+1, v1.end()); cout << "v1: "; output(v1);vector<int> v2{v0}; rotate(v2.begin(), v2.begin()+2, v2.end()); cout << "v2: "; output(v2);vector<int> v3{v0};rotate(v3.begin(), v3.end()-1, v3.end()); cout << "v3: "; output(v3);vector<int> v4{v0};rotate(v4.begin(), v4.end()-2, v4.end()); cout << "v4: "; output(v4);
}

运行结果:

image

 问题1:reverse的反转操作实在当前数组内进行,会直接改变当前数组的顺序,而reverse_copy是将反转后的数组拷贝到一个新的容器内,不会改变当前数组。

问题2:rotate(参数1,参数2,参数3)函数是一个循环位移函数,参数1和3分别代表要循环的部分的起点和终点,参数二代表循环位移后位于第一个位置的元素。

 

任务2:代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iomanip>
#include <cstdlib>
#include <ctime>template<typename T>
void output(const T &c);int generate_random_number();
void test1();
void test2();int main() {std::srand(std::time(0));  std::cout << "测试1: \n";test1();std::cout << "测试2: \n";test2();
}template<typename T>
void output(const T &c) {for (auto i : c)std::cout << i << ' ';std::cout << '\n';
}int generate_random_number() {return std::rand() % 101;
}void test1() {using namespace std;vector<int> v0(10);  generate(v0.begin(), v0.end(), generate_random_number); cout << "v0: "; output(v0);vector<int> v1(v0);sort(v1.begin(), v1.end()); cout << "v1: "; output(v1);vector<int> v2(v0);sort(v2.begin()+1, v2.end()-1); cout << "v2: "; output(v2);
}void test2() {using namespace std;vector<int> v0(10);generate(v0.begin(), v0.end(), generate_random_number);cout << "v0: "; output(v0);auto max_it = max_element(v0.begin(), v0.end());auto min_it = min_element(v0.begin(), v0.end());cout << "最小值: " << *min_it << endl;cout << "最大值: " << *max_it << endl;auto ans = minmax_element(v0.begin(), v0.end());cout << "最小值: " << *ans.first << endl;cout << "最大值: " << *ans.second << endl;double avg1 = accumulate(v0.begin(), v0.end(), 0.0) / v0.size();cout << "均值: " << fixed << setprecision(2) << avg1 << endl;sort(v0.begin(), v0.end());double avg2 = accumulate(v0.begin() + 1, v0.end() - 1, 0.0) / (v0.size() - 2);cout << "去掉最大值、最小值之后,均值: " << avg2 << endl;
}

image

 问题1:通过第三参数来给第一参数和第二参数中间的位置填充数据/元素

问题2:只需要遍历一次容器内的数据元素,节省了时间和空间成本

问题3:效果相同

 

任务3:代码:

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>unsigned char func(unsigned char c);
void test1();
void test2();int main() {std::cout << "测试1:字符串大小写转换\n";test1();std::cout << "测试2:字符替换\n";test2();
}unsigned char func(unsigned char c) {if (c == '1')return 'a';if (c == '2')return 'A';if (std::isalpha(c))return static_cast<unsigned char>(c + 1);return c;
}void test1() {std::string s = "Hello World 2048!";std::cout << "s = " << s << "\n";std::string s1;for (char c : s)s1 += std::tolower(c);std::cout << "s1 = " << s1 << "\n";std::string s2;for (char c : s)s2 += std::toupper(c);std::cout << "s2 = " << s2 << "\n";
}void test2() {std::string s1 = "I love C++!";std::cout << "s1 = " << s1 << "\n";std::string s2(s1.size(), '*');std::transform(s1.begin(), s1.end(), s2.begin(), func);std::cout << "s2 = " << s2 << "\n";
}

image

 问题1:把字符 1 转换为a,把字符 2 转换为A,把字母字符转换为其在字母表中后一个位置的字母。

问题2:将指定内容的大写字母全部转换为小写;将指定内容的小写字母全部转换为大写。

问题3:1:指定区域的起始位置,2:指定区域的结束位置,3:生成的数据开始存储的位置,4:数据转化/处理规则

 

任务4:代码:

#include <iostream>
#include <string>
#include <algorithm>bool is_palindrome(const std::string &s);
bool is_palindrome_ignore_case(const std::string &s);int main() {using namespace std;string s;// 多组输入,直到按下Ctrl+Z结束测试while(cin >> s) {cout << boolalpha<< "区分大小写: " << is_palindrome(s) << "\n"<< "不区分大小写: " << is_palindrome_ignore_case(s) << "\n\n";}
}bool is_palindrome(const std::string &s){int left=0 ,right=s.size()-1 ;while(left<right){if(s[left]!=s[right]){return false ;}left++ ;right-- ;}return true ;
}bool is_palindrome_ignore_case(const std::string &s){std::string s0 ;int left=0 ,right=s.size()-1 ;for(char c : s){s0 += tolower(c) ;}while(left<right){if(s0[left]!=s0[right]){return false ;}left++ ;right-- ;}return true ;
}

image

 思考:

 

任务5:代码:

#include <iostream>
#include <string>
#include <algorithm>std::string dec2n(int x, int n = 2);int main() {int x;while(std::cin >> x) {std::cout << "十进制: " << x << '\n'<< "二进制: " << dec2n(x) << '\n'<< "八进制: " << dec2n(x, 8) << '\n'<< "十二进制: " << dec2n(x, 12) << '\n'<< "十六进制: " << dec2n(x, 16) << '\n'<< "三十二进制: " << dec2n(x, 32) << "\n\n";}
}std::string dec2n(int x, int n){std::string result ;char str ;if(x == 0){return "0" ;}while(x>0){int remainder = x % n ;if( remainder < 10 ){str = '0' + remainder ;}else{str = 'A' + remainder - 10 ;}result.insert(0 , 1, str) ;x = x/n ;}return result ;
}

image

 

 

任务6:代码:

#include<iostream>
#include<string>
#include<cctype>
#include<iomanip>
#include<algorithm> 
using namespace std ;int main(){string str = " a b c d e f g h i j k l m n o p q r s t u v w x y z" ;cout << "  " << str << endl ;for (char &c : str) {if (c != ' ') {c = toupper(c);}}for(int i = 1 ; i <= 26 ; i++){rotate(str.begin(), str.begin() + 2, str.end()) ; cout << setw(2) << i << str << endl ;}return 0 ;
}

image

 

 

任务7:代码:

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std ;int main() {srand(static_cast<unsigned int>(time(0))) ;int correctCount = 0 ;for (int i = 0; i < 10; i++) {int num1 = rand() % 10 + 1 ;int num2 = rand() % 10 + 1 ;int op = rand() % 4 ;int userAnswer, correctAnswer ;char operation ;if (op == 1) {if (num1 < num2) {swap(num1, num2) ;}operation = '-' ;correctAnswer = num1 - num2 ;} else if (op == 3) {do {num1 = rand() % 10 + 1 ;} while (num1 % num2 != 0) ;operation = '/' ;correctAnswer = num1 / num2 ;} else if (op == 0) {operation = '+' ;correctAnswer = num1 + num2 ;} else {operation = '*' ;correctAnswer = num1 * num2 ;}cout << num1 << " " << operation << " " << num2 << " = " ;cin >> userAnswer ;if (userAnswer == correctAnswer) {correctCount++ ;}}double accuracy = static_cast<double>(correctCount) * 100 / 10 ;cout << "正确率: " << fixed << setprecision(1) << accuracy << "%" << endl ;return 0 ;
}

image

 

相关新闻

  • 题解:qoj8329 Excuse
  • VMware17.6图文安装教程(附安装包)VMware17.6
  • Sourcetree - Git 备份

最新新闻

  • 深入理解Linux终端控制:tcgetattr与termios结构体实战指南
  • Ultralytics RegionCounter工业级计数落地实践
  • Windows系统优化终极指南:三分钟让你的电脑快如新机!
  • 2022 AI工程化落地实操指南:从大模型到可控生成与指令微调
  • MPC857T勘误文档解析:嵌入式开发中规避硬件设计陷阱的关键
  • 团队冲刺7

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号