2024-2025-1 学号20241315《计算机基础与程序设计》第八周学习总结
作业信息
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | <作业要求的链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 |
这个作业目标 | 功能设计与面向对象设计 面向对象设计过程 面向对象语言三要素 汇编、编译、解释、执行 |
作业正文 | https://www.cnblogs.com/tanzitian11/p/18549754 |
教材学习内容总结
《计算机科学概论(第七版)》第9章
程序设计语言范型:
命令式范型:
面向过程:以过程为中心,将程序看作一系列按顺序执行的步骤,注重解决问题的具体流程。
面向对象:以对象为基础,把现实世界中的事物抽象成对象,通过对象之间的交互来解决问题。对象包含数据(属性)和操作数据的方法(行为),具有封装、继承、多态等特性。
声明式范型:
函数式模型:强调使用函数来进行计算和编程,函数被视为一等公民,可以作为参数传递、返回值或存储在数据结构中。函数式编程避免了可变状态和副作用,注重函数的组合和变换。
逻辑编程:基于逻辑推理的编程范式,程序由一系列逻辑规则和事实组成,通过逻辑推理引擎来求解问题。
高级程序设计语言的功能性:
布尔表达式:用于表示逻辑条件,是程序中进行条件判断和控制流程的基础。
数据归类:涉及到数据的类型和分类,不同的数据类型有不同的操作和存储方式,程序设计语言需要提供相应的数据类型来支持对各种数据的处理。
输入/输出结构:程序与外部世界进行交互的方式,包括从用户获取输入和向用户输出结果,以及与文件、网络等外部设备进行数据交换。
控制结构:用于控制程序的执行流程,如顺序结构、选择结构(如 if 语句)、循环结构(如 for 循环、while 循环)等。
面向对象语言的功能性:
封装:将数据和操作数据的方法封装在一个类中,对外隐藏内部的实现细节,只提供公共的接口供外部访问,提高了代码的安全性和可维护性。
类:是对象的模板或蓝图,定义了对象的属性和方法,通过类可以创建多个具有相同属性和行为的对象。
继承:子类可以继承父类的属性和方法,并可以在此基础上进行扩展和修改,实现了代码的复用和扩展。
多态:不同类的对象可以对同一消息做出不同的响应,增加了程序的灵活性和可扩展性。
过程设计与面向对象设计的区别:
过程设计:侧重于解决问题的具体步骤和过程,将问题分解为一系列的函数或过程,通过函数的调用来实现程序的功能。
面向对象设计:更关注问题中的对象及其相互关系,将问题域中的实体抽象成对象,通过对象之间的消息传递和协作来解决问题。
在《C语言程序设计》第7章内容总结
数组的定义和声明
一维数组:介绍一维数组的基本语法。例如,int arr[5]
; 定义了一个名为 arr 的整型数组,它可以存储5个整数。数组的下标从0开始,所以可以通过 arr[0]、arr[1]等访问数组中的元素。
二维数组:int matrix[3][4]; 定义了一个3行4列的二维整型数组。它在内存中是按行存储的,访问元素时使用双下标形式,如 matrix[1][2] 表示访问第2行(下标从0开始)第3列的元素。
数组的初始化
一维数组初始化:可以在定义数组时进行初始化,如 int arr[3] = {1, 2, 3};
,也可以部分初始化,如 int arr[5]= {1, 2}
;,此时未初始化的元素会被自动初始化为0(对于全局数组和静态数组)或不确定的值(对于局部数组)。
二维数组初始化:例如,int matrix[2][3]={{1,2,3},{4,5,6}};
数组在内存中的存储方式
一维数组:在内存中是连续存储的,元素之间的地址是连续的。例如,对于 int arr[5];
,如果 arr 的首地址是 0x1000,那么 arr[1] 的地址可能是 0x1004(假设 int 类型占4个字节)。
二维数组:对于二维数组,它的行与行之间也是连续的。比如对于 int matrix[3][4];
,可以把它看作是一个包含3个元素的一维数组,每个元素又是一个包含4个整数的一维数组(注意:二维数组的列不可以省略)。
数组作为函数参数
当数组作为函数参数时,实际上传递的是数组的首地址。
例如
int Readscore(int score[],int n);
其中,n代表了score数组的下标
数组的长度(大小)
不同的编程语言获取数组长度的方式不同。在 C 和 C++ 中,对于一个数组int cArray[6];
,没有内置的函数来获取数组长度,但是可以通过sizeof(cArray)/sizeof(cArray[0])
来计算数组的长度(前提是数组没有发生指针衰减等情况)。
在 Java 和 JavaScript 中,可以通过属性来获取数组长度。例如在 Java 中,对于数组> int[] javaLengthArray = {17, 18, 19};
,可以使用javaLengthArray.length来获取数组的长度 3。在 JavaScript 中,对于数组let jsLengthArray = [20, 21, 22];
,可以使用jsLengthArray.length来获取长度。
三、多维数组
概念
多维数组是数组的数组。例如二维数组可以看作是一个表格,其中行和列组成了元素的位置。在 C 语言中,定义一个二维整数数组可以这样写:int twoDArray[3][4];
,这表示有一个二维数组,它有 3 行 4 列,总共可以存储 3 * 4 = 12 个整数。
二维数组的索引也是从 0 开始,twoDArray[0][0]
表示第一行第一列的元素,twoDArray[0][1]
表示第一行第二列的元素,以此类推。
存储方式和访问
二维数组在内存中也是按照一定顺序存储的。对于 C 语言中的二维数组,它是按行主序存储的,也就是说,先存储第一行的所有元素,然后再存储第二行的元素,依此类推。
访问二维数组元素的方式和访问一维数组类似,通过两个索引来定位元素。
基于AI的学习
上周考试错题总结
- 错题1
如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则A和B称为亲密数。求10000以内的亲密数。
**输出格式要求:"(%4d,%4d)\n"
#include <stdio.h>
int main()
{
int a, b, i, n;
for (a = 1; a < 10000; a++)
{
b = 0;
for (i = 1; i <= a / 2; i++)
{
if (a % i == 0)
b += i;
}
n = 0;
for (i = 1; i <= b / 2; i++)
{
if (b % i == 0)
n += i;
}
if (n == a && a < b)
printf("(%4d,%4d)\n", a, b);
}
return 0;
}
理解情况:没有很好地去理解题目的意思,没有把数学模型转换成编程语言,逻辑思维能力还是有待提高。
- 错题2
请按如下函数原型编写计算1~n之间的所有素数之和的程序。
int IsPrime(int x)
在主函数中调用该函数计算,并输出1~n之间的所有素数之和
#include<stdio.h>
#include<math.h>
int IsPrime(int x);
int main()
{
int m = 3;
int sum = 2;
int n;
scanf("%d", &n);
for (m = 3; m <= n; m++)
{
if (IsPrime(m))
{
sum += m;
}
}
printf("%d", sum);
return 0;
}
int IsPrime(int x)
{
int i, flag = 1;
int squareRoot = (int)sqrt(x);
if (x <= 1)
{
flag = 0;
}
for (i = 2; i <= squareRoot && flag; i++)
{
if (x % i == 0)
{
flag = 0;
}
}
return flag;
}
理解情况:没有很好地复习。忘了数学怎么表达。
- ...
其他
感悟:还得练。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第六周 | 200/200 | 1/2 | 20/20 | |
第七周 | 300/500 | 1/4 | 18/38 | |
第八周 | 700/1000 | 1/7 | 25/60 | |
第九周 | 0/1300 | 0/9 | 0/90 |