要求:已知一有序序列1,3,4,8,15,17,要求从键盘输入一个整数,将此整数插入到此有序序列中。要求输出原始数组和插入之后的数组。
以下是我写的程序:
#include<stdio.h>
#include<stdlib.h>
int insert(int b[],int c)
{
int s1[100],j,i;
if (b[0]>=c)
{
s1[0]=c;
for(i=0;i<6;i++) s1[i+1]=b[i];
}
else if (b[0]<c)
{
for(i=0;;i++)
{
if (b[i]>c) break;
if (i=6) break;
}
for(j=0;j<(i-1);j++) s1[j]=b[j];
s1[i]=c;
for(j=i;j<6-i;j++) s1[i+1]=b[i];
}
else {
printf("please input a number\n");
exit(-1);
}
for(i=0;i<7;i++) b[i]=s1[i];
}
int main()
{
int a[10]={1,3,4,8,15,17},i,n;
printf("原始数组为:\n");
for(i=0;i<6;i++) printf("%3d",a[i]);
printf("\n");
printf("请输入一个整数:\n");
scanf("%d",&n);
insert(a,n);
printf("hou\n");
for(i=0;i<7;i++) printf("%3d",a[i]);
}
应该有不少错误,请告诉我应该怎么改QAQ 谢谢了!
#include<stdlib.h>
int insert(int b[],int c)
{
int s1[100],j,i;
if (b[0]>=c)
{
s1[0]=c;
for(i=0; i<6; i++) s1[i+1]=b[i];
}
else if (b[0]<c)
{
for(i=0;; i++)
{
if (i==6) break; /*这一句要放在上面,否则下面那句会数组访问越界,其实放在for语句就可以了*/
if (b[i]>c) break;
}
for(j=0; j<=(i-1); j++) s1[j]=b[j];
s1[i]=c;
for(j=i; j<6; j++) s1[j+1]=b[j]; /*这一句问题比较多,自己看看*/
}
else
{
printf("please input a number\n");
exit(-1);
}
for(i=0; i<7; i++) b[i]=s1[i];
}
int main()
{
int a[10]= {1,3,4,8,15,17},i,n;
printf("原始数组为:\n");
for(i=0; i<6; i++) printf("%3d",a[i]);
printf("\n");
printf("请输入一个整数:\n");
scanf("%d",&n);
insert(a,n);
printf("hou\n");
for(i=0; i<7; i++) printf("%3d",a[i]);
}
算法比较啰嗦,给你改了改表面问题,你看看。
追问修改之后输出的 3,4 是乱码 Q_Q
追答不会啊,我这里是可以的,你用我的代码拷贝过去执行以下试试。
看我的。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[7]={1,3,4,8,15,17,0},i,n;
printf("原始数组为:\n");
for(i=0;i<6;i++) printf("%3d",a[i]);
printf("\n");
printf("请输入一个整数:\n");
scanf("%d",&n);
a[6]=n;
int t=n;
for(i=0;i<6;++i){
if(a[i]>n){
int temp=a[i];
a[i]=t;
t=temp;
}
}
a[6]=t;
printf("hou\n");
for(i=0;i<7;i++) printf("%3d",a[i]);
system("PAUSE");
}