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

(一)改错题

(1)输出华氏摄氏温度转换表:
输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:
c = 5×(f-32)/9
其中,c表示摄氏温度,f表示华氏温度。

  • 输入输出样例1:
      Enter lower:32
      Enter upper:35
      fahr celsius
      32 0.0
      34 1.1
  • 输入输出样例2:
      Enter lower:40
      Enter upper:30
      fahr celsius
    (2)源程序(有错误的程序):
  • 错误信息1:
  • 错误原因1:
    for 语句后面多加了分号;在for语句后面括号中,分别表示fahr初值,判断范围以及步长的语句之间应该用分号分开,而不是逗号。
  • 改正方法1:
    将for语句括号后面的分号删掉即可;将for语句后括号中判断语句前后的两个逗号改成分号。
  • 错误信息2:


  • 错误原因2:
    发现第16行的输出语句中对应华氏度数的格式化输出符号有问题,在声明时以及输出时均为int型,但是输出时却格式化为浮点型。
  • 改正方法2:
    将对应华氏度的输出符号改为整形输出的“%d”,对应摄氏度的符号改为符合样例数据的“%.1f”。
  • 错误信息3:


  • 错误原因3:
    源代码第五行定义的celsius属于double类型,而第十四行所定义的式子全部为整型,转换错误。
  • 改正方法3:
    在第十四行的代码5后面加一个“.0”进行强行转换。
  • 错误信息4:


  • 错误原因4:
    for语句的循环体中没有加大括号。
  • 改正方法4:
    将for语句的循环体放进大括号里,其中printf语句也包括在内。
  • 错误信息5:


  • 错误原因5:
    原题中给出的循环,华氏度的温度增加2,而在源代码的for语句中,每次循环华氏度只增加1。
  • 改正方法5:
    将循环后华氏度的增量改变为+2。
  • 全部改正后带入几组数据进行运行计算如图:


    运行结果都与预期结果相符。
  • 正确的代源码如图:

