函数-循环-数组
函数
一.PTA实验作业
题目一.7-42 函数编程-分段函数:编写函数,计算下面分段函数的值。
1.本题PTA提交列表
2.设计思路
主函数中定义并输入x,调用子函数sum(x),子函数sum(x)针对x的不同取值有不同的y值。最后计算并输出y。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1).编译错误:对函数的运用不够熟悉,exp函数写成epx函数,导致编译错误。
(2).答案错误:还是答案格式出错,题目的格式是输出y=答案,而我直接输出答案。
4.代码截图。
题目二.7-1 求组合数:本题要求编写程序,根据公式Cnm=m!(n−m)!n!算出从n个不同元素中取出m个元素(m≤n)的组合数。
建议定义和调用函数fact(n)
计算n!
,其中n
的类型是int
,函数类型是double
。
1. 本题PTA提交列表
2. 设计思路
在主函数中定义m,n,并输入这两者的值,在输出时调用子函数fact(n)进行计算。子函数fact(n)中定义sum和i初始化为1,当i<=n时,sum*=i,求n的阶层。
3.本题调试过程碰到问题及PTA提交列表情况说明。
代码并没有问题,但题目要求输出的答案为整数,这题作为基础题容易掉坑。输出应是%.0lf。
4.代码截图。
题目三.7-3 求幂之和:本题要求编写程序,计算sum=21+22+23+⋯+2n。可以调用pow函数求幂。
1.本题PTA提交列表
2. 设计思路
在主函数中定义并输入n,在输出时运用子函数qm(n)求出答案。子函数中定义了i=1,sum=0,每次i<=n,sum +=pow(2,i)。
3.本题调试过程碰到问题及PTA提交列表情况说明。
这题是基础题,并没有什么难度。所以提交时也没有遇到什么突发情况。
4.代码截图。
若上图所示。
二、同学代码结对互评
1.互评同学:陈冰艳
2.我的代码、互评同学代码截图
陈冰艳同学的代码:
我的代码:
3.我和陈冰艳同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
不同在于:陈冰艳同学根据题目将n分成i与(n-i),再利用子函数判断其是否为素数,若是返回1,否则返回0,这样当i与(n-i)都为素数时,if条件语句才成立。我的想法和陈冰艳同学有些类似,我的子函数也是判断传递过来的数是否为素数,
若是则返回这个数本身,不是就不返回。但是我的子函数类型为int,不是素数时不返回值有漏洞。只找出这个bug,其他还没看出来,希望没有错误了。
各自优势:陈冰艳同学的代码简洁易懂,而我的这个代码只是一个半成品。
我更喜欢陈冰艳同学的代码。
三、截图本周题目集的PTA最后排名。
四、本周学习总结(2分)
1.我学会了简单的函数编程题
2.本周的内容,你还不会什么?
PTA:7-2,7-7,7-9,7-10.
3.函数考试总结
(1).哪题做错了,怎么改?
7-4做错了,思路有点偏差。:注意子函数的类型,是否要返回值。
(2).考试结果满意么,怎么改进?
不满意,很多题目都是一知半解,希望自己可以在这方面勤加锻炼,更加上心。
循环
一.PTA实验作业
题目一.7-1 求交错序列前N项和:本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
1.本题PTA提交列表
2.设计思路
观察分子为n,分母为2*n-1,且符号一正一负不断改变,所以定义flag=1,且在每一次sum+后变一次符号。
3.本题调试过程碰到问题及PTA提交列表情况说明。
由于这题简单明了,所以没有遇到困难。
4.代码截图。
如上图所示。
题目二.7-7 计算阶乘和:对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!。
1. 本题PTA提交列表
2. 设计思路
输入正整数n,两层循环中,x计算i的阶层,s计算n个的阶层和。注意每次计算阶层前必须令x=1。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1).答案错误:苦思冥想,明明代码写出来都跟思路一模一样。最后发现,题目要求直接输出答案,而我输出的是S=答案。嗯,格式很重要。
4.代码截图。
题目三.7-14 特殊a串数列求和:给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和
1.本题PTA提交列表
2. 设计思路
首先输入正整数a和n,令sum,num初始化为0,i初始化为1,for循环中sum=sum*10+a求出各项的值,num+=sum算出各项之和。
3.本题调试过程碰到问题及PTA提交列表情况说明。
3.本题调试过程碰到问题及PTA提交列表情况说明。
3.本题调试过程碰到问题及PTA提交列表情况说明。
3.本题调试过程碰到问题及PTA提交列表情况说明。
错误点跟第二题一样,输出格式为S=答案,而我写的是sum=答案。长点心吧,骚年!
4.代码截图。
二、同学代码结对互评
1.互评同学:雷慧
2.我的代码、互评同学代码截图
雷慧同学的代码:
我的代码:
3.我和雷慧同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
不同在于:在判断行数时雷慧同学的方法是先判断正方形边长n是否为偶数,若是偶数则列数d为n/2,否则列数为(n+1)/2;而我的方法是比较浮点数n/2.0与整型数n/2,若是浮点型与整型数相差大于0.5,则列数b为n/2+1,否则列数b为n/2。
其他地方并没有不同。
各自优势:不同的思维构造不同的方法,我觉得两个方法都很好,但雷慧同学的代码更加简洁,值得学习。
我更喜欢雷慧同学的代码。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.我学会了简单的循环题目,例如求从1加到100的和。
2.本周的内容,你还不会什么?
太复杂的题目没有思路,例如3至7位的水仙花数,PTA上的7-8,7-9,7-24,7-34,7-38。
3.循环考试总结
(1).哪题做错了,怎么改?
7-17.寻找250:第一次用for循环没得满分,后来用while语句便可以了,但仍然不知道为什么错。大概是因为for循环比较适合用于已知循环次数的题目吧。
(2).考试结果满意么,怎么改进?
不满意,做题目的效率很低,很多程序都写得太过繁琐。
数组
一.PTA实验作业
题目一.7-2 求最大值及其下标:本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
1.本题PTA提交列表
2.设计思路
定义了子函数min(n),所以数组a[10]定义为全局变量。首先在主函数中输入数字个数n,用for循环输入n个数,并保存在数组a[10]中。调用子函数min(n),找出最大的数字,令其下标为index。输出下标为index的数和下标index。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)段错误:从逻辑上看这段代码没有问题,一直不理解提交到PTA为啥就错了。后来自己用子函数重写了一遍,发现如果将定义中的a[n]改成a[10]就正确了。于是猜想应该是PTA的版本不支持数组括号中为变量,而不是一个常量。
为了验证上面的猜想,将第一次的代码中的a[n]转换成a[10],再次提交。
所以猜想大概是成立的。
4.代码截图。
如第3点中后两张图所示。
题目二.7-17 判断上三角矩阵:上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
1.本题PTA提交列表
2. 设计思路
定义了子函数fact(n)和二维数组a[10][10](全局变量),主函数输入待测矩阵总个数t,而后输入t个数,为每个矩阵的行数(与列数相等)。每输入一个行数,就调用一次子函数fact(n)。子函数fact(n)实现n阶矩阵的输入与计算其对角线下有几个数为零。最终将实际为零数count与理论得零数n*(n-1)/2进行比较,若相等则输出YES,否则输出NO。
3.本题调试过程碰到问题及PTA提交列表情况说明。
本题错误出现在于过于马虎,在判断对角线以下数是否为零并计数时,在if中多了一句break,导致错误产生。提醒我以后做题排错时格外注意break与continue的使用是否妥当。
此外,参考同学的做法才发现我的思路虽然没错但是太过繁琐。她们的思路简化为:先定义一个flag=0,直接判断对角线以下的数是否不为零,若不为零则flag=1,break跳出循环直接输出NO,否则flag=0,输出YES。不可置否,这个方法比我的好多了,流程图也所简化,我也从中有所收获,即多开阔自己的思路,找到最佳方案做题。
4.代码截图。(左图为我的完整代码,右图为有所修改的部分)
题目三.7-22 求矩阵各行元素之和:本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
1.本题PTA提交列表
2. 设计思路
定义了子函数fact(n,m)与二维数组全局变量a[6][6],在主函数中输入二维数组的数值后,调用子函数fact(n,m)。子函数fact(n,m)中第一层循环为行数,保证每一行开始计算元素之和时sum=0;第二层循环为列数,分别将a[i][j]加在sum上,则每次第二层循环结束后输出一个sum,为该行各元素之和。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)这题算基础题目,第一次提交正确后改用函数,发现编译错误。经过研究发现,在子函数中运用了列数n,但其并未从主函数传递到子函数。随后修改,答案正确。
4.代码截图。(左图为一般程序,右图使用了函数)
二、同学代码结对互评
1.互评同学:陈冰艳
2.我的代码、互评同学代码截图
陈冰艳同学的代码:
我的代码:
3.我和陈冰艳同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
不同在于:陈冰艳同学的思路是将题目要求插入的x当作已有数组的后一位组成新数组,而后通过排列得到有序的数组。而我的思路是将x与相邻的两个数比较,如果x恰好处于这两个数之间,则前面的数原封不动复制给新数组b[10],x顶替后一位的位置,从后一位开始,原来数组的数的位置后移一位。从而得到新数组。
此外,在子函数的传递中,陈冰艳同学处理的更好。她从主函数中传递了原来数组的首地址到子函数,而我定义的全局变量虽然也可行,但占据更多的内存,有失妥当。
各自优势:陈冰艳同学的代码更加简洁,也更有观赏性。
我更喜欢陈冰艳同学的代码。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.我学会了运用数组去存储多位数据,在子函数与主函数形参与实参的传递中,用数组名称为数组首地址可传递,不要一直执着于全局变量。
2.本周的内容,你还不会什么?
简单的数组问题可以解决,但遇到稍难的数组总是会忘记先存储,再输出。使自己容易转牛角尖,出不来。
有些题目好不容易做出来,可是下一次再遇到又会陷入困境,感觉完全没有思路。思考题目不够细心,经常不能一次得满分,在PTA和Dev的调试下,才发现代码有漏洞。
3.数组考试总结
(1).哪题做错了,怎么改?
7-5,字符型数组要多留一个位置给\0,不然错误的很隐蔽。
(2).考试结果满意么,怎么改进?
不满意,有很多题目没做。一到考试就犯浑,有些题目平时在PTA上就打过交道,但一到考试就大脑一片空白,容易犯不该犯的错误,结果更紧张了,时间越来越少。当然,即使时间充足,我也不一定都能写出来,但好歹不会遗憾。