欢迎来到天天文库
浏览记录
ID:36325922
大小:916.00 KB
页数:133页
时间:2019-05-09
《c语言程序设计案例教程(四)ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Date:14July2021C语言程序设计案例教程(四)Date:14July2021第五章C语言程序设计常用算法——冒泡排序授课要点冒泡排序的思想及实现排序算法的应用假设您是一位营养师,有顾客向您索取一份减肥菜谱。前提条件:您熟悉各种食物的热量问题:保持身材之道列出各种食物的热量对各种食物的热量进行排序选择热量低的食物问题分析问题解决——冒泡排序排序过程(假设元素存放在a[0]-a[n-1]中,按递减排序):(1)比较第一个数与第二个数,若为逆序a[0]2、个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最小的数被安置在最后一个元素位置上(2)对前n-1个数进行第二趟冒泡排序,结果使次小的数被安置在第n-1个元素位置(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束冒泡排序算法过程:采用两重计数型循环:步骤1:将待排序的数据放入数组中;步骤2:置i为0;步骤3:让j从0到4-i,比较a[j]与a[j+1],如果a[j]>=a[j+1],位置不动;如果a[j]3、1];a[j+1]=temp;步骤3结束后a[5-i]中的数为最小的数步骤4:让i=i+1;只要i<=4就返回步骤3,将a[5-i]的值排好。当i==5时执行步骤5步骤5:输出排序结果冒泡排序算法分析:#includevoidmain()/*主函数*/{inti,j,temp,a[6];/*整型变量*/for(i=0;i<=5;i++)/*键入6个数,放入a数组中*/{printf(“请输入食物的热量a[%d]=",i);/*提示*/scanf("%d",&a[i]);/*用键盘输4、入整数赋给a[i]*/}for(i=0;i<=4;i++)/*冒泡排序,外层循环*/for(j=0;j<=4-i;j++)/*内层循环*/{/*循环体,开始*/if(a[j]a[i+1]*/{temp=a[j];/*让a[i]与a[i+1]交换*/a[j]=a[j+1];a[j+1]=temp;}}/*循环体结束*/printf("食物按热量从高到低的顺序显示为:");for(i=0;i<=5;i++)/*输出排序结果*/printf("%d",a[i]);5、/*格式输出a[i]*/}若将题目改为按从小到大的顺序输出,如何修改程序?若排序的个数由用户指定,如何修改程序?小组讨论并总结在数组排序的基础上,进一步将一个数据插入一个有序数组中。学生进阶练习a1a2…ai-1ai…ana1a2…ai-1…aixan数组中的元素增加1个问题分析提示数据初始化(输入、排序)输入待插入数据找到待插入位置将待插入位置空出插入数据输出结果#includevoidmain()/*主函数*/{inti,j,temp,a[6],x;/*定义整型变量*/for(6、i=0;i<=5;i++)/*键入6个数,放入a数组中*/{printf("请输入待排序的数a[%d]=",i);/*提示*/scanf("%d",&a[i]);/*用键盘输入整数赋给a[i]*/}for(i=0;i<=4;i++)/*冒泡排序,外层循环*/for(j=0;j<=4-i;j++)/*内层循环*/{/*循环体,开始*/if(a[j]>a[j+1])/*如果a[i]>a[i+1]*/{temp=a[j];/*让a[i]与a[i+1]交换*/a[j]=a[j+1];a[j+1]=temp;7、}}/*循环体结束*/for(i=0;i<=5;i++)/*输出排序结果*/printf("%d",a[i]);/*格式输出a[i]*/i=0;printf("请输入您要插入的整数:");/*提示*/scanf("%d",&x);/*用键盘输入要插入的整数赋给x*/while(i<=6&&x>a[i])/*循环查找插入的位置*/i++;for(j=5;j>=i;j--)/*循环实现元素后移*/a[j+1]=a[j];a[i]=x;/*插入元素x*/printf("插入后的序列是:");f8、or(i=0;i<=6;i++)/*输出排序结果*/printf("%d",a[i]);/*格式输出a[i]*/}实现寻找你身边的一个实际问题,编写解决问题的程序,用到冒泡排序。例如:有N个国家参加运动会,从键盘输入代表各国运动队的国名(国名用英文名)和出场秩序名单,然后按出场名次从小到大的顺序输出各运动队的国名。学以致用完成“学生成绩管理系统”的“排序”功能。按成绩从高到低的顺序显示按学号从小到大的顺序显示完成“学生成绩管理系统”的“信息插入”功能作业——每人必
2、个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最小的数被安置在最后一个元素位置上(2)对前n-1个数进行第二趟冒泡排序,结果使次小的数被安置在第n-1个元素位置(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束冒泡排序算法过程:采用两重计数型循环:步骤1:将待排序的数据放入数组中;步骤2:置i为0;步骤3:让j从0到4-i,比较a[j]与a[j+1],如果a[j]>=a[j+1],位置不动;如果a[j]3、1];a[j+1]=temp;步骤3结束后a[5-i]中的数为最小的数步骤4:让i=i+1;只要i<=4就返回步骤3,将a[5-i]的值排好。当i==5时执行步骤5步骤5:输出排序结果冒泡排序算法分析:#includevoidmain()/*主函数*/{inti,j,temp,a[6];/*整型变量*/for(i=0;i<=5;i++)/*键入6个数,放入a数组中*/{printf(“请输入食物的热量a[%d]=",i);/*提示*/scanf("%d",&a[i]);/*用键盘输4、入整数赋给a[i]*/}for(i=0;i<=4;i++)/*冒泡排序,外层循环*/for(j=0;j<=4-i;j++)/*内层循环*/{/*循环体,开始*/if(a[j]a[i+1]*/{temp=a[j];/*让a[i]与a[i+1]交换*/a[j]=a[j+1];a[j+1]=temp;}}/*循环体结束*/printf("食物按热量从高到低的顺序显示为:");for(i=0;i<=5;i++)/*输出排序结果*/printf("%d",a[i]);5、/*格式输出a[i]*/}若将题目改为按从小到大的顺序输出,如何修改程序?若排序的个数由用户指定,如何修改程序?小组讨论并总结在数组排序的基础上,进一步将一个数据插入一个有序数组中。学生进阶练习a1a2…ai-1ai…ana1a2…ai-1…aixan数组中的元素增加1个问题分析提示数据初始化(输入、排序)输入待插入数据找到待插入位置将待插入位置空出插入数据输出结果#includevoidmain()/*主函数*/{inti,j,temp,a[6],x;/*定义整型变量*/for(6、i=0;i<=5;i++)/*键入6个数,放入a数组中*/{printf("请输入待排序的数a[%d]=",i);/*提示*/scanf("%d",&a[i]);/*用键盘输入整数赋给a[i]*/}for(i=0;i<=4;i++)/*冒泡排序,外层循环*/for(j=0;j<=4-i;j++)/*内层循环*/{/*循环体,开始*/if(a[j]>a[j+1])/*如果a[i]>a[i+1]*/{temp=a[j];/*让a[i]与a[i+1]交换*/a[j]=a[j+1];a[j+1]=temp;7、}}/*循环体结束*/for(i=0;i<=5;i++)/*输出排序结果*/printf("%d",a[i]);/*格式输出a[i]*/i=0;printf("请输入您要插入的整数:");/*提示*/scanf("%d",&x);/*用键盘输入要插入的整数赋给x*/while(i<=6&&x>a[i])/*循环查找插入的位置*/i++;for(j=5;j>=i;j--)/*循环实现元素后移*/a[j+1]=a[j];a[i]=x;/*插入元素x*/printf("插入后的序列是:");f8、or(i=0;i<=6;i++)/*输出排序结果*/printf("%d",a[i]);/*格式输出a[i]*/}实现寻找你身边的一个实际问题,编写解决问题的程序,用到冒泡排序。例如:有N个国家参加运动会,从键盘输入代表各国运动队的国名(国名用英文名)和出场秩序名单,然后按出场名次从小到大的顺序输出各运动队的国名。学以致用完成“学生成绩管理系统”的“排序”功能。按成绩从高到低的顺序显示按学号从小到大的顺序显示完成“学生成绩管理系统”的“信息插入”功能作业——每人必
3、1];a[j+1]=temp;步骤3结束后a[5-i]中的数为最小的数步骤4:让i=i+1;只要i<=4就返回步骤3,将a[5-i]的值排好。当i==5时执行步骤5步骤5:输出排序结果冒泡排序算法分析:#includevoidmain()/*主函数*/{inti,j,temp,a[6];/*整型变量*/for(i=0;i<=5;i++)/*键入6个数,放入a数组中*/{printf(“请输入食物的热量a[%d]=",i);/*提示*/scanf("%d",&a[i]);/*用键盘输
4、入整数赋给a[i]*/}for(i=0;i<=4;i++)/*冒泡排序,外层循环*/for(j=0;j<=4-i;j++)/*内层循环*/{/*循环体,开始*/if(a[j]a[i+1]*/{temp=a[j];/*让a[i]与a[i+1]交换*/a[j]=a[j+1];a[j+1]=temp;}}/*循环体结束*/printf("食物按热量从高到低的顺序显示为:");for(i=0;i<=5;i++)/*输出排序结果*/printf("%d",a[i]);
5、/*格式输出a[i]*/}若将题目改为按从小到大的顺序输出,如何修改程序?若排序的个数由用户指定,如何修改程序?小组讨论并总结在数组排序的基础上,进一步将一个数据插入一个有序数组中。学生进阶练习a1a2…ai-1ai…ana1a2…ai-1…aixan数组中的元素增加1个问题分析提示数据初始化(输入、排序)输入待插入数据找到待插入位置将待插入位置空出插入数据输出结果#includevoidmain()/*主函数*/{inti,j,temp,a[6],x;/*定义整型变量*/for(
6、i=0;i<=5;i++)/*键入6个数,放入a数组中*/{printf("请输入待排序的数a[%d]=",i);/*提示*/scanf("%d",&a[i]);/*用键盘输入整数赋给a[i]*/}for(i=0;i<=4;i++)/*冒泡排序,外层循环*/for(j=0;j<=4-i;j++)/*内层循环*/{/*循环体,开始*/if(a[j]>a[j+1])/*如果a[i]>a[i+1]*/{temp=a[j];/*让a[i]与a[i+1]交换*/a[j]=a[j+1];a[j+1]=temp;
7、}}/*循环体结束*/for(i=0;i<=5;i++)/*输出排序结果*/printf("%d",a[i]);/*格式输出a[i]*/i=0;printf("请输入您要插入的整数:");/*提示*/scanf("%d",&x);/*用键盘输入要插入的整数赋给x*/while(i<=6&&x>a[i])/*循环查找插入的位置*/i++;for(j=5;j>=i;j--)/*循环实现元素后移*/a[j+1]=a[j];a[i]=x;/*插入元素x*/printf("插入后的序列是:");f
8、or(i=0;i<=6;i++)/*输出排序结果*/printf("%d",a[i]);/*格式输出a[i]*/}实现寻找你身边的一个实际问题,编写解决问题的程序,用到冒泡排序。例如:有N个国家参加运动会,从键盘输入代表各国运动队的国名(国名用英文名)和出场秩序名单,然后按出场名次从小到大的顺序输出各运动队的国名。学以致用完成“学生成绩管理系统”的“排序”功能。按成绩从高到低的顺序显示按学号从小到大的顺序显示完成“学生成绩管理系统”的“信息插入”功能作业——每人必
此文档下载收益归作者所有