作业信息
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2024-2025-1计算机基础与程序设计第八周作业 |
这个作业的目标 | 1、功能设计与面向对象设计 2、面向对象设计过程 3、面向对象语言三要素 4、汇编、编译、解释、执行 |
作业正文 | 本博客链接 |
教材学习内容总结
《计算机科学概论》第九章内容总结
• 面向对象设计(OOD):介绍了面向对象设计的基本思想,包括类和对象的概念。类是对象的蓝图,而对象是类的实例。面向对象设计强调数据(对象)和行为(方法)的封装。
• 面向对象语言的要素:讨论了面向对象语言的三个核心要素:封装、继承和多态。封装是指将数据和操作封装在类中,继承允许新类继承现有类的属性和方法,而多态则是指允许不同类的对象对同一消息做出不同的响应。
• 程序设计语言范型:介绍了不同的程序设计范型,包括命令式范型(如面向过程和面向对象)和声明式范型(如函数式和逻辑式)。每种范型都有其特定的编程风格和解决问题的方法。
• 编译器和解释器:解释了编译器和解释器的区别,编译器将高级语言代码转换成机器码,而解释器则直接执行高级语言代码或字节码。
• 数据类型和结构:讨论了数据类型的重要性,包括基本数据类型(如整数、实数、字符和布尔型)和复合数据类型(如字符串和数组)。同时,也介绍了强类型语言和弱类型语言在数据类型处理上的差异。
• 控制结构:介绍了控制结构的重要性,包括选择结构(如if-else语句)、循环结构(如while和for循环)和子程序(函数和过程)。
• 布尔表达式和逻辑编程:探讨了布尔表达式在编程中的作用,以及逻辑编程的基本概念,包括事实、规则和询问。
• 输入/输出结构:讨论了输入/输出结构在程序设计中的重要性,以及如何在程序中实现输入和输出。
• 高级程序设计语言的功能性:强调了高级语言在设计中提供的功能,如布尔表达式、数据类型和控制结构,以及它们如何简化程序设计并提高安全性。
《C语言程序设计》第七章内容总结
函数与模块化程序设计
7.1 分而治之与信息隐藏
1、分而治之:较大任务分解成若干个较小、较简单的任务,并提炼出公用任务的方法。
2、模块化程序设计
信息隐藏
7.2 函数的定义
7.2.1 函数的分类
1、标准库函数:如printf()\scanf()
2、自定义函数
7.2.2 函数的定义
内部变量:在函数体内部定义的变量只能在函数体内访问。
形式参数:函数头部参数表里的变量。
形参表:函数的入口。
若函数没有函数返回值,则需用void定义返回值的类型。
7.3 向函数传递值和从函数返回值
7.3.1 函数调用
实际参数
主调函数
被调函数
参数传递
注:函数返回值只有一个,返回值可以是除数组以外的任何类型。
7.3.2 函数原型
例:
include <stdio.h>
// 函数功能:用迭代法计算 n!
long Fact(int n)
{
int i;
long result = 1;
for (i = 2; i <= n; i++)
{
result *= i;
}
return result;
}
int main(void)
{
int m;
long ret;
printf("Input m:");
scanf("%d", &m);
ret = Fact(m); // 调用函数 Fact(), 并将函数的返回值存入 ret
printf("%d! = %ld\n", m, ret);
return 0;
}
7.3.3函数封装与防御性程序设计
1、函数封装
2、程序的健壮性
3、防御式编程
7.3.4 函数设计的基本原则
1、规模要小
2、函数功能要单一
3、每个函数只有一个入口和一个出口
4、清楚定义函数的行为
5、参数有效性检查
6、检查合法性
7.4 函数的递归调用和递归函数
1、一般情况
2、极限情况
3、递归调用:在函数内直接或间接地自己调用自己
7.5 变量的作用域和生存期
7.5.1 变量的作用域
语句块:程序中被花括号括起来的区域
全局变量:不在任何语句块内定义的变量
局部变量:在除3整个程序以外的其他语句块内定义的变量
7.5.2 变量的生存期
存储类型:
1、自动变量:auto 类型名 变量名
2、静态变量:static 类型名 变量名
3、外部变量:extern 类型名 变量名
4、寄存器变量:register 类型名 变量名
7.6 模块化程序设计
1、基本原则:高聚合、低耦合,保证每个模块的相对独立性
2、自顶而下、逐步求精
3、模块化程序设计与多文件编程实例
4、条件编译
7.7 代码风格
1、代码行
2、对齐与缩进
3、空行及代码行内的空格
4、长行拆分
5、程序注释
教材学习中的问题和解决过程
问题一:什么是设计模式,它们为什么有用?
解答:什么是设计模式?
设计模式是在软件设计中针对常见问题的典型解决方案。它们是经过时间检验的、可重用的解决方案,可以帮助开发者在面对特定设计问题时,快速地找到合适的解决方法。
设计模式的分类:
• 创建型模式:这些模式涉及到对象的创建,目的是创建对象时使程序的结构更加灵活和可扩展。常见的创建型模式包括单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)和建造者模式(Builder)。
• 结构型模式:这些模式关注对象和类的组合,目的是使程序的结构更加清晰和合理。常见的结构型模式包括适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)和外观模式(Facade)。
• 行为型模式:这些模式涉及到对象之间的通信,目的是提高程序的灵活性和可维护性。行为型模式包括策略模式(Strategy)、状态模式(State)、观察者模式(Observer)、模板方法模式(Template Method)和命令模式(Command)。
设计模式为什么有用?
• 提高代码重用性:设计模式提供了通用的解决方案,可以在不同的项目中重用,减少重复劳动。
• 促进团队沟通:设计模式是广泛认可的,它们提供了一种共同的语言,有助于团队成员之间的沟通和理解。
• 提高代码质量:设计模式是经过实践检验的解决方案,使用它们可以提高代码的可维护性和可扩展性。
• 解决常见问题:设计模式针对的是软件开发中常见的问题,它们提供了经过验证的解决方案。
• 促进设计思想:设计模式鼓励开发者从更高层次思考问题,关注设计的抽象层面,而不是仅仅关注实现细节。
通过学习和应用设计模式,开发者可以提高自己的设计能力,编写出更加健壮、灵活和可维护的软件。
问题二:C语言里大部分的函数都需要定义,为什么有的函数可以直接用?请你举例哪些函数可以直接用
解答:在C语言中,并不是所有的函数都需要显式定义后才能使用。可以直接使用的函数通常是那些已经被标准库提供的函数,或者是编译器内置的函数。这些函数在编译时已经链接到了程序中,因此可以直接调用。以下是一些可以直接使用的函数的例子:
• 标准输入输出函数:
• printf()
:用于格式化输出到标准输出(通常是屏幕)。
• scanf()
:用于从标准输入(通常是键盘)读取格式化的数据。
• 数学函数(需要包含头文件math.h
):
• sqrt()
:计算平方根。
• pow()
:计算幂。
• sin()
,cos()
,tan()
:计算三角函数值。
• 字符串处理函数(需要包含头文件string.h
):
• strlen()
:计算字符串的长度。
• strcpy()
:复制字符串。
• strcmp()
:比较两个字符串。
• 内存分配函数(需要包含头文件stdlib.h
):
• malloc()
:分配指定大小的内存。
• calloc()
:分配内存并初始化为0。
• free()
:释放之前分配的内存。
• 时间日期函数(需要包含头文件time.h
):
• time()
:获取当前时间。
• 随机数生成函数(需要包含头文件stdlib.h
):
• rand()
:生成一个随机数。
• 类型转换函数:
• atoi()
:将字符串转换为整数。
• atof()
:将字符串转换为浮点数。
这些函数之所以可以直接使用,是因为它们的定义在相应的库文件中已经提供,而这些库文件在编译时会被链接到你的程序中。当你在程序中调用这些函数时,编译器会查找它们的定义,并在生成的可执行文件中包含这些函数的代码。
需要注意的是,即使这些函数可以直接使用,你仍然需要在程序中包含相应的头文件,以便编译器能够识别函数原型并正确地链接到这些函数的实现。例如,如果你在程序中使用了printf()
函数,你需要在程序的顶部包含#include <stdio.h>
。
基于AI的学习
代码调试中的问题和解决过程
问题一:青蛙蹦极CP1277题循环不知道用什么方式控制停或运行
解决:通过询问AI,知道Flag变量可以很好的用在此循环中完成控制(该程序较难理解)
学习进度条
计划学习时间:20h
实际学习时间:20h