实验一

任务一:

代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

template<typename T>
void output(const T &c);

void test1();
void test2();
void test3();

int main(){
	cout <<"测试1:\n";
	test1();
	
	cout <<"\n测试2:\n";
	test2();
	
	cout <<"\n测试3:\n";
	test3();
	
}

template<typename T>
void output (const T &c){
	for(auto &i:c){
		cout << i<<" ";
	}
	cout << endl;
}

void test1(){
	string s0{"0123456789"};
	cout << "s0="<<s0<<endl;
	
	string s1{s0};
	reverse(s1.begin(),s1.end());
	cout<<"s1="<<s1<<endl;
	
	string s2{s0};
	reverse_copy(s0.begin(),s0.end(),s2.begin());
	cout <<"s2="<<s2<<endl;
}

void test2(){
	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(){
	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);
}

 运行截图:

 

任务二:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <numeric>
#include <iomanip>

using namespace std;

// 函数声明
// 模板函数声明
template<typename T>
void output(const T &c);

// 普通函数声明
int rand_int_100();
void test1();
void test2();

int main() {
    cout << "测试1: \n";
    test1();

    cout << "\n测试2: \n";
    test2();
}

// 函数实现
// 输出容器对象c中的元素
template <typename T>
void output(const T &c) {
    for(auto &i: c)
        cout << i << " ";
    cout << endl;
}

// 返回[0, 100]区间内的一个随机整数
int rand_int_100() {
    return rand() % 101;
}

// 测试1
// 对容器类对象指定迭代器区间进行赋值、排序
void test1() {
    vector<int> v0(10);  // 创建一个动态数组对象v0, 对象大小为10
    generate(v0.begin(), v0.end(), rand_int_100); // 产生[0, 100]之间的随机整数赋值给指定迭代器区间[v0.begin(), v0.end())内的每个数据项
    cout << "v0: ";
    output(v0);

    vector<int> v1{v0};
    sort(v1.begin(), v1.end()); // 对指定迭代器区间[v1.begin(), v1.end())内数据项进行升序排序
    cout << "v1: ";
    output(v1);

    vector<int> v2{v0};
    sort(v2.begin()+1, v2.end()-1); // 对指定迭代器区间[v1.begin()+1, v1.end()-1)内数据项进行升序排序
    cout << "v2: ";
    output(v2);
}

// 测试2
// 对容器类对象指定迭代器区间进行赋值、计算最大值/最小值/均值
void test2() {
    vector<int> v0(10);  
    generate(v0.begin(), v0.end(), rand_int_100); 
    cout << "v0: ";
    output(v0);

    auto iter1 = min_element(v0.begin(), v0.end());
    cout << "最小值: " << *iter1 << endl;

    auto iter2 = max_element(v0.begin(), v0.end());
    cout << "最大值: " << *iter2 << 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)/v0.size();
    cout << "均值: " << fixed << setprecision(2) << avg1 << endl;

    cout << endl;

    vector<int> v1{v0};
    cout << "v0: ";
    output(v0);
    sort(v1.begin(), v1.end());
    double avg2 = accumulate(v1.begin()+1, v1.end()-1, 0)/(v1.size()-2);
    cout << "去掉最大值、最小值之后,均值: " << avg2 << endl;
}

运行截图:

任务三:

代码:

#include <iostream>
#include <string>
#include <algorithm>

bool is_palindrome(std::string s);

int main() {
    using namespace std;
    string s;

    while(cin >> s)  // 多组输入,直到按下Ctrl+Z后结束测试
        cout << boolalpha << is_palindrome(s) << endl;
}

// 函数is_palindrom定义
// 待补足
// ×××
bool is_palindrome(std::string s){
    std::string b{s};
    
    reverse(s.begin(),s.end());//翻转字符串
    
    if(b==s) {
        return true;
    }
    else{
        return false;
    }
}

 

截图:

 

任务四:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

std::string dec2n(int x, int n = 2);

int main() {


    int x;
    while(cin >> x) {
        cout << "十进制: " << x << endl;
        cout << "二进制: " << dec2n(x) << endl;
        cout << "八进制: " << dec2n(x, 8) << endl;
        cout << "十六进制: " << dec2n(x, 16) << endl << endl;
    }
}

// 函数dec2n定义
// 待补足
// ×××
std::string dec2n(int x, int n){
    if(n == 2 || n == 8){
        std::string str = "";
        while(x / n !=  0){
            str += char('0'+x%n);
            x /= n;
        }
        str += char('0'+x%n);
        reverse(str.begin(),str.end());
        return str;
    }else if(n == 16){
        char arr[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
        std::string str = "";
        while(x / n !=  0){
            str += arr[x%n];
            x /= n;
        }
        str += arr[x%n];
        reverse(str.begin(),str.end());
        return str;
    }
}

截图:

任务五:

代码:

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;

int main() {
    cout << "  ";
    vector<char> arr;
    for(int i = 0;i < 26;i++){
        cout << " ";
        cout << char('a' + i);
        arr.push_back(char('A' + i));
    }
    cout << endl;
    for(int i = 1;i <= 26;i++){
        cout << setw(2) << setfill(' ') << i;
        rotate(arr.begin(),arr.begin() + 1,arr.end());
        for(auto ele:arr){
            cout << " ";
            cout << ele;
        }
        cout << endl;
    }


    return 0;
}

截图:

 

任务六:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main() {
    int m=0;
    for(int i=0;i<10;i++){
        srand(time(0));
        char op = "+-*/"[rand() % 4];
        int w = 0;
        int a;
        int b;
        int c;
        switch (op) {
            case '+':
                 a = rand() % 10+1;  // 生成一个1到9之间的随机整数
                 b = rand() % 10+1 ;
                 w = a + b; break;
            case '-':
                 a = rand() % 10+1;  // 生成一个1到9之间的随机整数
                 b = rand() % a+1 ;
                 w=a-b; break;
            case '*':w=a*b; break;
            case '/':
                 a= rand() % 10+1;  // 生成一个1到9之间的随机整数
                    for(int i=2;i<=a;i++){
                      b=i;
                      for(int j=1;j<=10;j++){
                          c=j;
                        if(b*c==a){
                            w=a/b;break;
                        }
                    }
                }
        }
        cout << a << ' ' << op << ' ' << b << '=' ;
        int user_answer = 0;
        cin >> user_answer;
        cout<<endl;
        if (user_answer == w) {
                m++;
        }
    }
    cout<<"正确率:"<<m*10<<"%"<<endl;
    return 0;
}

截图:

 

posted @ 2024-10-14 16:58  何逸雪  阅读(6)  评论(0编辑  收藏  举报