半轮皓月 2023-05-29 18:48 采纳率: 100%
浏览 20
已结题

max=num【0】和min=num【0】等号两边可不可以互换

img


max=num【0】等号两边互换后运行错误
min=num【0】等号两边互换后运行错误
求原因

  • 写回答

3条回答 默认 最新

  • a5156520 2023-05-29 19:07
    关注

    如果改为num[0]=max, num[0]=min,那数组第一个元素的值就被设置为max或min的值,这就会让求数组最大值和最小值出现错误,因为数组第一个元素的值改变了,有很大可能不是原来第一个元素的值,因为max和min都未赋初始化,其值就是内存位置的随机值,所以这就会出现错误;

    而如果让max=num[0],和min=num[0],然后再拿这个max和min与数组其他元素的值比较,将较大的值赋值给max,较小的值赋值给min,循环结束,就可得出数组的最大值和最小值。

    测试代码如下:

    
    #include <stdio.h>
    
    int main(void){
        
        int num[100];
        int i,a,min,max;
        printf("输入数组长度:\n");
        scanf("%d",&a);
        
        printf("请输入数组中的元素:\n");
        for(i=0;i<a;i++){
            scanf("%d",&num[i]);
        } 
        
        // 赋值前先备份数组第一个元素的值 
        int tnum0=num[0];  
        num[0]=min;
        for(i=0;i<a;i++){
            if(num[i]<min){
                min=num[i];
            }
        }
        
        num[0]=max;
        for(i=0;i<a;i++){
            if(num[i]>max){
                max=num[i];
            }
        }
        printf("\nnum[0]=max, num[0]=min,求得数组最大值最小值为:\n");
        printf("max=%d,min=%d",max,min);
        
        
        // 将数组第一个元素的值复原 
        num[0]=tnum0;
        min=num[0];
        for(i=0;i<a;i++){
            if(num[i]<min){
                min=num[i];
            }
        }
        
        max=num[0];
        for(i=0;i<a;i++){
            if(num[i]>max){
                max=num[i];
            }
        }
        printf("\n\nmax=num[0], min=num[0],求得数组最大值最小值为:\n");
        printf("max=%d,min=%d",max,min);
        
        return 0;
        
    } 
    
    

    img

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

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 创建了问题 5月29日