c/c++程序函数复合设计

编写一个程序 包含一下几个函数
1 十六进制转换为十进制
2 判断10个数是否为素数
3 求两个数的最大公约数 最小公倍数
4 将10个数从小到大进行排列
5 将一个3×3数组进行行列互换并输出每一个数
6 计算十个数方差
7 用于利用递归将一个整数n转换成字符串并存入一个字符串数组中。例如,参数一传入588,将被转换成字符串“588”并存入参数二的字符串数组中。n可以是任意位数的整数
8 用于将一个字符串按反序存放
9 用于将两个字符串连接

输入 10个十六进制的数 每一个以空格分开
分别调用以上函数 输出结果 一行一种函数

其中最后一行调用函数789,将这由小到大排序后的十个数首先转换成字符串,再对每个字符串反序存放,再依次两两连接之后输出连接后的五个字符串。例如1010 1111 1212 1313 1414 1515 2323 4545 678678 910910这十个数经过该步操作后输出为01110111 21312131 41514151 32543254 876019876019

必须采用函数进行连接


#include<iostream>
#include<string.h>
using namespace std;
#define swap(a,b) {a^=b;b^=a;a^=b;}
// 1: 16进制转10进制
int hex2decimal(string hexNum) {
    int n = 0;
    int len = hexNum.length();
    for (int i = 0; i < len; i++) {
        n <<= 4;
        if(hexNum[i]>='0'&& hexNum[i]<='9')
            n += int(hexNum[i] - '0');
        else
            n += int(hexNum[i] - 'A')+10;
    }
    return n;
}
// 2: 素数判断
bool primeNum(int num) {
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) return false;
    }
    return true;
}
// 3: 最大公因数
int GCD(int a, int b) {
    return (a % b == 0 ? b : GCD(b, a % b));
}
// 4: 最小公倍数
int LCM(int a, int b) {
    return a * b / GCD(a, b);
}
// 5: 冒泡排序
void sortArray(int* a, int n) {
    int state = 0;
    for (int i = 0; i < n - 1; i++) {
        state = 0;
        for (int j = n - 1; j > i; j--) {
            if (a[j - 1] > a[j]) {
                swap(a[j - 1], a[j]);
                state = 1;
            }
        }
        if (state == 0) break;
    }
}
// 6: 逆置数组
void inversion(int(*array)[3], int r, int c) {
    int i, j;
    for (i = 0; i < r; i++) {
        for (j = i; j < c; j++) {
            if(i!=j)
                swap(array[i][j], array[j][i]);
        }
    }
}
// 7: 输出数组
void displayArray(int(*array)[3], int r, int c) {
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            cout << array[i][j] << " ";
        }
        cout << endl;
    }
}
// 8: 计算方差 
double variance(int* array, int n) {
    double sum = 0;
    for (int i = 0; i < n; i++) sum += array[i];
    double average = sum / n;
    double res = 0;
    double sub = 0;
    for (int i = 0; i < n; i++) {
        sub = average - array[i];
        res += sub * sub;
    }
    return res / n;
}
// 9: 数字转成字符串
void intToString(int num, string& result) {
    int i;
    if ((i = num / 10) != 0) intToString(i, result);
    result += (num % 10 + '0');
}
// 10: 逆转字符串
void reverseString(string&a) {
    int len = a.length();
    for (int i = 0; i < len / 2; i++) {
        swap(a[i], a[len - 1 - i]);
    }
}
// 11: 连接字符串
string connectString(string& a, string b) {
    return a.append(b.c_str());
}

int main() {
    string strs[10];
    int nums[10];
    string str;
    // 1.要求1
    for (int i = 0; i < 10; i++) {
        cin >> strs[i];
    }
    // 2.要求2 
    for (int i = 0; i < 10; i++) {   
        nums[i] = hex2decimal(strs[i]);    
        cout << nums[i] << " ";
    }
    cout << endl;
    // 3. 要求3
    for (int i = 0; i < 10; i++) {
        cout << (primeNum(nums[i])?"Y":"N") << " ";
    }
    cout << endl;
    // 4.要求4 最大公因数,也称最大公约数、最大公因子
    cout << GCD(nums[0], nums[1]) << endl;
    // 5.要求5 
    cout <<LCM(nums[0], nums[1]) << endl;
    // 6. 要求6 排序
    sortArray(nums, 10);
    for (int i = 0; i < 10; i++) {
        cout << nums[i] << " ";
    }
    cout << endl;
    // 7.方差
    printf("%.2lf\n", variance(nums,10));
    // 8.空一行
    cout << endl << endl;
    // 9. 二维数组
    int index = 0;
    int array[3][3];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            array[i][j] = nums[index++];
        }
    }
    displayArray(array, 3, 3);
    // 10.空一行
    cout << endl << endl;
    // 11. 逆置二维数组并输出
    inversion(array, 3, 3);
    displayArray(array, 3, 3);
    // 12.空一行
    cout << endl << endl;
    // 13.数字->字符串,反序存储,两两拼接
    string newStrs[10];
    for (int i = 0; i < 10; i++) {
         intToString(nums[i], newStrs[i]);
         reverseString(newStrs[i]);
    }
    for (int i = 0; i < 10; i += 2) {
        cout << connectString(newStrs[i], newStrs[i+1]) << " ";
    }
}

