11、编写子函数:(1)用冒泡法将一个数组排成升序的函数---SUB1;(2)在升序数组中插入一个数,并且保持该数组仍为升序数组的函数---SUB2。
主函数:①输入任意10个正整数给数组;②调用SUB1对数组进行排序;③从键盘输入一个正整数,调用SUB2将其插入该数组。
冒泡算法是一种比较简单的算法,其目的是保证大的数在后面,小的数在前面。
本来想搞一个动态数组 int n; scanf("%d",&n); int a[n]; 结果挺奇怪gcc里面编译通过,而在vc里面编译不通过,暂时没想到办法,先用宏定义代替 #define num 10
在SUB2即在数组中插入一个正整数,用到了一点小技巧。如果插入的数从原数组的最小值开始进行比较,后面的操作会比较困难。因此这里选择从原数组最大的数开始进行比较。并且 if(a[i]<b) {a[i+1]=b;break;}进行终止,也就是用break跳出循环语句。
具体代码如下:
#include<stdio.h>
#define num 10
void sub1(int a[],int n)
{
int j,temp,i;
for(j=1;j<n-1;j++)
{
for(i=0;i<n-1;i++)
{
if(a[i]>a[i+1])
{temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
}
void sub2(int a[],int n,int b)
{ int i;
for(i=n-1;i>=0;i--)
{ if(a[i]<b)
{a[i+1]=b;
break;
}
else a[i+1]=a[i];
}
}
void main()
{
int k;
int abc[num];
for(k=0;k<num;k++)
{ int i;
printf("please input the %d number",k);
scanf("%d",&i);
abc[k]=i;
}
sub1(abc,num);
int j=0;
for(j;j<num;j++)
{
printf("the number abc[%d] is %d\n",j,abc[j]);
}
sub2(abc,num,4);
j=0;
for(j;j<=num;j++)
{
printf("the number abc[%d] is %d\n",j,abc[j]);
}
}