从键盘输入5个有序的数,并保存到长度为6的数组a中,再次从键盘输入一个整数,将其插入数组a中使得数组a中的数据依然有序。(要求:尽可能多使用子函数将问题从功能上分块)
解法1 :用for循环实现插入位置之后元素整体后移
#include <stdio.h>
int main()
{
int i,x,num=0;//定义num用来保存插入位置的i值
int a[6];
printf("输入5个有序的数:");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}//把5个数字保存到数组a中
printf("输入插入的目标数:");
scanf("%d",&x);//保存插入目标数
for(i=0;i<6;i++)
{
if(x<a[i])
break;
}
num=i;//寻找插入位置,保存插入位置的i值
for(i=5;i>=num;i--)
{
a[i]=a[i-1];
}//用for循环实现插入位置之后元素整体后移
if (num > 5)
num = 6;
a[num]=x;//如果num大于5,则目标数成为数组最后一个元素
printf("插入后的有序数组为:\n");
for(int i=0;i<6;i++)
printf("%d",a[i]);
return 0;
}
运行结果如图
使用子函数将问题从功能上分块为数据的输入、插入位置的确定、数据的插入和数据的输出。
#include <stdio.h>
void Fun1(int a[6]);
void Fun2(int a[6],int *num,int *x);
void Fun3(int a[6],int *num,int *x);
void Fun4(int a[6]);
int main()
{
int x,num=0;
int a[6];
printf("输入5个有序的数:");
Fun1(a);
printf("输入插入的目标数:");
scanf("%d",&x);
Fun2(a,&num,&x);
Fun3(a,&num,&x);
Fun4(a);
return 0;
}
//1、数据的输入
void Fun1(int a[6])
{
int i;
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
}
//2、插入位置的确定
void Fun2(int a[6],int *num,int *x)
{
int i;
for(i=0;i<6;i++)
{
if(*x<a[i])
break;
}
*num=i;
}
//3、数据的插入
void Fun3(int a[6],int *num,int *x)
{
int i;
for(i=5;i>=*num;i--)
{
a[i]=a[i-1];
}
if (*num > 5)
*num = 6;
a[*num]=*x;
}
//4、数据的输出
void Fun4(int a[6])
{
printf("插入后的有序数组为:\n");
for(int i=0;i<6;i++)
printf("%d",a[i]);
}
运行结果如图
解法2 :用双循环和中间变量来比较和交换数据
#include <stdio.h>
int main()
{
int i,x,num=0;//定义num用来保存插入位置的i值
int a[6];
printf("输入5个有序的数:");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}//把5个数字保存到数组a中
printf("输入插入的目标数:");
scanf("%d",&x);//保存插入目标数
if (num > 5)
{
num = 6;
a[num]=x;
}
else
{
for(i=0;i<6;i++)
{
if(x<a[i])
{
int j,k1,k2;
k1=a[i];
a[i]=x;
for(j=i+1;j<6;j++)
{
k2=a[j];
a[j]=k1;
k1=k2;
}//用双循环和中间变量来比较和交换数据
break;
}
}
}
printf("插入后的有序数组为:\n");
for(int i=0;i<6;i++)
printf("%d",a[i]);
return 0;
}
运行结果如图
使用子函数将问题从功能上分块为数据的输入、插入位置的确定与数据的插入、数据的输出。
#include <stdio.h>
void Fun1(int a[6]);
void Fun2(int a[6],int *num,int *x);
void Fun3(int a[6]);
int main()
{
int x,num=0;//定义num用来保存插入位置的i值
int a[6];
printf("输入5个有序的数:");
Fun1(a);
printf("输入插入的目标数:");
scanf("%d",&x);//保存插入目标数
Fun2(a,&num,&x);
Fun3(a);
return 0;
}
//1、数据的输入
void Fun1(int a[6])
{
int i;
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
}
//2、插入位置的寻找与数据的插入
void Fun2(int a[6],int *num,int *x)
{
int i;
if (*num > 5)
{
*num = 6;
a[*num]=*x;
}
else
{
for(i=0;i<6;i++)
{
if(*x<a[i])
{
int j,k1,k2;
k1=a[i];
a[i]=*x;
for(j=i+1;j<6;j++)
{
k2=a[j];
a[j]=k1;
k1=k2;
}//用双循环和中间变量来比较和交换数据
break;
}
}
}
}
//3、数据的输出
void Fun3(int a[6])
{
printf("插入后的有序数组为:\n");
for(int i=0;i<6;i++)
printf("%d",a[i]);
}
运行结果如图