C语言编程问题,求高手指教。我错在哪里

/*编写一个函数,要求这个函数能够在一个有序的数组中间插入用户从键盘键入的一个新的数,要求插入后的数组任然有序,
并编写主程序完成对该函数的调用,要求该程序能实现任意个数的插入,任意个由用户通过键盘输入数字确定,每次插入一个数。*/
#include <stdio.h>

#include <stdlib.h>
void paixu(int*p,int num); //函数声明

void main()
{
int *p=NULL,n,m,k,s,i;
printf("请输入数组元素的个数:");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
printf("请输入数组元素的初始值:"); /*输入元素的初始值*/
for(i=0;i<n;i++)
scanf("%d",p+i);
paixu(p,n);
printf("你输入的数组经过排序后为:");
for(i=0;i<n;i++)
printf("%d ",p[i]);

printf("请输入你要插入的数据个数:");
scanf("%d",&m);
p=(int*)malloc((m+n)*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
for(k=0;k<m;k++)
scanf("%d",p[n+k]);
paixu(p,m+n);
printf("插入这几个数后排序后为:");
for(s=0;s<n+m;s++)
printf("%d ",p[s]);

}

void paixu(int *p,int num) //定义排序函数
{
int i,j,t;
for(i=0;i<num;i++)
{
for(j=0;j<num-i-1;j++)
if(p[j]>p[j+1])
{
t=p[j];

p[j]=p[j+1];

p[j+1]=t;
}
}
}

//这里不能在这样重新申请空间了,申请之后前面的n个数就不是你输入的n个数了
p=(int*)malloc((m+n)*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
for(k=0;k<m;k++)
scanf("%d",p[n+k]);//这里改为p+n+k;

其他的你自己在调试一下……
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-28
scanf("%d",&m);
p=(int*)malloc((m+n)*sizeof(int)); /*向内存申请数组的内存空间*/
这句操作结束后,你原来的空间丢失了!!!!!重新定义一个指针来操作吧

一道从小到大排序的c语言编程题,用的是选择排序法,输出结果不对,但是...
你把a[t]=a[i];a[i]=k;放进if(a[i]>a[j])的{k=a[j];t=j;}中,如{k=a[j];t=j;a[t]=a[i];a[i]=k;}就行了。这是我的选择排序法:include<stdio.h>void xuanze(int *a,int len);#define size 10int main(){int shuzu[10],i;printf("请输入10个整数:\\n");...

C语言编程问题救教,多谢指点
一共有两个错误的地方:(1)area应该改成Area,C严格区分大小写;(2)print应该改成printf,C语言中输出函数应该是printf.

...我估计是max函数出了问题,却不知道错在哪里了,求大神指点
一、错误并不在程序中,而是你的输入有问题。输入时在两个数字之间加一个逗号即可。程序中,scanf语句中写的是“%d,%d”,这就要求你在输入时,两个数字之间也要加一个逗号,写成“12,23”,才能正确输入a与b的值,你输入时丢了逗号,使b不能正确输入23的值,所以得到看似错误的结果。二、你把程...

c语言 谁能帮我看一下我错在哪里帮我改一下啊 没有错但是运行结果是错的...
if(b == 0){ if(c == 0)printf("参数都为零,方程无意义!\\n");else printf("a和b为0,c不为0,方程不成立\\n");} else printf("x = %0.2f\\n", -c\/b);} 根号下b方减去4ac,a=0,b=0,参数就都为零了,c就算不为零又有什么用?仔细点,小伙 ...

c语言求鞍点的程序,求告知我错在哪里了
楼上说的对,你在定义数组的时候,计算机会在内存中为你的数组分配空间,这个过程在你输入之前就已经完成了,而你的n是个未知数,所以就造成这个错误了。问题在于,你是知道了n,但计算机不知道,要么直接定义一个大一点的数组,比如a【100】【100】,输入别超过100就行,这样的话应该就没问题了。

C语言算术表达式求解,求高手帮我看下代码,错在哪里?
运行没有错误,只有六个警告,a[7]没有使用,删去就可以了,t,c,l,d,b,theta,x这些变量在使用时没有进行初始化操作!这些改完应该就可以了!

帮我检查一下这段C语言.
先说你的程序错在哪里,主要错在3个地方:错误1. 逻辑设计的错误(这个比较严重,稍后再说)错误2. 在下列语句:for(i=1;i<6;i++,p++)if (*p>b) break ;在这个语句执行后,程序中p已经指向了数组a的第3个元素:a[2] = 5 所以你随后的“*p=b;”这一句,其实就是将p指向的元素的内容...

C语言 输出内容不完整,请问我这个程序哪里错了?
因为scanf函数以空格,制表符Tab和回车符为结束符,而gets函数可以读入空格,制表符Tab,以回车键为结束符,所以你的程序空格后的内容被删除了.但是C语言新标准弃用了gets函数,因为它不检查数组越界,改用了fgets函数.所以你的程序中输入字符中有空格,需要把输入函数scanf换成fgets函数.改正后的程序如下(改动的...

C语言编程问题 哥哥姐姐帮我看看下面程序段错在哪里
main()没有加{} 倒数第二个printf后面那个多余的分好和花括号 scanf()对a忘了加& 对b的scanf应该是%d 也忘了加& 而且循环有问题啊 最外层的while语句getchar()开始时没有赋值进去的 然后你就开始执行输入i了 这样第一次循环是没有结果的 ...

大一计算机C语言问题,用程序计算球的表面积和体积,我做的错在哪,求大 ...
1405927int main(void) { float r,s,v;printf("r = ");scanf("%f",&r);\/\/读入float类型的变量的格式是%f,%lf用于读入double 类型的变量 s = 4.0f*(float)PI*r*r;v = s*r\/3; printf("r = %.2f,s = %.6f,v = %.6f\\n",r,s,v); return 0;} ...

相似回答
大家正在搜