1.本章学习总结(2分)
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
相比于上一周,本周的学习的难度又加大了,函数的引用使代码更加复杂化,有时候还会遇到一些一时半会难以调试出的问题或者是一些类型奇怪的函数,在看其他来源的代码时有一些没见过的头文件,这时就需要借助书本或者网络知识,结合阅读代码理清逻辑,才能写出正确的代码。这一次作业历时颇长,代码量也颇多,是我写过的最长的代码,而且改bug改的不亦乐乎,几乎将我所学的知识都囊括了,这让我深刻认识到自己知识的贫瘠,比如控制答题时长的函数,我还没有搞清楚。但是我会继续努力,继续修改拓展这个代码,以达到臻于完备的境界。
1.2.2 代码累计
2.PTA总分(2分)
2.1截图PTA中函数题目集的排名得分
2.2 我的总分:
145
3.PTA实验作业(1分)
3.1 PTA题目1
3.1.1 算法分析
函数1:
定义整型数据i,num1=1,num2=1,num3,
if(n1||n2) num3=1;
for i=1 to i<=n-2 do i++;
{num3=num1+num2;
num1=num2;
num2=num3;} //在数列中将这两个数的项数往后推一位
返回 num3;
函数2:
定义整型数据 i=1,flag=0;
do { if(fib(i)>=m) 当flag0,输出fib(i)的值,flag++;
否则只输出fib(i);
i++; }
while fib(i)<=n do if(flag0) 输出"No Fibonacci number")
3.1.2 代码截图
3.1.3 测试数据
用表格的形式给出测试数据列表,测试数据自己设计,测试数据要全面,能考虑程序各种情况。
3.1.4 PTA提交列表及说明
开始在第一个函数犯了难,不知道怎么把每个项数向后推一位,于是变成了开始是用num1,num2给num3进行赋值,循环一次后就变成了用nun2,num3给num1赋值,就没有办法进行下一次的循环了。后来又将num2的值赋给了num1,num3的值赋予给了num2,就实现了查找斐波那契数列的循环。第二个函数,开始写的较为复杂,后来直接调用了第一个函数,使代码简洁很多。
4.大作业(5分)
题目:实现小学四则运算。
要求:
题目有3个难度级别,分别为:
第一级是1位数的一步加减乘除计算
第二级是2位数的2步加减运算
第三级是3位数的2步加减运算
注意:
运算数及运算符都是随机生成的。
用户每选择一个难度级别后必须输入题目数量,最好能统计用户的正确率。用户每算一题,若错误,给出正确答案。
用户中途退出,不继续做题,需要有个提示操作可中途退出。
软件界面必须友好,多加文字提示,能让用户自己当前做什么,接下来怎么做,每步操作可以退到菜单界面。
用户输入的非法数据,务必有友好提示,而不是让程序陷入瘫痪。
注意函数封装,不管是几位数的加减乘除运算,相同功能的代码应该都封装都一函数,通过参数传递实现代码覆盖。也可以考虑数据输入、输出等函数封装,尽量不要把代码都放main中。各种异常情况也可以单独封装函数处理,让程序的扩展性更强。
扩展功能:
可以设置答题时间,用户超过答题时间,提示不能继续做题,重新选抽题。请查阅C的时间函数。
扩展难度级别,比如出现2步加减乘除,然后乘除优先计算。比如2+3*4运算
4.1.函数关系图
4.2.函数功能介绍
1.函数1:
功能:将rand()函数生成的整型数据转换为指定字符型数据;
思路:运用switch()函数解决;
代码:
2.函数2:
功能:对随机生成的整型数据进行加减乘除运算,并返回运算结果;
思路:运用switch()函数解决;
代码:
2.函数3:
功能:对随机生成的整型数据进行加减乘除运算,并返回运算结果;
思路:多次调用函数2来解决;
代码
2.函数4、5:
功能:随机输出奖励或鼓励;
思路:运用switch()函数解决;
代码:
2.函数6:
功能:判断输入数据是否合法,合法则输出,不合法则重新输入;
思路:运用do-while循环嵌套和if语句的嵌套解决;
代码:
4.3 运行结果截图
正常运行(另:输入“*”可返回上一级,返回后清屏,截图说不清,故文字表述):
等级选择时输入非法数据:
数量选择时输入非法数据:
输入结果时输入非法数据:
4.4 调试碰到问题及解决办法
开始意识到输入的数据是字符时程序会崩溃,但修改后发现,虽然可以成功识别出非法字符,但是如果是类似于“数字+字符”的数据,虽然输出了非法字符的提示,但程序还是可以往下一步运行,修改的方法是添加了几个循环和判断,使得这一类型也没法通过检验。
另外还有两步加减乘除时纠结于除数是0怎么办,写了若干行代码还是觉得有问题,但是后来发现是自己审题不仔细,进行两步运算的是两位数或三位数,不存在除数是0的情况,感觉自己宛若zz。。。
还有函数6,是三种情况中都要用到的,开始没想着要把它写成函数,后来发现它重复了3次,所以改成了一个函数。又因为第一种情况只有三个数据,开始函数定义是int fact6(int num1,char ch1,int num2)后来发现它不能适用第二三种情况,故改为int fact6(int num1,char ch1,int num2,int ch2,int num3),并且把num1,num2,num3,ch1,ch2定义为全局变量。
4.5 大作业总结
- 1.原以为这次作业很简单,不就是加减乘除就搞定的事情,但令我很意外,我写了三百来行代码,是我写过的最长的代码,而且改bug改的不亦乐乎,几乎将我所学的知识都囊括了,这让我深刻认识到自己知识的贫瘠,比如控制答题时长的函数,我还没有搞清楚。但是我会继续努力,继续修改拓展这个代码,以达到臻于完备的境界。
- 2.正如老师说的,在编写一个程序的时候,可能正确步骤的输入输出,你写的代码只有十几二十行,但是当输入非法数据时,防止程序崩溃而写的代码,可能比之前写的还要长,深有其感。
- 3.有些函数是不能一下子就想到的,有可能写着写着发现有的地方代码功能重复,就可以考虑写成一个函数了。
- 4.学会了清屏函数的用法和用time函数来计时。