m0_62781763 2021-10-28 22:43 采纳率: 75%
浏览 109
已结题

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

必须采用函数进行连接

  • 写回答

2条回答 默认 最新

  • 广大菜鸟 2021-10-29 02:55
    关注
    
    #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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 已采纳回答 10月31日
  • 创建了问题 10月28日

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波