第四次作业

作业要求: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\n",average);
  for(i=0;i<n;i++){
    if(a[i]>average)
    printf("%d ",a[i]);
  }
  }
  else{
    printf("Invalid.");
  }
  printf("\n");
  return 0;
}

2.解题思路

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

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

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

3.流程图

 

 

 4.调试信息

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

 

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

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

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

 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

posted @ 2018-12-24 09:07  wjxwjx123  阅读(230)  评论(6编辑  收藏  举报