2023年湖北省专升本C语言程序设计大题(湖北警官学院、武汉东湖学院)

        2023年的湖北省专升本考试已经于2023年5月7日结束了,学长从多为知情朋友哪里打听到一些高校的C语言程序设计题,其中这一题来自于湖北一所公办院校和民办院校。

        题目:使用冒泡排序法为一组数据进行升序排序,写出最终结果。(数据朋友记不清,但是题目大致就是冒泡排序,只要知道题目是干什么的,那么我们就相当于有了正确答案的模板,遇到以后往上套就行了)

我们假设有这样一组数据:2,5,11,3,9,66,23,88,101,55

#include<stdio.h>
int main(){
    int arr[] = {2,5,11,3,9,66,23,88,101,55};
    int len = sizeof(arr) / sizeof(int);
    //打印一遍该数组
    for(int i=0;i<len;i++){
        printf("%-4d",arr[i]);
    }

    //排序
    for(int i=0;i<len;i++){             //外循环用来控制整体循环次数,即需要多少遍才能将这组数据排好序
        for(int j=i;j<len;j++){     //内循环用来控制每一次外循环中要对比多少组数据,即在这一次外循环中这组数据需要比较几次
            if(arr[i]<arr[j]){      //如果我前面的数据小于后面的数据,那么就交换两者的位置
                int temp = arr[i];      //temp用来临时存储前面一个数据的值
                arr[i] = arr[j];        //将后面的数据的值赋给前面的数据
                arr[j] = temp;      //让后面数据的值等于temp中临时存储的数据值
            }
        }
    }

    //打印排好序后的数组数据
    printf("\n");
    for(int i=0;i<len;i++){
        printf("%-4d",arr[i]);
    }
    return 0;
}
/*需要注意的是第12行,变量j的值等于变量i的值,因为每完成一次外循环,就证明这组数据中最大的那个值已经被推至当前所剩数据的最前面,
被排过序的数据(即每次外循环完成后被推到所剩数据最前面的数据)不需要再次被排序,而被推至前面的数据的个数由变量i决定,
因此,下一次内循环只需要进行len-i次循环,所以我们让j=i就是控制j的初始值大小,并且j控制着每次内循环中从数组的那个位置起始,
我们知道被排过序的不需要再继续被排序,因此每次的起始位置因该是被排过序的数据的后面的一个数据的位置*/

        如果我们对代码稍作修改,他就能编程一个排序模板,遇到任何一组数据都可以对其进行排序,而不是只限制于现在这种针对于这一组数据的排序。

#include<stdio.h>
int main(){
    int arr[10];
    int len = sizeof(arr) / sizeof(int);
    //利用for循环为数组赋初值
    printf("请输入一组整数:\n");
    for(int i=0;i<len;i++){
        scanf("%d",&arr[i]);
    }
    //打印一遍该数组
    for(int i=0;i<len;i++){
        printf("%-4d",arr[i]);
    }

    //排序
    for(int i=0;i<len;i++){             //外循环用来控制整体循环次数,即需要多少遍才能将这组数据排好序
        for(int j=i;j<len;j++){     //内循环用来控制每一次外循环中要对比多少组数据,即在这一次外循环中这组数据需要比较几次
            if(arr[i]<arr[j]){      //如果我前面的数据小于后面的数据,那么就交换两者的位置
                int temp = arr[i];      //temp用来临时存储前面一个数据的值
                arr[i] = arr[j];        //将后面的数据的值赋给前面的数据
                arr[j] = temp;      //让后面数据的值等于temp中临时存储的数据值
            }
        }
    }

    //打印排好序后的数组数据
    printf("\n");
    for(int i=0;i<len;i++){
        printf("%-4d",arr[i]);
    }
    return 0;
}
/*需要注意的是第12行,变量j的值等于变量i的值,因为每完成一次外循环,就证明这组数据中最大的那个值已经被推至当前所剩数据的最前面,
被排过序的数据(即每次外循环完成后被推到所剩数据最前面的数据)不需要再次被排序,而被推至前面的数据的个数由变量i决定,
因此,下一次内循环只需要进行len-i次循环,所以我们让j=i就是控制j的初始值大小,并且j控制着每次内循环中从数组的那个位置起始,
我们知道被排过序的不需要再继续被排序,因此每次的起始位置因该是被排过序的数据的后面的一个数据的位置*/

 在测试一组其他数据:

        实际上,冒泡排序是一种十分简单的排序法,但并不是最高效的排序法,如果哦你有兴趣还可以去了解一下选择排序、插入排序、快速排序这几大最主要的排序算法思想。 

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值