2023-2024-1 20231424《计算机基础与程序设计》第15周学习总结
2023-2024-1 20231424《计算机基础与程序设计》第15周学习总结
作业信息
作业属于的课程 | (2022-2023-1-计算机基础与程序设计) |
---|---|
作业要求 | (2022-2023-1计算机基础与程序设计第一周作业) |
作业目标 | 课程总结 |
作业正文 | https://www.cnblogs.com/2004lby/p/17945963 |
作业内容
第一周作业:
简要内容:
快速浏览教材,每一章提出至少2个不明白的问题。
https://www.cnblogs.com/2004lby/p/17737703.html
自我介绍:
https://www.cnblogs.com/2004lby/p/17666179.html
第二周作业:
简要内容:
学习《计算机基础与程序设计》第一章与《C语言程序设计》第一章并完成云班课测试题
学习编程的意义
计算系统的定义及分层,计算机的历史进程
https://www.cnblogs.com/2004lby/p/17745818.html
第三周作业:
简要内容:
学习《计算机基础与程序设计》第2、3章、《C语言程序设计》第2章,并完成相关测试题。
二进制计数系统,位置计数法,二进制、八进制、十六进制与十进制的转化,计算机中不同形式的数据的表示方法
常量、变量,数据类型,变量赋值
https://www.cnblogs.com/2004lby/p/17764649.html
BASE64编码:
https://www.cnblogs.com/2004lby/p/17764764.html
第四周作业:
简要内容:
学习《计算机科学概论》第4、5章和《C语言程序设计》第三章,并完成相关测试题。
逻辑门,计算机结构,冯·诺伊曼体系结构
算术运算符和表达式,宏常量与const常量
https://www.cnblogs.com/2004lby/p/17779808.html
寻找我的黑客偶像:
https://www.cnblogs.com/2004lby/p/17768709.html
第五周作业:
简要内容:
学习《计算机科学概论》第5章和《C语言程序设计》第4章,并完成相关测试题。
机器语言、汇编语言、伪代码以及测试
字符常量及字符的输入和输出
https://www.cnblogs.com/2004lby/p/17795773.html
第六周作业:
简要内容:
学习《计算机科学概论》第七章和《C语言程序设计》第五章,并完成相关测试题。
解决问题的方法步骤,算法
关系运算符和关系表达式,条件运算符和条件表达式,逻辑运算符和逻辑表达式
https://www.cnblogs.com/2004lby/p/17808704.html
第七周作业:
简要内容:
学习《计算机科学概论》第八章和《C语言程序设计》第六章,并完成相关测试题。
抽象数据类型,栈、队列、列表、树等四种数据结构及其伪代码
计数控制循环、嵌套循环、条件控制循环,流程转移控制
https://www.cnblogs.com/2004lby/p/17824957.html
第八周作业:
简要内容:
学习《计算机科学概论》第九章和《C语言程序设计》第七章,并完成相关测试题。
面对对象方法,编译器、解释器,程序设计语言泛型,布尔表达式、数据归类、输入输出结构
函数的分类、定义、调用,变量的作用域和生存期,模块化程序设计
https://www.cnblogs.com/2004lby/p/17841512.html
第九周作业:
简要内容:
学习《计算机科学概论》第10、11章和《C语言程序设计》第8章,并完成相关测试题。
操作系统,内存管理的三种方式,CPU调度,文件系统,文件,目录,磁盘调度
数组,二维数组,向函数传递数组,数组的排序,数组元素的查找
https://www.cnblogs.com/2004lby/p/17856039.html
第十周作业:
简要内容:
学习《计算机科学概论》第12,13,14章和《C语言程序设计》第9章。
信息系统,电子制表软件,数据库及数据库管理系统,关系模型和结构化查询语言
人工智能AI,图灵测试
模拟和模型,计算机游戏的介绍
指针变量,间接寻址运算符,指针变量做函数参数,函数指针
https://www.cnblogs.com/2004lby/p/17870853.html
第十一周作业:
简要内容:
学习《计算机科学概论》第15,16章,《C语言程序设计》第10章。
计算机网络,开放式系统和网络协议,网络的地址超文本传输语言,交互式网页
字符串,字符串指针,向函数传递字符串,函数返回字符串指针
https://www.cnblogs.com/2004lby/p/17890714.html
第十二周作业:
简要内容:
学习《C语言程序设计》第11章。
指针数组,数组指针,动态数组,动态内存分配
https://www.cnblogs.com/2004lby/p/17904665.html
第十三周作业:
简要内容:
学习《C语言程序设计》第十二章。
结构体,共用体,枚举数据类型,动态数据结构
https://www.cnblogs.com/2004lby/p/17922786.html
第十四周作业:
简要内容:
学习《C语言程序设计》第十三章。
文本文件和二进制文件,文件打开关闭,文件读写
https://www.cnblogs.com/2004lby/p/17937641
实验内容
实验一:Linux基础命令实践实验目的与要,通过熟悉操作系统基本命令,学会操作系统的使用。
内容>
实验二:理解分支结构和循环结构程序设计方法;掌握实现分支结构和循环结构控制语句的使用方法;掌握随机函数的使用方法。
内容:
#include<stdlib.h>
#include<time.h>
int main()
{
int num1,num2,x,y;
int score;
int i=0;
do
{
score=0;
do
{
srand(time(NULL));
num1=rand()%10+1;
num2=rand()%10+1;
x=rand()%4+1;
y=rand()%4+1;
char n[4]= {'+','*','/','-'};
int d=rand()%4;
char fu=n[d];
printf("%d%c%d=",num1,fu,num2);
int a;
if(fu=='+')
{
a=num1+num2;
}
else if(fu=='-')
{
a=num1-num2;
}
else if(fu=='*')
{
a=num1*num2;
}
else if(fu=='/')
{
a=num1/num2;
}
int sum;
scanf("%d",&sum);
if(sum==a)
{
score+=10;
switch(x)
{
case 1:
printf("Very good!\n");
break;
case 2:
printf("Excellent!\n");
break;
case 3:
printf("Nice work!\n");
break;
case 4:
printf("Keep up the good work!\n");
break;
}
}
else
{
switch(y)
{
case 1:
printf("No.Please try again\n");
break;
case 2:
printf("Wrong.Try once more\n");
break;
case 3:
printf("Don't give up!\n");
break;
case 4:
printf("Not correct.Keep trying!\n");
break;
}
}
i++;
}
while(i<10);
printf("score=%d%%\n",score);
}
while(score<=75);
return 0;
}
实验三:考试
实验四:熟悉程序开发平台。掌握C语言程序的程序开发过程,熟悉C语言程序在华为鲲鹏平台下的编译、运行。
内容:
#include <stdio.h>
#include <stdlib.h>
void A(float score[], long num[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("input student number:");
scanf("%ld", &num[i]);
printf("input the score:");
scanf("%f", &score[i]);
}
}
void B(int n, float score[])
{
int i;
float total = 0, ave;
for (i = 0; i < n; i++)
{
total = total + score[i];
}
printf("total=%f\n", total);
ave = total / (float)n;
printf("ave= %f\n", ave);
}
void C(float score[], long num[], int n)
{
int i, j, temp_num;
float temp_score;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (score[j] < score[j + 1])
{
temp_score = score[j];
score[j] = score[j + 1];
score[j + 1] = temp_score;
temp_num = num[j];
num[j] = num[j + 1];
num[j + 1] = temp_num;
}
}
}
for (i = 0; i < n; i++)
{
printf("%ld %f\n", num[i], score[i]);
}
}
void D(float score[], long num[], int n)
{
int i, j, temp_num;
float temp_score;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (num[j] > num[j + 1])
{
temp_score = score[j];
score[j] = score[j + 1];
score[j + 1] = temp_score;
temp_num = num[j];
num[j] = num[j + 1];
num[j + 1] = temp_num;
}
}
}
for (i = 0; i < n; i++)
{
printf("%ld %f\n", num[i], score[i]);
}
}
void E(float score[], long num[], int n)
{
long target;
int i;
printf("please input number:");
scanf("%ld", &target);
for (i = 0; i < n; i++)
{
if (target == num[i])
{
printf("%ld %f\n", num[i], score[i]);
return;
}
}
printf("Not found\n");
}
void F(float score[], int n)
{
int i, a = 0, b = 0, c = 0, d = 0, e = 0;
float A, B, C, D, E;
for (i = 0; i < n; i++)
{
if (score[i] >= 90)
a++;
else if (score[i] >= 80)
b++;
else if (score[i] >= 70)
c++;
else if (score[i] >= 60)
d++;
else
e++;
}
printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e);
A = ((float)a / n)*100;
B = ((float)b / n)*100;
C = ((float)c / n)*100;
D = ((float)d / n)*100;
E = ((float)e / n)*100;
printf("A=%f\n", A);
printf("B=%f\n", B);
printf("C=%f\n", C);
printf("D=%f\n", D);
printf("E=%f\n", E);
}
void G(float score[], long num[], int n)
{
int i;
float total = 0, ave;
for (i = 0; i < n; i++)
{
total = total + score[i];
}
ave = total / (float)n;
for (i = 0; i < n; i++)
{
printf("%ld %f\n", num[i], score[i]);
}
printf("total=%f\n", total);
printf("ave=%f\n", ave);
}
int main()
{
int n, m;
printf("please input the number of students:");
scanf("%d", &n);
long num[n];
float score[n];
do
{
printf("(1) Append record\n");
printf("(2) Calculate total and average score of course\n");
printf("(3) Sort in descending order by score\n");
printf("(4) Sort in ascending order by number\n");
printf("(5) Search by number\n");
printf("(6) Statistic analysis\n");
printf("(7) List record\n");
printf("(8) Exit\n");
scanf("%d", &m);
switch (m)
{
case 1:
A(score, num, n);
break;
case 2:
B(n, score);
break;
case 3:
C(score, num, n);
break;
case 4:
D(score, num, n);
break;
case 5:
E(score, num, n);
break;
case 6:
F(score, n);
break;
case 7:
G(score, num, n);
break;
}
} while (m != 8);
return 0;
}
实验五:考试
实验六:掌握文件的打开、读、写及关闭操作;掌握结构体的使用方法;文件可以是文本文件,也可以是二进制文件,注意选择正确的读写函数
内容:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 40
typedef struct student
{
long studentID;
char name[10];
float score[3];
} STUDENT;
void inputscore(STUDENT stu[], int n);
void sum_avescore(STUDENT stu[], float ave[], float sum[], int n);
void sort_score(STUDENT stu[], float sum[], int n);
void sort_name(STUDENT stu[], int n);
void search_name(STUDENT stu[], int n);
void write_to_file(STUDENT stu[], float ave[], float sum[], int n);
void read_from_file(STUDENT stu[], float ave[], float sum[], int n);
int main()
{
STUDENT stu[N];
float ave[N];
float sum[N];
int n;
int ch;
printf("How many students?\n");
scanf("%d", &n);
getchar();
printf("\n1. Append record\n");
printf("2. Calculate total and average score of every student\n");
printf("3. Sort in ascending order by total score of every student\n");
printf("4. Sort in dictionary order by name\n");
printf("5. Search by name\n");
printf("6. Write to a file\n");
printf("7. Read from a file\n");
printf("0. Exit\n");
do
{
printf("Please enter your choice:");
scanf("%d", &ch);
switch (ch)
{
case 1:
inputscore(stu, n);
break;
case 2:
sum_avescore(stu, ave, sum, n);
break;
case 3:
sort_score(stu, sum, n);
break;
case 4:
sort_name(stu, n);
break;
case 5:
search_name(stu, n);
break;
case 6:
write_to_file(stu, ave, sum, n);
break;
case 7:
read_from_file(stu, ave, sum, n);
break;
case 0:
return 0;
}
} while (1);
return 0;
}
void inputscore(STUDENT stu[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("Input record for student %d.\n", i + 1);
printf("Student ID: ");
scanf("%ld", &stu[i].studentID);
getchar();
printf("Name: ");
fgets(stu[i].name, sizeof(stu[i].name), stdin);
stu[i].name[strcspn(stu[i].name, "\n")] = 0;
printf("MT=");
scanf("%f", &stu[i].score[0]);
printf("EN=");
scanf("%f", &stu[i].score[1]);
printf("PH=");
scanf("%f", &stu[i].score[2]);
}
}
void sum_avescore(STUDENT stu[], float ave[], float sum[], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
sum[i] = 0;
for (j = 0; j < 3; j++)
{
sum[i] += stu[i].score[j];
}
ave[i] = sum[i] / 3;
printf("Student %s: sum = %.1f, average = %.1f\n",
stu[i].name, sum[i], ave[i]);
}
}
void sort_score(STUDENT stu[], float sum[], int n)
{
int i, j;
float temp;
char temp_name[10];
long tem;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (sum[i] > sum[j])
{
temp = sum[i];
sum[i] = sum[j];
sum[j] = temp;
strcpy(temp_name, stu[i].name);
strcpy(stu[i].name, stu[j].name);
strcpy(stu[j].name, temp_name);
tem=stu[i].studentID;
stu[i].studentID=stu[j].studentID;
stu[j].studentID=tem;
}
}
}
printf("Sort by total score in ascending order:\n");
for (i = 0; i < n; i++)
{
printf("%s: %.1f\n", stu[i].name, sum[i]);
}
}
void sort_name(STUDENT stu[], int n)
{
int i, j, k;
STUDENT temp;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(stu[j].name, stu[i].name) < 0)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
printf("Sort by name in dictionary order:\n");
for (i = 0; i < n; i++)
{
printf("%ld\t%s\tMT=%.1f\tEN=%.1f\tPH=%.1f\n",
stu[i].studentID, stu[i].name,
stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}
void search_name(STUDENT stu[], int n)
{
int i;
char name[10];
printf("please input the name:");
scanf("%s", name);
for (i = 0; i < n; i++)
{
if (strcmp(name, stu[i].name) == 0)
{
printf("ID:%ld\n", stu[i].studentID);
printf("name:%s\n", stu[i].name);
printf("MT=%.1f\n", stu[i].score[0]);
printf("EN=%.1f\n", stu[i].score[1]);
printf("PH=%.1f\n", stu[i].score[2]);
}
}
}
void write_to_file(STUDENT stu[], float ave[], float sum[], int n)
{
FILE *fp;
int i;
if ((fp = fopen("information.txt", "w")) == NULL)
{
printf("Failure to open information.txt!\n");
exit(0);
}
for (i = 0; i < n; i++)
{
fprintf(fp, "%10ld%8s %.1f %.1f %.1f ave=%.1f sum=%.1f\n", stu[i].studentID,
stu[i].name,
stu[i].score[0],
stu[i].score[1],
stu[i].score[2],
ave[i], sum[i]);
}
fclose(fp);
}
void read_from_file(STUDENT stu[], float ave[], float sum[], int n)
{
FILE fp;
int i,j;
if ((fp = fopen("information.txt", "r")) == NULL)
{
printf("Failure to open information.txt!\n");
exit(0);
}
for (i = 0; i < *n; i++)
{
fscanf(fp, "%ld%8s%f%f%f ave=%f sum=%f", &stu[i].studentID,
stu[i].name,
&stu[i].score[0],
&stu[i].score[1],
&stu[i].score[2],
&ave[i],&sum[i]);
}
fclose(fp);
printf("Read from file successfully!\n");
STUDENT temp;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (stu[i].studentID>stu[j].studentID)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
for (i = 0; i < n; i++)
{
printf("%ld\t%s\tMT=%.1f\tEN=%.1f\tPH=%.1f ",stu[i].studentID,
stu[i].name,
stu[i].score[0],
stu[i].score[1],
stu[i].score[2]);
printf("ave=%.2f ",ave[i]);
printf("sum=%.2f\n",sum[i]);
}
}
实验七:学习缓冲区溢出的原理和防范,并进行实际操作
内容:点击
实验八:Web部署,基于LAMP部署wordpress
内容:点击
问题回答
1.二进制、八进制、十六进制有什么不同的应用吗?
二进制如今主要用在电子技术的数字电路中。比如我们经常使用的计算机能够识别的语言就是二进制语言。数字电路中的高、低电平;导通、截止;开、关;有、无;真、假等等都是二进制表示,二进制的逻辑电路使用0和1表示。
八进制和十六进制在现实主要用在电子技术、计算机编程等领域,这是为了配合二进制而使用的。
十进制主要在日常生活中,而二进制、八进制、十六进制主要用在电子技术行业。二进制是数字电路、处理器等最直接的语言;八进制以及十六进制都是进行存储记忆,但八进制较少使用。十六进制用来表示处理器里的寄存器、存储器的地址、数据。
2.并行计算的优缺点?
并行计算有助于提高 CPU 利用率并提高性能,因为多个处理器同时工作。 此外,一个 CPU 的故障不会影响其他 CPU 的功能。但是由于通信和协调的复杂性,并行解决方案更难实现、调试和证明正确性,而且它们的性能通常比串行解决方案差。
3.单核处理器的优缺点?
成本低 ,耗电量高,运行速度慢。
4.立即寻址模式和直接寻址模式有什么区别?
操作数就在指令中,紧跟在操作码后面,作为指令一部分存放在内存的代码段中,该操作数为立即数,这种寻址方式称为立即寻址方式。
存储单元的有效地址(即:操作数的有效地址)直接由指令给出为直接寻址模式。
5.单块内存管理,分区内存管理,页式内存管理的优缺点是什么?
单块内存管理:
优点:简单、易于实现和管理。
缺点:无法有效利用内存空间,容易出现内存碎片(内存被分成多个小块,但这些小块之间的空隙无法被合并利用),导致内存利用率低下。
分区内存管理:
优点:能够有效利用内存空间,减少内存碎片的产生。
缺点:分配和回收内存的开销较大,需要维护分区表或位图来跟踪内存的使用情况,容易产生外部碎片(内存块之间的空隙)。
页式内存管理:
优点:实现了虚拟内存的概念,将物理内存划分为固定大小的页面,可以更灵活地管理内存,提供了更高的内存利用率。
缺点:需要额外的页表来进行地址映射,增加了内存访问的开销;可能会出现内部碎片(一个页面中只有部分被使用)。
6.顺序文件访问和直接文件访问分别有什么优缺点
顺序文件访问:
优点:
简单、易于实现和管理。
适用于对文件进行顺序读取和写入的场景,效率较高。
占用的存储空间相对较小,文件结构简单。
缺点:
难以进行随机访问,如果需要在文件中查找或修改某个特定的记录,需要从文件开头开始逐条读取,效率较低。
删除或插入记录时,可能需要进行大量的数据移动。
直接文件访问(或称为索引文件访问):
优点:
允许随机访问,可以快速定位和读取特定记录。
插入和删除记录相对容易,不需要移动大量数据。
适用于需要频繁更新和查询特定记录的场景。
缺点:
需要维护额外的索引结构,占用更多的存储空间。
相对复杂,需要更多的处理逻辑和算法。
对于顺序读取和写入,效率较低。
7.什么是数据库?什么是数据库管理系统?二者的区别是什么?
数据库是一个有组织的数据存储系统,用于存储、管理和检索数据。它可以被看作是一个类似文件夹的容器,其中可以包含多个表,每个表又包括多个行和列,用来存储不同类型的数据。
数据库管理系统(DBMS)是一种软件系统,用于创建、维护和操作数据库。它提供了一系列工具和功能,包括数据定义语言(DDL)、数据操作语言(DML)、查询语言(QL)等,可以让用户方便地管理和操作数据库。
二者的区别在于,数据库是一种存储和管理数据的系统,而数据库管理系统则是一种为数据库提供管理和操作的软件系统。数据库管理系统是一个更加复杂的系统,它需要提供更多的功能和工具,如安全性、并发控制、备份和恢复等。数据库管理系统的主要目标是为用户提供一个方便、安全、可靠的数据管理环境,使用户可以轻松地存储、查询和分析数据,同时确保数据的完整性和一致性。而数据库本身则是由若干个表组成的数据集合,为数据库管理系统提供了存储和管理数据的基础。
课程收获与不足
我对《计算机科学概论》这本书的学习自我感觉不是很充分,感到书里的内容比较枯燥,所以没用真正用心去钻研,只是将每章内容看一遍,完成作业而已,并没有深入学习其中的知识,有一些前面学到的知识我也忘记了许多,记忆也不牢固,这是我需要改进的地方。
问卷调查
1.你平均每周投入到本课程多长时间?
3小时
2.每周的学习效率有提高吗?
没有明显的感觉到提升
3.学习效果自己满意吗?
一般般,第一次接触这门课程,很多知识点掌握并不扎实
4.课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
我希望我能够将每周写博客记录心得的习惯保持下来,我也会尽力做到一周写一次博客的。
5.你觉得这门课老师应该继续做哪一件事情?
多推荐一些适合信息安全专业同学阅读的书目
6.你觉得这门课老师应该停止做哪一件事情?
讲课速度可能有点快,开始学习的时候不太能跟上
7.你觉得这门课老师应该开始做什么新的事情?
每周搜集同学们在这门课程学习时的困难和问题,并进行统一解答