码迷,mamicode.com
首页 > 编程语言 > 详细

C语言程序设计第六次作业

时间:2017-11-19 13:32:51      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:第一个   es2017   开始   win   for循环   奇数   输入   c语言程序   程序设计   

(一)改错题

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

#include<stdio.h>
int main()
{
    int flag,n;
    double eps,item,s;

    printf("Input eps: ");
    scanf("%f",&eps);
    flag = 1;
    s = 0;
    n = 1;
    do{
        item = 1/ n;
        s = s + flag * item;  
        flag = -flag;
        n = n + 3;
    }while( item < eps)
    printf( "s = %f\n",s);

    return 0;
}

错误信息1:
技术分享图片

错误原因:do...while语句中的while后没有加分号
改正方法:在while后加上分号
错误信息2:
技术分享图片

错误原因:运算结果出现错误,源程序中item定义为double类型,但是在do...while循环语句中,却变成了整型
改正方法:将item=1/n改为item=1.0/n或在1前加上(double)如item=(double)1/n
错误信息3:
技术分享图片

错误原因:在改正过上一个错误后,运行结果仍不变。考虑是否是因为循环条件出错,然后返现while后的循环条件正好相反。
改正方法:将item < eps 改为 item > eps
改正后的结果为:
技术分享图片

但是刚刚在修改第三个错误时,错将item

与输出样例一致。不太懂为什么。

(二)学习总结

1.语句while(1)和for(;;)是什么意思?,如何保证这种循环能正常执行?
答:while(1)中1代表常量表达式,即不是0,可以无限循环,即为死循环,如果想要跳出循环,可以加break语句。
同样的,for(;;)既没有设初值,也没有循环条件,如同while(1)语句,是一个死循环,若想跳出循环,也是加break语句。

2.一般情况下,设计循环结构时,使用for、while、do while三种语句都可以,并且三种语句可以相互转换,但是,在某些特定情况下,我们应该优先选择某种语句来快速实现循环设计。如果有如下情况:
(1)循环次数已知
(2)循环次数未知,但循环条件在进入循环时明确
(3)循环次数未知,且循环条件在进入循环时未知,需要在循环体中明确
针对上面三种情况,分别采用什么循环语句实现比较好?对每种情况,用我们完成的两次循环结构作业中的题目加以说明。
答:(1)当已知循环次数的情况就用计数控制的循环for语句
(2)当循环次数未知,但循环条件在进入循环时明确,便可以用条件控制分循环while语句
(3)最后,才使用循环体至少执行一次的do...while语句
比如,在循环结构1中的第一题:
技术分享图片

在本题中,已知循环次数,即为N*2,所以,优先考虑使用for循环语句。
但有些时候,比如在循环结构2中的第一题:
技术分享图片

同样是在求和,但是没有明确到底有几项,只说明了了循环条件,因此便优先考虑while循环。
有些时候,while循环和do...while循环可以互换。
3.有如下问题:输入一批学生成绩,以-1作为结束,计算学生的平均成绩。
要求分别用for语句、while语句、do while语句三种循环语句实现,并说明你认为哪种形式更合适?
答:
for语句为:
# include

}
while语句为:
# include

}
do...while语句为:
# include

}

我认为用do...while语句合适
4.运行下面程序,输入1到10,结果分别是什么?为什么?
(1)
#include

(2)的结果为:
技术分享图片

结果不同的原因是第一个程序使用的是break来跳出循环,而第二个程序是用的contine来跳出循环的。break是结束整个循环结构,所以在输入1时,便跳出了循环,而contine则是只跳出该次循环。
(三)实验总结

  1. 求给定精度的简单交错序列部分和
    (1)题目:
    本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps
    (2)流程图:
    技术分享图片

技术分享图片

(3)源代码:
技术分享图片

技术分享图片

(4)实验分析:
问题:
技术分享图片
原因:没有加相应的头文件
解决办法:在程序开始加上头文件,如图所示:
技术分享图片

(5)本题PTA提交情况:
技术分享图片

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

技术分享图片

(3)源代码:
技术分享图片

技术分享图片

(4)实验分析:
问题:编译没有显示错误,运行也没有错误,但在提交PTA时,总显示答案错误
原因:技术分享图片

拼写有错误!!!
解决办法:将Luck改为Lucky
(5)本题PTA提交情况:
技术分享图片

3.求奇数和
(1)题目:本题要求计算给定的一系列正整数中奇数的和。
(2)流程图:
技术分享图片

(3)源代码:
技术分享图片

(4)实验分析:
问题:技术分享图片

原因:没有搞清循环条件
技术分享图片

解决办法:去掉等于号。
(5)本题PTA提交情况:
技术分享图片
(四)博客互评
http://www.cnblogs.com/yaole10086/p/7851074.html
http://www.cnblogs.com/windsky-1999/p/7838107.html
http://www.cnblogs.com/123ruike/p/7851176.html

C语言程序设计第六次作业

标签:第一个   es2017   开始   win   for循环   奇数   输入   c语言程序   程序设计   

原文地址:http://www.cnblogs.com/lsx123/p/7841763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!