2401_84401465 2024-06-15 17:07 采纳率: 71.4%
浏览 1
已结题

exchange函数出了什么问题?

我想用这个exchange函数将括号里第一个数组的值放进括号里第二个数组,第二个数组最后add项为0,但最后的结果打印出来是错的


#include<stdio.h>
void exchange(int a[],int b[],int k);
int main()
{      int i,n;
    printf("请输入学生人数\n");
    scanf("%d",&n);
    int chinese[n],english[n],math[n];
    printf("请输入学生学号\n");
    int num[n]; 
    int j=1;
    for(i=0;i<n;i++,j++){
        printf("请输入第%d个学生的学号\n",j);
        scanf("%d",&num[i]);
    }
    
    printf("请输入学生的成绩\n");
    for(i=0,j=1;i<n;i++,j++){
        printf("请输入第%d个学生的语文成绩:\n",j);
        scanf("%d",&chinese[i]);
        printf("请输入第%d个学生的英语成绩:\n",j);
        scanf("%d",&english[i]);
        printf("请输入第%d个学生的数学成绩:\n",j);
        scanf("%d",&math[i]); 
    }
      printf("请输入学生学号以查询该生成绩\n");
      int number;
      scanf("%d",&number);
      for(i=0;i<n;i++){
          if(number==num[i]){
              printf("学号为%d的成绩如下:\n",num[i]);
            printf("语文成绩为: %d\n",chinese[i]);
            printf("英语成绩为: %d\n",english[i]);
            printf("数学成绩为: %d\n",math[i]);
            printf("三科平均分为%d\n",
            (chinese[i]+english[i]+math[i])/3); 
          }
      }
    printf("若想要修改学生成绩请输入学号,否则输入0\n");
    int k;
    scanf("%d",&k);
    int control=1;
    if(k!=0){
        while(control!=0){
            for(i=0;i<n;i++){
                if(k==num[i]){
                printf("输入0以修改该生学号,否则输入任意数\n");
                int detm1,detm2;
                scanf("%d",&detm1);
                if(detm1==0){
                    int change;
                    printf("输入修改后的学号");
                    scanf("%d",&change);
                    num[i]=change;}
                printf("输入0以修改该生成绩,否则输入任意数");
                scanf("%d",&detm2);
                if(detm2==0){
                    printf("输入修改后的语文、英语、数学成绩\n"); 
                    int c,e,m;
                    scanf("%d",&c); 
                    scanf("%d",&e); 
                    scanf("%d",&m); 
                    printf("%d",c);
                    chinese[i]=c;english[i]=e;math[i]=m;
                } 
            }
        }
    printf("继续修改请输入学号,否则输入0\n");
    scanf("%d",&k);
    if(k==0){
        control=0;
    } 
    }
}
    printf("输入1以添加新的学生,否则输入0\n");
    int x;
    scanf("%d",&x);
    if(x){
        printf("请输入添加学生个数\n");
        int add;
        scanf("%d",&add);
        int fnum[n+add],fchinese[n+add],fenglish[n+add]
        ,fmath[n+add];
        exchange(num,fnum,n);
        exchange(chinese,fchinese,n);
        exchange(english,fenglish,n);
        exchange(math,fmath,n);
        printf("请输入新增同学学号和各科成绩\n");
        int number1,chinese1,english1,math1;
        for(i=n;i<n+add;i++);{
            printf("请输入第%d位同学的学号\n",i); 
            scanf("%d",&number1);
            fnum[i]=number1;
            printf("请输入第%d位同学的语、英、数成绩",i);
            scanf("%d%d%d",&chinese1,&english1,&math1);
            fchinese[i]=chinese1;fenglish[i]=english1;fmath[i]=math1;
            }
            for(i=1;i<n+add;i++){
                printf("%d",fchinese[i]);
            }
    }
        
return 0;
} 
void exchange(int a[],int b[],int k)
{
    int i;
    for(i=0;i<k;i++){
        b[i]=a[i];
    }
}
  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-06-15 17:09
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    你的交换函数没有找到问题所在。当两个数组的第一个元素相等时,交换他们的位置并不会改变结果。

    例如,如果数组 a[[5, 4, 7], [2, 8, 9]],然后你想将它们的第一个元素相等的位置交换,并将这两个相同元素的第三个元素移动到一个不同的位置(例如在第二个元素的位置),那么交换函数将会把第二个元素移到正确的位置。

    以下是带有问题的交换函数的修改版本:

    void exchange(int a[], int b[], int k) {
        int i;
        for (i = 0; i < k; i++) {
            b[i] = a[i];
        }
    }
    
    int main() {
        int n;
        printf("请输入学生人数\n");
        scanf("%d", &n);
    
        int chinese[n], english[n], math[n];
    
        printf("请输入学生学号\n");
        int num[n]; 
    
        printf("请输入学生的成绩\n");
        for (i = 0; i < n; i++, j++) {
            printf("请输入第%d个学生的学号\n", j);
            scanf("%d", &num[i]);
        }
    
        int student_number;
        printf("请输入学生学号以查询该生成绩\n");
        scanf("%d", &student_number);
    
        for (i = 0; i < n; i++) {
            if (student_number == num[i]) {
                printf("学号为%d的成绩如下:\n", num[i]);
                printf("语文成绩为: %d\n", chinese[i]);
                printf("英语成绩为: %d\n", english[i]);
                printf("数学成绩为: %d\n", math[i]);
                printf("三科平均分为%d\n",
                        (chinese[i] + english[i] + math[i])/3);
            }
        }
    
        printf("若想要修改学生成绩请输入学号,否则输入0\n");
        int k;
        scanf("%d", &k);
    
        if (k != 0) {
            while (k != 0) {
                for (i = 0; i < n; i++) {
                    if (k == num[i]) {
                        printf("输入0以修改该生学号,否则输入任意数\n");
                        int detm1, detm2;
                        scanf("%d", &detm1);
                        if (detm1 == 0) {
                            int change;
                            printf("输入修改后的学号");
                            scanf("%d", &change);
                            num[i] = change;
                        }
                        printf("输入0以修改该生成绩,否则输入任意数\n");
                        scanf("%d", &detm2);
                        if (detm2 == 0) {
                            printf("输入修改后的语文、英语、数学成绩\n"); 
                            int c, e, m;
                            scanf("%d", &c); 
                            scanf("%d", &e); 
                            scanf("%d", &m); 
                            printf("%d", c);
                            chinese[i] = c;english[i] = e;math[i] = m;
                        }
                    }
                }
            }
        }
        printf("继续修改请输入学号,否则输入0\n");
        scanf("%d", &k);
    
        if (k == 0) {
            k = n;
        }
    
        return 0;
    }
    

    上面的版本修复了原始函数的问题,并且它现在可以正确地处理长度为 n 的数组。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月15日