循环
一、PTA实验作业
7-2
求平方根序列前N项和
本题要求编写程序,计算平方根序列√1+√2+√3+⋯的前N项之和。可包含头文件math.h
,并调用sqrt
函数求平方根。
1、本题PTA提交列表
2、设计思路
先输入N个数,然后利用循环从1开始,先计算每一项的值,再求和计算总值,最后输出保留两位小数的结果sum。
3、本题调试过程碰到问题及PTA提交列表情况说明。
(1)错误点:测试点2
题目要求结果使用双精度范围,所以定义sum,item时应该用double,float是单精度浮点数,不合题意,所以无法实现最大N。
4、调试结果
7-29
打印九九口诀表
1、本题PTA提交列表
2、设计思路
本题采用循环体实现九九乘法口诀表。先输入一个正整数num,表示要打印出N*N的乘法口诀表。因为乘法口诀表中两个数字均在变化,所以要利用两个循环,第一个数字从i=1开始,每执行一次循环i+1,直到i=num时,结束循环;第二个数字从j=1开始,每执行一次循环j+1,因为题目要求实现下三角口诀表,所以此时结束循环的条件是j<=i。最后根据输出格式,输出结果。
3、本题调试过程碰到问题及PTA提交列表情况说明。
(1)错误点:全是格式错误
输出格式有误,没有给出判断输出的条件
解决方法:给出判断输出的条件i*j>=10;如果符合条件,输出“%d*%d=%d ”,否则输出“%d*%d=%d ”,两个输出的差异在于乘积的结果若大于1位数,则输出的空格少一个。
4.调试结果
7-4
统计学生成绩
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
- 大于等于90分为A;
- 小于90且大于等于80为B;
- 小于80且大于等于70为C;
- 小于70且大于等于60为D;
- 小于60为E。
1、本题PTA提交列表
2、设计思路
本题采用循环的结构统计学生成绩。先输入学生人数n,然后利用循环,从1开始,每循环一次,i加1,在循环内部循环输入学生成绩,并利用分支条件统计各分数段学生成绩以计算人数,直到i=n跳出循环,最后输出各分数段人数分布。
3、本题调试过程碰到问题及PTA提交列表情况说明
(1)错误点:运行超时
①第11行,输入学生成绩应放在循环内部,因为学生成绩需要逐个输入,然后统计,若放在循环外部,则无法实现逐个输入,这是逻辑错误。
解决方法:在循环内部输入学生成绩
②第12行,循环判断条件有误,grade>=0只能确定进入循环的条件,没有终止循环的条件,导致循环无法结束,出现程序运行超时
解决方法:给出终止循环的条件
4.调试结果:
二、同学代码结对互评
陈冰艳的代码
我的代码:
不同点:
陈冰艳的本题采用while循环,从i=1开始,进入循环,每次循环进入分支判断,满足则该等级人数加1,然后i加1,进入下一循环,直到i<=n跳出,实现统计成绩
我的代码用的for循环,原理相同
两个循环差不多,我习惯用for循环
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
①循环的4个基本要素:初始化,条件控制,重复的操作,改变循环变量的值
②for循环的使用:for(表达式1;表达式2;表达式3) ,分别表示初值,终值,循环变量的改变
while循环的使用:
表达式1;
while(表达式2){
for的循环体语句;
表达式3;}
do-while循环的使用:do{
循环体语句
}while(表达式);
③break语句:结束本次循环
continue语句:借宿本次循环,进入下一循环。
2、本周的内容,你还不会什么?
①终止循环的条件不够清楚,在做题的过程中经常因为循环条件出错,导致代码运行不出来,或有错
②switch循环的使用
③PTA 7-13 单词长度问题
7-38 切分表达式——写个tokenizer吧
3、循环结构考试总结
选择题正确率不高,细节知识存在缺漏;
do-while 循环未完全掌握,导致全卷中遇到的do-while 循环都要思考很久循环是如何进行的;
写出程序结果的题0分,读程序能力太弱,不是看不懂,而是不完全明白程序运行中每一步怎么走,结果是什么,题型不够熟悉;
平时写代码不够注重思考程序如何运行的,一味想着如何输出正确结果。如沙漏型的题,基本没有思路;
未掌握静态变量,全局变量的概念及使用;
写程序的大题得分率低---1、做题太慢,到写程序的大题,时间所剩无几 2、大题没有弄懂题目,缺乏写题的思路;
时间安排不合理,很多题想的太慢,读程序的题几乎没时间仔细斟酌,所以写不出答案,写程序的题也是时间紧张,所以只写了一题。
不满意,改进:
注重细节,查缺补漏
提高基础知识熟悉程度,合理安排考试做题的时间,保证留有足够的时间做写程序的大题,尽量避免时间不够
多练习读程序的题,提高读懂别人程序的能力,这样考试才能更迅速的读懂程序
多看别人写的代码,寻找思路
独立完成PTA及平时作业所要求的代码,多写代码,才能提高写程序的思维
函数
一、PTA实验作业
7-36
圆形体体积计算器
1、本题PTA提交列表
2、设计思路
在主函数中,因为有3种不同的指令,需要利用循环,循环条件1使循环恒成立,按题目要求先输出 1-Ball
2-Cylinder
3-Cone
other-Exit
Please enter your command:
然后输入指令n(1/2/3),再利用分支判断执行哪一指令,然后进行相应的体积计算。
当输入为1时,在计算球体体积之前,打印Please enter the radius:
,然后读入球体半径,跳转到子函数计算出具体体积数值,而后返回主函数输出体积。2和3与1同理
。
3、本题调试过程碰到问题及PTA提交列表情况说明
(1)错误点 答案错误
①编辑有误,所以结果与simple不等价
②每一个分支没有输出,所以计算2,没有结果
③循环中每一个分支的输入是独立的,此时没有实现循环内部单独输入,所以无法反复调用3种计算
解决方法:
将第10行的n放入19行后,实现每次计算前要输出要求界面;
在每一个分支中,第一行添加输入,实现每个分支下体积的独立计算和可以反复调用3种计算,分支中的最后一行添加输出,实现输出每个不同体积的计算结果;
第一次调试结果:
(1)错误点:运行超时
调整了输入,输出后,分支判断条件有误,n=1表示赋值
解决方法:将n-1改为n==1,实现判断
第二次调试结果:
(1)错误点:答案错误
子函数体积计算中π的值精度不够
解决方法:改变π的精度,尽量精确到小数点后8位以上
最终调试正确结果:
7-41
判断数字字符
1、本题PTA提交列表
2、设计思路
输入一个字符,进入子函数判断,如果这个数字在0到9之间,向主函数返回1,输出“YES”;否则,向主函数返回0,"NO";
3、本题调试过程碰到问题及PTA提交列表情况说明
(1)错误点:非零返回
主函数和子函数位置反了,一般在主函数中输入输出
解决方法:在主函数中输入,输出
最后调试成功结果
7-3
求幂之和
本题要求编写程序,计算sum=2^1+2^2+2^3+⋯+2^n。可以调用pow函数求幂。
1、本题PTA提交列表
2、设计思路
在主函数中输入n,子函数中利用循环从1开始,计算 sum,直到不满足i<=n跳出循环,回到主函数输出结果
3、本题调试过程碰到问题及PTA提交列表情况说明
第一次调试:
(1)错误点:编译错误
第3行,函数声明忘记添加分号,导致编译错误
解决方法:在第3行后,添加“;”
第二次调试:(1)错误点:格式错误
第8行,输出中少打了一个空格
解决方法:输出该为 "result = % .0lf",fact(n)
最终调试结果
二、同学代码结对互评
陈冰艳的代码
我的代码
不同点:
陈冰艳同学只用一个循环,前两项单独计算了,每一项她采用的是a*1.0/b计算,在输出中数据直接用和乘以2
我的代码用了嵌套循环,计算全部的式子,每一项我用的是a/b*1.0,我定义了一个新变量,单独一行列出了结果,然后输出这个变量
我更喜欢陈冰艳的代码,一个循环比较好理解,我的嵌套循环思路更复杂一些。
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
①使用主函数和子函数的方法写代码,将反复利用的代码封装,可以使代码更加简洁,缩短程序的运行时间。
②主函数前需要函数声明,函数声明——函数调用——函数定义,主函数调用子函数,将实际参数单向传递给子函数的形式参数。
③return 语句的作用:结束函数的运行;带着运算结果呢返回主函数
return 只能返回一个值
2、本周的内容,你还不会什么?
①全局变量和局部变量的使用还不够熟悉
②还不明白核实子函数需要向主函数返回值,何时不需要返回值
③静态变量的概念未完全理解
④PTA 7-7 \7-9
数组
一、PTA实验作业
7-2 求最大值及其下标
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
1. 本题PTA提交列表
2. 设计思路
先将n个数存入数组,然后利用循环比较a[i]与a[index],若大于则index=i;循环从1开始,直到i<n,跳出循环,输出结果
3.本题调试过程碰到问题及PTA提交列表情况说明。
7-12 选择法排序
1. 本题PTA提交列表
2. 设计思路
第1步:在未排序的 n个数(a[0]——a[n-1]),找到最大数,将它与a[0]交换
第2步:在剩下未排序的n-1个数中找到最大数,将它与a[1]交换
……
第n-1步:在剩下未排序的2个数(a[1]——a[n-1])中找到最大数,将它与a[n-2]交换
3.本题调试过程碰到问题及PTA提交列表情况说明。
第一次调试:
(1)错误点:格式错误
输出格式错误
解决方法:在19行后添加一行,if(i<n-1)printf(" ")
第二次调试
(1)错误点:编译错误
经检查发现,第20行for的循环漏了一个"}"
解决方法:在第20行补一个“}”
最后调试结果
7-3 将数组中的数逆序存放
1、本题PTA提交列表
2、设计思路
将给定的n个整数存入数组中,利用循环从0开始,将a[0]与a[n-1-i]交换位置,只需换n\2次
3、本题调试过程碰到问题及PTA提交列表情况说明。
二、同学代码结对互评
陈冰艳的代码
我的代码
不同点:
陈冰艳的代码用嵌套循环分别计算了副对角线元素之和,最后一列元素之和,最后一行元素之和,以及所有元素之和,
然后用所有元素之和减去副对角线元素和最后一列元素和最后一行元素总的和
我的代码利用嵌套循环和分支结构,只用了一个判断条件就可以输出所有元素之和减去副对角线元素和最后一列元素和最后一行元素总的和
我更喜欢的我自己的代码,陈冰艳的代码需要的计算量比较大,有一点麻烦,但是思路比较直观,容易想到
我的代码只需要一个判断条件就可以实现,但找出正确判断条件需要思考
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
①定义数组,引用数组元素
②数据的位置互换
③选择排序法
④取随机数
2、本周的内容,你还不会什么?
①二维数组的使用还不够灵活
②字符串数组的使用还不熟练
③进制转换问题
④不会的题:
书本P165 7-10
PTA 7-20、7-25、7-29