代码改变世界

第七周作业

2017-11-18 21:18  魏鹏5班  阅读(318)  评论(1编辑  收藏  举报

要求二
题目7-1,求1道100的和
1,实验代码

#include <stdio.h>
int main(){
  int sum=0;
  int i=1;
  while(i<=100)
  {
    sum=sum+i;
    i++;
  }
  printf("sum = %d\n",sum);
  return 0;
}

2,设计思路
<1>第一步:既然的就和,必然是循环语句,用到while语句。
第二步:定义初始值为零,再不断累加,使用到sum=sum+i,i的范围为<=100。
<2>流程图:

3.本题调试过程碰到问题及解决办法
基本上没有遇到什么困难,毕竟是上课时讲过的,但我发现这个代码在pta和Dev-c++中输出相同的结果时,pta必须要定义sum初始值为零,但Dev-c++可以不用。
附上截图:


将pta中sum改为sum=0就对了。
pta提交列表:

题目7-2,求奇分数之一序列的前N项和
1,实验代码

#include <stdio.h>
int main(){
  int N;
  scanf("%d",&N);
  double a;
  double sum=0;
 
  int i=1;
  while(i<=N)
  {
  	a=1.0/(2*i-1);
    sum=sum+a;
    i=i+1;
  }
  printf("sum = %.6f\n",sum);
  return 0;
}

2,设计思路
<1>第一步:首先要输入数列的项数,再执行循环语句,循环体结构可以为(1/2*i-1)。
第二步:由于有分数的出现,sum不能用int去定义,需用到double型双精度。
第三步:由于定义了双精度,故需要分数的分子用1.0,结果按照题意使用%.6f。
<2>流程图:

3,本题调试过程碰到问题及解决办法
错误截图:

这个错误就不应该了,知道分母的规律是2n-1,在写程序时强加了自己的主观意愿,没有想到代码中的是2*i-1,这就导致的代码输出的sum有误。
pta提交列表:

题目7-3,求交错序列的前N项和
1,实验代码

 #include <stdio.h>
int main(){
  int N;
  scanf("%d",&N);
  double sum=0;
  double a;
  int i=1;
  int b=1;
  int c=1;
  int d=1;
  while(i<=N)
  {
    a=b*d*1.0/c;
    sum=sum+a;
    b=-b;
    d=d+1;
    i=i+1;
    c=c+2;
  }
  printf("%.3f\n",sum);
  return 0;
}

2,设计思路
<1>第一步:同第二题一样,首先考虑求和和单个数的精度问题,都需用到double,结果保留三位小数,为%.3f。
第二步:序列为正负交错,故可以不断用赋值的方法去改变符号,第一次为正,第二次在第二个数前乘以-1,第个数也乘以-1,负负得正,这样就可以得到正负交错的序列。
第三步:发现分母的规律,为上一个数的分母加2,这样也可以产生一个循环的结构,去得到分母变换的规律。
<2>流程图:

3,本题调试过程碰到问题及解决办法
错误截图:
基本上还是分母的问题,经过这次才加深了代码对循环语句(2i-1)的结构模式的理解,但我发现了一个问题,分母的规律是符合(2i-1),但我去这样用 [a=bN1.0/(2i-1) ]时怎么都不对,得到的sum不符合题意,但当我加上了另外的两个变量去替换 N 和 (2i-1) 时,程序就变好了,我不知道为什么会出现这样情况。
pta提交列表:

题目7-5,统计学生平均成绩及及格人数
1,实验代码


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

2,设计思路
<1>第一步:定义变量不是难事,首先考虑平均值输出的问题,即需要用总的学生成绩除以学生人数。
第二步:用循环语句进行累加,再用if语句筛选出大于等于60分的人数,需要定义初始人数为零。
第三步:会出现学生人数为零的情况,即需要在输出的时候用到if else语句,将学生人数为零的情况单独拿出来讨论,并将average保留一位小数。
<2>:流程图

3,本题调试过程碰到问题及解决办法
错误截图:
想着可以吧学生数量为零的情况统一处理,但我没考虑到分母不可以为零,就这个问题,浪费了许多时间,还以为是程序有问题,也没看错误提示,这就给了我一个教训,错了,看错误提示还是十分重要的。
pta提交列表:

要求三:git地址:https://git.coding.net/WP2017024114/test.git
第七周作业项目列表

第十二周作业项目列表
第十三周pta13.1作业项目列表

要求三:
个人总结:学习了while和for的循环语句吧,知道了用if else 比用if if设计的程序更简单,耗时短。
不懂的地方:作业7-3的错误提示有一个问题,就是用(2i-1)直接作为分母时,程序有错,但当我把(2i-1)替换后,比如用c替换,在前面定义int c=0,这样就对了,我不知道是怎么回事。
还有第四题,在Dev-c++上编译后必须按照如下图所示才能有输出

也就是说,有两次回车,但这与pta的输入不符,当就是这样,在pta上是对的,我不知道这是什么回事。
基本上了解了break和continue在代码中的意思,一个是跳出当前循环,一个是不执行当次循环。
难点还是感觉标记flag是难点,还是需要更多的实践操作才好理解。

要求六
点评的作业:
何宗彦:http://www.cnblogs.com/hezongyan/p/7812104.html
胡俊鲜:http://www.cnblogs.com/123456hjx/p/7823616.html
莫誓:http://www.cnblogs.com/lin2580/p/7841437.html
表格和折线图: