第六次作业
改错题
序列求和:输入一个正实数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
五.