Moyan_0307 2021-09-28 21:11 采纳率: 0%
浏览 42

c语言中for循环改变一个变量的值,出循环之后该值变为了不是想要的值


//2.编写一个算法实现找出n个整数类型数据的顺序表中的最大数和最小数,然后将最大数放到最小数后面。如:原顺序表为:12,6,4,20,14,7,9,36,10,15,调整后顺序表为:12,6,4,36,20,14,7,9, 10,15。
#include<stdio.h>
#include <stdlib.h>
#define Size 10
typedef struct number{
    int * head;//声明了一个名为head的长度不确定的数组,也叫“动态数组”
    int length;//记录当前顺序表的长度
    int size;//记录顺序表分配的存储容量
}num;

num initNumber(){ //初始化
    num t;
    t.head=(int*)malloc(Size*sizeof(int));
    if (!t.head)
    {
        printf("初始化失败");
        exit(0);
    }
    t.length=0;
    t.size=Size;
    return t;
}

num fun(num num1){
    int i,j=0;
    int k=0;
    int min=num1.head[0];
    int max=num1.head[0];
    num num2=initNumber();
    for(i=0;i<Size;i++){        //将num1中的值赋值给num2
        num2.head[i]=num1.head[i];
    }
    i=0;
    while(i<num1.length){
        if(min>=num1.head[i]){ //寻找最小值和位置
            min=num1.head[i];
            k=i;
            printf("%d,%d ",i,k);
            i++;
        }
        else
            i++;
    }
    printf("%d,%d",min,k);//????
    for(i=0;i<num1.length;i++){  //寻找最大值和位置
        if(max<=num1.head[i]){
            max=num1.head[i];
            j=i;
        }
    }
    
    if(j>k){ //最大值在最小值前
        for(i=j;i<Size;i++){
            if(i==k){
                num1.head[i]=max;
            }
            else
                num1.head[i]=num1.head[i+1];
        }
    }
    else{  //最小值在最大值前面
        num1.head[k+1]=max;
        for(i=k+2;i<Size;i++){
            if(i==j)
                num1.head[i]=num2.head[i+1];
            else{
                num1.head[i]=num2.head[i-1];
            }
        }
    }
    return num1;

}
void display(num t){
    int i;
    for (i=0;i<t.length;i++) {
        printf("%d ",t.head[i]);
    }
    printf("\n");
}
int main(){
    int i;
    num t=initNumber();
    for(i=1;i<=Size;i++) {
        scanf("%d",&t.head[i-1]);
        t.length++;
    }
    t=fun(t);
    display(t);
    return 0;
}

结果:

img

k变成了212

  • 写回答

1条回答 默认 最新

  • 地球屋里老师 2021-09-28 21:49
    关注

    img

    修改了51-62行

    
    #define _CRT_SECURE_NO_WARNINGS
    //2.编写一个算法实现找出n个整数类型数据的顺序表中的最大数和最小数,然后将最大数放到最小数后面。如:原顺序表为:12,6,4,20,14,7,9,36,10,15,调整后顺序表为:12,6,4,36,20,14,7,9, 10,15。
    #include<stdio.h>
    #include <stdlib.h>
    #define Size 10
    typedef struct number {
        int* head;//声明了一个名为head的长度不确定的数组,也叫“动态数组”
        int length;//记录当前顺序表的长度
        int size;//记录顺序表分配的存储容量
    }num;
    num initNumber() { //初始化
        num t;
        t.head = (int*)malloc(Size * sizeof(int));
        if (!t.head)
        {
            printf("初始化失败");
            exit(0);
        }
        t.length = 0;
        t.size = Size;
        return t;
    }
    num fun(num num1) {
        int i, j = 0;
        int k = 0;
        int min = num1.head[0];
        int max = num1.head[0];
        num num2 = initNumber();
        for (i = 0; i < Size; i++) {        //将num1中的值赋值给num2
            num2.head[i] = num1.head[i];
        }
        i = 0;
        while (i < num1.length) {
            if (min >= num1.head[i]) { //寻找最小值和位置
                min = num1.head[i];
                k = i;
                i++;
            }
            else
                i++;
        }
        
        for (i = 0; i < num1.length; i++) {  //寻找最大值和位置
            if (max <= num1.head[i]) {
                max = num1.head[i];
                j = i;
            }
        }
    
          for (i = j; i < Size-1; i++) {
                    num1.head[i] = num1.head[i + 1];
            }
          for (i = Size-1; i > k+1; i--) {
              num1.head[i] = num1.head[i - 1];
          }
          if (j > k) {
              num1.head[k + 1] = max;
          }
          else{
              num1.head[k] = max;
          }
          
    
        return num1;
    }
    void display(num t) {
        int i;
        for (i = 0; i < t.length; i++) {
            printf("%d ", t.head[i]);
        }
        printf("\n");
    }
    int main() {
        int i;
        num t = initNumber();
        for (i = 1; i <= Size; i++) {
            scanf("%d", &t.head[i - 1]);
            t.length++;
        }
        t = fun(t);
        display(t);
        return 0;
    }
    
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月28日

悬赏问题

  • ¥15 r语言xlsx包下载后使用时出现了下列问题该如何解决
  • ¥15 Arcgis河网分级报错
  • ¥200 java+appium2.1+idea
  • ¥20 请帮我做一个EXE的去重TXT文本
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型
  • ¥15 需要仿真图,简单的二阶系统实例
  • ¥15 stm32光控照明仿真
  • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列
  • ¥15 SENT协议中相关问题咨询