1.本章学习总结#

1.1 思维导图##

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

1.2.1 学习体会###

本周学习了函数,学到了一种可以解决重复问题的方法,通过函数设计,大大简化了代码,增强了代码的可读性。学习函数可以来编写较多功能的代码。若我们不需要函数返回任何值可以用void类型的函数。初学函数时,并没有领略到函数的好处,在编写大作业时,就有感受了。调用函数比一次次编写相同的代码要方便许多,实现函数编写后,只要调用函数即可实现函数功能,函数的学习在今后的运用中也是个重要内容。也学习到了局部变量、全局变量、静态局部变量,大作业中正确个数的统计使用全局变量是一个明智的决定,解决了多个函数同时使用同一个变量的情况,使用我们不要仅仅拘泥于局部变量。

1.2.2 代码累计###

2.PTA总分#

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

2.2 我的总分##

函数:145

3.PTA实验作业#

3.1PTA题目1##

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

3.1.1 算法分析###

int fib( int n )       //定义返回第n项Fibonacci数的函数
	if(n==1||n==2) then      //第一项和第二项都是1
	返回1
	else                 //以后的每一项都是前面两项的和
	return fib(n-1)+fib(n-2);

void PrintFN( int m, int n )        //定义输出Fibonacci数列的函数
  定义计算Fibonacci数的个数的count,标志第一项数的flag,Fibonacci数的i
	while(fib(i)<m)        //找到fib(i)大于m时的i值
		i++;
        end while
	while(fib(i)<=n)
		if(flag==0)    then    //第一项前面不输出空格
			printf("%d",fib(i));
		        flag=1;
		else if(flag==1)     //除第一项外数字前面都输出空格
			printf(" %d",fib(i));
                end if
		count++;
		i++;
       end while
	if(count==0)
	printf("No Fibonacci number");

3.1.2 代码截图###

3.1.3 测试数据###

3.1.4 PTA提交列表及说明###

  • Q1:如何实现每一项都是前两项的和
  • A1:在fib函数中使用fib函数实现每一项是前两项的和
  • Q2:怎么找出大于m和小于n的临近值Fibonacci数
  • A2:使用两个while循环,第一个循环找出大于m的最小Fibonacci数,第二给循环找出小于n的最大Fibonacci数

4. 大作业#

题目:实现小学四则运算。##

4.1.函数关系图##

4.2.函数功能介绍##

1.函数1###

  • 代码截图
函数功能:调用三个不同等级的运算函数,计算用户答题的正确率

2.函数2###

  • 代码截图
函数功能:先随机生成两个一位数,再随机生成加减乘除一步四种运算式,最后判断用户的回答和正确答案是否相等,输出对用户的祝贺语或提示用户回答错误给出正确答案,统计right,wrong的值

3.函数3###

  • 代码截图
函数功能:先随机生成三个两位数,再随机生成加减乘除两步四种运算式,最后判断用户的回答和正确答案是否相等,输出对用户的祝贺语或提示用户回答错误给出正确答案,统计right,wrong的值

4.函数4###

  • 代码截图
函数功能:先随机生成三个三位数,再随机生成加减乘除两步四种运算式,最后判断用户的回答和正确答案是否相等,输出对用户的祝贺语或提示用户回答错误给出正确答案,统计right,wrong的值

5.函数5###

  • 代码截图
函数功能:用户答案,并判断输入的是不是非法字符,若是,提醒用户,让用户再次输入,直到不是非法字符

4.3运行结果截图##


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

Q1:如何随机输出加减乘除四种运算式
A1:使用switch语句,通过随机产生1,2,3,4这四个数,来进行分支,随机输出加减乘除不同的运算式
Q2:计算正确率时,right个数和wrong个数统计出错,导致正确率错误
A2:因为三个函数都随时可能被调用,所以right,wrong的值应该沟通起来,所以想到了把right,wrong设为全局变量,供三个函数共同使用
Q3:三位数生成时有一位数的生成
A3:把a=rand()%1000改成a=100+rand()%900
Q4:非法字符的输入处理
A4:参考了同学的博客,使用scanf判断是否等于1,不等于1则非法字符,再使用getchar让用户再次输入

4.5大作业总结##

1.我的代码实现了每次运算结束后都能返回菜单,而且用户可在一次一级运算后随意选择其他级运算,而不是只能继续一级运算
2.函数的使用还是比较单一,没有实现相同功能的代码一起组成一个函数,代码的拓展性不是很强
3.非法字符的处理是我在这次大作业中的最大收获,虽上课时了解到若输入非法字符,scanf的值不等于1,但实际操作起来还是不能实现该功能,在参考了同学博客后,受益良多