C语言I博客作业04
问题 | 答案 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/9770 |
我在这个课程的目标是 | 掌握各大数学函数、循环语句的调用及关系运算符的运用 |
这个作业在那个具体方面帮助我实现目标 | 掌握使用for循环语句实现指定次数的循环程序设计 |
参考文献 | 《C语言程序设计》 |
一、PTA实验作业
1.1求平方与倒数序列的部分和
题目内容描述:本题要求对两个正整数m和n(m≤n)编写程序,计算序列和\(m^2+1/m+(m+1)^2+1/(m+1)+⋯+n^2+1/n\)。
输入格式:输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。
输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
1.1.1数据处理
数据表达:在调入输出函数之后,该题要用到幂函数,所以加入#include<math.h>.再用int定义两个整型变量m,n。用double定义双精度浮点型变量sum。(sum表示累加和。)再调用scanf()函数输入m,n。然后使用for语句执行循环,最后输出sum的值。
数据处理:在进入循环之前设置相关变量的初值,置sum为0,以保证sum在0的基础上累加。然后用for语句实现循环,进行累加时需要注意运用幂函数pow(x,n)的形式来表达\(m^2+1/m\)。
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
1 2 | 6.500000 | 较小的数 |
4 4 | 16.250000 | m=n |
10 17 | 1500.610584 | 较大的数 |
3 20 | 2867.097740 | m<<n |
1.1.4 PTA提交列表及说明
1.格式错误:调用scanf函数输入m,n时两个%d中间没打空格,导致输入的多个数据之间没有间隔,在两个%d中添加一个空格解决问题。
2.多种错误:将for语句中的循环体语句中幂函数表达为pow(m,2)+1/m,把1换成1.0解决问题。
3.答案错误:输出sum的值时=两边没有打空格,导致与题目所要求的格式不同,直接复制题目给出的输出格式中的sum = 解决问题。
1.2 求交错序列前N项和
题目内容描述:本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
输入格式:输入在一行中给出一个正整数N。
输出格式:在一行中输出部分和的值,结果保留三位小数。
1.2.1 数据处理
数据表达:求前n项和,意味着循环n次,每次累加1项。先用int定义三个整型变量i,flag,n。(i表示循环的次数。flag表示第i项的符号,初始为正。)再用double定义双精度浮点型变量sum。(变量sum存放累加和。)调用scanf()语句输入n。然后使用for语句执行循环,最后输出sum的值。
数据处理:在执行循环之前设置相关变量的初值,即flag=1,sum=0。找出序列中每一项分子与分母的规律,得出公式。在每次循环执行flag=-flag可以实现正负交替变化。
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
3 | 0.933 | 较小的数 |
5 | 0.917 | 较小奇数 |
31 | 0.897 | 较大奇数 |
8 | 0.377 | 较小偶数 |
40 | 0.390 | 较大偶数 |
100 | 0.391 | 较大的数 |
1.2.4 PTA提交列表及说明
1.答案错误:在设置循环体语句中的表达公式时,分母没有用括号括起来,导致整个公式不能计算,在分母上添加括号解决问题。
2.答案错误:调用scanf()函数时在%和d中间打了一个空格,导致格式控制说明错误,删去空格解决问题。
3.答案错误:在设置循环体语句中的表达公式时,打成flag*1,导致输出的结果会是整数,将1改成1.0解决问题。
4.答案错误:输出时使用了sum=,通过查看输出样例,直接输出保留三位小数的值即可,删去sum=解决问题。
二、代码互评
题目:7-2 求奇数分之一序列前N项和
同学代码截图
自己代码截图
相同之处:
- 用int定义了整型变量n和i,i表示循环的次数。
- 用double定义双精度浮点型变量sum。
- 都运用了for语句执行循环。
不同之处:
- 她在用double定义双精度浮点型变量sum时就置sum为0,我是在用double定义sum之后再置sum为0。 设置的循环步长的表达式为i=i+2,我的是i++。
- 她定义的i表示分母,在设置for语句中的表达式为i=i+2,即每次循环时分母递增2.我用int定义了整型变量denominator,denominator表示每一项的分母,初始为1,对应第一项分母为1,每次循环分母都递增2,即执行denominator=denominator+2.
题目:7-3 求简单交错序列前N项和
同学代码截图
自己代码截图
相同之处:
- 用int定义了整型变量n和i,i表示循环的次数。
- 用double定义双精度浮点型变量sum。
- 都运用了for语句执行循环。
不同之处:
- 她在写循环体语句时,对i进行了取余,运用if-else语句,如果余数为0,本次循环需要变号为负才能继续累加;我是在每次循环执行flag=-flag来实现正负交替。
三、学习总结
3.1 学习进度条
周 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 6小时 | 29行 | 对C语言、markdown语法,编程有了初步的认识 | 对编程一窍不通,只会照着书上打 |
第二周 | 8小时 | 19行 | 学会如何提问,安装MinGW-w64并用它编译C程序 | markdown语法掌握不熟练 |
第三周 | 10小时 | 96行 | 关系运算、if-else语句、格式化输入语句scanf(),以及常用的数学库函数 | 对编程中各大语句的运用不熟悉 |
第四周 | 13小时 | 93行 | for循环语句实现指定次数的循环程序设计 | 运用for语句时因为总会出现很多错误 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
本周主要学习了for循环语句实现指定次数的循环程序设计。for语句的一般形式为:
for (表达式1;表达式2;表达式3)
循环体语句
- 用两个分号分隔三个表达式,但for的后面没有分号,因为for与其后面的循环体语句合起来作为一条完整的语句。
- 如果循环体语句由多条语句组成,必须用大括号把它们括起来,变成一条复合语句。
- i++是用来设置循环步长的表达式,一定不能漏。
- 每次循环执行flag=-flag可以实现正负交替变化。
- 变量denominator表示每一项的分母。变量item定义为浮点型变量,表示第i项。
3.3.2 学习体会
通过开学以来每周一次的博客,对markdown语法已经越来越熟悉。写一篇博客,不但在于内容充实,同时排版也要让人看起来赏心悦目。本周学习了for循环语句实现指定次数的循环程序设计。打PTA时经常犯很多错误,但是犯的错越多,我收获的也就越多。犯错或者不懂的话就去网络或书本上寻找问题的答案,或者是向同学求助,但是一定要锻炼自己独立思考的能力,才能在每一次作业中进步。