2023-2024-1 20231405 《计算机基础与程序设计》 第十五周学习总结
作业信息
作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP |
作业要求在哪里 | https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13009 |
作业的目标 | 课程总结 |
作业正文 |
https://www.cnblogs.com/dzxdzx1231234/p/17948828 |
作业内容
第一周
目标:
课程概论,工业革命与浪潮之巅,信息与信息安全,计算机系统概论,计算机安全,计算的限制,计算思维
学习任务:
快速浏览一遍教材计算机科学概论,课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题
https://www.cnblogs.com/dzxdzx1231234/p/17738715.html
无穷的技艺
https://www.cnblogs.com/dzxdzx1231234/p/17744336.html
第二周
目标:
数字化,信息安全
学习任务:
计算机科学概论第1章并完成云班课测试
《C语言程序设计》第1章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17746025.html
师生关系
https://www.cnblogs.com/dzxdzx1231234/p/17762206.html
BASE64编码
https://www.cnblogs.com/dzxdzx1231234/p/17764521.html
https://www.cnblogs.com/dzxdzx1231234/p/17765460.html
第三周
目标:
数字分类与计数法,位置计数法,进制转换,模拟数据与数字数据,压缩与解压,数字化,信息安全
学习任务:
计算机科学概论第2章,第3章并完成云班课测试
《C语言程序设计》第2章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17765535.html
寻找你的黑客偶像
https://www.cnblogs.com/dzxdzx1231234/p/17779090.html
罗马数字转阿拉伯数字
https://www.cnblogs.com/dzxdzx1231234/p/17779333.html
第四周
目标:
门电路,组合电路,逻辑电路,冯诺依曼结构,CPU,内存,IO管理,嵌入式系统,并行结构,物理安全
学习任务:
计算机科学概论第4章,第5章 并完成云班课测试
《C语言程序设计》第3章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17780900.html
第五周
目标:
Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白盒
学习任务:
计算机科学概论第6章 并完成云班课测试
《C语言程序设计》第4章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17793635.html
第六周
目标:
Polya如何解决问题,简单类型与组合类型,复合数据结构,查找与排序算法,算法复杂度,递归,代码安全
学习任务:
计算机科学概论第7章 并完成云班课测试
《C语言程序设计》第5章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17810580.html
第七周
目标:
数组与链表,基于数组和基于链表实现数据结构,无序表与有序表,树,图,子程序与参数
学习任务:
计算机科学概论第8章 并完成云班课测试
《C语言程序设计》第6章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17826561.html
第八周
目标:
功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行
学习任务:
计算机科学概论第9章 并完成云班课测试
《C语言程序设计》第7章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17841447.html
第九周
目标:
操作系统责任,内存与进程管理,分时系统,CPU调度,文件、文件系统,文件保护,磁盘调度
学习任务:
计算机科学概论第10,11章 并完成云班课测试
《C语言程序设计》第8章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17857577.html
第十周
目标:
信息系统,数据库与SQL,人工智能与专家系统,人工神经网络,模拟与离散事件,排队系统,天气与地震模型,图形图像
学习任务:
计算机科学概论第12,13,14章 并完成云班课测试
《C语言程序设计》第9章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17872469.html
第十一周
目标:
计算机网络,网络拓扑,云计算,网络安全,Web,HTML,CSS,Javascript,XML
学习任务:
计算机科学概论第15,16章 并完成云班课测试
《C语言程序设计》第10章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17891388.html
第十二周
学习任务:
《C语言程序设计》第11章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17904252.html
keepass口令管理实践
https://www.cnblogs.com/dzxdzx1231234/p/17922836.html
第十三周
学习任务:
《C语言程序设计》第12章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17924156.html
第十四周
学习任务:
《C语言程序设计》第13章并完成云班课测试
https://www.cnblogs.com/dzxdzx1231234/p/17937240
实验
实验一:Linux基础命令实践实验目的与要,通过熟悉操作系统基本命令,学会操作系统的使用。
内容>
实验二:理解分支结构和循环结构程序设计方法;掌握实现分支结构和循环结构控制语句的使用方法;掌握随机函数的使用方法。
内容:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { again2 : int a,b,c,d,e,g=0,h=1,i; char op,f; again: srand(time(NULL)); a=rand()%10+1; b=rand()%10+1; c=rand()%4+1; switch(c) { case 1: op='+'; d=a+b; break; case 2: op='-'; d=a-b; break; case 3: op='*'; d=a*b; break; case 4: op='/'; d=a/b; if(a%b==0) { printf("计算"); } else { printf("算出整数"); } break; } printf("%d%c%d=",a,op,b); scanf("%d",&e); if(e==d) { g++; switch(c) { 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(c) { 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; } } h++; if(h<=10) { goto again; } i=10*g; printf("总分=%d\n",i); printf("正确率=%d%%\n",i); if(i<=75) { printf("again\n"); goto again2; } return 0; }
实验三:考试
实验四:熟悉程序开发平台。掌握C语言程序的程序开发过程,熟悉C语言程序在华为鲲鹏平台下的编译、运行。
内容
#include <stdio.h> #define N 40 void ReadScore(float score[],long num[],float c[],long d[],int n); void AverforCourse(float score[], float sum,float aver,int n); void Ranknum(float c[],long d[],int n); void Rankgrades(float score[],long num[],int n); void Searchgrades(float score[],long num[],int n); void Sort(float score[],long num[],int n); void total(float score[],long num[],int n); void main() { float score[N], sum,aver,c[N]; int n,x; long num[N],d[N]; printf("Input the total number of the students:\n"); scanf("%d",&n); 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"); again: printf("input the number:"); scanf("%d",&x); switch(x) { case 1: ReadScore(score,num,c,d,n); goto again; break; case 2: AverforCourse(score,sum,aver,n); goto again; break; case 3: Rankgrades(score,num,n); goto again; break; case 4: Ranknum(c,d,n); goto again; break; case 5: Searchgrades(score,num,n); goto again; break; case 6: Sort(score,num,n); goto again; break; case 7: total(score,num,n); goto again; break; case 8: printf("exit"); break; } } void ReadScore(float score[],long num[],float c[],long d[],int n) { int i; printf("Input stdents' ID card and score :\n"); for(i=0; i<n; i++) { scanf("%ld %f",&num[i],&score[i]); c[i]=score[i]; d[i]=num[i]; } } void AverforCourse(float score[], float sum,float aver,int n) { int i; sum=0; printf("学科总分和平均分分别为:\n"); for(i=0; i<n; i++) { sum=sum+score[i]; } aver=sum/n; printf("%f %f\n",sum,aver); } void Ranknum(float c[],long d[],int n) { int i,j,k; long name; float temp; printf("xuhao xuehao chengji\n"); for(i=0; i<n-1; i++) { k=i; for(j=1; j<n; j++) { if(d[j]<d[k]) { k=j; } } if(k != i) { temp=c[k]; c[k]=c[i]; c[i]=temp; name=d[k]; d[k]=d[i]; d[i]=name; } for(i=0;i<n;i++) { printf("%d.",i+1); printf("%ld.",d[i]); printf("%f\n",c[i]); } } } void Rankgrades(float score[],long num[],int n) { int i,j,k; float temp; long name; for(i=0; i<n-1; i++) { k=i; for(j=1; j<n; j++) { if(score[j]>score[k]) { k=j; } } if(k != i) { temp=score[k]; score[k]=score[i]; score[i]=temp; name=num[k]; num[k]=num[i]; num[i]=name; } } printf("排名,学号,成绩分别为:\n"); for(i=0;i<n;i++) { printf("%d.",i+1); printf("%ld.",num[i]); printf("%f\n",score[i]); } } void Searchgrades(float score[],long num[],int n) { int i; long m; printf("Input student's ID:\n"); scanf("%d",&m); for(i=0;i<n;i++) { if(num[i]==m) { printf("paiming%d,chengji%f\n",i+1,score[i]); } } } void Sort(float score[],long num[],int n) { int you=0,liang=0,zhong=0,ji=0,bu=0,i; for(i=0; i<n; i++) { if(score[i]>=90&&score[i]<=100) { you++; } if(score[i]>=80&&score[i]<=89) { liang++; } if(score[i]>=70&&score[i]<=79) { zhong++; } if(score[i]>=60&&score[i]<=69) { ji++; } if(score[i]>=0&&score[i]<=59) { bu++; } } printf("优秀人数及占比:%d,%f\n",you,(float)you/n); printf("良好人数及占比:%d,%f\n",liang,(float)liang/n); printf("中等人数及占比:%d,%f\n",zhong,(float)zhong/n); printf("及格人数及占比:%d,%f\n",ji,(float)ji/n); printf("不及格人数及占比:%d,%f\n",bu,(float)bu/n); } void total(float score[],long num[],int n) { int i; float sum=0,aver=0; for(i=0;i<n;i++) { sum=sum+score[i]; } aver=sum/n; printf("xuhao xuehao chengji\n"); for(i=0;i<n;i++) { printf("%d.%ld %f\n",i+1,num[i],score[i]); } printf("total=%f\n",sum); printf("average=%f\n",aver); }
实验五:考试
实验六:掌握文件的打开、读、写及关闭操作;掌握结构体的使用方法;文件可以是文本文件,也可以是二进制文件,注意选择正确的读写函数
内容:
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 40 void ReadScore(int n); void AverforCourse(int n); void Rankgrades(int n); void Rankname(int n); void Searchgrades(int n); void Writefile(int n); void Readfile(int n); struct student { long studentID; char studentName[10]; int scoreMT; int scoreEN; int scorePH; int sum; float ave; }stu[N]; void main() { int x,n; printf("Input the total number of the students:\n"); scanf("%d",&n); printf("(1)Append record\n"); printf("(2)Caculate 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)List record\n"); printf("(0)Read from a file\n"); again: printf("Please enter your choice:"); scanf("%d",&x); switch(x) { case 1: ReadScore(n); goto again; break; case 2: AverforCourse(n); goto again; break; case 3: Rankgrades(n); goto again; break; case 4: Rankname(n); goto again; break; case 5: Searchgrades(n); goto again; break; case 6: Writefile(n); goto again; break; case 7: Readfile(n); goto again; break; case 0: printf("exit"); break; } } void ReadScore(int n) { int i; printf("Input stdents' ID card , name and score :\n"); for(i=0; i<n; i++) { scanf("%ld %s %d %d %d",&stu[i].studentID,&stu[i].studentName, &stu[i].scoreMT,&stu[i].scoreEN,&stu[i].scorePH); } } void AverforCourse(int n) { int i; printf("every students' sum score and ave£º\n"); for(i=0; i<n; i++) { stu[i].sum=0; stu[i].ave=0; stu[i].sum=stu[i].scoreMT+stu[i].scoreEN+stu[i].scorePH; stu[i].ave=stu[i].sum/3.0; printf("%s %d %f\n",stu[i].studentName,stu[i].sum,stu[i].ave); } } void Rankgrades(int n) { int i,j,k; struct student temp; for(i=0; i<n-1; i++) { k=i; for(j=i+1; j<n; j++) { if(stu[j].sum<stu[k].sum) { k=j; } } if(k != i) { temp=stu[k]; stu[k]=stu[i]; stu[i]=temp; } } printf("grades paiming£¬studentName£¬sum£º\n"); for(i=0;i<n;i++) { printf("%d ",i+1); printf("%s ",stu[i].studentName); printf("%d\n",stu[i].sum); } } void Rankname(int n) { int i,j; struct student temp; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(strcmp(stu[j].studentName,stu[i].studentName)<0) { temp=stu[j]; stu[j]=stu[i]; stu[i]=temp; } } } printf("name paiming£¬studentName£¬scoreMT,scoreEN,scorePH,sum,ave£º\n"); for(i=0;i<n;i++) { printf("%d %s %d %d %d %d %f\n",i+1,stu[i].studentName, stu[i].scoreMT,stu[i].scoreEN,stu[i].scorePH,stu[i].sum,stu[i].ave); } } void Searchgrades(int n) { char m[10]; printf("Input student's name:\n"); scanf("%s",&m); int i,j,k; struct student temp; for(i=0; i<n-1; i++) { k=i; for(j=i+1; j<n; j++) { if(stu[j].sum>stu[k].sum) { k=j; } } if(k != i) { temp=stu[k]; stu[k]=stu[i]; stu[i]=temp; } } printf("paiming,chengjibiao\n"); for(i=0;i<n;i++) { if(strcmp(stu[i].studentName,m)==0) { printf("%d %s %d %d %d %d %f\n",i+1,stu[i].studentName,stu[i].scoreMT, stu[i].scoreEN,stu[i].scorePH,stu[i].sum,stu[i].ave); } } } void Writefile(int n) { int i; FILE *fp = fopen("students.txt", "w"); if (fp == NULL) { printf("Failed to open file.\n"); exit(0); } fwrite(stu,sizeof(struct student),n,fp); fclose(fp); } void Readfile(int n) { int i; FILE *fp = fopen("students.txt", "r"); if (fp == NULL) { printf("Failed to open file.\n"); exit(0); } for (i = 0; i < n; i++) { fread(&stu[i],sizeof(struct student),1,fp); } fclose(fp); for (i = 0; i < n; i++) { printf("%ld %s %d %d %d %d %f\n", stu[i].studentID,stu[i].studentName, stu[i].scoreMT,stu[i].scoreEN,stu[i].scorePH,stu[i].sum,stu[i].ave); } }
实验七:学习缓冲区溢出的原理和防范,并进行实际操作
内容:"C:\计算机基础与程序设计\实验\20231405董祉序实验七报告.doc"
实验八:Web部署,基于LAMP部署wordpress
内容:"C:\计算机基础与程序设计\实验\20231405董祉序实验八实验报告.doc"
问题回答
1.二进制在计算机中是怎么运算的?
在计算机中,二进制运算是通过逻辑门和电子电路实现的。计算机内部的中央处理器(CPU)包含了许多逻辑门,这些逻辑门可以执行二进制的加法、减法、乘法、除法等运算。
例如,两个二进制数相加时,计算机会通过逻辑门将它们逐位相加,并考虑进位。减法、乘法和除法也是通过类似的方式进行的,只是需要使用更复杂的逻辑门和电路来实现。
计算机内部的运算是以电子信号的形式进行的,这些信号在逻辑门和电路中传递,最终得到运算结果。这些运算是在非常短的时间内完成的,因此计算机可以快速而准确地进行二进制运算。
2.如何用二进制表示计算机执行的命令程序?
计算机执行的命令程序可以用二进制表示,这些二进制指令被计算机识别和执行。计算机指令由操作码(opcode)和操作数(operand)组成。操作码指示计算机要执行的操作,操作数则是操作的对象或者操作的参数。
操作码通常是一个固定长度的二进制数字,用来表示特定的指令,例如加法、减法、乘法、逻辑运算等。操作数则是要进行操作的数据,也以二进制形式表示。计算机在执行程序时,会根据指令的操作码来执行相应的操作,并使用操作数进行运算或者存储数据。
例如,加法指令的操作码可能是一个特定的二进制序列,而操作数则是要相加的两个二进制数。计算机在执行这个指令时,会根据操作码执行加法操作,并将操作数相加得到结果。
整个程序由一系列的二进制指令组成,计算机会按照顺序逐条执行这些指令,从而完成程序的运行。这就是计算机执行命令程序时,如何使用二进制表示指令和数据的过程。
3.如何利用电路创造出能执行更复杂任务的设备呢?
利用集成电路、程序控制、传感器和执行器、通信技术以及数字信号处理等技术,可以实现更复杂的电子设备和系统。这些技术的结合可以实现从简单的逻辑控制到复杂的数据处理和通信功能的各种应用。
4.从逻辑层构成计算机的各个硬件是什么?
在计算机中,逻辑层构成的各个硬件包括以下几个主要部分:中央处理器(CPU),存储器,输入设备,输出设备,主板,扩展卡,控制器和接口:控制器和接口,时钟和定时器。
5.
机器语言程序的测试计划通常可以适用于同一个解决方案的汇编语言版本,因为机器语言和汇编语言是密切相关的。汇编语言是一种低级语言,它使用助记符来代替机器语言中的指令操作码,但最终还是会被汇编器转换成对应的机器语言指令。
因此,针对某一解决方案编写的机器语言程序的测试计划通常也适用于相应的汇编语言版本。测试计划通常包括对程序的功能、性能、边界条件、异常情况等进行测试,这些测试对于机器语言和汇编语言版本都是适用的。
6.递归算法为什么必须从非递归算法中调用呢?
递归算法并不必须从非递归算法中调用。实际上,递归算法是一种在算法中直接调用自身的技术。递归算法通常更简洁、易于理解,并且能够解决一些复杂的问题,比如树的遍历、图的搜索等。在某些情况下,递归算法比非递归算法更为直观和有效。
然而,递归算法也有一些缺点,比如性能开销较大、可能会导致栈溢出等问题。在某些情况下,非递归算法可能更为高效和稳定。因此,在实际应用中,可以根据具体情况选择适合的算法,有时候可能需要将递归算法转换为非递归算法,以解决性能或稳定性方面的问题。但并不是说递归算法必须从非递归算法中调用。
7.二叉树和二叉检索树的本质区别?
二叉树:
- 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。
- 二叉树没有特定的排序要求,每个节点的值可以是任意顺序的。
- 二叉树的特性使得它适用于很多场景,比如表达式树、文件系统等。
二叉搜索树:
- 二叉搜索树是一种特殊的二叉树,具有以下特性:
- 对于树中的每个节点,其左子树中的所有节点的值都小于该节点的值。
- 对于树中的每个节点,其右子树中的所有节点的值都大于该节点的值。
- 左右子树也分别为二叉搜索树。
- 二叉搜索树的特性使得它非常适合进行搜索、插入和删除操作,因为可以利用节点值的大小关系进行快速的查找和操作。
因此,二叉搜索树是二叉树的一种特殊形式,它具有有序性的特点,能够提供快速的查找和操作,而二叉树则是一种更为通用的树形数据结构。
8.命令示范型和声明示范型有什么区别?
命令示范型和声明示范型的区别在于用户与系统交互的方式。命令示范型更加强调用户输入特定的命令来完成任务,而声明示范型更加强调用户通过直观的界面元素和操作来完成任务。
9.如何使用不同密码进行加密和解密呢?
使用不同密码进行加密和解密需要根据具体的加密算法和实现方式来选择合适的密钥或密钥对。对称加密需要使用不同的密钥,而非对称加密需要使用不同的密钥对。在实际应用中,确保密钥的安全性和合理性也是非常重要的。
课程收获与不足
收获:
- 对计算机科学领域有了一个整体的了解,包括计算机基本原理、算法、数据结构、编程语言等方面的知识。
- 了解了计算机科学的发展历史和未来发展趋势,对整个领域的发展有了更深入的认识。
- 可能学习到了一些实际的编程技能,比如编写简单的程序或者解决一些简单的问题。
不足:
- 可能对一些基础知识的掌握并不够扎实,需要更多的时间和精力去理解和掌握这些知识。
- 可能在课程中没有深入学习一些实际应用的案例,导致对计算机科学在实际工作中的应用了解不够。
- 可能在学习过程中没有形成良好的学习习惯和方法,导致学习效率不高。
问卷调查
1.你平均每周投入到本课程多长时间?
2小时
2.每周的学习效率有提高吗?
还行
3.学习效果自己满意吗?
一般
4.课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
我尽力
5.你觉得这门课老师应该继续做哪一件事情?
多解决同学们的疑惑
6.你觉得这门课老师应该停止做哪一件事情?
一直让同学自学
7.你觉得这门课老师应该开始做什么新的事情?
解答同学们问题
总结的链接和二维码
https://www.cnblogs.com/dzxdzx1231234/p/17948828