C++易错编程练习题(1)

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    0 编程练习

    基础不牢靠回头来补课。小白这个系列主要是为了重新打基础为一些常见的易错编程练习题提供记录。其间若有错误欢迎指出轻喷勿骂。毕竟小白确实是基础不牢靠。

    1 题目

    自定义函数之整数处理。

    题目描述
    输入10个整数将其中最小的数与第一个数对换把最大的数与最后一个数对换。写三个函数①输入10个数②进行处理③输出10个数。

    输入格式
    10个整数

    输出格式
    整理后的十个数每个数后跟一个空格注意最后一个数后也有空格

    样例输入
    2 1 3 4 5 6 7 8 10 9

    样例输出
    1 2 3 4 5 6 7 8 9 10

    2 易错点

    看到这个题感觉很容易无非就是

    -> 读数
    -> 找到数组中最小值的编号
    -> 找到数组中最大值的编号
    -> 交换最小值与首位数
    -> 交换最大值与末位数
    -> 打印

    那么代码如下

    #include<iostream>
    using namespace std;
    void swap(long * a, long* b)
    {
        long temp;
        temp = *a;
        *a = *b;
        *b = temp;
        return;
    }
    
    void readArray(long *num)
    {
        for (int i = 0; i < 10; ++i)
        {
            cin >> num[i];
        }
    }
    
    void processArray(long *num)
    {
        int indMin = 0, indMax = 0;
        for (int i = 1; i < 10; ++i)
        {
            if(num[i] < num[indMin])
                indMin = i;
            if(num[i] > num[indMax])
    	        indMax = i;
        }
        swap(&num[0], &num[indMin]);
        swap(&num[9], &num[indMax]);
    }
    
    void printArray(long *num)
    {
        for (int i = 0; i < 10; ++i)
        {
            cout << num[i] << " ";
        }
    }
    
    int main()
    {
        long num[10];
        readArray(&num[0]);
        processArray(&num[0]);
        printArray(&num[0]);
        return 0;
    }
    

    轻松加愉快
    测试一下。

    测试1
    2 1 3 4 5 6 7 8 10 9
    1 2 3 4 5 6 7 8 9 10

    测试2
    10 2 3 4 5 6 7 8 1 9
    9 2 3 4 5 6 7 8 10 1

    出错了原因在哪儿

    我们仔细看下对于测试2找到的最小位置是8最大位置是0先交换了最小值和首位数变成

    1 2 3 4 5 6 7 8 10 9

    再交换了位置8和末位变成

    9 2 3 4 5 6 7 8 10 1

    这里出错的原因是早早地确定了最大和最小值的位置但是交换是分成两步在走的。第一次交换有可能会破坏确定的最大值的位置。
    那么如何修改也呼之欲出了
    需要在首次交换之后再重新确定最大值的位置即

    -> 读数
    -> 找到数组中最小值的编号
    -> 交换最小值与首位数
    -> 找到数组中最大值的编号
    -> 交换最大值与末位数
    -> 打印

    3 正解

    #include<iostream>
    using namespace std;
    void swap(long * a, long* b)
    {
        long temp;
        temp = *a;
        *a = *b;
        *b = temp;
        return;
    }
    
    void readArray(long *num)
    {
        for (int i = 0; i < 10; ++i)
        {
            cin >> num[i];
        }
    }
    
    void processArray(long *num)
    {
        int indMin = 0, indMax = 0;
        for (int i = 1; i < 10; ++i)
        {
            if(num[i] < num[indMin])
                indMin = i;
        }
        swap(&num[0], &num[indMin]);
        
        for (int i = 1; i < 10; ++i)
        {
            if(num[i] > num[indMax])
                indMax = i;
        }
        swap(&num[9], &num[indMax]);
    }
    
    void printArray(long *num)
    {
        for (int i = 0; i < 10; ++i)
        {
            cout << num[i] << " ";
        }
    }
    
    int main()
    {
        long num[10];
        readArray(&num[0]);
        processArray(&num[0]);
        printArray(&num[0]);
        return 0;
    }
    

    在这里插入图片描述

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
    标签: c++