• 第四次作业


    作业要求:https://edu.cnblogs.com/campus/hljkj/CS201802/homework/2522

    预先作业

    1.观看了4节内容。

    2.学习了使用数组和其他的方法去求素数,并如何构造素数表。

    并且找出一个数看是否在数组里有对应的数。最后就学了排序,说了两种方法,主要是第二个选择排序,每次选出最大的放到应该放的位置。

    3.在讲用数组搜索一个数时用到了定义函数,在平时课堂没怎么讲过,在mooc上也理解的不太好。在我上面的截图,翁恺老师在for()里加了int,和{}里面也加了int,不太清楚是有什么原因和好处。

    题目:13-2 输出所有大于平均值的数

    1 .实验代码

    #include<stdio.h>
    int main()
    {
      int i,n;
      double average,sum=0;
      scanf("%d",&n);
      int a[n];
      if(n>=1&&n<=10){
      for(i=0;i<n;i++){
        scanf("%d",&a[i]);
        sum=sum+a[i];
      }
      average=sum/n;
      printf("%.2lf
    ",average);
      for(i=0;i<n;i++){
        if(a[i]>average)
        printf("%d ",a[i]);
      }
      }
      else{
        printf("Invalid.");
      }
      printf("
    ");
      return 0;
    }

    2.解题思路

    (1)定义一个数组,确定n的范围,利用循环将数组的数全部输入并进行求和。

    (2)在求平均数,用if判断是否大于平均数,因为数组可以把数存储下来,直接用if(a[i]>average)就能全部判断。

    (3)如果不符合n的范围输入就输入Invalid.题目要求如果没有符合的数就加上空行,所以在最后加上 。

    3.流程图

     4.调试信息

    刚开始提交时pta显示是部分正确,但调试结果是正确的,

     我检查了代码以后,发现第12的avera=sum/10有问题,如果你不是10的话,average就有错误,把10改为n,改完后发现不符合第二个输出样例,还是部分正确,

    如果输入0的话就没有平均数,所以要想办法不输入平均数,后来我注意到题目有给n的范围 1<=n<=10,那么就加个if语句让n的范围走,不符合走else输入Invaild.

    最后有一个测试点是格式错误,没看到这句话,每个数的后面有一个空格;如果没有满足条件的数,则输出空行所以在最后加上printf(" ");

     15.2选择法排序

    1.实验代码

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

    2.解题思路

    (1)题目要求将数按从大到小排序,就是不断找到最大,第二大,依次往下的数,然后放到前面。

    (2)先找最大数就用if(a[i]>a[index]),在设置中间变量t,换到前面,如果只将最大数放到前面,直接和a[0]换即可。

    (3)从大到小排,就要用到for循环,并且换的时候a[]里面的数不能是0,需要一个变量。

    3.流程图

    4.调试信息

    提交后出现答案错误,开始调试

    只是第一个数和最后一个数,检查代码发现交换处t不能就等于a[0],应该是a[k],一个变量,才能保证交换到不同的位置。

    改完后pta显示部分正确,又调试了一下。

    6和7的位置应该颠倒一下,for(i=k+1;i<n;i++)的大括号的位置不对,在if语句后就应该括回,交换数直接是与for(k=0;i<n;i++)有关的,for(i=k+1;i<n;i++)把交换的公式括起来,则改变了交换的次数,把大括号改完后就答案正确了。

     个人总结

    (1)本周学习了数组,主要是用数组把数进行从大到小,或者按照其他要求排序,用数组的平均值等。知道定义数组可以把数存储下来,需要使用时再从数组调用。

    (2)交换数的时候下标容易出错,也不好换,把数按大小排时,使用的嵌套for循环,括回里的内容也要注意。

    折线图

    表格

     

     作业评价

    1.https://www.cnblogs.com/wafx/p/10157289.html

    2.https://www.cnblogs.com/errumuran/p/10152845.html

    3.https://www.cnblogs.com/mashihao/p/10164515.html

  • 相关阅读:
    Window 命令
    HTTP 状态码
    Mysql基本用法-存储引擎-04
    Mysql基本用法-存储引擎-03
    Mysql基本用法-left join、right join、 inner join、子查询和join-02
    Mysql基本用法-01
    二进制编码-详细讲解
    JS操作文件
    PHP5接口技术入门
    PHP5中__get()、__set()方法
  • 原文地址:https://www.cnblogs.com/wengjx123/p/10126047.html
Copyright © 2020-2023  润新知