猿问

我按自己思路做了一下,但是还有错,求大神指点

要求采用指针方法访问内存,编写的自定义函数需要有主函数验证其正确性
void f(int a[],int n,int k)
{
int i,j,num;
a[n]=k;
for(j=0;j<=n-1;j++)
{
for(i=j+1;i<n;i++)
{
if(a[j]>a[i])
{
num=a[j];
a[j]=a[i];
a[i]=num;
}

}
}
}
int main()
{
int *a,n,i,k;
printf("请输入数组长度:");
scanf("%d", &n);
if (n > 0)
{
a=(int *)malloc(n*sizeof(int));
for(i=0;i<n;i++) 
{
printf("请输入数组中第%d个数:\n",i+1);
scanf("%d",&a[i]);
}
printf("请输入要插入的整数:");
scanf("%d",&k);
f(a,n,k);
printf("升序排序后:");
for (i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");

}
}

Qyouu
浏览 130回答 2
2回答

冉冉说

#include&nbsp;<stdio.h>void&nbsp;f(int&nbsp;a[],int&nbsp;n,int&nbsp;k){int&nbsp;i,t;&nbsp;for(i=n-1;i>-1&&a[i]>k;i--)&nbsp;&nbsp;&nbsp;a[i+1]=a[i];&nbsp;a[i+1]=k;&nbsp;&nbsp;}int&nbsp;main(){int&nbsp;n=10,i,k,a[15]={23,24,27,28,31,34,42,45,49,53};&nbsp;for(i=0;i<n;i++)&nbsp;&nbsp;&nbsp;printf("%d&nbsp;",a[i]);&nbsp;printf("\n");&nbsp;scanf("%d",&k);&nbsp;f(a,n++,k);&nbsp;for(i=0;i<n;i++)&nbsp;&nbsp;&nbsp;printf("%d&nbsp;",a[i]);&nbsp;printf("\n");&nbsp;return&nbsp;0;&nbsp;&nbsp;}

浮云间

//示例代码如下#include&nbsp;<stdio.h>#define&nbsp;N&nbsp;100void&nbsp;f(int&nbsp;a[],int&nbsp;n,int&nbsp;k){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;*p,*q,*s;&nbsp;&nbsp;&nbsp;&nbsp;p=a;&nbsp;&nbsp;//指向首元素&nbsp;&nbsp;&nbsp;&nbsp;while(p<p+n){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(k>=*p&nbsp;&&&nbsp;k<*(p+1)){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=p+1;&nbsp;&nbsp;//指针s指向k待插入的位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(q=p+n-1;q>p;q--){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(q+1)=*q;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*s=k;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p++;&nbsp;&nbsp;&nbsp;&nbsp;}}int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;arr[N];&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;n,i,value;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&n);&nbsp;&nbsp;&nbsp;&nbsp;printf("Input&nbsp;%d&nbsp;numbers:&nbsp;",n);&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<n;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",arr+i);&nbsp;&nbsp;&nbsp;&nbsp;printf("Insert&nbsp;a&nbsp;value:&nbsp;");&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&value);&nbsp;&nbsp;&nbsp;&nbsp;f(arr,n,value);&nbsp;&nbsp;&nbsp;&nbsp;printf("Output&nbsp;arr:\n");&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<n+1;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp;",arr[i]);&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}&nbsp;//示例运行结果F:\c_work>a.exe5Input&nbsp;5&nbsp;numbers:&nbsp;1&nbsp;2&nbsp;2&nbsp;3&nbsp;6Insert&nbsp;a&nbsp;value:&nbsp;2Output&nbsp;arr:1&nbsp;2&nbsp;2&nbsp;2&nbsp;3&nbsp;6&nbsp;F:\c_work>a.exe5Input&nbsp;5&nbsp;numbers:&nbsp;1&nbsp;2&nbsp;2&nbsp;3&nbsp;6Insert&nbsp;a&nbsp;value:&nbsp;4Output&nbsp;arr:1&nbsp;2&nbsp;2&nbsp;3&nbsp;4&nbsp;6&nbsp;//修改了下的代码,现在没问题了,有问题的地方给你注释了#include&nbsp;<stdio.h>#include&nbsp;<stdlib.h>void&nbsp;f(int&nbsp;a[],int&nbsp;n,int&nbsp;k){int&nbsp;i,j,num;a[n]=k;&nbsp;&nbsp;//你这样赋值意味着数组的长度增加1了,即有(n+1)个元素了,数组末元素是a[n]//for(j=0;j<=n-1;j++)for(j=0;j<=n;j++){//for(i=j+1;i<n;i++)for(i=j+1;i<n+1;i++){if(a[j]>a[i]){num=a[j];a[j]=a[i];a[i]=num;}&nbsp;}}}int&nbsp;main(){int&nbsp;*a,n,i,k;printf("请输入数组长度:");scanf("%d",&nbsp;&n);if&nbsp;(n&nbsp;>&nbsp;0){//a=(int&nbsp;*)malloc(n*sizeof(int));a=(int&nbsp;*)malloc((n+1)*sizeof(int));for(i=0;i<n;i++)&nbsp;{printf("请输入数组中第%d个数:\n",i+1);scanf("%d",&a[i]);}printf("请输入要插入的整数:");scanf("%d",&k);f(a,n,k);printf("升序排序后:");//for&nbsp;(i=0;i<n;i++)for&nbsp;(i=0;i<n+1;i++)printf("%d&nbsp;",a[i]);printf("\n");&nbsp;}}
随时随地看视频慕课网APP
我要回答