作业
函数
7-1 求组合数(15 分)
本题要求编写程序,根据公式Cnm=m!(n−m)!n!算出从n个不同元素中取出m个元素(m≤n)的组合数。
建议定义和调用函数fact(n)
计算n!
,其中n
的类型是int
,函数类型是double
。
1. 本题PTA提交列表
2. 设计思路
分别使用fact函数求累乘,再将最后结果进行处理
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:1.如何求累乘2.如何调用函数
第一次提交,函数最后return值有误。return 0后无结果,反复查看后发现错误改正。
题目2.
7-3 求幂之和(15 分)
本题要求编写程序,计算sum=21+22+23+⋯+2n。可以调用pow函数求幂。
1. 本题PTA提交列表
本题代码
2. 设计思路
思路:设计函数能使参数进行求幂之和,主要结构为循环结构。
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:1.形参与实参的相互传递2.子函数传值问题
第一次提交未在主函数中定义sum,固编译错误,根据提示改正。
第二次提交时没有在主函数中写sum=f(n),所以子函数传值无效,根据提示改正。
题目3.
7-5 近似求PI(15 分)
本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。
2π=1+31!+3×52!+3×5×73!+⋯+3×5×⋯×(2×i+1)i!+⋯
本题提交列表
本题代码
2.设计思路
应用循环结构求最后一项大小,同时求出各元素累加的值
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:循环逻辑不同,函数定义错误。
第一次提交输出格式错误,最后一位多出一个0,将"%lf"改为“%.5”则正确。
#二、代码互评
互评同学名称:张瑜
题目
7-8 求n以内最大的k个素数以及它们的和(20 分)
本题要求计算并输出不超过n的最大的k个素数以及它们的和。
2.代码对比
我的
张瑜
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
我用了数组结构,看起来稍显复杂。张瑜的程序简洁短小,一目了然,但数组结构可以清晰地表明程序是将数组中的数字往前推进,并且容易看懂,思路清晰,发现错误后也能顺着思路尽快找到。我更喜欢我的代码。
#三、PTA排名
#四、本周学习总结
1.你学会了什么?
1).函数的声明,定义和调用
2)函数的功能
3).实参和形参的关系
4).在函数中,数据的传递
5).局部变量和全局变量
2.本周的内容,你还不会什么?
感觉关于子函数释放结果的问题还有点迷糊,关于函数类型的选择也不太清晰,还需多加强基础知识。
3.其他总结
递归问题感觉一知半解,需要多找一些这方面的题型加深印象。
数组
题目1:
7-1 数组元素循环右移问题
一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
1. 本题PTA提交列表
2. 设计思路
将输入的数储存在数组中,右移后a[0]=a[3],a[1]=a[4],a[2]=a[5]。
故需要设计循环使a数组中数字下标进行循环。
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:1.如何输入数组2.如何输入数组3.如何将下标进行加减。
第一次提交,答案错误,输入后数字之间无间隔,但同时无法用“ %d ”输出,因为行末不能有间隔。故根据程序分析在第一循环中如果当i>n-1,则不需要输出空格。在第二个循环中,i=n-m-1时不需要输出空格,固将程序改动正确。
题目2.
7-2 求最大值及其下标(20 分)
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
1. 本题PTA提交列表
本题代码
2. 设计思路
将相邻量两个数进行比较,如果顺序错误则进行交换。如是循环。
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:如何比较大小,互相交换后找到最大值下标。
第一次提交时定义数组错误,不能直接定义a[n],查找书本翻看程序后纠正。
第二次提交时没有令max=0,所以无法运行,反复试验多次无果后进行询问同学改正。
题目3.
7-6 冒泡法排序
将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。
本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。
本题提交列表
本题代码
2.设计思路
一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
3.
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:循环逻辑不通,不知道如何使格式正确
第一次提交输出格式错误,行末存在多余空格,分析后可以根据数组中元素下标判断该元素是否为最后一个元素,若不是,则输出空格,若是,则不输出。
#二
排名
互评同学名称:李彦婵
2.代码对比
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
结构不同,彦婵直接将下标从最大值往前输,而我定义了一个子函数,使用下标的对换来实现。比较之下,彦婵的程序更加简洁明了,运用了技巧,而我的程序过于复杂,容易出错并且不容易发现错误。我更喜欢彦婵的风格,简单易懂。
四、本周学习总结
1.你学会了什么?
1).学会了如何定义一维数组,二维数组
2).学会了如何将数组中的元素运用下标进行处理。
3).学会了不同输入输出数组的几种不同方式
4).关于str系列函数的用法与原型
2.本周的内容,你还不会什么?
不知道如何分别进行行与列的查找并比较大小。
3.循环结构考试总结
1.哪题做错了,怎么改?
所定义数组范围过小,导致答案部分错误,定义足够大的数组char a[1000000]
2.考试结果满意么,怎么改进?
不满意,应该多回归书本,并且在听完课之后立马进行温习并自己尝试写一遍,若有不懂应该立马标注并及时解决。
3.其他总结。
多多练习,端正态度。
循环
#一
题目1.求平方根序列前N项和,本题要求编写程序,计算平方根序列√1+√2+√3+⋯的前N项之和。可包含头文件math.h
,并调用sqrt
函数求平方根
1. 本题PTA提交列表
代码:
2.设计思路:先输入一个数n,从1开始一直加一进行开根号处理,就要在加到n时在循环里,同时需要设置变量sum统计前n项总和
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:如何输出两位小数
调试过程
错误:把num写成n,n未定义。检查后改正。
题目2.打印九九口诀表
1. 本题PTA提交列表
本题代码:
2.设计思路:
设计两个循环,使第一个数为1,第一个循环使第二个数从一加至九,分别相乘后输出,第二个循环使第一个数从一加至九,而第一个循环包含在第二个循环里。
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:1.怎样使每条输出语句对齐2.怎样形成一个三角。
调试过程
语句无法对齐,请教后改正。
两个数对调(i,j对调固答案错误。)在运行后发现改正。
题目3.求1到100的和(10 分)
本题要求编写程序,计算表达式 1 + 2 + 3 + ... + 100 的值。
1. 本题PTA提交列表
代码:
2.设计思路:设计一个循环在循环里,1从1加到100,同时每个数进行累加
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:不知道如何进行累加
调试过程
输出格式错误,根据调整后改正。
#二.截图本周目集的PTA最后排名
2.我的代码、互评同学代码截图
同学名称:林芷逸
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
基本结构是相同的,但芷逸的代码稍显复杂,语句比较长。我的代码定义的变量名称也更直接明了容易辨认。同时在i<n-1这种细节上较为注意。
我比较喜欢自己的代码。
四.本周学习总结
1.你学会了什么?
1.学会了多种循环结构,for,while,do...while的结构上的不同以及应用方式。
2.循环嵌套
2.本周的内容,你还不会什么?
不知道如何进行循环输入和算权重分配,有大概的思路但无法进行编程。
3.循环结构考试总结
1.哪题做错了
以下正确定义与赋值的语句是________ A、int x = y = -1 B、char c = 65; C、float y == 1.0; D、double x = 12.3E2.5
选了A,但赋值需要int x=-1,y=-1,本题答案选b
2.考试结果满意么,怎么改进?
不满意,多进行代码练习,多翻书,多看学习视频,熟能生巧。
3.其他总结
刚开始学习c语言,感觉不是很适应,不能举一反三,很多基础的东西容易忘记,还需加强。