/*
10 14 29 17 C8 31 9 23 25 AB
*/

img

更改版


#include<iostream>
#include<string.h>
using namespace std;
#define swap(a,b) {a^=b;b^=a;a^=b;}
// 1: 16进制转10进制
int hex2decimal(string hexNum) {
    int n = 0;
    int len = hexNum.length();
    for (int i = 0; i < len; i++) {
        n <<= 4;
        if(hexNum[i]>='0'&& hexNum[i]<='9')
            n += int(hexNum[i] - '0');
        else
            n += int(hexNum[i] - 'A')+10;
    }
    return n;
}
// 2: 素数判断
bool primeNum(int num) {
    if (num < 2) return false;
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) return false;
    }
    return true;
}
// 3: 最大公因数
int GCD(int a, int b) {
    return (a % b == 0 ? b : GCD(b, a % b));
}
// 4: 最小公倍数
int LCM(int a, int b) {
    return a * b / GCD(a, b);
}
// 5: 冒泡排序
void sortArray(int* a, int n) {
    int state = 0;
    for (int i = 0; i < n - 1; i++) {
        state = 0;
        for (int j = n - 1; j > i; j--) {
            if (a[j - 1] > a[j]) {
                swap(a[j - 1], a[j]);
                state = 1;
            }
        }
        if (state == 0) break;
    }
}
// 6: 逆置数组
void inversion(int(*array)[3], int r, int c) {
    int i, j;
    for (i = 0; i < r; i++) {
        for (j = i; j < c; j++) {
            if(i!=j)
                swap(array[i][j], array[j][i]);
        }
    }
}
// 7: 输出数组
void displayArray(int(*array)[3], int r, int c) {
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            cout << array[i][j] << " ";
        }
        cout << endl;
    }
}
// 8: 计算方差 
double variance(int* array, int n) {
    double sum = 0;
    for (int i = 0; i < n; i++) sum += array[i];
    double average = sum / n;
    double res = 0;
    double sub = 0;
    for (int i = 0; i < n; i++) {
        sub = average - array[i];
        res += sub * sub;
    }
    return res / n;
}
// 9: 数字转成字符串
void intToString(int num, string& result) {
    int i;
    if ((i = num / 10) != 0) intToString(i, result);
    result += (num % 10 + '0');
}
// 10: 逆转字符串
void reverseString(string&a) {
    int len = a.length();
    for (int i = 0; i < len / 2; i++) {
        swap(a[i], a[len - 1 - i]);
    }
}
// 11: 连接字符串
string connectString(string& a, string b) {
    return a.append(b.c_str());
}

int main() {
    string strs[10];
    int nums[10];
    string str;
    // 1.要求1
    for (int i = 0; i < 10; i++) {
        cin >> strs[i];
    }
    // 2.要求2 
    for (int i = 0; i < 10; i++) {   
        nums[i] = hex2decimal(strs[i]);    
        cout << nums[i] << " ";
    }
    cout << endl;
    // 3. 要求3
    for (int i = 0; i < 10; i++) {
        cout << (primeNum(nums[i])?"Y":"N") << " ";
    }
    cout << endl;
    // 4.要求4 最大公因数,也称最大公约数、最大公因子
    cout << GCD(nums[0], nums[1]) << endl;
    // 5.要求5 
    cout <<LCM(nums[0], nums[1]) << endl;
    // 6. 要求6 排序
    sortArray(nums, 10);
    for (int i = 0; i < 10; i++) {
        cout << nums[i] << " ";
    }
    cout << endl;
    // 7.方差
    printf("%.2lf\n", variance(nums,10));
    // 8.空一行
    cout << endl;
    // 9. 二维数组
    int index = 0;
    int array[3][3];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            array[i][j] = nums[index++];
        }
    }
    displayArray(array, 3, 3);
    // 10.空一行
    cout << endl;
    // 11. 逆置二维数组并输出
    inversion(array, 3, 3);
    displayArray(array, 3, 3);
    // 12.空一行
    cout << endl;
    // 13.数字->字符串,反序存储,两两拼接
    string newStrs[10];
    for (int i = 0; i < 10; i++) {
         intToString(nums[i], newStrs[i]);
         reverseString(newStrs[i]);
    }
    for (int i = 0; i < 10; i += 2) {
        cout << connectString(newStrs[i], newStrs[i+1]) << " ";
    }
}

/*
10 14 29 17 C8 31 9 23 25 0
*/

img