• 第七周作业


    要求二
    题目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
    ",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
    ",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
    ",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
    ");
          else
          printf("average = %.1f
    ",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
    表格和折线图:

  • 相关阅读:
    less中遇到的一些特殊的写法
    观察者模式
    发布订阅模式
    javascript中的函数
    关于js中this的理解和作用
    [Oracle]Oracle镜像安装及使用教程
    log4net日志配置
    过滤器
    .net core 处理 中文乱码
    Fromform
  • 原文地址:https://www.cnblogs.com/WeiPeng-wuban/p/7811428.html
Copyright © 2020-2023  润新知