(二)学习总结

  • 1.有如下程序:
  • 问题:
    详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么。
  • 答:
    ①先声明变量,然后再给代码赋初值。
    ②进入循环语句,开始输入数字,循环次数为10。
    ③在循环语句中输入一个数就要进行一次判断,判断该数是为奇数还是偶数,若为奇数,在奇数个数上加1(偶数一样),最后输出奇数和偶数的个数。
    ④前两次的循环,先输入一个数,判断奇数还是偶数。然后再次输入一个数,进行第二次循环,继续判断奇数和偶数。当输入第十个数就是最后一次循环,仍然判断是奇数还是偶数。
    ⑤最后程序实现的是判断并计算输入的10个数中,奇数个数和偶数的个数。
  • 2.增量运算符:
    (1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?
  • 答:
    运行此程序,结果如图所示:

    增量运算符在单独使用时,对于此程序来说,前缀和后缀的形式没有区别。
    (2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?
  • 答:
    运行此程序,结果如图所示:

    第一条输出语句是先运行,后加一;而第二天语句是先进行加一,后运行。对于此程序而言,前缀与后缀的形式影响到了输出(前缀是先进行加减,后运行;后缀是先运行,后进行加减。)。两条输出语句执行完后,i j的值均为3。
  • 3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。
  • 程序1:
  • 运行结果1:
  • 程序2:
  • 运行结果2:
  • 程序3:
  • 运行结果3:
  • 程序4:
  • 运行结果4:

    经过对四个小程序进行运行,发现:
    (1)先看第一个和第二个程序就只有两个printf这个语句有区别,第二个有缩格,但是输出的结果是一样的,一个制表符并不能改变编译时的顺序。可第四个源程序和第一及第二个源程序在看起来却因为一对花括号看起来并不是那么的一样了,这也可以从侧面印证我们在写代码时标准的格式的重要性了。而原因就是因为for语句和if语句有一个相似的点,它只能和for后的第一个分号前的语句结合在一起。而第二个源程序却将两个语句缩进在了一起而没有将它们用花括号把它们统一为一个代码块,很明显虽然编写者希望两个语句在一个循环中运行,即目的为运行成第二个源程序所输出的结果却输出了和第一个源代码相同的结果,所以循环体的认定与缩格形式无关。
    (2)再看第二个和第三个程序,区别在于多了一个花括号{},但是输出结果不同,在比较一下第三个和第四个程序都有花括号{}但是括号的范围不同,结果不同,当printf("\n")在花括号外面时,就不参与循环,结果就不会换行,所以与{}有关。
    (3)正确判断一个循环语句中的循环体是什么,我觉得是要看最后的输出格式是什么,根据输出格式和花括号{}括起来的范围来看在括号外的语句便不参与循环。
  • 4.对其他你认为需要进行总结的内容进行总结。
    (1)for语句中的判断语句是为了让程序能够有限次的进行循环,如果for语句中没加任何判断语句,就会进行无限循环;在for循环的括号中应该用;来分隔,而不是,。例如,我们这次作业的改错题中,源程序就误将,当做;从而产生了编译器不报错但会让输出结果错误的bug。我们当然不希望这种难以在今后检查出来的错误存在。
    (2)切记for循环语句应该用大括号括起来;在循环中使用的一些变量要在循环语句之前进行声明和初始化。
    (3)for语句中三个语句中间用分号隔开;
    (4)循环体结束后进行输出,输出语句在循环体外。
    (5)上面也说了大括号的作用,建议是只要以后写到了循环体系一律加大括号哪怕是就是只循环就近这个语句也要加上,这样自己看的也清晰明了,在自己检查时一看就明白了那里是循环体系。记住前缀后缀的结合方式并且知道优先级的情况。良好的变成建议:在一行语句中,依次变量只出现一次增量,减量运算符。

(三)实验总结

7-1.求奇数分之一序列前N项和
(1)题目:
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
(2)流程图:

(3)源代码:

(4)实验分析:

  • 问题:
    初次使用for语句难免有些生疏,经常会出现for那一行出现错误。
  • 原因:
    for语句中的括号应用分号分隔开各个语句,而不是逗号。
  • 解决方法:
    把for后面括号里面的逗号改为分号即可。
    (5)本题PTA提交列表:

    7-3 奇偶分家
    (1)题目:
    给定N个正整数,请统计奇数和偶数各有多少个?
    (2)流程图:

    (3)源代码:

    (4)实验分析:
  • 问题:
    if语句后面出现编译错误,如图:
  • 原因:
    忘记了if语句的()中的等于号应该用两个,一个等号是赋值,两个等号才是等于。
  • 解决方法:
    把一个等号改为两个等号即可。
    (5)本题PTA提交列表:

    7-5 统计字符
    (1)题目:
    本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
    (2)流程图:


    (3)源代码:

    (4)实验分析:
  • 问题:
    编译错误时常出现,如图:
  • 原因:
    字符判断没有给字符加单引号;C语言中用两个取地址符表示和。
  • 解决方法:
    用单引号来引起字符,把一个取地址符改为两个。
    (5)本题PTA提交列表:

    7-7 求交错序列前N项和
    (1)题目:
    本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
    (2)流程图:

    (3)源代码:

    (4)实验分析:
  • 问题:
    if...else语句出现编译错误,如图:
  • 原因:
    if...else语句没有用大括号括起来。
  • 解决方法:
    在if...else语句中加上大括号即可。
    (5)本题PTA提交列表:

(四)博客互评

http://www.cnblogs.com/lrxlrz/p/7809529.html
http://www.cnblogs.com/15030280957liu/p/7821618.html
http://www.cnblogs.com/666888i/p/7821643.html

posted @ 2017-11-12 17:21  范马桶  阅读(1950)  评论(1编辑  收藏  举报