zoukankan      html  css  js  c++  java
  • 第七周作业

    1,题目一:求1到100的和
    1.实验代码

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

    2.设计思路。
    第一步,写好程序基本框架。
    第二步,定义两个变量i和sum,采用while循环语句,当i<=100,一直进行sum=sum+i;i++;的循环,这就可以求得1到100之间的自然数之和。
    第三步,输出1到100和的值。
    (1)主要描述题目算法。
    (2)流程图。

    3.本题调试过程碰到问题及解决办法。
    这题比较简单,没问题。
    4,提交记录

    2,题目二:求奇数分之一序列前N项和
    1.实验代码。

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

    2.设计思路。
    第一步,写好程序基本框架。
    第二步,因为题目是计算序列 1 + 1/3 + 1/5 + ... 的前N项之和,根据这类题型的经验可以推算出要用到循环语句。则要定义i,n,sum,(经验三定义),输入n的值来确定循环的次数。
    第三步,采用for语句,当i<=n时,一直进行sum=sum+1.0/(2*i-1);i++;的循环。这就可以求奇数分之一序列前N项和。
    第四步,按照题目要求输出sum的值。
    (1)主要描述题目算法。
    (2)流程图。

    3.本题调试过程碰到问题及解决办法。
    这题没问题。
    4,提交记录

    3,题目三:求交错序列前N项和
    1.实验代码

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

    2.设计思路。
    (1)主要描述题目算法。
    第一步,写好程序基本框架。
    第二步,我看到求和题型一般都认为可能要用到循环语句,定义i,n,sum,输入n的值来确定循环的次数。
    第三步,采用for语句,当i<=n时,一直进行sum=sum+1.0/(2*i-1);i++;的循环。但因为出现了正负号,则要加一个flag=1, flag=-flag这样一个转换才能保证带正负号数据轮流出现。
    第四步,按照题目要求输出sum的值。
    (2)流程图。

    3.本题调试过程碰到问题及解决办法
    <1>,一开始我没想到如何改变数列的正负号,在上课时看到了在加了一个flag,然后我就加了flag,但还是不对,如下图所示。

    <2>,我一开始以为flag是字符,然后我将它改成int整数型变量,还是不对。于是我就趴在桌上好好向了一下,再仔细看看程序到底哪里出错了。我突然发现,flag如果要加入等式中,那它必须是一个数字才能使输出的结果也是一个数字。所以flag必须要付一个数据,那如果要不影响等式的结果,1是最好的选择。所以将1复制给flag,然后提交就对了。如下图所示:

    4,提交记录

    4,题目四: 找出最小值
    1.实验代码。

    #include<stdio.h>
    int main(void)
    {
     int n,i,l,min;
     scanf("%d",&n);
     scanf("%d",&l);
     min=l;
     for(i=1;i<n;i++)
     {
      scanf("%d",&l);
      if(min>l)
      min=l;
     } 
     printf("min = %d",min);
     return 0;
    }
    

    2.设计思路。
    (1)主要描述题目算法。
    第一步,写好程序基本框架。
    第二步,定义i,n,sum,输入n的值来确定循环的次数。输入第一个将要比较的数据L,然后将L的值赋给min,这时min就得到了第一个初始值,。
    第三步,采用for语句,当i<=n时,一直循环输入要比较的数据,如果接下来输入的L比min小,则将此时L的值赋给min,这样min就变成一个更小的值。否则,第一个L的值就是最小的,则输出的值就最小的。
    第四步,将最小的值输出(按照题目要求输出min的值。)。
    (2)流程图。

    3.本题调试过程碰到问题及解决办法
    <1>下图是我最开始的编译方式,但出现的错误是当n=1,最小值为正数时有问题。

    <2>然后我改了一下,却出现了相反的错误,我就有点头晕了。

    <3>然后我就又改了一下,却出现了下面的错误。

    <4>我发现不仅是当n=1时的情况不对,当n>1,且min<L时,将L的值赋给min(min=L)是选出最大的min,而不是最小的min。一个小时即将过去,我有点不耐烦了,只好到网上看看了。然后找到了代码。
    <5>虽然找到了代码,可我还有一点不明,如我发给老师的图所示。

    <6>如题目所给的输入样例,如果n=4,则还要输入4个数据。可如正确代码所示,在输入n的下面还要输入L,那前前后后就要输入6个数据,那肯定是错误的,可答案却是正确的,我非常不理解。老师没有给我直接的答案,而是叫我先思考。突然我发现在for后面的括号里少了一个等号,也就是for(i=1;i<n;i++)中是i<n,而不是i<=n;因为我们通常都是加等号的,所以一下子没发现原因。在for语句中,如果n=4,在i<=n的情况下总共要循环6次,而在i<n的情况下要循环4次,所以正确代码一共只需输入5次代码就行。这题搞懂了。
    4,提交记录

    5,题目五: 统计学生平均成绩与及格人数
    1.实验代码。

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

    2.设计思路。
    (1)主要描述题目算法。
    第一步,写好程序基本框架。
    第二步,定义i,n,sum,输入n的值来确定循环的次,采用if,else if句式讨论n的值。当n不等于0时,采用for循环语句求得所有成绩总和,并得出及格人数。并根据题目要求输出average,和count的值。
    第三步,当n等于0时,直接根据题目要求输出average,和count的值。
    (2)流程图。

    3.本题调试过程碰到问题及解决办法
    <1>一开始出现的错误提示是答案错误,然后我就放在c++上用实例演算,就发现答案确实不对。如下图所示。



    <2>想了三十多分钟也没弄明白自己到底哪里错了,然后就去访问互联网,突然发现自己没有对n进行讨论。当n=0时,i<=n是错误的,这就导致我为什么一直对不了了。
    4,提交记录

    6,我的GIT地址
    https://git.coding.net/AI1452349541/H.K.2.1.git
    上传截图:

    本周学习总结
    <1>学习内容:
    1,本周学习了for循环语句。虽然它们的结构看似简单,但运用到具体题目中还是有一定难度的。当我遇到困难时,我会有不解决它不罢休的念头(我感觉我有强迫症),这就导致我效率低下,花了大量的时间却还没有解决问题。我决定改变这个毛病,先做会做的,最后再来解决难得。
    <2>个人收获:
    1,经过练题,我对三大循环语句有了更深的理解,做起题来不会像刚学时那么吃力。
    <3>难点:
    1,在for语句的应用上我觉的比较难,比如说第七周作业当中的第四题和第五题,我忽视了讨论某些变量的不同的取值情况。这又让我觉得编程是数学的应用,数学学不好,做题有困难。
    <4>不明白的知识点:
    暂时还没有。

    点评同学:
    孙美玲:http://www.cnblogs.com/sunmeiling/p/7827950.html
    马宇欣:http://www.cnblogs.com/mayuxin/p/7834515.html
    赵升起:http://www.cnblogs.com/boke2017boke/p/7856300.html

    8,本周学习进度

    这是第八周学习内容总结链接
    http://www.cnblogs.com/blueblog6/p/7825449.html

    热爱每一天
  • 相关阅读:
    java栈的实现复习
    条件判断语句--linux
    转义符&脚本参数--linux
    linux备份脚本-模板
    github的搜索使用技巧
    sonarqube7.9安装部署(linux)
    openjdk与oraclejdk下载
    gitlab重写历史,清理历史大文件
    nexus私服搭建过程
    nexus私服关联本地maven配置
  • 原文地址:https://www.cnblogs.com/blueblog6/p/7818648.html
Copyright © 2011-2022 走看看