2023-2024 20231313《计算机基础与程序设计》第十五周学习总结
2023-2024 20231313《计算机基础与程序设计》第十五周学习总结
作业 | 速达 |
---|---|
作业课程 | 班级链接 |
作业要求 | 计算机基础与程序设计第十五周学习总结 |
作业内容 | 课程总结 |
作业正文 | 我的作业 |
作业
- 第一周作业:快速浏览了计算机科学概论的教材,并在每章中提出遇到的问题和解决的问题
- 第二周作业:《计算机科学概论》第一章从整体宏观的角度出发介绍了计算机系统、硬件软件发展的历史及预测、计算工具与计算学科,让人基础地把握课程要求,对未来的学习有一定的规划;《C语言程序设计》第一章从客观的角度讲述了学习编程的意义、人们目前对于学习这门课程的认识及误解以及对学习的方法给出实践性的指导——“动手!”
- 第三周作业:《计算机基础与程序设计》第2 3章从信息层出发,分别从二进制数值与技术系统和数据表示法两方面展开具体的讲解,会对计算机硬件用来表示和管理信息的方式——二进制,有着更为深入的了解,以及对表示和储存计算机管理的各种类型的数据有所区分与解释
- 第四周作业:这两章通过从硬件层进行分析,分别使我们了解了计算机如何用电信号来表示和操作这些二进制数值,如高低电平,布尔表达式,真值表,逻辑框图等,第5章,则是从计算部件即使用什么来进行技术操作,也可以说是技术操作利用了哪些,其中含有一些抽象的概念。
- 第五周作业:《计算机科学概论》:通过对章节的阅读,低级程序设计语言是与硬件(寄存器,内存)直接交互的语言,执行效率高但编写和阅读难度大;而伪代码是一种简化的描述算法和程序逻辑的语言,便于我们理解和规划程序结构。
《C语言程序设计》:书中具体谈了,数据的格式化屏幕输出、数据的格式化键盘输入、单个字符的输人输出、用getcharC新入数据存在的向题、用%c格式符输人数据存在的问题等,对键盘的输入和屏幕的输出有了较为起全面的认识。
- 第六周作业:《计算机科学概论》:阅读本章,能了解到在学习了低级语言和人工语言后,要开始能从整体宏观解决问题,知道了计算机问题的求解是由,分析和说明、算法开发、实现和维护阶段,算法讲述了几种常见算法:冒泡、快排,插排、顺搜、二分法...
《C语言程序设计》:算法的描述方法、单分支、双分支、多分支选择控制结构,条件语句、用于多路选择的 switch 语句,break 语句在switch语句中的作用、关系运算符、条件运算符、逻辑运算符和位运算符。
- 第七周作业:《计算机科学概论》:计算机中存在抽象的容器——>抽象数据类型,其能够将属性与特定明确的分开;其次是栈,只能从上方进行相应操作,遵循后出后进的原则;再次是队列,从一段进另一端出;而列表则比较复杂,他是链式结构,以节点(用户的数据和指向下一个节点的链接或指针)为基础;树,树的分层结构相比栈、队列和链表更为复杂;图,图可以看作是是在某些方面解除限制的树,是由节点和连接节点的线段构成;子程序,与之前谈及的子算法相似;
《C语言程序设计》:本章讲的主要是循环,for while do-while 流程转移控制 条件控制 嵌套循环 穷举和软件调试方面的问题
- 第八周作业:《计算机科学概论》:首先,详细介绍了面向对象设计,从而使我们能更好的区分功能设计与面向对象的设计,其次从设计过程步骤的角度出发,讲述了对象、对象类、字段、方法,以及他们的核心在于将输入转换为输出的过程,再次详细讲述了翻译的过程,介绍了编译器、解释器,同时也给我们介绍了程序设计语言泛型,包括命令式和声明式两大类,之后又介绍了高级程序设计语言的功能性,有bool表达式,数据归类,数据的输入输出,控制结构等,再次阐明了面向对象语言的功能性,包含封装,类,继承,多态等,最后给我们再次简明地区分了过程设计和面向对象设计的区别。
《C语言程序设计》:主要内容为函数和模块化程序设计,用分而治之和信息隐藏引出函数的主要内容,从函数的分类说起,到函数的定义,向函数返回或传递,以及函数设计的基本原则说起,随后介绍递归函数和变量的作用域和生存期,在模块化程序设计时讲了模块分解的基本原则,最后把代码风格做为扩充内容给予补充。
- 第九周作业:《计算机科学概论》:首先,介绍了操作系统的角色,从内存进程CPU管理、批处理、到分时和其他OS要素,其次是内存管理,介绍了三种技术单块,分区和页式的基本原理,再次,是进程管理,使我们了解到进程在计算机中正确运行所需要的管理信息和管理方法,先到先服务、最短作业优先、轮询法,然后,下一章讲述了文件系统和目录,用来存储信息,文本文件和二进制文件,包括有文件类型的详细介绍,对文件的操作,访问和保护,目录是文件的有名集合,又目录树,路径名和磁盘的调动,以及调动的方法。
《C语言程序设计》:数组和算法基础,介绍了一维数组和二维数组以及他们适用的范围和场景类型,讲述了怎么定义和初始化,和数组名称的特殊含义的理解,以及如何向函数传递数组信息,在算法基础里,讲述了一些基础的选择、快速排序算法和查找算法。
- 第十周作业:
《计算机科学概论》:信息编码与数据存储、计算机体系结构:这部分详细介绍了计算机的硬件组成,包括CPU、主存储器和海量存储器,以及它们之间的通信方式,人工智能的定义 人工智能的历史。《C语言程序设计》:指针的定义:指针是一种特殊的变量,其值为另一个变量的内存地址。
- 第十一周作业:计算机科学概论》:网络是指将多个计算机或设备连接在一起,以便它们可以相互通信和共享资源。网络基于一组协议和技术,如TCP/IP协议、以太网和无线网络等。通过网络,用户可以传输数据、共享文件、发送电子邮件、浏览网页等。万维网的一些关键定义有HTML(超文本标记语言)HTTP(超文本传输协议)浏览器:浏览器是用于访问和显示网页的软件应用程序。常见的浏览器包括谷歌浏览器、火狐浏览器、微软 Edge 等。浏览器可以解析HTML代码并将其呈现为可视化的网页。
- 第十二周作业:《C语言程序设计》
指针和一维数组的关系,如何用指针引用和操作数组元素,如何用数组名和指针变量作为函数参数。指针和二维数组的关系,如何用行指针和列指针引用和操作二维数组元素,如何用指针数组作为函数参数。指针数组和字符串数组的区别和联系,如何用指针数组实现字符串的排序和输出。
- 第十三周作业:结构体(struct):结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
结构体可以存储不同类型的数据,如 int、float、char 等。结构体的声明使用 struct 关键字。
数据库结构:在C语言中,由于无法直接操作数据库,所以在项目中通过对结构体内部变量的操作将大量的数据存储在内存中,以完成对数据的存储和操作。
结构体可以用来模拟数据库中的记录。例如,一个学生的信息就需要学号(字符串),姓名(字符串),年龄(整形)等等。这些数据类型都不同但是他们又是表示一个整体,要存在联系,那么我们就需要一个新的数据类型。——结构体,它就将不同类型的数据存放在一起,作为一个整体进行处理。
- 第十四周作业:文件操作是C语言中常用的一种数据输入与输出方式,它可以实现数据的持久化存储和读取。文件操作涉及到以下几个方面:
文件的概念和类型:文件是存放在磁盘上的一组相关数据,它可以分为文本文件和二进制文件两种。文本文件是以字符编码的方式保存的,可以用文本编辑器打开和修改。二进制文件是将内存中的数据原封不动地保存在文件中,适用于非字符为主的数据,如图像、音频、视频等。
文件的打开和关闭:要对文件进行操作,首先要用fopen函数打开文件,fopen函数返回一个文件指针,它是一个指向FILE结构体的指针,用来保存文件的相关信息。如果打开失败,fopen函数返回NULL。打开文件后,要用fclose函数关闭文件,它的原型是int fclose (FILE * stream );其中stream是文件指针,fclose函数会将缓冲区中的数据写入磁盘,并释放文件信息区。如果关闭成功,fclose函数返回0,否则返回非零值。
文件的读写:C语言提供了多种函数来对文件进行读写操作,如fgetc、fputc、fgets、fputs、fread、fwrite、fprintf、fscanf等。这些函数的原型和用法可以参考这篇文章。文件的读写可以分为顺序存取和随机存取两种方式。顺序存取是按照文件中的数据顺序依次读写,适用于文本文件。随机存取是根据文件指针的位置任意读写,适用于二进制文件。
文件的定位:有时候我们需要在文件中移动文件指针的位置,以便进行随机存取。C语言提供了以下几个函数来实现文件的定位:
int fseek (FILE * stream, long int offset, int origin);
long int ftell (FILE * stream);
void rewind (FILE * stream);
实验
- 实验一:熟悉Linux命令,在Vbox下Ubuntu中进行相关的命令的练习,内容
- 实验二:基本编程结构控制练习,通过在华为云下OpenEuler中的编程练习,既掌握了有关C语言的知识,同时也对Linux系统命令行有一些新的认识理解分支结构和循环结构程序设计方法;掌握实现分支结构和循环结构控制语句的使用方法;掌握随机函数的使用方法。
点击查看内容
一、实验内容
1.内容:
计算机在教育中的应用常被称为计算机辅助教学(Computer-Assisted Instruction, CAI)。请编写一个程序来帮助小学生学习四则运算,按下列任务要求以循序渐进的方式编程。
(1)程序首先随机产生两个1~10之间的正整数,在屏幕上打印出问题,例如:
6*7=
然后让学生输入答案。程序检查学生输入的答案是否正确。若正确,则打印“Right”,然后问下一个问题;否则打印“Wrong! Please try again.”,然后提示学生重做,直到答对为止。
(2)在上述功能实现的基础之上,当学生回答错误时,最多给三次重做的机会,三次仍未做对,则提示“Wrong! You have tried three times! Test over!”,程序结束。
(3)在任务1的基础之上,连续做10道乘法运算题,不给机会重做,若学生回答正确,则显示“Right!”,否则显示“Wrong!”。10道题全部做完后,按每题10分统计并输出总分,同时为了记录学生能力提高的过程,再输出学生的回答正确率(即正确题数除以总题数的百分比)。
(4)在任务3的基础上,通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,不给机会重做,如果学生回答正确,则显示“Right!”,否则显示“Wrong!”。10道题全部做完后,按每题10分统计总得分,然后打印出总分和学生的回答正确率。
(5)在任务4的基础上,为使学生通过反复练习熟练掌握所学内容,在学生完成10道运算题后,若学生回答正确率低于75%,则重新做10道题,直到回答正确率高于75%时才退出程序。
(6)开发一个CAI系统所要解决的另一个问题是学生疲劳的问题。消除学生疲劳的一种办法就是通过改变人机对话界面来吸引学生的注意力。在任务5的基础上,使用随机数产生函数产生一个1~4之间的随机数,配合使用switch语句和printf()函数调用,来为学生输入的每一个正确或者错误的答案输出不同的评价。
对于正确答案,可以在以下4种提示信息中选择一个进行显示:
Very good!
Excellent!
Nice work!
Keep up the good work!
对于错误答案,可在以下4种提示信息中选择一个进行显示:
No. Please try again.
Wrong. Try once more.
Don’t give up!
Not correct. Keep trying.
2.算法与流程图:
算法使用了srand与time产生随机种子以及rand产生随机数,while类型的循环结构,switch case语句来执行选择分支以及goto语句来实现重复执行。
流程图(1):开始 -> 生成随机数1 -> 生成随机数2 -> 计算乘法结果 -> 打印问题 -> 输入答案 ->
检查答案是否正确? ->
是 -> 打印"Right" -> 生成随机数1 -> 生成随机数2 -> 计算乘法结果 -> 打印问题 -> 输入答案 -> 检查答案是否正确?
否 -> 打印"Wrong! Please try again." -> 提示学生重做 -> 输入答案 -> 检查答案是否正确? ->
是 -> 打印"Right" -> 生成随机数1 -> 生成随机数2 -> 计算乘法结果 -> 打印问题 -> 输入答案 -> 检查答案是否正确?
否 -> 打印"Wrong! Please try again." -> 提示学生重做 -> 输入答案 -> 检查答案是否正确? ->
是 -> 打印"Right" -> 生成随机数1 -> 生成随机数2 -> 计算乘法结果 -> 打印问题 -> 输入答案 -> 检查答案是否正确?
否 -> 打印"Wrong! Please try again." -> 提示学生重做 -> 输入答案 -> 检查答案是否正确? ->
是 -> 打印"Right" -> 结束
结束
(2):开始
生成两个1~10之间的随机数num1和num2
将问题打印到屏幕上,例如:num1 * num2 =
等待学生输入答案
如果学生输入的答案等于num1 * num2,则执行以下步骤:
打印“Right”
生成新的两个随机数
跳转到步骤2
否则,执行以下步骤:
打印“Wrong! Please try again.”
给学生最多三次重做的机会
如果学生重做了三次:
打印“Wrong! You have tried three times! Test over!”
结束程序
否则:
跳转到步骤4
结束
(3):开始
设置题目数量为0
设置正确答案数量为0
设置总分为0
重复10次:
生成随机数A(1-10之间的正整数)
生成随机数B(1-10之间的正整数)
计算正确答案C = A * B
显示问题:A * B =
输入学生答案D
如果D等于C,则:
显示“Right!”
增加正确答案数量
增加总分
否则:
显示“Wrong! Please try again.”
重复步骤:
输入学生答案D
如果D等于C,则:
显示“Right!”
增加正确答案数量
增加总分
退出重复步骤
否则:
显示“Wrong! Please try again.”
增加题目数量
计算正确率 = (正确答案数量 / 题目数量) * 100
显示总分
显示正确率
结束
(4):开始
初始化题目数量和得分为0
初始化答对题目数量为0
循环10次:
生成随机数a和b,范围为1~10
生成随机运算符op,范围为加、减、乘、整除中的任意一种
根据op生成对应的题目字符串question
打印question
接收学生输入的答案answer
如果answer等于a和b进行op运算的结果:
打印"Right!"
累加得分
累加答对题目数量
否则:
打印"Wrong! Please try again."
重复以上步骤,直到答对为止
结束循环
计算正确率correct_rate = (答对题目数量 / 题目数量) * 100
打印总得分和正确率
结束
(5):初始化计分器score为0,正确答案数量count为0,回答正确率rate为0。
进入循环,重复10次以下步骤: a. 生成两个1-10之间的随机数,记为num1和num2。 b. 随机选择一个运算符(加、减、乘、除),记为operator。 c. 根据运算符计算正确答案,记为correct_answer。 d. 打印问题,例如:num1 operator num2 = e. 接收学生输入的答案,记为user_answer。 f. 检查学生答案是否等于正确答案:
如果相等,打印"Right!",将score加10,count加1。
如果不相等,打印"Wrong! Please try again.",提示学生重新作答,直到回答正确为止,每次错误不计分。
计算回答正确率rate = (count / 10) * 100。
打印总分score和回答正确率rate。
如果回答正确率rate低于75%,则重新进行第2步的循环。
结束程序
(6):开始
设置题目数量为0
设置正确答案数量为0
设置回答正确率为0
循环直到回答正确率高于75%:
如果题目数量等于0:
生成两个1~10之间的随机数作为操作数
随机选择加、减、乘、整除中的一种作为运算类型
打印题目,例如:6*7=
获取学生输入的答案
验证答案是否正确:
如果答案正确:
打印"Right"
增加正确答案数量
否则:
打印"No. Please try again." 或 "Wrong. Try once more." 或 "Don’t give up!" 或 "Not correct. Keep trying." 中的一种
增加题目数量
如果题目数量等于10:
计算回答正确率
打印总得分和回答正确率
如果回答正确率低于75%:
重置题目数量为0
重置正确答案数量为0
重置回答正确率为0
结束
3.源程序与运行结果
源程序(以第六个为例):#include<bits/stdc++.h>
#include<cmath>
#include<time.h>
#define EPS 1e-7
using namespace std;
int main(){
srand(time(NULL));
int m1,m2,m3,ans1,std1,count,sum,score;
float rate;
EXIT: sum=0;
for(int i=1;i<=10;i++){
m1=rand()%10+1;
m2=rand()%10+1;
m3=rand()%4+1;
switch(m3){
case(1):std1=m1*m2;cout<<m1<<"*"<<m2<<"="<<endl<<"请输入你的答案:"; break;
case(4):std1=m1/m2;cout<<m1<<"/"<<m2<<"="<<endl<<"请输入你的答案:"; break;
case(3):std1=m1+m2;cout<<m1<<"+"<<m2<<"="<<endl<<"请输入你的答案:"; break;
case(2):std1=m1-m2;cout<<m1<<"-"<<m2<<"="<<endl<<"请输入你的答案:"; break;
}
if(m3==4)
{
double ans2;
float std2 =(float) m1/m2;
cin>>ans2;
if(fabs(ans2-std2)<=EPS){
switch(m3){
case(1): cout<<"Very good!"<<endl; break;
case(2): cout<<"Excellent!"<<endl; break;
case(3): cout<<"Nice work!"<<endl;break;
case(4): cout<<"Keep up the good work!"<<endl;break;
}
sum++;
}
else {
switch(m3){
case(1): cout<<"No.Please try again."<<endl;break;
case(2): cout<<"Wrong. Try once more."<<endl;break;
case(3): cout<<"Don't give up"<<endl;break;
case(4): cout<<"Not correct.Keep trying."<<endl;break;
}
}
}
else
{
cin>>ans1;
if(ans1==std1){
switch(m3){
case(1): cout<<"Very good!"<<endl;break;
case(2): cout<<"Excellent!"<<endl;break;
case(3): cout<<"Nice work!"<<endl;break;
case(4): cout<<"Keep up the good work!"<<endl;break;
}
sum++;
}
else
{
switch(m3){
case(1): cout<<"No.Please try again."<<endl;break;
case(2): cout<<"Wrong. Try once more."<<endl;break;
case(3): cout<<"Don't give up"<<endl;break;
case(4): cout<<"Not correct.Keep trying."<<endl;break;
}
}
}
}
score=sum*10;
rate=(sum/10.0)*100;
if(sum<=7){
cout<<endl<<"请重新开始"<<endl;
goto EXIT;
}
else{
cout<<"得分"<<score<<endl<<"得分率:"<<rate<<"%";
}
return 0;
}
点击查看代码
实验四 函数与数组编程练习
1.1 实验环境
环境说明
本实验环境面向搭建服务器版实验环境。实验环境包括openEuler操作系统、鲲鹏云服务器。
设备介绍
为了满足实验需要,建议每套实验环境采用以下配置
名称 云主机名称 配置 OS版本
鲲鹏云服务器 kp-test01 kc1.large.2 2vCPUs | 4GB openEuler 20.03 LTS
软件介绍
本实验用到的工具如下表,请提前准备好相关工具。
软件名称 使用说明
putty https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
winScp https://winscp.net/eng/download.php
实验拓扑
图1-1 openEuler基础操作实验环境 - 服务器版
提示:实验所需虚拟机均已配置完成,请按照授课老师安排登录各自的虚拟机完成实验操作。
1.2 熟悉程序开发平台
1.2.1 关于本实验
本实验主要介绍C程序在鲲鹏平台openEuler上编译以及运行。通过本实验,您将能够掌握在C程序的编译,熟悉在鲲鹏平台openEuler下C程序的部署和运行。
1.2.2 实验目的与要求
实验目的:熟悉程序开发平台。
实验要求:掌握C语言程序的程序开发过程,熟悉C语言程序在华为鲲鹏平台下的编译、运行。
1.2.3 实验内容及规划
实验内容:
(1) 在华为云上创建虚拟鲲鹏服务器程序开发平台;
(2) 在鲲鹏服务器程序开发平台上编译运行平方根求和程序。
实验规划:
本实验需要用到一台鲲鹏架构下装有openEuler操作系统的虚拟机,要求虚拟机配置为2vCPU | 4G RAM | 40G ROM,且可连接公网。
1.2.4 C语言开发环境搭建
1.2.4.1 购买云服务器
步骤1 打开华为公有云www.huaweicloud.com网页,点击右上角“登录”,在登录窗口中输入账号密码登录华为公有云。
步骤2 选择“产品”“基础服务”“虚拟私有云 VPC”。
步骤3 点击“访问控制台”,进入网络控制台VPC页签。在网络控制台VPC页签点击右上角“创建虚拟私有云”选项。
步骤4 按照如下表格配置VPC属性,然后点击右下角“立即创建”。
参数 配置
区域 华北-北京四
名称 vpc-test
网段 192.168.1.0/24
子网可用区 可用区1
子网名称 subnet-test
子网网段 192.168.1.0/24
步骤5 展开网络控制台左侧列表的访问控制,选择“安全组”,进入安全组页签。默认安全组即可。
步骤6 选择“服务列表”“计算”“弹性云服务器ECS”,进入云服务器控制台的弹性云服务器页签。
步骤7 点击“购买弹性云服务器”,按如下参数分别购买一台弹性云服务器。
参数 openEuler配置
计费模式 按需计费
区域 华北-北京四
CPU架构 鲲鹏计算
规格 kc1.large.2 | 2vCPUs | 4GB
公共镜像 openEuler 20.03 64bit with ARM(40GB)
系统盘 高I/O,40GB
网络 vpc-test | subnet-test | 手动分配IP地址 | 192.168.1.20
安全组 Sys-default
弹性公网IP 现在购买
路线 全动态BGP
公网带宽 按流量计费
带宽大小 5Mbit/s
云服务器名称 openEuler
登录凭证 密码
用户名 root
密码/确认密码 自行设置密码,要求8位以上且包含大小写字母、数字、特殊字符中三种以上字符
云备份 暂不购买
点击“下一步:配置网络”。
点击“下一步:高级配置”。
点击“下一步:确认配置”。
勾选“我已阅读***”,点击“立即购买”。
步骤8 购买完成后,点击“返回云服务器列表”,查看购买的服务器状态信息。同时也可以在云服务器列表中看到该弹性云服务器的弹性公网IP地址。
1.2.4.2 环境登录验证
步骤1 打开电脑上putty工具,点击红色方框内的图标新建会话。
步骤2 如图,红框填写为申请的弹性公网ip,点击open按钮。
步骤3 进行身份验证设置,在login as输入用户名root,图中password输入购买ECS时设置的密码,点击确定, 出现Welcome to Huawei Cloud Service表示链接成功。
步骤4 打开检查编译器是否安装,openEuler自带版本为gcc7.3.0,满足实验要求。输入命令gcc –v ;g++ -v
1.2.5 C语言平方根求和程序开发
1.2.5.1 代码开发
使用C语言实现功能:对输入的两个数分别求平方根,然后进行加法运算,并对运算结果在屏幕做显示。程序启动时,要进行运算的两个数作为程序启动参数。
通过实验,可以学习对linux c语言对数学库的使用方法。
步骤1 代码开发
采用华为提供的代码,实际上课过程中可作为编程题目,让学生自行完后才能代码编写。程序包含三个文件:main.c、sqrtSum.c、sqrtSum.h,代码如下:
main.c
#include <stdio.h>
#include <stdlib.h>
#include "sqrtSum.h"
int main(int argc, char** argv)
{
if (argc != 3 || NULL == argv)
{
printf("format is sqrtSum x y, x is the first num, y is the second num\n");
return -1;
}
double x = atof(argv[1]);
double y = atof(argv[2]);
double z = sqrtSum(x, y);
printf("sqrt %6.2lf + sqrt %6.2lf = %6.2lf\n",x, y, z);
return 0;
}
sqrtSum.h:
#ifndef SQRT_SUM_H_H
#define SQRT_SUM_H_H
#include <math.h>
double sqrtSum(double x, double y);
#endif
sqrtSum.c
#include "sqrtSum.h"
double sqrtSum(double x, double y)
{
return sqrt(x) + sqrt(y);
}
1.2.5.2 代码编译运行
步骤1 在ECS主机上新建test目录,输入命令:
[root@kp-test test]# mkdir test
[root@kp-test test]# ls
test
[root@kp-test test]#
步骤2 上传源码至ECS主机。
打开winscp输入用户名和密码,把本地代码上传至ECS服务器
步骤3 进入ECS主机test目录,对已上传的程序文件进行编译。
进入目录:
[root@ecs-34bd]# cd test
检查文件:
[root@ecs-34bd test]# ls
main.c sqrtSum.c sqrtSum.h
编译程序,如下图:生成可执行文件test,说明编译成功。
[root@ecs-34bd test]# gcc -mabi=lp64 -march=armv8-a -o test main.c sqrtSum.c -g -lm
[root@ecs-34bd test]# ls
main.c sqrtSum.c sqrtSum.h test
1.2.5.3 代码验证调测
在test目录,执行命令 ./test 9 16 ,对9和16分别求平方根,然后相加。根据输出信息,检验程序运算结果的正确性。正确运行结果,如下图所示:
[root@ecs-34bd test]# ls
main.c sqrtSum.c sqrtSum.h test
[root@ecs-34bd test]# ./test 9 16
sqrt 9.00 + sqrt 16.00 = 7.00
[root@ecs-34bd test]#
实验完成,返回上级目录:cd ..; 删除test目录:rm –rf test;
[root@kp-test test]# pwd
/root/test
[root@kp-test test]# cd ..
[root@kp-test ~]# rm -rf test
[root@kp-test ~]#
1.3 函数与数组的使用
1.3.1 实验内容
1.学生成绩管理系统V1.0
某班有最多不超过40人(具体人数由键盘输入)参加某门课程的考试,用数组作函数参数编程实现如下学生成绩管理:
(1)录入每个学生的学号和考试成绩;
(2)计算课程的总分和平均分;
(3)按成绩由高到低排出名次表;
(4)按学号由小到大排出成绩表;
(5)按学号查询学生排名及其考试成绩;
(6)按优秀(90-100)、良好(80-89)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,统计每个类别的人数以及所占的百分比;
(7)输出每个学生的学号、考试成绩,课程总分和平均分。
2.学生成绩管理系统V1.1
在学生成绩管理系统V1.0的基础上,要求程序运行后先显示如下菜单,并提示用户输入选项:
(1)Append record
(2)Calculate total and average score of course
(3)Sort in descending order by score
(4)Sort in ascending order by number
(5)Search by number
(6)Statistic analysis
(7)List record
(8)Exit
1.3.2 实验目的与要求
1.掌握函数的使用方法;
2.掌握数组的使用方法;
3.掌握数组作函数参数的方法;
4.运用排序、查找等常用算法;
5.掌握模块化程序设计的方法。
1.3.3 代码编译运行
步骤1 在ECS主机上新建test目录,输入命令:mkdir test。
[root@kp-test test]# mkdir test
[root@kp-test test]# ls
test
[root@kp-test test]#
步骤2 上传源码至ECS主机。
打开winscp输入用户名和密码,把本地代码(如main.c)上传至ESC服务器上。
步骤3 进入ECS主机test目录,对已上传的程序文件进行编译。
进入目录:
[root@ecs-34bd]# cd test
检查文件:
[root@ecs-34bd test]# ls
main.c
编译程序,如下:生成可执行文件test,说明编译成功。
[root@ecs-34bd test]# gcc -mabi=lp64 -march=armv8-a -o test main.c -g
[root@ecs-34bd test]# ls
main.c test
1.3.4 代码验证调测
在test目录,执行命令 ./test 会有参数提示。正确运行结果,如下图所示:
[root@ecs-34bd test]# ./test
等待老师检查实验结果!
实验完成,返回上级目录:cd ..; 删除test目录:rm –rf test;
[root@kp-test test]# pwd
/root/test
[root@kp-test test]# cd ..
[root@kp-test ~]# rm -rf test
[root@kp-test ~]#
点击查看代码
实验六 文件与结构体编程练习
1.1 实验环境
环境说明
本实验环境面向搭建服务器版实验环境。实验环境包括openEuler操作系统、鲲鹏云服务器。
设备介绍
为了满足实验需要,建议每套实验环境采用以下配置
名称 云主机名称 配置 OS版本
鲲鹏云服务器 kp-test01 kc1.large.2 2vCPUs | 4GB openEuler 20.03 LTS
软件介绍
本实验用到的工具如下表,请提前准备好相关工具。
软件名称 使用说明
putty https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
winScp https://winscp.net/eng/download.php
实验拓扑
图1-1 openEuler基础操作实验环境 - 服务器版
提示:实验所需虚拟机均已配置完成,请按照授课老师安排登录各自的虚拟机完成实验操作。
1.2 熟悉程序开发平台
1.2.1 关于本实验
本实验主要介绍C程序在鲲鹏平台openEuler上编译以及运行。通过本实验,您将能够掌握在C程序的编译,熟悉在鲲鹏平台openEuler下C程序的部署和运行。
1.2.2 实验目的与要求
实验目的:熟悉程序开发平台。
实验要求:掌握C语言程序的程序开发过程,熟悉C语言程序在华为鲲鹏平台下的编译、运行。
1.2.3 实验内容及规划
实验内容:
(1) 在华为云上创建虚拟鲲鹏服务器程序开发平台;
(2) 在鲲鹏服务器程序开发平台上编译运行平方根求和程序。
实验规划:
本实验需要用到一台鲲鹏架构下装有openEuler操作系统的虚拟机,要求虚拟机配置为2vCPU | 4G RAM | 40G ROM,且可连接公网。
1.2.4 C语言开发环境搭建
1.2.4.1 购买云服务器
步骤1 打开华为公有云www.huaweicloud.com网页,点击右上角“登录”,在登录窗口中输入账号密码登录华为公有云。
步骤2 选择“产品”“基础服务”“虚拟私有云 VPC”。
步骤3 点击“访问控制台”,进入网络控制台VPC页签。在网络控制台VPC页签点击右上角“创建虚拟私有云”选项。
步骤4 按照如下表格配置VPC属性,然后点击右下角“立即创建”。
参数 配置
区域 华北-北京四
名称 vpc-test
网段 192.168.1.0/24
子网可用区 可用区1
子网名称 subnet-test
子网网段 192.168.1.0/24
步骤5 展开网络控制台左侧列表的访问控制,选择“安全组”,进入安全组页签。默认安全组即可。
步骤6 选择“服务列表”“计算”“弹性云服务器ECS”,进入云服务器控制台的弹性云服务器页签。
步骤7 点击“购买弹性云服务器”,按如下参数分别购买一台弹性云服务器。
参数 openEuler配置
计费模式 按需计费
区域 华北-北京四
CPU架构 鲲鹏计算
规格 kc1.large.2 | 2vCPUs | 4GB
公共镜像 openEuler 20.03 64bit with ARM(40GB)
系统盘 高I/O,40GB
网络 vpc-test | subnet-test | 手动分配IP地址 | 192.168.1.20
安全组 Sys-default
弹性公网IP 现在购买
路线 全动态BGP
公网带宽 按流量计费
带宽大小 5Mbit/s
云服务器名称 openEuler
登录凭证 密码
用户名 root
密码/确认密码 自行设置密码,要求8位以上且包含大小写字母、数字、特殊字符中三种以上字符
云备份 暂不购买
点击“下一步:配置网络”。
点击“下一步:高级配置”。
点击“下一步:确认配置”。
勾选“我已阅读***”,点击“立即购买”。
步骤8 购买完成后,点击“返回云服务器列表”,查看购买的服务器状态信息。同时也可以在云服务器列表中看到该弹性云服务器的弹性公网IP地址。
1.2.4.2 环境登录验证
步骤1 打开电脑上putty工具,点击红色方框内的图标新建会话。
步骤2 如图,红框填写为申请的弹性公网ip,点击open按钮。
步骤3 进行身份验证设置,在login as输入用户名root,图中password输入购买ECS时设置的密码,点击确定, 出现Welcome to Huawei Cloud Service表示链接成功。
步骤4 打开检查编译器是否安装,openEuler自带版本为gcc7.3.0,满足实验要求。输入命令gcc –v ;g++ -v
1.2.5 C语言平方根求和程序开发
1.2.5.1 代码开发
使用C语言实现功能:对输入的两个数分别求平方根,然后进行加法运算,并对运算结果在屏幕做显示。程序启动时,要进行运算的两个数作为程序启动参数。
通过实验,可以学习对linux c语言对数学库的使用方法。
步骤1 代码开发
采用华为提供的代码,实际上课过程中可作为编程题目,让学生自行完后才能代码编写。程序包含三个文件:main.c、sqrtSum.c、sqrtSum.h,代码如下:
main.c
#include <stdio.h>
#include <stdlib.h>
#include "sqrtSum.h"
int main(int argc, char** argv)
{
if (argc != 3 || NULL == argv)
{
printf("format is sqrtSum x y, x is the first num, y is the second num\n");
return -1;
}
double x = atof(argv[1]);
double y = atof(argv[2]);
double z = sqrtSum(x, y);
printf("sqrt %6.2lf + sqrt %6.2lf = %6.2lf\n",x, y, z);
return 0;
}
sqrtSum.h:
#ifndef SQRT_SUM_H_H
#define SQRT_SUM_H_H
#include <math.h>
double sqrtSum(double x, double y);
#endif
sqrtSum.c
#include "sqrtSum.h"
double sqrtSum(double x, double y)
{
return sqrt(x) + sqrt(y);
}
1.2.5.2 代码编译运行
步骤1 在ECS主机上新建test目录,输入命令:
[root@kp-test test]# mkdir test
[root@kp-test test]# ls
test
[root@kp-test test]#
步骤2 上传源码至ECS主机。
打开winscp输入用户名和密码,把本地代码上传至ECS服务器
步骤3 进入ECS主机test目录,对已上传的程序文件进行编译。
进入目录:
[root@ecs-34bd]# cd test
检查文件:
[root@ecs-34bd test]# ls
main.c sqrtSum.c sqrtSum.h
编译程序,如下图:生成可执行文件test,说明编译成功。
[root@ecs-34bd test]# gcc -mabi=lp64 -march=armv8-a -o test main.c sqrtSum.c -g -lm
[root@ecs-34bd test]# ls
main.c sqrtSum.c sqrtSum.h test
1.2.5.3 代码验证调测
在test目录,执行命令 ./test 9 16 ,对9和16分别求平方根,然后相加。根据输出信息,检验程序运算结果的正确性。正确运行结果,如下图所示:
[root@ecs-34bd test]# ls
main.c sqrtSum.c sqrtSum.h test
[root@ecs-34bd test]# ./test 9 16
sqrt 9.00 + sqrt 16.00 = 7.00
[root@ecs-34bd test]#
实验完成,返回上级目录:cd ..; 删除test目录:rm –rf test;
[root@kp-test test]# pwd
/root/test
[root@kp-test test]# cd ..
[root@kp-test ~]# rm -rf test
[root@kp-test ~]#
1.3 文件与结构体编程练习
1.3.1 实验内容
1.学生成绩管理系统V2.0
学生成绩管理系统是一个非常实用的程序,如果能够把用户输入的数据存盘,下次运行时读出,就更有用了。
某班有最多不超过40人(具体人数由键盘输入)参加期末考试,考试科目为数学(MT)、英语(EN)和物理(PH)。利用结构体编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的学号、姓名和各科考试成绩;
(2)计算每个学生的总分和平均分;
(3)按每个学生的总分由低到高排出名次表;
(4)按姓名的字典顺序排出成绩表;
(5)按姓名查询学生排名及其考试成绩;
(6)将每个学生的记录信息写入文件,包括每个学生的学号、姓名,各科考试成绩,以及其总分与平均分;
(7)从文件中读出每个学生的记录信息并显示。
要求程序运行后先显示如下菜单,并提示用户输入选项:
1.Append record
2.Caculate total and average score of every student
3.Sort in ascending order by total score of every student
4.Sort in dictionary order by name
5.Search by name
6.Write to a file
7.Read from a file
0.Exit
Please enter your choice:
然后,根据用户输入的选项执行相应的操作。
1.3.2 实验目的与要求
1.掌握文件的打开、读、写及关闭操作;
2.掌握结构体的使用方法;
3. 文件可以是文本文件,也可以是二进制文件,注意选择正确的读写函数
1.3.3 代码编译运行
步骤1 在ECS主机上新建test目录,输入命令:mkdir test。
[root@kp-test test]# mkdir test
[root@kp-test test]# ls
test
[root@kp-test test]#
步骤2 上传源码至ECS主机。
打开winscp输入用户名和密码,把本地代码(如main.c)上传至ESC服务器上。
步骤3 进入ECS主机test目录,对已上传的程序文件进行编译。
进入目录:
[root@ecs-34bd]# cd test
检查文件:
[root@ecs-34bd test]# ls
main.c
编译程序,如下图:生成可执行文件test,说明编译成功。
[root@ecs-34bd test]# gcc -mabi=lp64 -march=armv8-a -o test main.c -g
[root@ecs-34bd test]# ls
main.c test
1.3.4 代码验证调测
在test目录,执行命令 ./test 会有参数提示。正确运行结果,如下图所示:
[root@ecs-34bd test]# ./test
等待老师检查实验结果!
实验完成,返回上级目录:cd ..; 删除test目录:rm –rf test;
[root@kp-test test]# pwd
/root/test
[root@kp-test test]# cd ..
[root@kp-test ~]# rm -rf test
[root@kp-test ~]#
回答问题
1.计算系统的分层依据是什么?
计算系统的分层依据通常是根据功能和责任来进行划分的。一个系统可以被分成多个层次,每个层次负责不同的功能,且各层次之间有明确的接口和依赖关系。
2.如何在将来学科学习中利用抽象?
在将来学科学习中,可以利用抽象来帮助理解和解决问题。通过抽象,可以将复杂的问题简化为更容易理解和处理的形式。例如,可以将一个复杂的概念或问题抽象成一个模型或图表,从而更容易理解和分析。此外,抽象还可以帮助学习者更深入地理解学科的基本原理和概念,从而更好地应用和拓展知识。
3.位置计数法是谁率先提出来的,怎么推广使用的?
位置计数法最早是由古巴比伦人使用的,他们在公元前3千年左右率先提出了这种计数法。后来,这种计数法被阿拉伯人推广使用,并最终成为了我们今天所使用的十进制系统。
4.早期十进制计算机怎么工作,是因为效率不如高低电平的二进制计算机而被淘汰吗?
早期的十进制计算机使用的是十进制逻辑,而不是二进制逻辑。这些计算机使用十进制数字系统进行运算,但由于二进制计算机在处理逻辑和存储方面更加高效,因此十进制计算机逐渐被淘汰。
5.负数和浮点数的二进制格式怎么表示?
负数的二进制表示:
负数的二进制表示通常使用补码形式。补码是将正数的二进制表示取反后加1得到的。例如,-5的二进制表示为11111011。
浮点数的二进制表示:
浮点数的二进制表示通常使用IEEE 754标准。该标准将浮点数表示为三个部分:符号位、指数位和尾数位。符号位表示正负,指数位表示数值的指数部分,尾数位表示数值的尾数部分。例如,-3.14的二进制表示为11000000010100011110101110000101。
6.CPU中有的逻辑门
CPU中常见的逻辑门包括与门、或门、非门、与非门、或非门等。这些逻辑门可以组合成各种复杂的逻辑电路,用于执行各种计算和控制任务。
7.晶体管的制作材料和作用行为
晶体管的制作材料通常是硅(Si)或砷化镓(GaAs)等半导体材料。晶体管的作用是控制电流的流动,从而实现信号放大、开关控制等功能。晶体管的行为包括放大作用、开关作用和控制作用,是现代电子设备中不可或缺的基本元件。
8.如何用专业的语言访问计算机的内存?
要访问计算机的内存,可以使用专业术语和语言来描述。例如,可以说“通过内存地址总线和数据总线,CPU可以向内存模块发送读取或写入指令,以实现对特定内存地址的访问和数据的读写操作。”
9.冯诺依曼机和当代计算机的差别
冯诺依曼机是一种基于存储程序的计算机结构,其中程序和数据存储在同一内存中,而当代计算机采用了分布式存储和并行处理的方式,使得程序和数据可以同时存储在不同的存储设备中,并且可以同时进行多个计算任务,从而提高了计算效率。此外,当代计算机还采用了更加复杂的指令集和多层次的缓存结构,以提高计算机的性能和响应速度。
10.伪代码和代码的区别
伪代码是一种类似于编程语言的描述性语言,用于描述算法和程序逻辑,通常不是可执行的。而代码是实际的编程语言,可以被计算机执行。
11.低级程序设计语言和伪代码于今是否有必要在不同领域的应用进行创新和拓展?
低级程序设计语言和伪代码在不同领域的应用都有必要进行创新和拓展。低级程序设计语言可以在嵌入式系统、操作系统等领域进行优化和改进,以提高系统性能和效率。而伪代码可以在教育、算法设计等领域进行创新,以更好地描述算法逻辑和帮助程序员理解和设计复杂的程序
12.C中的算法基础代码与C++有区别吗?
有
13.如何在学习C++后重新对栈和子函数有更深的理解与认识?
深入学习C++的语法和特性:了解C++中的类和对象、指针和引用、模板和泛型编程等特性,这些知识对于理解栈和子函数的实现和使用非常重要。
研究C++标准库:了解标准库中与栈和子函数相关的数据结构和函数,例如std::stack和std::function等,这些库可以帮助你更好地理解栈和子函数的实现原理和使用方法。
14.如何在高级程序设计语言中提供更灵活和高效的方式来自定义数据结构和算法?
在高级程序设计语言中,可以提供更灵活和高效的方式来自定义数据结构和算法的方法包括:
提供更多的数据结构和算法库,以便开发人员可以直接使用已经实现好的数据结构和算法,而不需要重复造轮子。
15.如何在面向对象设计中提供更好的组织和管理大量类的方式,以降低系统的复杂性
在面向对象设计中,可以提供更好的组织和管理大量类的方式,以降低系统的复杂性的方法包括:
提供更好的模块化和命名空间支持,以便开发人员可以更好地组织和管理大量的类。
16.是否能通过对操作系统的创新来提高计算机系统的安全性?
通过对操作系统的创新可以提高计算机系统的安全性。例如,引入新的安全机制、加强对系统漏洞的监测和修复、提高对恶意软件的识别和防范能力等都可以提高操作系统的安全性。
17.如何设计一个操作系统,使得它能够与智能设备和机器人进行无缝集成,并提供高性能的计算和数据处理能力?
要设计一个能够与智能设备和机器人无缝集成的操作系统,需要考虑以下几点:
支持多种通信协议和接口,以便与不同类型的智能设备和机器人进行连接和通信。
提供高性能的计算和数据处理能力,以满足智能设备和机器人对于实时数据处理和决策的需求。
引入人工智能和机器学习技术,以便操作系统能够理解和适应智能设备和机器人的行为和需求。
提供可靠的安全机制,以保护与智能设备和机器人的通信和数据传输安全。
18.如何设计一种高效的文件系统,能够支持大规模的文件存储和快速的数据访问?
数据存储和管理:文件系统需要能够有效地存储大规模的文件数据,并且能够对数据进行管理和组织,以便快速的数据访问。这可以通过采用分布式存储和索引技术来实现,例如采用分布式文件系统和元数据索引技术。
数据访问和传输:文件系统需要能够支持快速的数据访问和传输,以便用户能够快速地获取所需的文件数据。这可以通过采用高速网络传输技术和数据缓存技术来实现,以提高数据的访问速度和传输效率。
19.信息系统中的数据管理是如何实现的?
信息系统中的数据管理通常通过数据库管理系统(DBMS)来实现。DBMS负责管理数据的存储、检索、更新和删除,同时确保数据的完整性、一致性和安全性。通过定义数据模型、建立数据表、设置访问权限和实施数据备份等功能,DBMS能够有效地管理和保护信息系统中的数据。
20.如何保护信息系统的安全性?
保护信息系统的安全性需要采取多种措施,包括但不限于:建立严格的访问控制机制,限制用户对系统和数据的访问权限;加密敏感数据,确保数据在传输和存储过程中不被窃取或篡改;实施安全审计和监控,及时发现和应对安全事件;定期进行安全漏洞扫描和补丁更新,确保系统的安全性;培训和教育员工,提高其对安全问题的意识和应对能力。综合这些措施可以有效地保护信息系统的安全性。
21.人工智能的发展历程是怎样的?它是如何从理论到实践逐渐成为现实的?
人工智能的发展历程可以追溯到20世纪50年代,当时科学家们开始探索如何使机器具有智能。随着计算机技术的发展,人工智能的理论研究逐渐深入,包括机器学习、神经网络等方面的理论逐渐成熟。随着计算能力的提升和大数据的普及,人工智能逐渐从理论走向实践,应用于各个领域,如自然语言处理、图像识别、智能驾驶等,成为现实生活中的一部分
22.在图灵测试中,测试者如何判断被测试对象是人还是机器?
在图灵测试中,测试者通过与被测试对象进行对话来判断其是否是人还是机器。如果测试者无法通过对话判断出被测试对象是机器,那么可以认为该机器通过了图灵测试,具有智能。测试者会提出各种问题来测试被测试对象的智能和自然语言理解能力,如果被测试对象能够以人类的方式回答问题,那么就会被认为具有智能
23.在模拟、图形学、游戏和其他应用中,常用的算法和技术有哪些?
在模拟、图形学、游戏和其他应用中常用的算法和技术包括:
模拟:蒙特卡罗方法、分子动力学、有限元分析等
图形学:光线追踪、着色器编程、纹理映射等
游戏:物理引擎、人工智能、多人联机技术等
其他应用:机器学习、数据挖掘、虚拟现实等
24.计算机硬件的性能对复杂系统性能有何影响?
计算机硬件的性能对复杂系统性能有重要影响。例如,CPU的速度和核心数量决定了系统的计算能力;GPU的性能影响了图形处理和并行计算的效率;存储设备的速度和容量影响了数据的读写速度和处理能力;网络传输速度和稳定性影响了多人联机游戏和云计算服务的质量等。因此,选择合适的硬件配置对于复杂系统的性能优化至关重要
25.未来如何创造有更高级别的IPv协议
支持更大规模的互联网设备:随着物联网设备的增加,未来的IPv协议需要能够支持更大规模的设备连接,同时保证网络的安全性和稳定性。
更高效的数据传输:未来的IPv协议可能需要采用更高效的数据传输方式,如使用更先进的数据压缩和传输技术,以提高网络的传输效率。
更强的安全性和隐私保护:随着网络安全威胁的增加,未来的IPv协议需要具备更强的安全性和隐私保护能力,以保护用户的数据和网络安全。
更好的可扩展性:未来的IPv协议需要具备更好的可扩展性,能够适应不断增长的网络规模和需求,同时保持网络的稳定性和性能。
26.区块链的去中心化特性如何影响其性能和可扩展性?
性能:区块链的去中心化特性可能会影响其性能,因为所有的交易和数据都需要通过网络中的多个节点来验证和确认,这可能会导致交易速度较慢和网络拥堵的问题。
可扩展性:区块链的去中心化特性也可能会影响其可扩展性,因为随着区块链网络的增长,可能会出现网络拥堵和交易处理速度下降的问题,需要采取一些技术手段来提高区块链网络的可扩展性。
安全性:区块链的去中心化特性可能会增强其安全性,因为去中心化可以减少单点故障的风险,同时也可以增加网络的抗攻击能力。
27.XML和HTML的语法结构有何区别?
HTML是一种标记语言,用于创建网页和网页内容的呈现,它包含一系列预定义的标签和属性,用于定义文档结构和呈现方式。XML是一种可扩展标记语言,用于描述数据的结构和内容,它允许用户自定义标签和属性,用于表示任意类型的数据。
HTML的语法相对简单,包含一些固定的标签和属性,而XML的语法更灵活,允许用户根据需要定义自己的标签和属性,因此更通用。
28.XML和HTML在数据表示和数据交互方面有何不同的特点?
HTML主要用于表示和呈现网页内容,它包含一些固定的标签和属性,用于展示文本、图像、链接等内容。XML则更适用于描述和表示数据的结构和内容,可以用于表示复杂的数据关系和层次结构。
HTML的数据交互主要通过网页表单和超链接实现,用户可以通过表单输入数据,通过超链接跳转到其他页面。XML则更适用于数据的传输和交换,它可以用于描述数据的结构和内容,并通过各种协议和技术进行数据的传输和交换,如SOAP、REST等。
29.有哪些常见的计算机安全威胁和攻击方式,如何预防和应对这些威胁?
定期更新操作系统和软件,及时安装安全补丁。
安装并定期更新杀毒软件和防火墙,加强网络安全防护。
加强员工安全意识培训,避免社交工程和网络钓鱼攻击。
使用强密码,并定期更换密码。
实施访问控制和权限管理,限制员工对敏感数据和系统的访问权限。
定期备份数据,以防勒索软件攻击。
30.在计算机安全领域中,有哪些常见的密码学算法和技术,它们是如何保护数据的机密性和完整性的?
常见的密码学算法和技术包括:对称加密算法(如DES、AES)、非对称加密算法(如RSA)、哈希函数(如MD5、SHA-256)、数字签名等。这些算法和技术通过加密和解密数据、生成和验证数字签名等方法,保护数据的机密性和完整性。对称加密算法使用相同的密钥进行加密和解密,非对称加密算法使用公钥和私钥进行加密和解密,哈希函数用于生成数据的摘要,数字签名用于验证数据的真实性和完整性。这些算法和技术在数据传输和存储过程中起到了保护数据安全的作用。
31.计算机科学中的计算有哪些限制?是否存在问题现阶段无法通过计算机解决的情况?
计算能力限制:计算机的计算能力受到硬件性能和算法复杂度的限制,对于复杂的计算任务可能需要很长时间甚至无法完成。
存储限制:计算机的存储容量有限,对于大规模数据处理和存储可能存在限制。
精度限制:计算机在进行数值计算时存在精度限制,可能会出现舍入误差和精度损失的问题。
算法限制:某些问题的解决可能需要复杂的算法,而目前尚无有效的算法能够高效解决这些问题。
在目前阶段,计算机虽然在很多领域取得了巨大的成功,但仍然存在一些问题无法通过计算机解决,比如:
某些复杂的科学问题,如蛋白质折叠、气候变化模拟等,需要超级计算机或者量子计算机等更强大的计算资源才能解决。
某些人类智能领域,如情感理解、创造性思维等,目前计算机无法完全模拟人类的智能行为。
某些庞大的数据分析和处理任务,由于计算机存储和计算能力的限制,可能无法在合理的时间内完成。
优秀作业
1、https://www.cnblogs.com/raymongillichmks/p/17901886.html
2、https://www.cnblogs.com/raymongillichmks/p/17865563.html
3、https://www.cnblogs.com/raymongillichmks/p/17789446.html
课程总结
首先,我学习了计算机的基本组成部分,包括中央处理器(CPU)、存储器(内存)、输入输出设备(键盘、鼠标、显示器、打印机等)以及它们之间的连接方式。我了解到CPU是计算机的大脑,负责执行各种指令;内存是用来存储数据和程序的地方;输入输出设备则是用来与用户进行交互的工具。
其次,我学习了计算机的指令执行过程,包括指令的获取、解码、执行和结果写回等过程。我了解到计算机是通过时钟信号来控制指令的执行,而指令的执行是按照顺序逐条进行的。
此外,我还学习了计算机的存储器层次结构,包括寄存器、高速缓存、主存储器和辅助存储器等。我了解到不同层次的存储器有着不同的速度和容量特点,计算机系统会根据数据的访问频率和速度要求来进行数据的存取。