zoukankan      html  css  js  c++  java
  • 14,15周作业(一维,二维数组)

    题目:14-3选择法排序
    1.实验代码

    #include<stdio.h>
    int main()
    {
      int n,i,j,t,k;
      scanf("%d",&n);
      int a[n+1];
      for(i=1;i<=n;i++)
      {
        scanf("%d ",&a[i]);
      }
      for(j=1;j<=n-1;j++)
      {
        k=j;
        for(i=1+j;i<=n;i++)
        {
          if(a[k]<a[i]){k=i;}
        }
        if(k!=j){t=a[k];a[k]=a[j];a[j]=t;}
      }
      printf("%d",a[1]);
      for(i=2;i<=n;i++)
      {
        printf(" %d",a[i]);
      }
    return 0;
    }
    

    2 设计思路
    (1)主要描述题目算法
    第一步:写好基本框架。
    第二步:题目要求输入第一行给出一个不超过10的正整数n,第二行给出n个整数。我就先用scanf语句输入这个n,然后定义数组a[n+1](我让这个数组从a[1]到a[n],省略了a[0]。)
    第三步:要连续输入这n个数,如果用n个scanf显然太费事了,所以我用for循环来输入这n个数(我感觉for循环比while和do-while循环好用)。
    第四步:题目要求在一行中输出从大到小有序的数列,如果输入的数是乱序的,用一个for循环只能将最小值这一个数换到最后面,而其它数字就不一定能按到要求了。所以我就想到再用一个for循环。这就可以让每一个数都进行比较。将j的值赋给k。然后将a[k]与a[i]进行比较,如果a[k]小于a[i],就将i的值赋给j。如果k!=j,就引入中间变量t,使a[k](实际上就是a[i])与a[j]的值进行交换。最终就可以达到题目要求的了。
    第五步:题目要求相邻数字间有一个空格,行末不得有多余空格。我就先单独输出前面没有空格的a[1],然后再用for循环输出前面带又空格的a[i]。
    第六步:输出从大到小有序的数列。

    (2)流程图

    3.本题调试过程碰到问题及解决办法
    <1>一开始出现了下面这样的错误,输入和输出是一样的,中间还要多输入一个3(我也不知道为什么,但将最后正确答案放到pta上时是对的,可能是我的dvc++有问题。),然后我就仔细检查了一遍,发现内循环的i的循环次数有问题,i应该是i<n,而不是i<n-j,我把它当作冒泡循环来做了。

    <2>我改正了上面的错误后,结果还是有错误,如下图所示。经过我仔细调试之后,发现再交换值的地方有问题,经过改正之后就对了。

    <3>我个人更喜欢用冒泡排序发,也许是用的多的缘故。其实这题我一开始是用冒泡排序法做的,然后又用了选择排序法。

    4,提交列表

    题目:15-3 求整数序列中出现次数最多的数
    1.实验代码

    #include<stdio.h>
    int main()
    {
      int i,j,n,b[1000]={0},k=0;
      scanf("%d",&n);
      int a[n];
      for(i=0;i<n;i++)
      {
        scanf("%d",&a[i]);
      }
      for(i=0;i<n;i++)
      {
        for(j=0;j<i;j++)
        {
          if(a[i]==a[j]){b[j]++;break;}
        }
        b[i]++;
      }
      int max=b[0];
      for(i=1;i<n;i++)
      {
        if(b[i]>max){max=b[i];k=i;}
      }
        printf("%d %d",a[k],max);
      return 0;
    }
    

    2 设计思路
    (1)主要描述题目算法
    第一步:写好基本框架。
    第二步:输入在一行中给出序列中整数个数N(0<N≤1000),再用for语句输入N个整数。
    第三步:用双重for语句使输入的N个数一个一个进行比较。只要某个数一出现(不管这个数是否和前面的数或者后面的数相等)就用 b[i]++计数。如果后面出现了与前面相同的数,就用b[j]++使前面的数加1,由于后面的数的位子与前面数的位子不同,所以还要用 b[i]++处理后面的数(其实后面的数用这个处理没什么作用, b[i]++只对刚出现的数起作用)。
    第四步:令max=b[0](让第一个数出现的次数的值赋给max),然后用for循环比较出出现次数最大的b[i]。
    第五步:输出出现次数最多的整数及其出现次数。

    (2)流程图

    3.本题调试过程碰到问题及解决办法
    <1>下面这个错误太坑了,我花了大量的时间去调试,终于发现原来我将a[j]写错成了a[i].就这一个小问题就让我脑力透支,身心俱疲。

    4,提交列表

    题目:15-4 数组元素循环右移问题
    1.实验代码

    #include<stdio.h>  
    int main(){  
        int a[200];//只用一个数组,将原数组元素复制到紧邻的数组空位置中  
        int n, m,i;  
        scanf("%d%d", &n, &m);  
        m = m%n;  
        for (i = 0; i < n;i++){  
            scanf("%d", &a[i]);  
            a[i + n] = a[i];//备份数组元素  
        }  
        for (i = 0; i < n; i++){  
            a[i] = a[i + n -m];  
        }  
        for (i = 0; i < n; i++){  
            if (i == n - 1)//对应题目要求:“序列结尾不能有多余空格”  
                printf("%d", a[i]);  
            else   
                printf("%d ", a[i]);  
              
        }  
        return 0;  
    }  
    

    2 设计思路
    (1)主要描述题目算法
    第一步:题目要求在不允许使用另外数组的前提下来完成,所以我定义一个容量为200的数组a[200]。a[101]到a[200]相当于数组b[100]。
    第二步:然后输入n,m,因为m(向右移的次数)可能大于n(数组中数的个数),所以要m取余n,这样就可以知道数据实际相当右移的次数。
    第三步:输入a[i]的值,然后用 a[i+n]=a[i]做备用数组。
    第四步:因为a[0]到a[2n-1]的值都知道了,所以用for语句加 a[i]=a[i+n-m](左边相当与位子,右边相当于人,依次将符合要求的人往a[0]到a[n-1]的位置上安排)
    第五步:题目要求各数之间用空格分隔,序列结尾不能有多余空格,所以我就在for循环加一个if-else语句,当i等于n-1时输出前后无空格的数,其他的则输出后带空格的数。

    (2)流程图

    3.本题调试过程碰到问题及解决办法
    题目要求在不允许使用另外数组的前提下来完成,我一开始做附加题时确实想不出来,且花了大量的时间,然后参透了互联网,才彻底搞明白,才发现它特简单,没有问题了。

    4,提交列表

    这两周学习内容总结
    <1>学习内容:
    1,这俩周学习了一维数组,二维数组。粗略关于它们的定义,初始化,引用,以及应用。
    2,一维数组的三大重要题型:
    ①选择排序
    ②冒泡排序
    ③求最小值及下标
    3,二维数组的重要题型:
    ①找出矩阵中最大值及其所在位子
    ②方正转置

    <2>重点难点:
    1,选择排序,冒泡排序一开始学感觉还是比较难得,需要不断的温习来巩固这两种题型。

    <3>个人收获:
    1,熟练掌握了一维数组和二维数组的应用知识,对上面所述的题型有了深入的理解,拓展了编程方面的知识。

    <4>在学习中发现的问题
    1,虽然我在课后做pta练习做的很好,但有一部分老师上课讲的内容没有深入掌握(比如找出从1到100之间的素数),我以为老师上课讲的内容很简单,所以没太重视,但我发现这是不行的。以后我要对老师给的每一道例题认真专研。

    <5>不明白的知识点:
    暂时还没有。

    点评其他同学
    孙娜
    http://www.cnblogs.com/sun-na-/p/7875394.html

    郭志康
    http://www.cnblogs.com/gzk08-20/p/7953871.html

    张乐
    http://www.cnblogs.com/1999-09-22/p/7966613.html

    我的GIT地址
    https://git.coding.net/AI1452349541/H.K.2.2.git

    上传截图:

    14周学习进程

    15周学习进程

    热爱每一天
  • 相关阅读:
    AUDIT审计的一些使用
    HOW TO PERFORM BLOCK MEDIA RECOVERY (BMR) WHEN BACKUPS ARE NOT TAKEN BY RMAN. (Doc ID 342972.1)
    使用BBED理解和修改Oracle数据块
    Using Class of Secure Transport (COST) to Restrict Instance Registration in Oracle RAC [ID 1340831.1]
    调试利器GDB概念
    第4章 思科IOS
    第3章 ip地址和子网划分
    第2章 TCPIP
    2020年阅读过的黑客资源推荐篇
    第1章 计算机网络
  • 原文地址:https://www.cnblogs.com/blueblog6/p/7886541.html
Copyright © 2011-2022 走看看