首页 > 编程语言 >2024-2025-1 20241305 《计算机基础与程序设计》第八周学习总结

2024-2025-1 20241305 《计算机基础与程序设计》第八周学习总结

时间:2024-11-15 22:56:38浏览次数:1  
标签:函数 面向对象 程序 模式 2024 2025 20241305 程序设计 设计模式

作业信息

这个作业属于哪个课程 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

标签:函数,面向对象,程序,模式,2024,2025,20241305,程序设计,设计模式
From: https://www.cnblogs.com/yaohang/p/18548842

相关文章

  • 2024-2025-1 20241320 《计算机基础与程序设计》第8周学习总结
    2024-2025-120241320《计算机基础与程序设计》第8周学习总结作业信息|这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08|这个作业的目标|功能设计与面向对象设计......
  • The 2024 ICPC Asia Nanjing Regional Contest
    Preface因为最近大家都有考试啥的,实在太久没训练了,只好在成都到郑州的火车上VP了一场顶着喧闹的车厢以及电脑只能放在腿上打的巨大Debuff,成功打出7题巨大罚时不过可惜的是4h后就没出题了,剩下的C,F瞪了半天是一个不会,甚至赛后看C的题解也搞不明白,只能说计数苦手是这......
  • 2024-2025 20241323 第八周学子任务总结
    这个作业属于https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01• 这个作业的目标了解功能设计与面向对象设计• 面向对象设计过程• 面向对象语言三要素• 汇编、编译、解释、执行作业正文https://......
  • 20222424 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    202224242024-2025-1《网络与系统攻防技术》实验五实验报告1.实验内容(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式该域名对应IP地址IP地址注册人及联系方式IP地址所在国家、城市和具体地理位置PS:使用whois、......
  • 2024.9 做题记录
    001.CF2002ECosmicRaysCF*2300标签:思维,栈题意:给定\(n\)个元组,\((a_i,b_i)\),表示有\(a_i\)个\(b_i\)按顺序排列在一起。一次操作可以删除以下数字:在第\(1\)个位置的数字\(s_i≠s_{i-1}\)的位置\(i\)问每个前缀最多成操作多少次。Observation:问每个前缀......
  • CSP-S 2024 赛后总结
    考炸了,真考炸了……第一题没啥可说的,就肯定满的,咋做都行,我排序贪心,10min切。第二题,似了。先看了A,B性质,发现非常好打,利用他给的公式,一平方随便判一下就做完了,因为只有最后一个检测器有用的。如果都检测不到,那干脆最后一个检测器也不用了,直接输出\(m\)。但是,C性质的写挂导致......
  • 20241115
    Talesofseafaring发现需要维护最短路为单数和双数的最短路,所以先跑个最短路,然后对于每个询问看d是单数还是双数,然后判断输出就行,注意到直接这么写然后对于每个询问再查的话空间会爆,所以就把询问记录下来对于每个点为起始跑最短路的时候直接更新答案就行。公路修建问题求最大......
  • [Moectf2024 Xor(大嘘)]
    [Moectf2024Xor(大嘘)]进入主函数输入32长度的字节sub_401100(&v7);进行加密byte_404058是加密后的密文转dwordsub_401100的加密看似很简单,但其实是错的,动态调试后就会发现到return后会跳到别的函数,追到return处的汇编就会发现有花指令这里莫名其妙就retn了,nop掉对l......
  • [Moectf2024 ezMaze]
    去壳分析:迷宫分析10*a2-10:Y(a1-1)/8:X表示按字节处理迷宫迷宫以十六进制压缩,但迷宫是80*56的二进制迷宫dump下来保存,转二进制,用bin(maze[2:]).zfill(8)脚本(bfs):fromcollectionsimportdequemaze=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1......
  • 『模拟赛』NOIP2024加赛5
    Rank反向挂分大王A.暴力操作(opt)签,但是没有人签。都想到了二分和更新c值,但是c多多少少没更到最优。首先还是调和级数预处理,倒序取min。然后考虑到超过\(m\)的也有可能产生更小的代价,因此\(\mathcal{O(n)}\)枚举一遍找到最小的\(j\)使\(i\timesj\gtm\),全部赋......