C程序插值问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 07:10:05
main()
{int i,j,n,*p,a[11]={1,4,6,9,13,16,19,28,40,100};
p=a;
printf("input n:");
scanf("%d",&n);
if(n<=*p)
{for(i=9;i>=0;i--)
*(p+i+1)=*(p+i);
*p=n;
}
else if(n>=*(p+9)) *(p+10)=n;
else
for(i=0;i<10;i++)
if(n>=a[i]&&n<=a[i+1])
{for(j=9;j>i;j--)
*(p+j+1)=*(p+j);
*(p+i+1)=n;
}
for(i=0;i<11;i++)
printf("%d\n",*(p+i));
getch();
}
================================
原题目是这样的:
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
================================
这个程序运行不出来呀~~~~求人指点
*(p+i+1)=n;后加break;我感觉没有作用呢
因为令if条件成立的i只有一个呀.也就是说随着i值的变化一旦运行了if语句即使不用beark来结束它自己也会结束吧?
PS:事实是你说的办法有效~.~

在if(n>=a[i]&&n<=a[i+1]) 下面加一句break;就可以了。

代码写的太乱,像if,for,这种语句,相关的就算只有一句最好也用{}括起来。尤其还有嵌套。

从你的补充来看,好像没有理解break;语句的作用。
break;可以跳出循环和switch分支结构,但不是跳出if语句块,所以
加了break;之后跳出的是if上面的for循环。

只要在*(p+i+1)=n;后加break;就行;因为一旦执行那段语句时就已经插入了。
改后程序为:
main()
{int i,j,n,*p,a[11]={1,4,6,9,13,16,19,28,40,100};
p=a;
printf("input n:");
scanf("%d",&n);
if(n<=*p)
{for(i=9;i>=0;i--)
*(p+i+1)=*(p+i);
*p=n;
}
else if(n>=*(p+9)) *(p+10)=n;
else
{
for(i=0;i<10;i++)
if(n>=a[i]&&n<=a[i+1])
{for(j=9;j>i;j--)
*(p+j+1)=*(p+j);
*(p+i+1)=n;
break;
}
}
for(i=0;i<11;i++)
printf("%d\n",*(p+i));
}