C语言博客作业03--函数

0.展示PTA总分

1.本章学习总结

1.1 学习内容总结

  • 1、函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数2种。例如scanf()、printf()、等为库函数,由C语言系统提供定义,编程时只要直接调用即可;而有些fact()函数,prime()函数,需要用户自己定义,属于自定义函数。
  • 2:调用自定义函数时,程序中必须有与之对应的函数定义。
  • 3:函数定义于主函数之外,分配有储存空间,独立于其他函数的形式。
  • 4:函数的一般形式:
函数类型 函数名(形式参数表)/*函数首部*/
{
    函数实现过程/*函数体*/
}
  • 5:类型标识符函数名(形参表)———形参表可以为空,但花括号不能省略例:int fact(int n)——n为形参,形参只是一个占位符,标志着在形参出现的位置应该有一个什么类型的数据。
  • 6:函数调用函数名(实参表)——实参表与形参表相对应实参可以是常量、变量,还可以是表达式,实参与形参一 一对应,数目应相同,顺序应一致,初学者建议类型也一致。
  • 7:函数类型为void,表示不返回结果,函数体中可以使用没有表达式的return语句,也可以省略return。void类型的函数虽热不直接返回一个值,但它的作用通常以屏幕输出等方式实现。
    此外,在不返回结果函数定义中,void不能省略;否则,函数类型被默认定义为int。
  • 8、模块化设计时要遵循模块独立性的原则,即模块之间的联系应尽量简单。体现在:
    (1)一个模块只完成一个指定的功能。
    (2)模块之间只通过参数进行调用。
    (3)一个模块只有一个入口和一个出口。
    (4)模块内慎用全局变量。
  • 9、上文讲到了全局变量,全局变量是定义在函数外而不属于任何函数的变量,它对作用范围内所有的函数都起作用。一般情况下把全局变量定义在程序的最前面,即第一个函数的前面。而,局部变量则定义在函数的内部,它们的有效使用范围被局限于所在的函数内,使用局部变量可以避免各个函数之间的变量互相干扰,保证了函数的独立性。
    静态局部变量:是一种特殊的局部变量,它存放在静态储存区,生存周期会持续到程序结束,一旦含有静态局部变量的函数被再次调用,则静态局部变量会被重新激活,上一次函数调用后的值仍然保持着,可以本次调用继续使用,定义格式:static 类型名 变量表。

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

    1.2.1 学习体会:

    做题看书,看书做题。没有不理解的地方,就是遇到新题型需要思考良久而已。

    1.2.2 代码累计

    本次综合作业代码量:1023行

    2、综合作业

    题目:小学生口算表达式自动生成系统

    2、本次作业函数关系图

    C语言博客作业03--函数_第1张图片

    3、函数功能及全局变量介绍

    3、1全局变量:

  • num1,num2,num3,是3个随机数,其实每次进入分支函数的时候都会被重新赋值,只不过定义成全局变量,以后就不需要每个函数内都定义了。

    3、2 ListMenu函数

  • ListMenu,ListMenu1,ListMenu2,ListMenu3,是界面输出函数,分别输出主界面,一年级题目集界面,二年级题目集界面,三年级题目集界面。
    截图:
    C语言博客作业03--函数_第2张图片

3、3 GetChoice函数

  • GetChoice1,GetChoice2,GetChoice3,获取用户选择的函数,分别对应一年级中各题目集的选择,二年级中各题目集的选择,三年级中各题目集的选择。
    截图:
    C语言博客作业03--函数_第3张图片

