问题描述:
编写以下四个函数:
init();//设计函数初始化数组为 1 2 3 4 5 6 7 8 9 10
sort();//设计排序函数,实现数组的降序排列:10 9 8 7 6 5 4 3 2 1show();//显示数组
程序分析:
程序的思路:a.先将程序的头和尾写好,在主函数中将要被处理的两个参数(一个数组arr,和数组的长度len)。b.再封装那几个函数,额外加上一个menu函数。c.在主函数中用switch case语句调用这几个函数。
代码如下:
/** init();//设计函数初始化数组为 1 2 3 4 5 6 7 8 9 10 sort();//设计排序函数,实现数组的降序排列:10 9 8 7 6 5 4 3 2 1 empty();//清空数组,全为0 show();//显示数组**/ #include<stdio.h> #define LENGTH 10 //宏定义数组的大小 /***初始化数组****/ void init(int arr[],int n) { int i = 0; /**给数组中的每个元素赋值**/ for(i = 0;i < n;i++) { arr[i] = i+1; } } /***选择排序****/ void selection_sort(int arr[],int n) { int i = 0; //用下标i表示数组中当前元素 int j = 0; //用下标j表示这次循环中找到的最大元素的下标 int k; //用下标k存放每次循环中最大元素的下标 int temp; //定义中间变量,用于下面的交换 for(i = 0;i<n;i++) { k = i; //假设每次循环中的最大值就是循环中的第一个值的值 for(j = i+1;j < n;j++) //从每次循环中的第二个开始与假设的最大值比较 { if(arr[j] > arr[k]) //当找到比假设值大的时候,将最大值下标赋给k { k = j; } } if(k != i) //查找后如果循环中最大值不是假设值 { temp = arr[i]; //交换,使k下标对应的值为每次循环中的最大值 arr[i] = arr[k]; arr[k] = temp; } } } /***冒泡排序****/ void bubble_sort(int arr[],int n) { int i = 0; //定义外层循环变量i,并且初始化为0 int j = 0; //定义内层循环变量j,并且初始化为0 int temp; //定义中间变量,用于后面的交换 for(i = 0;i<n-1;i++) //外层循环,总共进行n-1趟相邻的两两比较 { for(j = 0;j < n-1-i;j++)//内层循环,每趟循环比较n-1-i次 { if(arr[j+1]>arr[j]) //当相邻的两两比较中,后者大于前者,进行交换 { temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; } } } } /***清空数组****/ void empty(int arr[],int n) //这个函数时将数组中的所有元素置为0 { int i = 0; for(i = 0;i < n;i++) { arr[i] = 0; } } /***打印显示数组****/ void show(int arr[],int n) //这个函数主要用打印的方式,显示每次调用其他函数后的结果 { int i = 0; for(i = 0;i < n;i++) { printf("%d ",arr[i]); } printf("\n"); } /***设置菜单****/ void menu() //编写menu给用户提供如何使用的信息 { printf("*******初始化--->1********\n"); printf("*******冒泡排序--->2******\n"); printf("*******选择排序--->3******\n"); printf("********清空--->4*********\n"); printf("********打印--->5*********\n"); } int main() { int j = 0; int a[10]; //定义一个大小为10*sizeof(int)的数组 int len = sizeof(a)/sizeof(a[0]); //数组的大小 int select; //定义select作为switch函数的参数 int i = 1; //定义并初始化循环变量 while(i) { menu(); //调用menu函数 printf("请输入功能序号:\n") ; scanf("%d",&select); switch(select) //编写switch函数 { case 1: init(a,len); break; case 2: bubble_sort(a,len); break; case 3: selection_sort(a,len); break; case 4: empty(a,len); break; case 5: show(a,len); break; default: break; } } return 0; }
原文地址:http://blog.csdn.net/live_wyq/article/details/45506849