c语言高手请进:帮我解决,谢谢了.

来源:百度知道 编辑:UC知道 时间:2024/05/20 19:24:39
在顺序表中插入一个数,使之成为顺序表.
#include"stdio.h"
void main()
{
int i=0,j=0;
int num;
int *p,*q;
int a[]={3,4,6,7,8};
scanf("%d",&num);
while(a[i]<num)
{
j++;
i++;
}
q=&a[j];
for(p=&a[4];p>=q;--p)
*(q+1)=*q;
a[j]=num;
for(i=0;i<6;i++)
printf("%d\n",a[i]);
}


#include"stdio.h"
void main()
{
int i=0,j=0;
int num;
int *p,*q;
int a[6]={3,4,6,7,8};
scanf("%d",&num);
while(a[j]<num)
{
j++;
}
q=&a[j];
for(p=&a[4];p>=q;--p)
*(p+1)=*p;
a[j]=num;
for(i=0;i<6;i++)
printf("%d\n",a[i]);
}

你的程序有几个错误
1.在你定义数组的时候int a[]={3,4,6,7,8}; 这样定义是对的。但是运行完这句语句后系统就自动给a定义了长度。即a为5的长度。那你再要将输入的数加进去的话,必定溢出。我定义了长度为6,当然可以比6大的任意数。
2.for(p=&a[4];p>=q;--p) *(q+1)=*q;中忘了哪个是自变量哪个是常量了。在这p为自变量,q为常量。所以应该是 *(p+1)=*p;
3.是累赘的地方。
while(a[i]<num)
{
j++;
i++;
} 这语句中你并不需要用两个变量。
只是你习惯了把i作为变化的变量。

插入一个5
在那个括号内