2023-2024-1 20231419 《计算机基础与程序设计》第八周学习总结
作业信息
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP |
---|---|
这个作业要求在哪里 | https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 |
这个作业的目标 | 自学《计算机科学概论》第九章,《C语言程序设计》第七章并完成云班课测试 |
作业正文 | https://www.cnblogs.com/linziwen/p/17841852.html |
教材学习内容总结
《计算机科学概论》第九章:面向对象设计与高级程序设计语言
- 面向对象
对象:在问题背景中有意义的事物或实体。
对象类:一组类似的对象。
类中包含字段,表示类的属性;方法是处理对象中数据值的特定算法。
设计方法:头脑风暴:集体行为,生成候选类的列表->过滤->场景:给每个类分配责任,把数据和动作封装在一起->责任算法:为责任编写算法。
- 翻译过程
编译器与解释器;
字节码(Java)实现可移植性,任何具有JVM的计算机都可以运行编译过后的程序。
编译与解释的区别:编译是一次性的,直接生成可执行文件,在不同的计算机上执行;而解释是逐行地将源代码转换为目标代码并立即执行,在每次执行时都需要重新解释源代码,因此解释执行通常比编译执行慢一些。
- 范型
命令式:面向过程与对象;
声明式:函数式模型(将计算机程序看作是数学上的函数计算。函数式编程强调函数的纯粹性和不可变性,通过函数的组合和高阶函数等方式来实现程序的逻辑)与逻辑编程(基于逻辑推理的原理,程序员描述问题的逻辑关系,然后由编程语言的执行引擎自行推导出解决方案)。
- 高级程序设计语言的功能性:
-
布尔表达式:值为true或false;
-
数据类型:整数、实数、浮点数、字符、字符串、数组、布尔型;
-
输入、输出结构;
-
控制结构:条件语句、循环语句、跳转语句;嵌套、异步处理;
- 面向对象语言的功能性
封装、类(实例化:创建类的对象);
继承:类获取其他类的属性的机制;
多态:同一个方法调用在不同的对象上可以有不同的行为。
- 补充
面向过程与面向对象的区别:
面向对象的设计中,类对象的实现通过封装实现对用户的隐藏。
另:(From GPT)
数据和方法的关系:面向过程编程中,数据和方法是分离的,方法对数据进行操作;而面向对象编程中,数据和方法是紧密相关的,数据和方法封装在对象中。
设计思想:面向过程编程更偏向于以算法和数据结构为主要设计元素,程序的执行流程由程序员手动控制;而面向对象编程更注重于对象的抽象、封装、继承和多态等概念,程序的执行流程由对象之间的交互来控制。
可维护性和扩展性:面向对象编程更有利于代码的重用、可维护性和扩展性,因为对象的封装和多态性使得代码更加灵活和可扩展。
《C语言程序设计》第七章:函数与模块化程序设计
- 模块化程序设计
分而治之的思想:功能分解->自顶向下、逐步求精;
信息隐藏;
C结构:文件->函数->变量、操作;
- 函数(程序的基本模块)
- 标准库函数与自定义函数:
返回值类型 函数名(形参类型及名称) <- 函数头部
花括号为定界符,中间是函数体。
- 调用:
主调函数和被调函数;
调用方法:将实参的值复制给形参(参数传递);
函数原型声明;
- 函数封装与健壮性:
设计原则:规模小、功能单一、一个入口一个出口;不轻易改变接口。
尽量不用全局变量。
- 递归函数:
一般情况->递归持续进行;基线情况->结束递归;
- 变量的作用域与生存期:
- 变量的作用域:
语句块的概念;
全局变量:作用域为整个程序;
局部变量:作用域为该语句块;
- 变量的生存期:
自动变量(与语句块共存亡);静态变量(与程序共存亡,相当于保留记忆);外部变量;寄存器变量;
- 补充
模块化程序:
分解模块的原则:高聚合、低耦合。“逐步求精”
多文件编程:头文件->系统自带、自定义;
遇到的问题及解决措施
- 分不清迭代和递归的区别
通过询问GPT和自己查,知道了迭代和递归都是循环的一种,但它们的程序结构不同:
迭代是函数内某段代码循环,并保存变量作为下一次循环的初始值;
递归是指函数调用自己,但要进行现场保护、参数传递,所以时空效率低;
二者关系及选择:
能够迭代的一般都能递归实现,但反之不成立。能用迭代就尽量用迭代。
- 不知道全局变量和静态变量的区别:
GPT回答:在于作用域和生存周期。全局变量的作用域是整个程序,静态变量的作用域是定义它的函数或文件。全局变量在程序开始时创建,在程序结束时销毁,而静态变量在程序运行时创建,在程序结束时销毁。此外,静态变量只能在定义它的函数或文件中访问,而全局变量可以在整个程序中访问。
- 使用scanf的返回值时出现一些问题:
如果scanf里只有字符型或者只有整型都是正确的,但一旦同时有了字符型和整型(形如%d%c%d或者%c%d),程序就反应不出来返回值是多少了。(但赋值仍然是正确的)
我理解为同时加这两种就是不行的,以后编程序应该避免这种情况出现。
错题收集
解析:参数是子程序名称旁边括号中列出的标识符。这句话是对的。
解析:在引号内的字母被称为字符串。在计算机编程中,字符串是由一串字符组成的数据类型,通常用来表示文本。在C语言中,字符串通常用双引号括起来。因此,这句话是对的。
学习进度条
重要成长 | 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 0 | 1/2 | 12/12 |
第二周 | 20 | 1/3 | 12/24 |
第三周 | 30 | 1/4 | 12/36 |
第四周 | 80 | 1/5 | 24/60 |
第五周 | 120 | 1/6 | 30/90 |
第六周 | 200 | 1/7 | 30/120 |
第七周 | 280 | 1/8 | 20/140 |
第八周 | 600 | 1/9 | 30/170 |