C博客作业03——函数
0.展示PTA总分
截图展示:
1.本章学习总结
1.1学习内容总结
(a)函数的定义
1)函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数两种,scanf(),printf()等为库函数,编程时直接调用即可,而用户自己定义,属于自定义函数。
函数定义的一般形式:
函数类型 函数名(形式参数表) /*函数首部*/
{
函数实现过程 /*函数体*/
}
函数类型目前学的有 void,int,double等,void不返回值,所以可以不需要return,虽然它没有返回值,但是它的作用通常以屏幕输出等方式体现,在函数调用的时候,通常以独立的语句方式,如List()。而后面的函数类型则需要返回相应类型的数值。
(b)函数的调用
- 调用自定义函数时,程序中必须有与调用函数相对应的函数定义,称为函数声明。
- 函数的调用过程:
- 任何C程序执行,首先从主函数main()开始,如果遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后将返回主函数,然后再从原先暂停的为止继续执行。
(c)函数的形参和实参。
- 函数定义时,位于参数表的被称为形参,在main()函数里主调函数的参数成为实参,形参除了接受实参的值外,使用方法与普通变量类似。形参和实参必须一一对应,两者数量相同,类型尽量一直,实参的作用只是把值传给形参,形参在自定义函数里起作用,作用范围仅限于自定义函数范围内,形参的任何变化与实参没有关系。
(d)全局变量,局部变量,静态局部变量。
C语言中把定义在函数内部的变量称为局部变量,局部变量的有效作用范围局限在函数内部。使用局部变量可以避免各个函数之间的变量相互干扰。在使用多个函数时,即使使用了同名的形参,且与主函数实参变量也同名,但由于分属不同函数,它们有各自不同的变量实体和使用范围,不会相互干扰。
定义在函数外而不属于任何函数的变量称为全局变量。全局变量的作用范围是从定义开始到程序所在文件的结束,它对作用范围内所有函数都起作用。我们一般情况下把全局变量定义在程序的最前面。
由于全局变量和局部变量的作用范围不同,允许它们同名。当某函数的局部变量与全局变量同名时,在该函数全局变量不起作用,而由局部变量起作用,同样,当函数局部变量与复合语句局部变量同名时,以复合语句为准。
全局变量虽然可以用于多个函数之间的数据交流。但一般情况下,应尽量使用局部变量和函数参数。
静态局部变量存放再静态存储区,不会像普通局部变量那样因为函数调用结束而被系统回收,它的生存周期会持续到程序结束。由于储存单元被保留,一旦含有静态局部变量的函数被再次调用,上一次函数调用的值仍被保存,可供本次调用继续使用。
(e)数据类型
计算机处理的信息都以二进制形式表示,数值可以采用原码,反码,补码表示。
0代表正数,1代表负数。
正数的原码,反码,补码都相同。
负数:
原码 :符号位为1,其余各位表示数值的绝对值。
反码:符号位是1,其余各位对原码取反。
补码:反码加1;
-1的原码是:10000000 00000001
-1的反码是:11111111 11111110
-1的补码是:11111111 11111111
(f)转义字符
转义字符由反斜杠加上一个字符或数字组成,它把后面的字符或数字转换成别的意义,虽然转义字符形式上由多个字符组成,但它是字符常量,只代表一个字符,它的使用方法与其它字符常量使用相同。
字符 含义 \n 换行 \t 横向跳格 \\ 反斜杠 '' 双引号 ' 单引号 \ddd 1~3位八进制整数所代表的字符 \xhh 1~2位十六进制整数所代表的字符。
(h)数据的输入和输出
十进制 八进制 十六进制 int %d %o %x long %ld %lo %lx unsigned %u %o %x unsigned long %lu %lo %lx
(i)部分运算符的优先级和结合性
运算符总类 | 运算符 | 结合方向 | 优先级 |
---|---|---|---|
逻辑运算符 | ! | 从右向左(右结合) | 高 |
算数运算符 | ++ -- + - | ||
* / %(双目) | 从左向右(左结合) | ||
+ -(单目) | |||
关系运算符 | < <= > >= | ||
== != | |||
逻辑运算符 | && | ||
|| | |||
条件表达式 | ?: | 从右向左(右结合) | |
赋值运算符 | = += -= *= /= %= | 从左向右(左结合) | 低 |
逗号运算符 | , |
(j)逻辑运算符
- &&:
- 求解表达式exp1&&exp2时,先算exp1,若其值位0,则exp1&&exp2的值一定时0,此时,已经没有必要计算exp2的值。
- ||:
- 求解exp1||exp2时,先算exp1,若其值为非0,则exp1||exp2的值一定是1,此时,也不必计算exp2的值。
1.2本章学习体会及代码量的学习体会;
1.2.1学习体会
学习这个章节,我觉得自己已经开始有点hold不住了,特别是当数组与函数结合以后,就发现题目难度不再是开学那样简单,已经是小巫见大巫了,总结一下自己,发现自己刷题的时间越来越少,一个是因为最近的体育运动会,开始之前社团的安排,以及运动会期间要做的事情,但是其实这并不是主要原因,我做的事情,别人同样也要干,但是有些人却能够把学习和社团的事情分的很清楚,把这两者的时间分配的很好,但是我没有做到,但是更重要的是,我做一道题花的时间太长,总想着自己一定要把它做出来,在那边死磕到底,于是花了很多时间,其实,如果向别人多多请教,收益的可能会更多。
1.2.2代码累计
代码量 |
---|
900多 |
2.综合作业
题目:小学生口算表达式自动生成系统
2.本次作业的函数关系图;
内容导图:
结构导图:
辅助功能函数介绍:
3.函数功能及全局变量介绍
3.1全局变量
在这个算数系统里,我没有用到全局变量,但是现在在写博客的时候,想想如果用到全局变量的话,自己的整个系统会更加简洁,因为对于每一个子函数来言,总是会有那么几个固定不变的变量需要求算,但是由于时间原因现在我不能改进我的程序,希望作业之后,自己可以改进。
通用变量如下:
3.2.ListMenu()函数
(a)main()函数
小贴士:cai()引出年级选择目录;
小贴士:system(“cls”)函数是用来当闯关结束后把屏幕上的东西清掉,就是起清屏作用,使整体的体验更好点。
小贴士:system("pause"),屏幕会出现提示词“按任意键关闭此窗口”
3.3子函数功能介绍及截图
(a)闯关函数目录介绍:
一年级:
G1L1(); //整十数加一位数或整十数加整十数(一年级lever1)
G1L2(); //整十数加一百以内的数(一年级lever2)
G1L3(); //三个数十以内的混合运算(一年级lever3)
upgrade1(); //一百以内连加连减混合运算;(升级版)
二年级:
G2L1(); //1~9的乘除法运算(二年级lever1)
G2L2(); //1~9的乘法运算(二年级lever2)
G2L3(); //整百数加减整十数(二年级lever3)
upgrade2(); //取余(升级版)
三年级:
G3L1();//十以内除法加法的混合运算(三年级lever1)
G3L2();//三位数相加减(三年级lever2)
G3L3();//两位数相乘(三年级lever3)
upgrade3();//两位数除一位数,有余数(升级版)
(b)辅助功能函数介绍:
showone(); //年级选择菜单;
showtwo(); //闯关目录;
Op(); //随机生成不同的运算符;
praise2(); //随机生成不同奖励的话;
praise1(); //告诉级别;
digit(); //随机生成不同范围类型的数;
procrdure1(); //对于两个数的四则运算,通用的过程;
procedure2(); //对于三个数的四则运算,通用的过程;
3.3.1辅助功能函数截图
(1)showone();
(2)showtwo();
(3)Op();
(4)praise1()
(5)praise2()
(6)fact()
(7)digit()
- 小贴士:由于每次使至少两个随机数的运算,所以我如果要把随机生成的数的范围放到一个函数里,那么只能通过同一范围的数的变形,来得到在一个函数里,生成两个同一范围的不同两个数。
(8)proceduer1()
- 小贴士:这个使对两个随机数进行运算的通用部分。
(9)procedure2()
- 相比较与procedure1(),它多传入了值和运算符,并且,进行peocedure2()的,都是boss级别,这时,里面还会多嵌套一个升级版boss级别,当小朋友的分数是满分时,可以选择做或不做。
3.3.2闯关函数截图
(1)G1()
(2)G2()
- 小贴士:G3与上述类似。
(3)G1L1()
- 小贴士:对于每一个年级的小兵级别,都是两个随机数之间的运算,所以内容和上述相似。
(4)upgrade1()
- 小贴士:这是一年级的升级版大boss,对于二年级和三年级的升级版,因为题型不同,则是另设一个函数,不在procedure2()里。
(5)upgrade3()
- 小贴士:因为二年级和三年级的升级版大boss是求余,于是它们的函数另外写,就不与procedure1()和procedure2()混合。但是它们是也要经过procedure1()。
(6)总结
procedure1():G1L1(),G1L2(),G2L1(),G2L2(),G2L3(),G3L2(),G3L3(),G3L2(),
upgrade3(),upgrade2()
procedure2():G1L3(),upgrade1(),G3L1(),
4.运行结果截图,测试用例。
在这里,选的都是其中明显与其它不同的部分,没选出来的都是与选出来的相似的,具体会在下面说明。
1.G1L1
- 如果中途退出:
- 小贴士:其它年级的小兵级别于此是差不多的界面。
2.upgrade1()
- 小贴士:如果进入到一年及升级版boss级,则会出现提示,进入后,页面会被清空,进行测试,如果不想继续测试,则第二数输入0,然后回出现提示,是否继续通关,跳回年级界面。
4.upergrade3()
- 在这个关卡,如果得到满分,则会出现友情提示,是体验升级版大boss,设置这个关卡的时候,我花的时间是最多的,因为我一直进不去upgrade3(),后来我在那边一直改getchar()的位置,发现还是不行,结果往上面变量定义那边看,发现自己变量定义类型出错了,所以这件事情告诉我们,出一点错就要花很长的时间去找错。
进入升级版大boss后,界面如下
5.调试过程中遇到得问题及解决办法
- Q1:在进行提醒语句时,比如你是否继续闯关,要输入一个字符,一开始不知道,于是一直进入不了那个条件,后来请教学长,发现输入字符后得那个回车被当作字符吸收掉了,于是与之进不去。
- Q2:我现在才知道,当一段代码长到无法想笑时,只要有一点的错误,就可能得大动干戈,即使我使用得了很多函数,但是一旦错了也是非常不容易改的,只能一步一步调试,然后一步一步改,真心不容易。
- Q3:由于时间得限制,我还不能将我的程序进行进一步得完善,比如由于小学生没有负数,于是如果将值进行限制,那么在运行我的程序时,就会发现卡壳现象,被卡在那里了,这给人得体验式非常不好的,就像我们平时用手机一样。这部分我还不知道如何进行完善,之后将会请教学姐学长进行改正。
C博客作业03——函数的更多相关文章
- C博客作业03—函数
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 知道了程序的模块化设计可使程序结构清晰,简化复杂问题,解决代码重复问题 学会使用自定义函数简化主函数,使代码 ...
- DS博客作业03——栈和队列
1.本周学习总结 谈谈你对栈和队列结构的认识及学习体会. 栈和队列的本质就是线性表.所以,相应的栈跟队列都有两种存储结构:顺序存储结构.链式存储结构. 栈的特点是后进先出,根据栈时进时出的规则,出栈的 ...
- DS博客作业03—栈和队列
1.本周学习总结 本周学习了栈和队列两种数据结构,分别对应后进先出,先进先出两种数据操作 学会栈的特殊类型-共享栈,队列的特殊类型-循环队列的一系列操作 学会熟练使用栈和队列的STL容器,使代码简洁 ...
- C语言I博客作业03
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8717 我在这个课程的目 ...
- C语言1博客作业03
这个作业属于哪个课程 C语言程序设计1 这个作业要求在哪里 (https://edu.cnblogs.com) 我在这个课程的目标是 掌握函数运算 我在这个作业哪个具体方面帮助实现目标 编译一些基本生 ...
- c语言l博客作业03
问题 答案 这个作业属于哪个课程 c语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/8727 我在这 ...
- C语言I 博客作业03
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 作业要求 我在这个课程的目标是 掌握关系运算.if-else语句.格式化输入语句scanf(),以及常用的数学库函数 这个作业在那个具体方 ...
- C语言Ⅰ博客作业03
一. 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/8718 我在这个课 ...
- xc语言l博客作业03
问题 答案 这个作业属于那个课程 c语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/8719 我在 ...
随机推荐
- C# 获取目录路径
Console.WriteLine(System.Windows.Forms.Application.StartupPath);//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称.(Wi ...
- Go defer 会有性能损耗,尽量不要用?
上个月在 @polaris @轩脉刃 的全栈技术群里看到一个小伙伴问 “说 defer 在栈退出时执行,会有性能损耗,尽量不要用,这个怎么解?”. 恰好前段时间写了一篇 <深入理解 Go def ...
- 关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!
例如:一个页面有一个按钮,点击的时候用ajax去后台获取数据,获取成功以后返回.下次再点击的时候就不要去获取数据了. 解决办法有很多: 1.用Get方法去读数据,会缓存. 2.用jquery的data ...
- 你需要知道的 5 个 Linux 新手会犯的失误
Linux 爱好者们分享了他们犯下的一些最大错误. 终身学习是明智的 —— 它可以让你的思维敏捷,让你在就业市场上更具竞争力.但是有些技能比其他技能更难学,尤其是那些小菜鸟错误,当你尝试修复它们时可能 ...
- Spring源码——IOC控制反转
1.基础知识 Spring有两个核心功能,分别是ioc和aop,其中ioc是控制反转,aop是切面编程. 在ioc中,还有一个名次叫DI,也就是依赖注入.嗯,好像IOC和DI是指同一个,好像又感觉他俩 ...
- Oracle 逻辑存储结构
一.总述 逻辑存储结构是 Oracle 数据库存储结构的核心内容,对 Oracle 数据库的所有操作都会涉及逻辑存储结构.逻辑存储结构是从逻辑的角度分析数据库的组成,是对数据存储结构在逻辑概念上的划分 ...
- 在Spring中使用AspectJ实现AOP
在Spring中,最常用的AOP框架是AspectJ,使用AspectJ实现AOP有2种方式: 基于XML的声明式AspectJ 基于注解的声明式AspectJ 基于XML的声明式AspectJ 1. ...
- 下载Spring
下载Spring Spring官网并不直接提供Spring的下载,Spring现在托管在GitHub上. 1.进入Spring官网 -> PROJECTS -> SPRING FRAMEW ...
- C#数字千分位
C#中把数字转换成带两位小数的千分位字符 如1234567.891变成1,234,567.89 方法:String.Format("{0:N}",1234567.891); / ...
- 【DATAGUARD】物理dg配置客户端无缝切换 (八.2)--Fast-Start Failover 的配置
[DATAGUARD]物理dg配置客户端无缝切换 (八.2)--Fast-Start Failover 的配置 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各 ...