OOP实验一

任务1:

源码:

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <algorithm>
 5 using namespace std;
 6 // 声明
 7 // 模板函数声明
 8 template<typename T>
 9 void output(const T& c);
10 // 普通函数声明
11 void test1();
12 void test2();
13 void test3();
14 int main() {
15     cout << "测试1: \n";
16     test1();
17     cout << "\n测试2: \n";
18     test2();
19     cout << "\n测试3: \n";
20     test3();
21 }
22 // 函数实现
23 // 输出容器对象c中的元素
24 template <typename T>
25 void output(const T& c) {
26     for (auto& i : c)
27         cout << i << " ";
28     cout << endl;
29 }
30 // 测试1
31 // 组合使用算法库、迭代器、string反转字符串
32 void test1() {
33     string s0{ "0123456789" };
34     cout << "s0 = " << s0 << endl;
35     string s1{ s0 };
36     reverse(s1.begin(), s1.end()); // 反转指定迭代器区间的元素
37     cout << "s1 = " << s1 << endl;
38     string s2{ s0 };
39     reverse_copy(s0.begin(), s0.end(), s2.begin()); // 将指定迭代区间的元素拷贝到指定迭代器开始的目标区间,并且在复制过程中反转次序
40         cout << "s2 = " << s2 << endl;
41 }
42 // 测试2
43 // 组合使用算法库、迭代器、vector反转动态数组对象vector内数据
44 void test2() {
45     vector<int> v0{ 2, 0, 4, 9 };
46     cout << "v0: ";
47     output(v0);
48     vector<int> v1{ v0 };
49     reverse(v1.begin(), v1.end());
50     cout << "v1: ";
51     output(v1);
52     vector<int> v2{ v0 };
53     reverse_copy(v0.begin(), v0.end(), v2.begin());
54     cout << "v2: ";
55     output(v2);
56 }
57 // 测试3
58 // 组合使用算法库、迭代器、vector实现元素旋转移位
59 void test3() {
60     vector<int> v0{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
61     cout << "v0: ";
62     output(v0);
63     vector<int> v1{ v0 };
64     rotate(v1.begin(), v1.begin() + 1, v1.end()); // 旋转指定迭代器区间[v1.begin(), v1.end())之间的数据项,旋转后从迭代器v1.begin() + 1位置的数据项开始
65         cout << "v1: ";
66     output(v1);
67     vector<int> v2{ v0 };
68     rotate(v2.begin(), v2.begin() + 2, v2.end());
69     cout << "v2: ";
70     output(v2);
71     vector<int> v3{ v0 };
72     rotate(v3.begin(), v3.end() - 1, v3.end());
73     cout << "v3: ";
74     output(v3);
75     vector<int> v4{ v0 };
76     rotate(v4.begin(), v4.end() - 2, v4.end());
77     cout << "v4: ";
78     output(v4);
79 }

 

结果:

 

任务2:

源码:

 

 1 #include <iostream>
 2 #include <vector>
 3 #include <string>
 4 #include <algorithm>
 5 #include <numeric>
 6 #include <iomanip>
 7 using namespace std;
 8 // 函数声明
 9 // 模板函数声明
10 template<typename T>
11 void output(const T& c);
12 // 普通函数声明
13 int rand_int_100();
14 void test1();
15 void test2();
16 int main() {
17     cout << "测试1: \n";
18     test1();
19     cout << "\n测试2: \n";
20     test2();
21 }
22 // 函数实现
23 // 输出容器对象c中的元素
24 template <typename T>
25 void output(const T& c) {
26     for (auto& i : c)
27         cout << i << " ";
28     cout << endl;
29 }
30 // 返回[0, 100]区间内的一个随机整数
31 int rand_int_100() {
32     return rand() % 101;
33 }
34 // 测试1
35 // 对容器类对象指定迭代器区间进行赋值、排序
36 void test1() {
37     vector<int> v0(10); // 创建一个动态数组对象v0, 对象大小为10
38     generate(v0.begin(), v0.end(), rand_int_100); // 产生[0, 100]之间的随机整数赋值给指定迭代器区间[v0.begin(), v0.end())内的每个数据项
39     cout << "v0: ";
40     output(v0);
41     vector<int> v1{ v0 };
42     sort(v1.begin(), v1.end()); // 对指定迭代器区间[v1.begin(), v1.end())内数据项进行升序排序
43         cout << "v1: ";
44     output(v1);
45     vector<int> v2{ v0 };
46     sort(v2.begin() + 1, v2.end() - 1); // 对指定迭代器区间[v1.begin()+1,v1.end() - 1)内数据项进行升序排序
47     cout << "v2: ";
48     output(v2);
49 }
50 // 测试2
51 // 对容器类对象指定迭代器区间进行赋值、计算最大值/最小值/均值
52 void test2() {
53     vector<int> v0(10);
54     generate(v0.begin(), v0.end(), rand_int_100);
55     cout << "v0: ";
56     output(v0);
57     auto iter1 = min_element(v0.begin(), v0.end());
58     cout << "最小值: " << *iter1 << endl;
59     auto iter2 = max_element(v0.begin(), v0.end());
60     cout << "最大值: " << *iter2 << endl;
61     auto ans = minmax_element(v0.begin(), v0.end());
62     cout << "最小值: " << *(ans.first) << endl;
63     cout << "最大值: " << *(ans.second) << endl;
64     double avg1 = accumulate(v0.begin(), v0.end(), 0) / v0.size();
65     cout << "均值: " << fixed << setprecision(2) << avg1 << endl;
66     cout << endl;
67     vector<int> v1{ v0 };
68     cout << "v0: ";
69     output(v0);
70     sort(v1.begin(), v1.end());
71     double avg2 = accumulate(v1.begin() + 1, v1.end() - 1, 0) / (v1.size() - 2);
72     cout << "去掉最大值、最小值之后,均值: " << avg2 << endl;
73 }

 

结果:

 

 

任务3:

源码:

 

结果:

 

任务4:

源码:

 

结果:

 

任务5:

源码:

结果:

 

任务6:

源码:

 

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<ctime>
 4 #include<iomanip>
 5 int main() {
 6     using namespace std;
 7     char sym[] = { '+','-','*','/' };
 8     int num = 0;
 9     int i;
10     srand((unsigned int)time(NULL));
11     for (i = 0; i < 10; i++)
12     {
13         int a, b, c;
14         a = rand() % 9 + 1;
15         b = rand() % 9 + 1;
16         c = rand() % 4;
17         if (c == 1 && a < b)
18         {
19             i--;
20             continue;
21         }
22         else if (c == 3 && a % b != 0)
23         {
24             i--;
25             continue;
26         }
27         int re;
28         cout << a << sym[c] << b << "=";
29         cin >> re;
30         int right;
31         switch (c) {
32         case 0:
33             right = a + b;
34             break;
35         case 1:
36             right = a - b;
37             break;
38         case 2:
39             right = a * b;
40             break;
41         case 3:
42             right = a / b;
43             break;
44         }
45         if (right == re) {
46             num++;
47         }
48     }
49     double rate = num * 1.0 / 10;
50     cout << "正确率:" << setiosflags(ios::fixed) << setprecision(2) << 100.0 * rate << "%" << endl;
51 }

结果:

 

 

posted @ 2024-10-09 16:56  孙一发  阅读(11)  评论(0编辑  收藏  举报