• 第十四、十五周作业


    7-10 简化的插入排序

    1.实验代码

    #include <stdio.h>
    int main ()
    {
      const int N=10;
      int n,i,j,m,a[N];
      scanf("%d",&n);
      for(i=0;i<n;i++)
      {
        scanf("%d",&a[i]);
      }
      scanf("%d",&m);
      if(n==0)
      {
          printf("%d ",m);
       }else if(n==1)
       {
           if(m>a[0])
           printf("%d %d ",a[0],m);
           else
           printf("%d %d ",m,a[0]);
       }else
        {
            if(a[n-1]<m)
            {
                for(i=0;i<n;i++)
                {
                    printf("%d ",a[i]);
                }
                printf("%d ",m);
            }
      for(i=0;i<n;i++)
      {
      if((a[i]<m)&&(m<a[i+1]))
      {
      j=i;
       for(i=0;i<=j;i++)
      {
       printf("%d ",a[i]);
      }
      printf("%d ",m);
     for(i=j+1;i<n;i++)
     {
      printf("%d ",a[i]);
     }
    }
    }
     if(a[0]>m)
     {
     printf("%d ",m);
      for(i=0;i<n;i++)
      {
          printf("%d ",a[i]);
      }
    }
    }
    }

    2 设计思路
    (1)主要描述题目算法

    a.先定义N=10,再定义数组a[N],输入一个整数n,i,i=0,在循环结构中对a[i]进行赋值,输入要插进去的数m。

    b.根据输入n的值情况的不同进行讨论;及当m插入开头,中间,结尾进行分类。

    c.最后输出排列过顺序的值。

    (2)流程图

     

      3.本题调试过程碰到问题及解决办法

    遇到的问题是情况考虑的不全面,关于n=0时的情况;关于n=1时的情况;关于插入的值m在最前面及最后面的情况,这些一开始自己都没有写在程序中,后针对对测试点,完善代码。

    7-1 求整数序列中出现次数最多的数

     1.实验代码

    #include <stdio.h>
    int main ()
    {
    const int N=1000;
    int number[N],i,n,j,count[N],max,m;
    max=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    scanf("%d",&number[i]);
    }
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    if(number[i]==number[j])
    count[i]=count[i]+1;
    }
    }
    for(i=0;i<n;i++)
    {
    if(count[i]>max)
    {
    max=count[i];
    m=i;
    }
    }
    printf("%d %d",number[m],max);
    return 0;
    }

    2 设计思路
    (1)主要描述题目算法

    a.对 number[N],i,n,j,count[N],max,m进行整型定义,N=1000,输入n,在循环结构中输入number[i]。

    b.将number[i]数组中相同的数出现的次数与count[i]对应起来。

    c.比较count[i]的最大值,并输出对应的number[m]。

     (2)流程图

     3.本题调试过程碰到问题及解决办法

     

    一直错误在max在统计中多次更新,错误在for关于if(number[i]==number[j])双重循环中,一开始自己写的循环为for(i=0;i<n;i++);for(j=i;j<n-i;j++)这样的话,会使得之后的number[i]值不能和之前的number[j]值进行比较,会导致最后max的错误,甚至是结果的错误。

     7-4 数组元素循环右移问题

     1.实验代码

    #include <stdio.h>
    int main ()
    {
      const int N=100;
      int number[N],m,n,i,tmp;
      scanf("%d %d",&n,&m);
      for(i=0;i<n;i++)
      {
        scanf("%d",&number[i]);
      }
      if(n>=m)
      {
          m=m;
      }else
      {
          m=m%n;
      }
      for(i=n-m;i<n;i++)
      {
        printf("%d ",number[i]);
      }
      for(i=0;i<n-m;i++)
      {
        printf("%d",number[i]);
        if(i<n-m-1)
        {
          printf(" ");
        }
      }    
    }

    2 设计思路
    (1)主要描述题目算法

    a.对number[N],m,n,i,tmp进行整型定义,输入n,m,在for循环语句中输入number[i]。

    b.判断第二行输入的n个整数与m的关系,根据不同的关系,将原本的数组顺序相应的向右移动m位。

    c.最后输出移动过后的数组number[n]。

    (2)流程图

    3.本题调试过程碰到问题及解决办法

    遇到的问题为没有考虑到当输入向右移的m位值大于输入的n个数,及当m为n的倍数时的情况,后来经过一步步的调试及对过程的了解后将情况补全。

    7-3 选择法排序

     1.实验代码

    #include <stdio.h>
    int main ()
    {
      int a,i,j,min,tmp,number[10];
      scanf("%d",&a);
      for(i=0;i<a;i++)
      {
        scanf("%d",&number[i]);
      }
      for(i=0;i<a-1;i++) 
      {
        for(j=0;j<a-i-1;j++)
        {
          if(number[j]<number[j+1])
          {
          tmp=number[j+1];
          number[j+1]=number[j];
          number[j]=tmp;
         }
        }
      }for(j=0;j<a;j++)
      {
      if(j+1==a)
      printf("%d",number[j]);
      else
      printf("%d ",number[j]);
    }
    }

    2 设计思路
    (1)主要描述题目算法

    a.对a,i,j,min,tmp,number[10]进行整型定义,输入a,在for的循环语句中输入number[i]的值。

    b.在for的双重循环中对number[j]和number[j+1]进行比较,如果number[j]<number[j+1],则将number[j]与number[j+1]进行交换。

    c.在for循环语句中输出排好顺序后的数组number[j]。

    (2)流程图

    3.本题调试过程碰到问题及解决办法

    遇到的问题在于没有弄懂它的比较交换的思路,一直将for双重循环的内循环条件弄错,应为j<a-i-1,而自己一直写成j<a-i,在上完课并重新理解过流程后,最终改正。

    我的git地址:https://git.coding.net/exo07/disizhouzuoye.git

    冯子璇:http://www.cnblogs.com/fengzx/p/7955263.html

    王姝雯:http://www.cnblogs.com/phsudie/p/7967173.html

    李锐:http://www.cnblogs.com/572453251asd/p/7966992.html

    个人总结

    在本周我学习关于一维数组,二维数组,还看了一些关于函数的书籍,学到了很多,特别是关于冒泡排序法,选择排序法,虽然对我来说难度不小,但自己已经大致了解了思路;不足的为考虑关于这方面问题时,自己会考虑的不全面,比如在按照顺序插入一个数时,自己只考虑到插到中间的情况。

     

  • 相关阅读:
    【Python基础编程196 ● 文件/文件夹操作 ● 文件的操作步骤】
    【Python基础编程197 ● 文件/文件夹操作 ● 文件的访问模式】
    【Python基础编程199 ● 文件/文件夹操作 ● Python怎么读/写很大的文件】
    【Python基础编程198 ● 文件/文件夹操作 ● 读取文件的4种方式】
    【等待优化】如何定位网络性能问题 ASYNC_NETWORK_IO 等待
    (4.48)sql server添加列并使用默认值填充已有记录
    【sql server安全】sql server列加密查询性能问题及解决方案
    【sql server安全】sql server使用混合密钥实现列加密
    【sql server安全】sql server使用非对称秘钥实现列加密
    【sql server安全】sql server使用对称秘钥实现列加密
  • 原文地址:https://www.cnblogs.com/exo123/p/7954060.html
Copyright © 2020-2023  润新知