编写程序,利用下面的程序

编写程序,在主函数中从键盘输入的若千个成绩存放在一维数组
中,再输入一个新成绩及它的插入位置,并调用子函数把新成绩插入
到一维数组中指定位置。

未使用模块化设计时的程序:,
#include<stdio.h>
void main()
int i,j,n,score[20],new-sc:
printf("请输入人数:\n");
scanf ("%d",&n):
printf("请输入成绩:\n");
for(i=0;i<n;i++) scanf("%d", &score[i]);
printf("请输入插入成绩:");
scanf("%d", &new-sc);
printf("请输入插入位置:”);
scanf("%d",&j);
if(j>n || j<l)printf("位置出错!\n");
else
{ for(i=n:i>j-1;i--) score[i]=score[i-1]:
  score[j-1]=new-sc:
  n=n+1;

}
  for(i=0;i<n;i++)
  printf("%3d",score[i]);

}

把数组长度使用int指针传入,然后再传入其他参数即可。

修改如下:


#include<stdio.h>

// int scores[] 成绩数组
//  int *n 存储了数组长度的指针,因为需要改变数组长度,所以这里使用指针 
//  int newScore 要插入数组的新成绩
//  int pos 要插入的位置,从1开始 
void insertScore(int scores[],int *n,int newScore,int pos){
    if(pos>*n || pos<1)
        printf("位置出错!\n");
    else {
        for(int i=*n;i>pos-1; i--) 
            scores[i]=scores[i-1];
        scores[pos-1]=newScore;
        *n=*n+1;
    
    }
}

int  main() {
    int i,j,n,score[20],new_sc;
    printf("请输入人数:\n");
    scanf ("%d",&n);
        
    printf("请输入成绩:\n");
    for(i=0; i<n; i++) 
        scanf("%d", &score[i]);
    printf("请输入插入成绩:");
    scanf("%d", &new_sc);
    printf("请输入插入位置:");
    scanf("%d",&j);
    
    insertScore(score,&n,new_sc,j);
    
    for(i=0; i<n; i++)
        printf("%3d",score[i]);

}


img