任务1

源代码task1.cpp

// 本例用到以下内容:
// 1. 字符串string, 动态数组容器类vector、迭代器
// 2. 算法库:反转元素次序、旋转元素
// 3. 函数模板、const引用作为形参

#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());  // 旋转指定迭代器区间[v1.begin(), v1.end())之间的数据项,旋转后从迭代器v1.begin()+1位置的数据项开始
    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);
}

运行结果截图
实验结果截图

任务2

task2.cpp

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

运行结果截图
实验2截图

实验3

task3.cpp

#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){
	std::transform(s.begin(),s.end(),s.begin(),::tolower);
	int l=0;
	int r=s.size()-1;
	while(l<r){
		if(s[l]!=s[r]){
			return false;
		}
		l++;
		r--;
	}
	return true;
}

实验3截图
实验3截图

实验4

task4.cpp

#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) {    
    const char digits[] = "0123456789ABCDE";  
    std::string result;  
    if(x==0){  
        return "0";  
    }    
    bool isNegative=false;  
    if(x<0){  
        isNegative=true;  
        x=-x;  
    }    
    while(x>0){  
        result+=digits[x%n];  
        x/=n;  
    }   
    if(isNegative){  
        result+="-";  
    }    
    std::reverse(result.begin(),result.end());  
    return result; }

实验4结果截图
实验4结果截图

实验5

task5.cpp

#include<iostream>
using namespace std;
int main()
{int a[26],k;
	char line1[26],line2[26];
	for(int i=0;i<26;i++)
	{
		line1[i]=i+65;
		line2[i]=i+97;
		a[i]=i+1;
	}
	cout<<"  ";
	for(int i=0;i<26;i++)
	{
		cout<<line2[i]<<" ";
	}
	cout<<endl;
	for(int i=0;i<26;i++){
	cout<<a[i]<<" ";
	for(int j=i;j<26;j++)
	{
		cout<<line1[j]<<" ";
	}for(k=0;k<i;k++)
	{
		cout<<line1[k]<<" ";
	}
	cout<<endl;
	}
}

实验5截图

实验6

task6.cpp

#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int suanfa(int a,int b,int c)
{
	if(c==1){
		return a+b;
	}
	else if(c==2){
		return a-b;
	}
	else if(c==3){
		return a*b;
	}
	else if(c==4){
		return a/b;
	}
}
int main()
{int a[10],b[10],c[10],d[10],zheng=0,t;
	srand((unsigned int)time(NULL));
	for(int i=0;i<10;i++)
	{
		a[i]=1+rand()%10;
		b[i]=1+rand()%10;
		c[i]=1+rand()%4;
	}
	for(int i=0;i<10;i++)
	{
		while(c[i]==2&&a[i]<b[i])
		{
		t=b[i];
		b[i]=a[i];
		a[i]=t;
		}
		while(c[i]==4&&a[i]%b[i]!=0)
		{
			a[i]=rand()%10+1;
			b[i]=rand()%10+1;
		}
	}
	for(int i=0;i<10;i++)
	{
		d[i]=suanfa(a[i],b[i],c[i]);
	}
	for(int i=0;i<10;i++)
	{
		cout<<a[i];
		if(c[i]==1)cout<<"+";
		else if(c[i]==2)cout<<"-";
		else if(c[i]==3)cout<<"*";
		else if(c[i]==4)cout<<"/";
		cout<<b[i]<<"=";
		cin>>t;
		if(t==d[i])zheng++;
	
	}cout<<"正确率:"<<zheng<<"0.00%"<<endl; 
}

实验6截图

实验总结

熟悉C语言基本语法和数据类型。
掌握C语言程序的编写和调试技巧。
培养解决问题的能力。
加深对计算机原理的理解。
提高团队合作和沟通能力。