实验1 现代C++基础编程

task 1 实验代码:
#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();
    
} 

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

//测试1 
//组合使用算法库,迭代器,string反转字符串
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;
//测试2 
//组合使用算法库迭代器,vector反转动态数组对象vector内数据

} 
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);
    
}     
//测试3
//组合使用算法库迭代器,vector实现元素旋转移位
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);
} 

实验结果:

task 2 实验代码:

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

实验结果:

task3 实验代码:

#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;
}
bool is_palindrome(std::string s){
    int left=0;
    int right=s.length() -1;
    while(left<right){
        if(s[left]!=s[right])
        return false;
        else
        left++;
        right--;
    }
    return true;
}

实验结果:

task4 实验代码:

#include <iostream>
#include <string>
#include <algorithm>
std::string dec2n(int x, int n = 2);
int main() {
using namespace std;
    int x;
    while(cin >> x) {
    cout << "十进制: " << x << endl;
    cout << "二进制: " << dec2n(x) << endl;
    cout << "八进制: " << dec2n(x, 8) << endl;
    cout << "十六进制: " << dec2n(x, 16) << endl << endl;
}
}
std::string dec2n(int x, int n ){
    std::string a="0123456789ABCDEF";
    std::string result;
    int remainder;
    if(x==0)
    return "0";
    
    while(x>0){
        remainder= x % n;
        result=a[remainder]+result;
        x=x/n;
    }
    return result;
}

实验结果:

task5 实验代码:

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

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

int main(){
    
    test1();
}
template <typename T>
void output(const T &c){
    for(auto &i:c)
        cout<<i<<" ";
    cout <<endl;
}
void test1(){
    vector<string> v0{"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<<"   ";
    output(v0);
    vector<string> v1{"A","B","C","D","E","G","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    for(int i=1;i<=26;i++){
        if(i<=9)
        cout<<" ";
        rotate(v1.begin(),v1.begin()+1,v1.end());
        cout<<i<<" ";
        output(v1);
        
    }
}

实验结果:

task6 实验代码:

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

void problem();

int main(){
    srand(time(0));
    problem();
}
void problem(){
    int correctcount = 0;
    for(int i=1;i<=10;i++){
    int a = rand()%10 + 1;
    int b = rand()%10 + 1;
    int answer;
    char op;
    
    switch(rand()%4){
        case 0:
            op='+';
            answer = a+b;
            break;
        case 1:
            op='-';
             a = rand()%10 + 1;
             b = rand()%a;
            answer = a-b;
            break;
        case 2:
            op='*';
            answer = a*b;
            break;
        case 3:
            op='/';
            a = rand()%10 + 1;
             b = (rand()%a)+1;
            answer = a/b;
            break;
    }
    cout<<a<<" "<<op<<" "<<b<<" "<<"=";
    int useranswer;
    cin>>useranswer;
    if(useranswer=answer){
        correctcount++;
    }
    
    
    }
    double accuracy=static_cast<double>(correctcount)/10*100;
    cout<<"正确率:"<<fixed<<setprecision(2)<<accuracy<<"%"<<endl;
    
}

实验结果:

 

posted @ 2024-10-12 17:44  huashu2  阅读(9)  评论(0编辑  收藏  举报