1.本章学习总结

1.1思维导图

1.2 本章学习体会及代码量学习体会

1.2.1学习体会

  • 经过两周的学习,开始接触了“函数”这个高大上的概念,经过思考……开始意识到学习计算机语言是一个发现问题,分析问题,解决问题的过程。
  • 刚开始学习函数的时候,感觉函数是一个很高级的东西,后来才意识到,我们在学习C语言的时候就一直在用函数,只不过我们用的函数都是编译器自带的函数定义,当我们的目的是编译器自带函数解决不了的时候,我们就开始自己定义函数。后来的数据类型课上,老师稍微地也提到了数组——有的时候计算机提供的变量定义范围不能满足要求的时候,定义数组来满足要求。
  • 函数就好比是一块块积木,把一块块积木搭建起来,也就建成了程序的大厦。在以后的学习中,可以把一些常用的函数写出来,存在一个文件夹里,随时调用……

1.2.2代码累计

PTA总分

2.1排名截图

2.2我的总分:

145

3. PTA实验作业

3.1 使用函数输出指定范围内的Fibonacci数

  • 本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。
  • 其中函数fib须返回第n项Fibonacci数;函数PrintFN要在一行中输出给定范围[m, n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余空格。如果给定区间内没有Fibonacci数,则输出一行“No Fibonacci number”。

3.2 算法分析

int fib( int n );
定义循环变量i,输入n,定义三个值储存连续的斐波那契数;
for i=1 to n
  if n1||n2 return 1
  end if
   f1=f2;
   f2=f3;
   f3=f1+f2;
end for
return f3;

void PrintFN( int m, int n );
定义i=1,表示第i个斐波那契数,范围为【m,n】
while(1)
  if fib(i)<=n&&fib(i)>=m
  输出fib(i)
  end if
   i++;
  if fib(i)>n//超出范围
  break;
end while

3.1.2代码截图

3.1.3测试数据



3.2.4提交列表

  • 部分正确
  • 在第一个函数输出斐波那契数的时候没有对f3赋初值,或者是第一个函数的返回值没有写成f3,而是f2……
  • 运行超时
  • 时间有点久了,好像是乱注释把有用的注释掉搞得,进不去第二个函数。

4大作业

4.1函数关系图

4.1.1 main()

主函数,显示菜单。

4.1.2void Degree1() 一级运算

用时间函数产生随机数,用产生的随机数取余4产生随机的1,2,3,0,switch产生随机的运算符。

4.1.3void Degree2()&void Degree3() 二级三级运算

二者差不多,只显示一个吧
result逐步运算结果,两个switch产生两个随机运算符

4.1.4RightMessage()&WrongMessage() 提示正确或错误信息

调用时间函数,可以使生成的信息随机(感谢课堂派,可见代码交流的重要性)。

  • 时间函数是个好东西,可以用于生成随机数,配合%使用可以生成一个范围的数,再配合switch的使用,可以生成随机的任何东西。
  • 可以算正答率,并根据正答率输出对应信息。

4.3测试结果

4.3.1菜单

4.3.2回答正确

4.3.3回答错误

4.3.4错误输入

正答率

突然觉得最后显示正答率信息的时候有出现菜单有点不好看,做出更改,加一清屏函数。

4.4遇到的问题以及解决方案

Q1:输入做题数目后,程序竟然是死循环。
A1:在输入难度等级的是时候,我用了一个do-while来解决不合法输入的问题,但是while循环条件写错,导致了只要输入正确,就会继续循环…………我不死循环谁死循环。
Q2:怎么生成随机运算符?
A2:有问题,问度娘……结果进了数组的坑…………不过最终失败了……最后突发奇想用switch。
Q3:清屏函数的使用。
A3:清屏函数的使用摸索了好长时间,因为它一清就是全屏伤害,把握清屏函数的位置是一门艺术。

4.5大作业总结

  • 别人在写程序,而我在写BUG。写完程序之后编译,错误列表前所未有之多,程序还是编写边调,写完一个调一个比较好。
  • 以前一直在PTA上做题,对程序界面友好这个概念并不是很重视,写完大作业之后,意识到界面提示的重要性,不然使用者真的很懵。
  • 在四则运算中,最棘手的还是除法,至今我还没解决如何解决除数为零的问题,本来我用了一个if来使除数不为零,但是如果除数为零,会导致“/”不能正常输出,程序一个2 0=的情况,程序有待优化,希望同学们可以提出解决方向让我借鉴一下。

PS 对除法运算结果无意义的优化处理

部分代码截图

优化后

优化前

如果除法运算不能满足要求的话,如果不进行优化那么会出现没有运算符的情况。
更改之后,将除法改成除法,到时可以算是解决问题还是希望同学们能提一下意见。