20231410刘珈岐 《计算机基础与程序设计》课程总结
#20231410刘珈岐 《计算机基础与程序设计》课程总结
##作业总结
第一周作业:初步了解计算机的发展历史,初步认识与计算机相关的名词和进制转化。
第二周作业:《计算机科学概论》第1章和《C语言程序设计》第1章
第三周作业:自学《计算机科学概论》第2章,第3章 和《C语言程序设计》第2章
第四周作业:自学《计算机科学概论》第4章,第5章 《C语言程序设计》第3章
第五周作业:自学《计算机科学概论》第6章《C语言程序设计》第4章
第六周作业:自学《计算机科学概论》第7章 《C语言程序设计》第5章
第七周作业:自学《计算机科学概论》第8章《C语言程序设计》第6章
第八周作业:自学《计算机科学概论》第9章《C语言程序设计》第7章
第九周作业:自学《计算机科学概论》第10、11章《C语言程序设计》第8章
第十周作业:自学《计算机科学概论》第12,13,14章 《C语言程序设计》第9章
第十一周作业:自学《计算机科学概论》第15,16章《C语言程序设计》第10章
第十二周作业:自学教材《C语言程序设计》第11章
第十三周作业:自学教材《C语言程序设计》第12章
第十四周作业:自学教材《C语言程序设计》第13章
(按顺序)实验报告链接汇总
##实验总结
实验一 实验名称:Linux基础命令实践
通过熟悉操作系统基本命令,学会操作系统的使用。
实验二 实验内容:编写一个程序来帮助小学生学习四则运算,按下列任务要求以循序渐进的方式编程。
include <stdio.h>
include <stdlib.h>
include <time.h>
int main()
{
int magic1,magic2,i=1,n,rnum=0,k,p,q,answer;
float rate;
srand(time(NULL));
do
{
for(n=1; n<=10; n++)
{
magic1=rand()%10+1;
magic2=rand()%10+1;
k=rand()%4;
p=rand()%4+1;
q=rand()%4+1;
switch(k)
{
case 0:
{
printf("%d*%d\n",magic1,magic2);
scanf("%d",&answer);
if(answer==magic1*magic2)
{
switch(p)
{
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;
}
rnum++;
}
else
switch(q)
{
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;
}
}
break;
case 1:
{
printf("%d/%d\n",magic1,magic2);
scanf("%d",&answer);
if(answer==magic1/magic2)
{
switch(p)
{
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;
}
rnum++;
}
else
switch(q)
{
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;
}
}
break;
case 2:
{
printf("%d+%d\n",magic1,magic2);
scanf("%d",&answer);
if(answer==magic1+magic2)
{
switch(p)
{
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;
}
rnum++;
}
else
switch(q)
{
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;
}
}
break;
case 3:
{
printf("%d-%d\n",magic1,magic2);
scanf("%d",&answer);
if(answer==magic1-magic2)
{
switch(p)
{
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;
}
rnum++;
}
else
switch(q)
{
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;
}
}
break;
}
}
printf("right number=%d\n",rnum);
rate=rnum/10.0;
rnum=0;
printf("right rate=%f%%\n",rate*100);
}
while(rate<0.75);
return 0;
}
实验三 实验内容:考试
实验四 实验内容:学生成绩管理系统
某班有最多不超过40人(具体人数由键盘输入)参加某门课程的考试,用数组作函数参数编程实现如下学生成绩管理。
include <stdio.h>
include <stdlib.h>
define N 40
float Sum(float score[N],int n);
void Sortmingci(float score[N],long num[N],int n);
void Sortchengji(float score[N],long num[N],int n);
int Findscore(float score[N],long num[N],long x);
void Readscore(long num[N],float score[N],int n);
void PrintScore(float score[],long num[],int n);
int main()
{
int n,i,pos,a=0,b=0,c=0,d=0,e=0,z=0;
float score[N],sum;
long num[N],x;
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");
printf("How many students?\n");
scanf("%d",&n);
do
{
printf("Please input option:");
scanf("%d",&z);
switch(z)
{
case 1:
Readscore(num,score,n);
break;
case 2:
sum=Sum(score,n) ;
printf("the total score is:%f\n",sum);
printf("the average score is:%f\n",sum/n);
break;
case 3:
Sortmingci(score,num,n);
PrintScore(score,num,n);
break;
case 4:
Sortchengji(score,num,n);
PrintScore(score,num,n);
break;
case 5:
printf("please input number:\n");
scanf("%ld",&x);
pos=Findscore(score,num,x);
if(pos!=-1)
printf("%ld %f\n",num[pos],score[pos]) ;
else
printf("Not Found!\n");
break;
case 6:
for(i=0; i<n; i++)
{
if(score[i]>=90&&score[i]<=100)
a++;
}
printf("the number of youxiu is:%d\n",a);
printf("the rate of youxiu is:%d%%\n",a/n*100);
for(i=0; i<n; i++)
{
if(score[i]>=80&&score[i]<=89)
b++;
}
printf("the number of lianghao is:%d\n",b);
printf("the rate of lianghao is:%d%%\n",b/n*100);
for(i=0; i<n; i++)
{
if(score[i]>=70&&score[i]<=79)
c++;
}
printf("the number of zhongdeng is:%d\n",c);
printf("the rate of zhongdeng is:%d%%\n",c/n*100);
for(i=0; i<n; i++)
{
if(score[i]>=60&&score[i]<=69)
d++;
}
printf("the number of jige is:%d\n",d);
printf("the rate of jige is:%d%%\n",d/n*100);
for(i=0; i<n; i++)
{
if(score[i]>=0&&score[i]<=59)
e++;
}
printf("the number of bujige is:%d\n",e);
printf("the rate of bujige is:%d%%\n",e/n*100);
break;
case 7:
Sortchengji(score,num,n);
PrintScore(score,num,n);
sum=Sum(score,n) ;
printf("the total score is:%f\n",sum);
printf("the average score is:%f\n",sum/n);
break;
}
}while(z!=8);
return 0;
}
float Sum(float score[N],int n)
{
float sum=0;
int i;
for(i=0; i<n; i++)
{
sum+=score[i];
}
return sum;
}
void Sortmingci(float score[N],long num[N],int n)
{
int i,j,k;
float temp1;
long temp2;
for(i=0; i<n-1; i++)
{
k=i;
for(j=i+1; j<n; j++)
{
if(score[j]>score[k])
{
k=j;
}
}
if(k!=i)
{
temp1=score[k];
score[k]=score[i];
score[i]=temp1;
temp2=num[k];
num[k]=num[i];
num[i]=temp2;
}
}
}
void PrintScore(float score[],long num[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%ld %f\n",num[i],score[i]);
}
}
void Sortchengji(float score[N],long num[N],int n)
{
int i,j,k;
float temp1;
long temp2;
for(i=0; i<n-1; i++)
{
k=i;
for(j=i+1; j<n; j++)
{
if(num[j]<num[k])
{
k=j;
}
}
if(k!=i)
{
temp1=score[k];
score[k]=score[i];
score[i]=temp1;
temp2=num[k];
num[k]=num[i];
num[i]=temp2;
}
}
}
int Findscore(float score[N],long num[N],long x)
{
int i,n;
for(i=0; i<n; i++)
{
if(num[i]==x)
return i;
}
return -1;
}
void Readscore(long num[N],float score[N],int n)
{ int i=0;
while(i<n)
{
printf("input xuehao and chengji:");
scanf("%ld%f",&num[i],&score[i]);
i++;
}
}
实验五 考试
实验六 实验内容:学生成绩管理系统V2.0
某班有最多不超过40人(具体人数由键盘输入)参加期末考试,考试科目为数学(MT)、英语(EN)和物理(PH)。利用结构体编程实现如下菜单驱动的学生成绩管理系统。
include <stdio.h>
include <stdlib.h>
typedef struct student
{
long studentId;
char studentName[10];
int score[3];
} STUDENT;
STUDENT stu[40];
int sum[40]= {0};
float aver[40]= {0};
void Getrecord(STUDENT stu[],int n);
void Ave(STUDENT stu[],int sum[],int n);
void Paiming(int sum[],STUDENT stu[],int n);
void Xingmingpaixu(STUDENT stu[],int n);
void Chaxun(STUDENT stu[],int n);
void WritetoFile(STUDENT stu[],int sum[],int n);
void ReadfromFile(STUDENT stu[],int sum[],int n,float aver[]);
int main()
{
int n,sum[40]= {0},p;
printf("how many students:");
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.Read from a file\n");
printf("0.Exit\n");
do
{
printf("Please enter your choice:\n");
scanf("%d",&p);
switch(p)
{
case 1:
Getrecord(stu,n);
break;
case 2:
Ave(stu,sum,n);
break;
case 3:
Paiming(sum,stu,n);
break;
case 4:
Xingmingpaixu(stu,n);
break;
case 5:
Chaxun(stu,n);
break;
case 6:
WritetoFile(stu,sum,n);
break;
case 7:
ReadfromFile(stu,sum,n,aver);
break;
}
}
while(p!=0);
return 0;
}
void Getrecord(STUDENT stu[],int n)
{
int i,j=0;
for(i=0; i<n; i++)
{
printf("input ID:");
scanf("%ld",&stu[i].studentId);
printf("input name:");
scanf(" %s",&stu[i].studentName);
printf("input scoreMT:");
scanf("%d",&stu[i].score[j]);
j++;
printf("input scoreEN:");
scanf("%d",&stu[i].score[j]);
j++;
printf("input scorePH:");
scanf("%d",&stu[i].score[j]);
j=0;
}
}
void Ave(STUDENT stu[],int sum[],int n)
{
int i,j=0;
float aver[40]= {0};
for(i=0; i<n; i++)
{
for(j=0; j<3; j++)
{
sum[i]+=stu[i].score[j];
aver[i]=sum[i]/3.0;
}
printf("%s 's total score is %d\n",stu[i].studentName,sum[i]);
printf("%s 's average score is %f\n",stu[i].studentName,aver[i]);
}
}
void Paiming(int sum[],STUDENT stu[],int n)
{
int k,i,j;
for(i=0; i<n-1; i++)
{
for(j=1; j<n; j++)
if(sum[j]>sum[i])
{
k=sum[i];
struct student stu2=stu[i];
sum[i]=sum[j];
stu[i]=stu[j];
sum[j]=k;
stu[j]=stu2;
}
}
i=0;
for(i=0; i<n; i++)
{
printf("NO.%d is %s,the score is %d.\n",i+1,stu[i].studentName,sum[i]);
}
}
void Xingmingpaixu(STUDENT stu[],int n)
{
struct student temp;
int i,j,k;
for(i=0; i<n-1; i++)
{
for(j=1; j<n; j++)
{
if(strcmp(stu[i].studentName,stu[j].studentName)<0)
{
k=sum[i];
sum[i]=sum[j];
sum[j]=k;
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
i=0;
for(i=0; i<n; i++)
{
printf("%ld%10s%4d%4d%4d\n",stu[i].studentId,stu[i].studentName,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
}
void Chaxun(STUDENT stu[],int n)
{
int i,found=0;
char xingming[10];
printf("Input student's name:");
scanf("%s",xingming);
for(i=0; i<n; i++)
{
if(strcmp(xingming,stu[i].studentName)0)
{
printf("%4ld%10s%4d%4d%4d\n",stu[i].studentId,stu[i].studentName,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
found=1;
}
}
if(found0)
printf("Not Found!\n");
}
void WritetoFile(STUDENT stu[],int sum[],int n)
{
FILE*fp;
int i;
if((fp=fopen("score.txt","w"))==NULL)
{
printf("Failure to open score.txt!\n");
exit(0);
}
fwrite(stu,sizeof(STUDENT),n,fp);
fwrite(sum,sizeof(int),n,fp);
for(i=0; i<n; i++)
{
fwrite(&aver[i],sizeof(float),1,fp);
}
fclose(fp);
}
void ReadfromFile(STUDENT stu[],int sum[],int n,float aver[])
{
FILE*fp;
int i,j;
if((fp=fopen("score.txt","r"))==NULL)
{
printf("Failure to open score.txt!\n");
exit(0);
}
for (i = 0; i < n; i++)
{
fprintf(fp, "%10ld%8s %.1f %.1f %.1f aver=%.4f sum=%d\n", stu[i].studentId,stu[i].studentName,stu[i].score[0],
stu[i].score[1],
stu[i].score[2],
aver[i], sum[i]);
}
i=0;
for(i=0; i<n; i++)
{
printf("%ld%10s%4d%4d%4d\n",stu[i].studentId,stu[i].studentName,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
fclose(fp);
}
实验七 模拟缓冲区溢出漏洞实验
实验八 Web部署
1.回答一下第1周作业中自己提出的问题
第一章
1.以后能否开发出更安全可靠的以不同种语言为基础的编译器?以适应不同语言国家的需要?
关于开发更安全可靠的不同语言编译器,是可以实现的。实际上,已经存在许多支持不同语言的编译器。为了适应不同语言的需求,开发者需要针对每种语言的特点和要求进行相应的设计和优化。同时,安全性和可靠性也是开发者在编译器设计中考虑的重要因素之一,他们会通过使用最新的安全技术和经过严格测试的算法来确保编译器的安全性和可靠性。
第二章
1.“字”有明确的字符规定吗?(书上写的是一个或多个字节称字,不太明确)
关于“字”的定义,确实有一些模糊。根据上下文,可以理解为一个或多个字节组成的字符单元。具体到不同的编程语言或操作系统,对字节和字符的定义可能会有所不同。
第三章
1.为什么有些压缩就可以实现无损压缩,有些就做不到?可以让所有压缩都实现无损吗?
关于压缩算法的无损压缩,不是所有的压缩算法都能实现无损压缩。压缩算法的选择取决于数据的特点和需求。有些数据会包含一些冗余信息,通过压缩算法可以将这些冗余信息去除,从而实现数据的压缩。但是,并不是所有的数据都含有冗余信息,因此并不能保证所有的压缩都能实现无损压缩。
第四章
1.多路复用器是如何运作的?
多路复用器(Multiplexer)是一种用于将多个输入信号合并到一个输出信号的设备或模块。其原理是通过控制信号选择特定的输入信号进行传输。多路复用器可以用于信号的选择、分配和传输等多种应用场景。
2.布尔表达式、逻辑框图、真值表之间的关系是什么?
布尔表达式是由逻辑运算符和布尔变量(或常量)组成的表达式,用于表示逻辑关系。逻辑框图是用来描述布尔运算和逻辑关系的图形表示,通过逻辑门和连接线来表示布尔运算和逻辑关系。真值表是一种用来列举布尔表达式在所有可能输入组合下的输出结果的表格。布尔表达式、逻辑框图和真值表之间有密切的联系,它们都是用来描述逻辑运算和布尔关系的工具。
第五章
1.CPU,主存储器,输入/输出子系统,如何相互配合让一个计算机运行?
在计算机中,CPU、主存储器和输入/输出子系统之间通过总线进行通信。CPU是计算机的核心部件,负责执行程序的指令和数据的处理。主存储器用于存储程序和数据。输入/输出子系统负责处理外部设备的输入和输出。它们通过总线相互连接,CPU通过总线与主存储器进行数据的读写,通过总线与输入/输出子系统进行数据的传输。
第六章
1.为机器语言程序编写的测试计划适用于同一个解决方案的汇编语言版本吗?
机器语言程序编写的测试计划可以适用于相应的汇编语言版本。因为机器语言和汇编语言之间存在一定的对应关系,机器语言程序是经过编译器翻译汇编语言程序生成的。所以,机器语言程序的测试计划可以用于汇编语言版本的测试,但需要注意一些语法和指令的差异。
第七章
1.算法开发阶段的步骤是什么呢?开发阶段、实现阶段、维护阶段之间的关系又是什么?
算法的开发阶段通常包括问题定义、算法设计、算法实现和算法维护。这些阶段是相互关联的,问题定义阶段确定了问题的需求和目标,算法设计阶段提出了解决问题的具体算法方案,算法实现阶段将算法转化为可执行的代码,算法维护阶段则是对已实现算法的调试、优化和更新。各个阶段之间的关系是顺序的,每个阶段的结果会作为下一个阶段的输入。
第八章
1.列表、栈、队列、树、图之间的区别与联系?它们分别的优势与劣势是什么?
列表是一种线性数据结构,元素之间没有明确的关系,可以进行随机访问。
栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。
队列是一种先进先出(FIFO)的数据结构,可以在队尾插入元素,在队头删除元素。
树是一种非线性的数据结构,由节点和边组成,父节点和子节点之间有明确的关系。
图是一种非线性的数据结构,由节点和边组成,节点之间的关系可以是任意的。
第九章
1.命令式范型有哪些特征?
命令式范型的特征包括:程序由一系列命令组成,通过按顺序执行命令来实现功能;程序的执行顺序由控制结构决定;程序的执行是以状态的改变为基础的。
2.不同的计算机之间是如何交流的呢?
不同计算机之间的交流可以通过网络进行。计算机可以通过网络传输数据和执行指令。
第十章
1.为什么分时系统中的用户都有自己的虚拟机?
分时系统中的用户都有自己的虚拟机是为了实现用户之间的并发操作,每个用户在自己的虚拟机中进行任务的执行,互不干扰。
2.分时概念如何运作?
分时概念是将计算机的时间和资源划分成若干个短的时间片段,每个时间片段分配给一个用户进行任务的执行,以实现用户之间的公平共享和高效利用计算机资源。
第十一章
1.顺序文件访问和直接文件访问有什么区别与联系?
顺序文件访问和直接文件访问是两种不同的文件访问方式。顺序文件访问是按照文件中记录的顺序进行访问,读取和写入操作是连续进行的。直接文件访问是通过记录的物理位置进行访问,读取和写入可以定位到指定的记录位置进行操作。它们的区别在于访问方式和操作效率不同,适用于不同的应用场景。
第十二章
1.什么是模拟假设分析?模拟假设分析一次只会影响电子数据表中的一个值吗?
模拟假设分析是一种用于对系统进行仿真和预测的方法。通过构建模型和设定一定的假设条件,可以对系统的运行进行模拟和分析。模拟假设分析可以影响电子数据表中的一个或多个值,取决于假设条件和模拟的范围。
第十三章
1.生物神经网络和人工神经网络的处理方式分别是什么?
生物神经网络和人工神经网络是两种不同的神经网络模型。生物神经网络是模拟人脑神经系统的结构和功能,通过神经元之间的连接和传递信号来实现信息处理。人工神经网络是基于数学和计算机科学理论构建的人工模型,通过人工神经元和连接权重进行信息处理和学习。
第十四章
1.排队系统的四个部分是什么?排队系统的目的是什么?
排队系统的四个部分包括:顾客(进程)、服务台(资源)、队列(等待区域)和管理器(调度算法)。排队系统的目的是通过合理地分配资源和管理顾客的到达和离开,优化系统的效率和服务质量。
第十五章
1.赫夫曼编码是如何压缩的?
赫夫曼编码是一种基于统计频率的无损压缩算法。它通过将频率较高的字符用较短的编码表示,将频率较低的字符用较长的编码表示,从而实现对字符序列的压缩。赫夫曼编码利用字符出现的频率进行编码,使得常用的字符使用较短的编码,从而实现对数据的高效压缩。
第十六章
1.JPS处理与小程序有哪些不同呢?
JPS处理与小程序有不同的应用场景和功能。JPS处理是一种用于实现高性能计算和数据处理的技术,可以通过并行处理和分布式计算来加速任务的执行。小程序是一种轻量级的应用程序,主要运行在移动设备上,提供特定功能和服务。
2.HTML和XML有哪些相同点和不同点?
HTML和XML是两种不同的标记语言。HTML用于描述和展示网页的结构和内容,主要用于网页的编写和展示。XML是一种通用的标记语言,用于描述数据的结构和内容,主要用于数据的交换和存储。它们的相同点是都使用标签和属性来描述数据,但用途和语法有所不同。
第十七章
1.木马是如何攻击计算机系统的呢?防火墙的作用是什么?如何保证防火墙不被攻破呢?
木马是一种通过隐藏在合法程序或文件中,损害计算机系统安全和用户隐私的恶意软件。防火墙的作用是保护计算机系统免受未经授权的访问和攻击,通过监控网络流量和限制通信,防止恶意软件的传播和攻击。要保证防火墙不被攻破,需要定期更新防火墙软件和规则,加强系统和网络的安全配置,及时修补漏洞,并加强对恶意软件的检测和防护。
第十八章
1.软件给计算问题的解决方案施加了哪些限制呢?可以打破这一局限性吗?
软件给计算问题的解决方案施加了以下限制:
算法的限制、资源的限制、数据的限制、技术的限制
虽然软件给计算问题的解决方案施加了一定的限制,但技术的不断进步和创新可以打破这些局限性。随着计算机硬件的发展和计算能力的提升,可以使用更高效的算法来解决以前无法解决的问题。同时,人工智能和机器学习等新兴技术的应用也为解决复杂问题提供了新的可能性。此外,开放源代码和开放数据的推动也为解决方案的改进和优化提供了更广泛的合作和共享机会。不断推动技术的发展和创新,可以进一步打破软件给计算问题解决方案的限制。
反思总结
1.你有什么项目被加分,谈谈你的经验
优秀作业(给出链接和二维码)
第五周:https://www.cnblogs.com/ljq2005/p/17795893.html
第六周:https://www.cnblogs.com/ljq2005/p/17806443.html
第八周:https://www.cnblogs.com/ljq2005/p/17842285.html
第十周:https://www.cnblogs.com/ljq2005/p/17871068.html
2.课程收获与不足
收获:对计算机结构和相关知识点有了初步的了解。
不足:有些编程方面的代码还不是很熟悉,linux命令也不是很熟。
3.自己需要改进的地方
还需要提高学习的效率,多练,多在oj平台上练习,用好chatgpt
5.如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
有时候我看到写的比较好的学习博文会推荐给队友,队友也解答了我不太明白的代码。
但有些内容我和队友都不太明白,就有点束手无措。
6.你平均每周投入到本课程多长时间?
10小时
每周的学习效率有提高吗?
都差不多,可能快要测试的时候会有所提高。
学习效果自己满意吗?
还行。
课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
努力做到。
你觉得这门课老师应该继续做哪一件事情?
解答疑惑。