编写一个函数,函数原型是void f(int a[],int n,int k)。功能:将数值k插入到有n个元素的升序数组a中。

2025-05-09 07:52:40
推荐回答(2个)
回答1:

#include
#include
void f(int a[],int n,int k);
void sx(int * p,int n);//升序
void printfa(int * p,int n);//打印数组
int main()
{
    int *a,n,k,i;
    printf("\n请确认要输入几个整数:");
    scanf("%d",&n);
    a=(int *)malloc(sizeof(int)*(n+1));
    printf("\n请输入%d个整数:",n);
    for(i=0;i    {
        scanf("%d",&a[i]);
    }
    printf("\n请输入要插入的整数:");
    scanf("%d",&k);
    f(a,n,k);
    printf("\n数值插入后的数组按升序排列:");
    printfa(a,n+1);
    return 0;
}
void printfa(int * p,int n)//打印数组
{
    int i;
    printf("\n");
    for(i=0;i        printf("%d ",p[i]);
    printf("\n");
}
void f(int a[],int n,int k)
{
    a[n]=k;
    sx(a,n);
}
void sx(int * p,int n)//升序
{
    int i,j,num;
    for(j=0;j<=n-1;j++)
    {
        for(i=j+1;i        {
            if(p[j]>p[i])
            {
                num=p[j];
                p[j]=p[i];
                p[i]=num;
            }

        }
    }
}

回答2:

//示例代码如下
#include 
#define N 100
void f(int a[],int n,int k)
{
int *p,*q,*s;
p=a;  //指向首元素
while(p if(k>=*p && k<*(p+1)){
s=p+1;  //指针s指向k待插入的位置
for(q=p+n-1;q>p;q--){
*(q+1)=*q;
}
*s=k;
break;
}
p++;
}
}
int main()
{
int arr[N];
int n,i,value;
scanf("%d",&n);
printf("Input %d numbers: ",n);
for(i=0;i scanf("%d",arr+i);
printf("Insert a value: ");
scanf("%d",&value);
f(arr,n,value);
printf("Output arr:\n");
for(i=0;i printf("%d ",arr[i]);
printf("\n");
return 0;
}

//示例运行结果
F:\c_work>a.exe
5
Input 5 numbers: 1 2 2 3 6
Insert a value: 2
Output arr:
1 2 2 2 3 6

F:\c_work>a.exe
5
Input 5 numbers: 1 2 2 3 6
Insert a value: 4
Output arr:
1 2 2 3 4 6

//修改了下的代码,现在没问题了,有问题的地方给你注释了
#include 
#include 
void f(int a[],int n,int k)
{
int i,j,num;
a[n]=k;  //你这样赋值意味着数组的长度增加1了,即有(n+1)个元素了,数组末元素是a[n]
//for(j=0;j<=n-1;j++)
for(j=0;j<=n;j++)
{
//for(i=j+1;if