zoukankan      html  css  js  c++  java
  • C语言程序设计教程(第三版)课后习题10.3

    1352: C语言程序设计教程(第三版)课后习题10.3

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 813  Solved: 274
    [Submit][Status][BBS]

    Description

    输入10个整数,把最大的数与最后一个数对换。写三个函数;再将其中最小的数与第一个数对换, ①输入10个数;②进行处理;③输出10个数。

    Input

    10个整数

    Output

    整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)

    Sample Input

    2 1 3 4 5 6 7 8 10 9

    Sample Output

    1 2 3 4 5 6 7 8 9 10 


    错误的代码:
    #include <stdio.h>
    const int N=1<<29;
    int a[15],min1=N,max1=-N,b,k;
    void make()
    {
        for(int i=0;i<10;i++)
        {
            if(a[i]>max1)
               {   k=i;
                   max1=a[i];
               }
              if(a[i]<min1)
               {
                   b=i;
                   min1=a[i];
               }
        }
        int temp;
        temp=a[b];
        a[b]=a[0];
        a[0]=temp;
    
        temp=a[k];
        a[k]=a[9];
        a[9]=temp;
    
    }
    void print()
    {
        int i;
        for(i=0;i<10;i++)
        {
            printf("%d ",a[i]);
        }
        printf("
    ");
    }
    int main()
    {
    
        while(scanf("%d",&a[0])!=EOF)
        {
          min1=N;max1=-N;
          for(int i=1;i<10;i++)
          {
              scanf("%d",&a[i]);
          }
          make();
          print();
        }
    }

    刚刚开始这样交,怎么改都是错的,然后去请教大神,才知道正确的应该是这样

    #include <stdio.h>
    const int N=1<<29;
    int a[15],min1,max1,b,k;
    void make()
    {
        for(int i=0; i<10; i++)
        {
    
            if(a[i]<min1)
            {
                b=i;
                min1=a[i];
            }
        }
        int temp;
        temp=a[b];
        a[b]=a[0];
        a[0]=temp;
        for(int i=0; i<10; i++)
        {
            if(a[i]>max1)
            {
                k=i;
                max1=a[i];
            }
        }
        temp=a[k];
        a[k]=a[9];
        a[9]=temp;
    
    }
    void print()
    {
        int i;
        for(i=0; i<10; i++)
        {
            printf("%d ",a[i]);
        }
        printf("
    ");
    }
    int main()
    {
    
        scanf("%d",&a[0]);
        {
            min1=N;
            max1=-N;
            for(int i=1; i<10; i++)
            {
                scanf("%d",&a[i]);
            }
            make();
            print();
        }
    }

    因为:

    比如测试数据是 :10 9 8 7 6 5 4 3 2 1时

    第一组代码会这样:

    最小值1先和第1个值10换

    最大值10再和最后1个值1换

    相当于换了两次

    最终还是10 9 8 7 6 5 4 3 2 1

    第二组代码会这样:

    最小值1先和第1个值10换

    然后最大值10和最后一个值10换

    这时10本来就是最后一个值,相当于自己和自己换了一次

    所以结果是:1 9 8 7 6 5 4 3 2 10

  • 相关阅读:
    antd表单验证图片 必须上传
    interface和type的区别
    Typescript+React封装路由拦截组件
    redux和sessionStorage,localStorage的区别
    ES6中数组和对象的扩展运算符拷贝问题以及常用的深浅拷贝方法
    从变量提升角度看待暂时性死区
    MySQL修改root密码
    用VScode配置Python开发环境
    element UI 制作带月份快捷选项的时间选择器
    React v16.4 的生命周期
  • 原文地址:https://www.cnblogs.com/tianmin123/p/5015150.html
Copyright © 2011-2022 走看看