第三次作业

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

题目7-3 统计学生平均成绩与及格人数

1.实验代码

#include<stdio.h>
int main()
{
  int i,count,num;
  double total,grade,average;
  total=0,count=0;
  scanf("%d",&num);
  for(i=1;i<=num;i++){
    scanf("%lf",&grade);
    total=total+grade;
    if(grade>=60){
    count++;
    }
  }
  if(num>0){
   average=total/num;
  }
  else{
   average=0;
  }
  printf("average = %.1lf\n",average);
  printf("count = %d\n",count);
  return 0;
} 

2.解题思路 

(1)学生人数很多,就先用for循环把学生的成绩全部输入。

(2)要求平均数就把先把学生的成绩加起来,因为要求及格人数,在for循环里加判断语句if判断成绩是否大于60.

(3)最后判断学生人数是0求平均值,最后打印结果。

3.流程图

 

 

 4.调试信息

自己不断的完善后,pta一直显示错误,调试信息如下

 

发现没打\n和输出样例不同,后来加上\n提交后也是错误,后来我试了一下0结果发现average变成负数。

应该加个if语句来判断num不是正数的情况,所以我有加了i(num>0)来保证average能正常输出。

最终答案正确。

第九次作业 输出闰年

1.实验代码

#include<stdio.h>
int main()
{
  int year,i;
  scanf("%d",&year);
  if(year>2000 && year<=2100){
      for(i=2001;i<=year;i++){
          if((i%4==0 && i%100!=0)||(i%400==0)){
          printf("%d\n",i);
          }
          else if(year<2004){
            printf("None");
            break;
          }
      }
      }else{
          printf("Invalid year!");
      }
  return 0;
}

2.解题思路

(1)要求是21世纪的闰年,首先要将时间限制再21世纪,用if语句。

(2)再用for循环和if语句循环出判断21世纪的所有年份,在判断是否符合闰年的要求。

(3)输出不一样的结果。

3.流程图

 

4.调试信息

pta提示是多种错误,调试了一下发现不走if((i%4==0&&i%100!=0)||(i%400==0))一直走else 

 

而且就算打None应该只打一个,而None却出现一堆,想到应该在None后加一个break,后来我又发现第七行的i=i+4,闰年是4年一个,但要保证输入的第一个就是闰年才能输出正确,有判断是否是闰年的语句,这就有点冲突了。

改正后,好多了,打上2048直接就是一个None。

 

 

应该还是else出现了问题,我又看了下题发现是一个闰年都没有才输出None,而2048很明显是有闰年的,第一个输入的不是闰年就直接退出了,应该在else加个限定条件,只要大于等于2004大就有闰年,只要把else改为else if(year<2004)就可以了。

 

 

 第十次作业7-1统计素数并求和

1.实验代码

#include<stdio.h>
int main()
{
  int N,M,i,sum,count,m,isprime;
  sum=0,count=0,isprime=0;
  scanf("%d %d",&M,&N);
  for(i=M;i<=N;i++){
    isprime=1;
      for(m=2;m<=i/2;m++){
    if(i%m==0){
      isprime=0;
      break;}
      }
    if(isprime==1&&i!=1){
      sum=sum+i;
      count++;}
  }
   printf("%d %d",count,sum);
  return 0;
}

2.解题思路

(1)将数限制在M与N的区间用for语句,for(i=M;i<=N;i++)就能将这个区间的数全部输入了。

(2)在嵌套一个for语句来判断是不是素数。

(3)用if语句将不同的结果输出。

3.流程图

4.调试信息

pta出现部分正确,我尝试调试一下发现输入什么数都是0

 

 在第十行加入printf("%d\n",i),也添加查看sum,发现printf一直在打印,sum也一直为0,我就知道应该是条件哪里出错了。

我有重读了我的代码,发现第9行的m应该小于i/2,只要前一半不能被整除,后面就不用看了,肯定除不开·。

个人总结

(1)本周主要学习的是循环,有for,while,do while和break,contiune控制语句,知道怎么对一个范围的数让他自己输入,可以利用循环来处理。

(2)难点的是嵌套语句比较烦,通常for循环里再来一个for,再一些if语句,不太好写,有时一堆括号不知道,容易整乱,不知道哪个对应那个,解决的话就是尽量把自己的思路捋顺,把代码打的有规律,有条理,在细心排查。

学习进度

 

 

作业点评

https://www.cnblogs.com/DX552ZYM557/p/10028972.html

https://www.cnblogs.com/freedomjdp/p/9979139.html

 https://www.cnblogs.com/mashihao/p/10017088.html

posted @ 2018-11-29 19:23  wjxwjx123  阅读(205)  评论(2编辑  收藏  举报