第六次作业

改错题

序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数)。

    错误信息:![](http://images2017.cnblogs.com/blog/1242824/201711/1242824-20171115220507671-400183644.png)

  错误原因:while条件后没加;
  改正方法:while的括号后面加;
  错误信息:

  错误原因:while条件中小于号方向错误,1直接/n
  改正方法:把小于改成大于,1/n改成1.0/n
错误信息:

  错误原因:double用的%f来输入
  改正方法:%f改成%lf
  错误信息:

  错误原因:最后少加一项
  改正方法:循环结束后加上s = s + flag * item;

学习总结

语句while(1)和for(;;)是什么意思?,如何保证这种循环能正常执行?

都是无限循环。在里面加上跳出条件,if.....旳话就break

一般情况下,设计循环结构时,使用for、while、do while三种语句都可以,并且三种语句可以相互转换,但是,在某些特定情况下,我们应该优先选择某种语句来快速实现循环设计。

循环2第三题用while好,因为不知道要循环几次,而且一上来就可以结束。循环2第六题用do while好,因为至少得先循环一次要不然没法确定判断条件,条件所需变量没有被赋值。
循环1第一题用for好。因为知道循环次数,而且用while旳话那些i=1和i++啥的都得写到循环前循环里这些其他位置,比较乱。

有如下问题:输入一批学生成绩,以-1作为结束,计算学生的平均成绩。 要求分别用for语句、while语句、do while语句三种循环语句实现,并说明你认为哪种形式更合适?

while好些。结束条件直接写在括号里就行,而且一上来就可以结束

运行下面程序,输入1到10,结果分别是什么?为什么?

分别得1和25。因为break是直接跳出循环,所以第一次循环得一,结果也就是一。continue是跳过当前循环进入下一次循环,所以n和2求余不得0时的各种情况依然会被加到s中。

实验总结

求给定精度的简单交错序列部分和

一.本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
二.

三.

#include<stdio.h>
#include<math.h>
int main()
{
  int i=1;
  double sum=0,eps,a;
  scanf("%lf",&eps);
  
  while( 1.0/(3*i-2)>eps)
  {

    sum=sum-pow(-1,i)*(1.0/(3*i-2));
    i=i+1;
       
  }
  sum=sum-pow(-1,i)*(1.0/(3*i-2));
      printf("sum = %f",sum);
  return 0;
}

四.
问题1:编译错误
原因:用pow没加math头
解决办法:头上加include《math.h》
问题2:多种错误
原因:while循环不熟练产生多种错误解决办法:输入时格式字符串用的%d,改成%lf。没有加上最后一项,最后填个sum=sum-pow(-1,i)(1.0/(3i-2));。
while括号里关系运算符用的大小于反了,小于等于改成大于等于。
五.

猜数字游戏

一.猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
二.

三.

#include<stdio.h>
#include<stdlib.h>
int main()
{
  int n,N,i=0,shu;
  scanf("%d%d",&n,&N);
   scanf("%d",&shu);
  while(shu!=n)
  {
    i=i+1;
    if(shu<0)
    {printf("Game Over");exit(0);}
    else if(shu<n)
    {printf("Too small\n");}
    else if(shu>n)
    {printf("Too big\n");}
    scanf("%d",&shu);
    
  }
  if(i==0)
  {printf("Bingo!");}
  else if(i<=2)
  {printf("Lucky You!");}
  else if(i<N)
  {printf("Good Guess!");}
  else
  {printf("Game Over");}
  return 0;
}

四.
问题1:答案错误
原因:luck后面少个y
解决办法:加上y
问题2:直接退出时运行超时
原因:没有考虑shu<0的情况
解决办法:加上 if(shu<0)
{printf("Game Over");exit(0);}
五.

本题要求计算给定的一系列正整数中奇数的和。

一.输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。
二.

三.

#include<stdio.h>
int main()
{
  int shu,sum=0;
  scanf("%d",&shu);
  while(shu>0)
  {
    if(shu%2!=0)
    {sum=sum+shu;}
    scanf("%d",&shu);
  }
  printf("%d",sum);
  
  return 0;
}

四.
问题1:答案错误
原因:if里判断条件习惯性写得shu*1.0/2!=0
解决办法:改成shu%2!=0
五.

互评



posted @ 2017-11-16 00:25  哔莉莉莉莉  阅读(1113)  评论(2编辑  收藏  举报