3、4 Problem函数

  • Problem1,Problem2,Problem3...等Problem系列,针对各个不同的层次、多方面的问题题目集,在GetChoice获得选择后进去,实现各个题目集的提示,运算,判断,是检查小学生做题正确与否并记录正确率的函数。
    截图:
    C语言博客作业03--函数_第4张图片
    C语言博客作业03--函数_第5张图片
    C语言博客作业03--函数_第6张图片
    C语言博客作业03--函数_第7张图片
    C语言博客作业03--函数_第8张图片
    C语言博客作业03--函数_第9张图片
    C语言博客作业03--函数_第10张图片
    C语言博客作业03--函数_第11张图片

    4、运行结果截图,测试用例

    一年级:

  • 整十数加一位数的加法:
    C语言博客作业03--函数_第12张图片
    整十数减整十数的减法:
    C语言博客作业03--函数_第13张图片
    两位数减整十数的减法
    C语言博客作业03--函数_第14张图片
    10以内三个数连加:
    C语言博客作业03--函数_第15张图片
    100以内连加连减混合运算:
    C语言博客作业03--函数_第16张图片

    二年级:

    1-9以内的表内乘除法:
    C语言博客作业03--函数_第17张图片
    整十数加整十数的加法(存在进位的)
    C语言博客作业03--函数_第18张图片
    尾数是0三位数加法(和在一千以内的):
    C语言博客作业03--函数_第19张图片
    整百数加减法(和超过一千的,退位的)
    C语言博客作业03--函数_第20张图片
    10以内除法加法混合运算
    C语言博客作业03--函数_第21张图片
    有余数的除法:
    C语言博客作业03--函数_第22张图片

    三年级:

    三位数加三位数的加法(含连续进位的):
    C语言博客作业03--函数_第23张图片
    一位数乘一位、二位、三位数:
    C语言博客作业03--函数_第24张图片
    整十数乘整十数:
    C语言博客作业03--函数_第25张图片
    一位数的四则运算:
    C语言博客作业03--函数_第26张图片
    上图出现了一个9/6、3/2不能整除的情况,原因是随机随机到的数无法整除,而要使它可以随机到的数可以整除还需要再对程序进行修改,不过那个太过复杂了,这里仅仅是无视余数进行计算。

两位数除以一位数(有余数):
C语言博客作业03--函数_第27张图片
万以内的加减法:
C语言博客作业03--函数_第28张图片

5. 调试碰到问题及解决办法:

(1)在二年级表内除法处出现不能整除的情况,由于只有2个数易操作,于是加入判断if (num2 % num1 == 0)正常执行,否则 i--;continue;不输出任何内容而重新赋予随机数再判断。使得输出的随机数总能整除。
(2)输出列表和提示的时候曾出现同一行出现多个内容的情况,判断是漏掉了\n,于是补上。
(3)在生成1-9数字的时候出现过0的情况,于是把rand()%9改成(rand()%8+1),百位数则是将rand()%1000(会出现二位数和一位数的情况)改成(rand()%900+100),还有许多数据范围的修改,这里不重复列举,反正最后除数不为0啦,三位数就三位数啦,整十数就整十数啦,不会有0啦。
(4)在输入用户题目输入的时候,输入1(即一道题目),回答之后会出现 ”输入N退出答题,否则继续答题“ 提示退出的情况,可就1道题,退出个鬼,于是在提示退出的语句前加上判断条件n!=1;还有最后一道题目的时候,提示退出,都最后一道题目啦,还退出个鬼,于是又补上提示退出条件i!=n;
(5)统计正确率时,曾经是用小数计数,比如0.5 , 1.0 , 0.33,现在改为50.0%,100.0%,33.0%。
(6)在程序快完成之际,发现程序在Window命令界面无法退出,只能返回上级主菜单,做题,返回上级主菜单,返回上级主菜单,于是改进为做完题目后提示输入N结束程序,否则输出主菜单并让用户继续做题。

6.大作业总结:

回顾这个作业编写过程,总结碰到问题及后续程序编写注意事项?
(1)当除法出现不能整除的情况,如果只有2个数字操作,就可以加入判断if (num2 % num1 == 0)正常执行,否则 i--;continue;不输出任何内容而重新赋予随机数再判断。使得输出的随机数总能整除。
(2)输出列表和提示的时候如果出现同一行出现多个内容的情况,判断是漏掉了\n,记得补上。
(3)如果在生成1-9数字的时候出现过0的情况,就可以把rand()%9改成(rand()%8+1),百位数则是将rand()%1000(会出现二位数和一位数的情况)改成(rand()%900+100),还有许多数据范围的修改,这里不重复列举,反正最后除数不为0啦,三位数就三位数啦,整十数就整十数啦,不会有0啦。
(4)统计正确率时,曾经是用小数计数,比如0.5 , 1.0 , 0.33,其实可以改为50.0%,100.0%,33.0%,这样易于阅读。
(6)如果在程序快完成之际,发现程序在Window命令界面无法退出,只能返回上级主菜单,就说明有循环不能结束,于是应该加入一个判断条件break使循坏结束。

你可能感兴趣的:(C语言博客作业03--函数)