1.本章学习总结


1.1 思维导图

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

1.2.1 学习体会

  • 函数的学习能够大大的简化主函数,使程序看起来更加清晰明了。其实在循环结构和分支结构中,就已经学习了一些数学函数的调用。在正式的函数学习中,则初步掌握了自定义函数的设计与运用,能够自主设计一些函数来简化程序。
    需要注意的是函数结构的一些格式以及函数调用的步骤。初步学习,在函数的调用上常出现问题,源自对于函数调用流程的不熟悉与理解的不透彻。要理解实参与形参的关系,return值的意义。同时需要掌握一些变量的运用,平衡利弊,选择适合的变量(全局变量/局部变量/静态变量),熟悉不同的变量的作用范围与时间。
    了解函数的规则,如传参方向等,能够较为清晰的掌握变量在运行过程中数值的变化。

1.2.2 代码累计


2. PTA总分

2.1截图PTA中函数题目集的排名得分

2.2 我的总分:

  • 总分:145

3. PTA实验作业

3.1 PTA题目1

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。

3.1.1 算法分析

int fib( int n );

定义item项目,num1第一个数字,num2第二个数字,i项数 
	if n==1||n==2 then item=1
	end if
	if n>=3 then 
        for i=3 to n do
		item=num1+num2;//前两项和 
		num1=num2;//更新前两项值 
		num2=item;
	end if
	return item;
void PrintFN( int m, int n );

定义i总项数,flag=0,j项数,item项目
    while fib(i)<10000  //输出所有的数 
	i++;
	for j=1 to i
		item=fib(j); 
		if n<item<m &&flag==0
		then 
			printf item; 
			flag=1;//控制空格
		end if 	
		if n<item<m &&flag==1 //在区间内第二个数,且区间两端不相等 
		then 
			printf 空格+item 
		end if 
     end while
		
	if(flag==0)//无输出 
	printf 没有F数
	end if 

3.1.2 代码截图

3.1.3 测试数据

3.1.4 PTA提交列表及说明

  • Q:最小区间答案出现错误
  • A:当区间为[1,1]时,应该输出两个F数

4.大作业

4.1.函数关系图

4.2.函数功能介绍

  • 定义

1.函数1&2

  • 为了使主函数更加简洁并具有可读性,所以直接将菜单和结果的统计装进函数里。

2.函数3&4&5

gradeA&gradeB&gradeC[ABC三个等级]
  • 题目设定:答完并答对十题结束游戏
  • 采用while循环限定答题次数,如果想随时随地停止输入6666,要是想不限条件,可以改成while(1)
  • A等级为个位数的加减,产生随机数,利用%号限制位数,产生x,y两个值,对其进行输出与运算
  • 输出提示(式子)
  • 再产生一个随机数,利用switch case,随机进行加减乘除的运算。
    因为三个函数内容相似,便只展示gradeA一个函数

3.函数5&6&7&8

plus&minus&multiply&divide[加减乘除]
  • 为了更灵活调动函数,所以根据功能直接分装成4个函数。
  • 除法,先判断除数y是否为0,如果除数为0,则跳过,进入下一轮。
  • 为了保证输入不被除数字外的其他非法字符干扰,因此利用fflush(stdin)清空输入缓冲区;
  • 输入答案
  • 利用while循环判断,当答案正确时,输出正确提示信息,答案错误时,输出错误提示信息,并再次输入数字,直到答案正确。
  • 这里之前出现过一个很神奇的bug,不定期的会输出两边菜单,不过骂骂就好了,后来突然想到可能是因为判断除数条件的时候没有清屏导致der
  • 利用判断输入值6666,控制条件直接跳出循环跳到endingw
  • 引用暂停指令缓冲 pause
  • 清屏进入下一题。
    因为函数功能类似,这里只展示除法函数
  • fine!!这里做一个更正划重点!!!
    相较之前的代码在除数为0的情况下要清屏!!!否则碰到除数为零会重复输出鸭!!!之前思考了很久都不知道哪里出问题!!!

4.函数9&10

错误信息和正确信息
  • 产生随机数
  • 利用switch case随机输出提示信息

4.3 运行结果截图

版本1

版本二 fine 我来更新一下程序,增加了一个答错三次提示正确答案,输入6666直接退出的功能

输入错误

答对

答错三次输出正确答案

输入非法字符

  • Fine.在纠结是否要计算执行时间这方面纠结了一下下 但是发现程序末尾系统自带了一个执行时间execution time就没有再加上这个功能啦
统计结果

4.4 调试碰到问题及解决办法

  • Q:输入错误的答案,没有出现相应的提示语,再次输入才出现
  • A:在错误信息的提示函数中,随机产生0 1 2 3四个数,但是少写了2对应的case,增加上即解决这个问题
  • Q:在菜单选择时,输入非A B C程序无响应
  • A:对于非法数据的处理,首先使用while循环,使菜单重复输出,用if判断,如果输入正确,break跳出循环清屏;反之,清屏输出提示语句,再次输入。
  • Q:输入答案时,输入非法字符,程序进入死循环
  • A:为了解决这个问题,尝试了不同的写法,也问了学长学姐。一开始考虑采用和PTA二进制写法类似的写法。利用循环,getchar挨个输入判断,再利用 num=num*10+ch-’0’转数字。因为涉及的地方比较多,位数不固定,所以就比较麻烦,尝试了几次就放弃了这种做法。然后尝试调用fflush(stdin)语句清空缓存区,解决了这个问题
  • A:在输出正确率时,无法输出%号
  • Q:百度后得知需要printf(“%%”);方可

4.5 大作业总结

  • 花了一定的时间去制作思维导图,但是真的开始写大作业的时候,还是有些手足无措。
  • 联想到上次课堂派的最后一题,就先去仔细研究了一下课堂派那题的代码。在错误信息和正确信息的产生上,参考了课堂派的写法。为了使函数的调用更加灵活所以将+-*/都分开写,起初为了确认函数的书写无误,便先写了一个+函数试水(除法函数为了便于输入答案,全部以int类型计算)。调试通过后,就相应的写出另外的几个函数,再讲几个函数进行分装到不同的等级,对应不同的随机数。为了使函数更加简洁,引入了全局变量。分装完毕为了使函数看起来更加直观这个时候再写入menu和ending。简陋的程序雏形出现后,再进行美化和功能的拓展。
  • 相比从开始写,我选择了更倾向于自己第一感觉的倒序写法,便于第一时间发现错误。(一开始也考虑顺序写,但是顺序写函数套函数,无法第一时间判断函数的正误)。这样的写法使整个写代码过程过的相对比较顺利,比较快的能够出现一个雏形。大作业给我的最深刻的启示就是——千万不要想太多,先把基础的框架写出再做修改。否则只会想想想想越想越乱。另外比较重要的一点是,尝试不同的数据。刚开始写完,没有发现一些可能使程序瘫痪的地方(因为就是按着程序提示写),给同学试了一下程序之后发现了问题,在这个方面,以后要多加思考。总的来讲,写大作业的过程比写pta还是要快乐一些,真的实现了实用性的功能,希望再接再厉,多拓展功能。
TIPS:
  • 由比较简单的函数写起,再装进复杂一些的函数中
  • 程序需要有一定的应付非法字符的能力,自我调整
  • 程序需要有一定的提示信息
  • 要能够做到重复输入
posted on 2018-11-11 13:39  Salcious  阅读(431)  评论(2编辑  收藏  举报