2023-2024-1 20231403 《计算机基础与程序设计》第十五周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>(如2022-2023-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | 2023-2024-1计算机基础与程序设计第十五周作业) |
这个作业的目标 | 课程总结 |
作业正文 |
作业内容
第一周作业
简要内容:
快速浏览教材,每一章提出至少2个不明白的问题。
https://www.cnblogs.com/lsrmy/p/17737765.html
第二周作业
简要内容:
学习《计算机基础与程序设计》第一章与《C语言程序设计》第一章并完成云班课测试题
学习编程的意义
计算系统的定义及分层,计算机的历史进程
https://www.cnblogs.com/lsrmy/p/17747323.html
师生关系
https://www.cnblogs.com/lsrmy/p/17764705.html
第三周作业
简要内容:
学习《计算机基础与程序设计》第2、3章、《C语言程序设计》第2章,并完成相关测试题。
二进制计数系统,位置计数法,二进制、八进制、十六进制与十进制的转化,计算机中不同形式的数据的表示方法
常量、变量,数据类型,变量赋值
https://www.cnblogs.com/lsrmy/p/17764993.html
第四周作业
简要内容:
学习《计算机科学概论》第4、5章和《C语言程序设计》第三章,并完成相关测试题。
逻辑门,计算机结构,冯·诺伊曼体系结构
算术运算符和表达式,宏常量与const常量
https://www.cnblogs.com/lsrmy/p/17780154.html
寻找我的黑客偶像
https://www.cnblogs.com/lsrmy/p/17780669.html
第五周作业
简要内容:
学习《计算机科学概论》第5章和《C语言程序设计》第4章,并完成相关测试题。
机器语言、汇编语言、伪代码以及测试
字符常量及字符的输入和输出
https://www.cnblogs.com/lsrmy/p/17795646.html
第六周作业
简要内容:
学习《计算机科学概论》第七章和《C语言程序设计》第五章,并完成相关测试题。
解决问题的方法步骤,算法
关系运算符和关系表达式,条件运算符和条件表达式,逻辑运算符和逻辑表达式
https://www.cnblogs.com/lsrmy/p/17810354.html
第七周作业
简要内容:
学习《计算机科学概论》第八章和《C语言程序设计》第六章,并完成相关测试题。
抽象数据类型,栈、队列、列表、树等四种数据结构及其伪代码
计数控制循环、嵌套循环、条件控制循环,流程转移控制
https://www.cnblogs.com/lsrmy/p/17826868.html
第八周作业
简要内容:
学习《计算机科学概论》第九章和《C语言程序设计》第七章,并完成相关测试题。
面对对象方法,编译器、解释器,程序设计语言泛型,布尔表达式、数据归类、输入输出结构
函数的分类、定义、调用,变量的作用域和生存期,模块化程序设计
https://www.cnblogs.com/lsrmy/p/17842234.html
第九周作业
简要内容:
学习《计算机科学概论》第10、11章和《C语言程序设计》第8章,并完成相关测试题。
操作系统,内存管理的三种方式,CPU调度,文件系统,文件,目录,磁盘调度
数组,二维数组,向函数传递数组,数组的排序,数组元素的查找
https://www.cnblogs.com/lsrmy/p/17857388.html
第十周作业
简要内容:
学习《计算机科学概论》第12,13,14章和《C语言程序设计》第9章。
信息系统,电子制表软件,数据库及数据库管理系统,关系模型和结构化查询语言
人工智能AI,图灵测试
模拟和模型,计算机游戏的介绍
指针变量,间接寻址运算符,指针变量做函数参数,函数指针
https://www.cnblogs.com/lsrmy/p/17872701.html
第十一周作业
简要内容:
学习《计算机科学概论》第15,16章,《C语言程序设计》第10章。
计算机网络,开放式系统和网络协议,网络的地址超文本传输语言,交互式网页
字符串,字符串指针,向函数传递字符串,函数返回字符串指针
https://www.cnblogs.com/lsrmy/p/17891295.html
第十二周作业
简要内容:
学习《C语言程序设计》第11章。
指针数组,数组指针,动态数组,动态内存分配
https://www.cnblogs.com/lsrmy/p/17908985.html
第十三周作业
简要内容:
学习《C语言程序设计》第十二章。
结构体,共用体,枚举数据类型,动态数据结构
https://www.cnblogs.com/lsrmy/p/17922826.html
第十四周作业
简要内容:
学习《C语言程序设计》第十三章。
文本文件和二进制文件,文件打开关闭,文件读写
https://www.cnblogs.com/lsrmy/p/17937775
实验内容
实验一:熟悉Linux命令,在Vbox下Ubuntu中进行相关的命令的练习。
https://www.cnblogs.com/rocedu/p/4902411.html
实验二:理解分支结构和循环结构程序设计方法;掌握实现分支结构和循环结构控制语句的使用方法;掌握随机函数的使用方法。
#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]);
}
}
实验七:学习缓冲区溢出的原理和防范,并进行实际操作
内容:https://blog.csdn.net/weixin_43771137/article/details/128063046
实验八:Web部署,基于LAMP部署wordpress
内容:https://www.cnblogs.com/rocedu/p/16929895.html
问题回答
1、计算机的各个部分是如何分工合作的?
通过输入设备将数据和指令输入到计算机中,CPU执行指令并进行运算,将结果输出到输出设备或存储设备中。操作系统管理和调度这些过程,使计算机能够高效地完成各种任务。
2、为什么二进制会更加便利用处更广泛?
二进制提供了一种简单、高效、可靠且易于处理的数制系统,使得计算机能够有效地存储、处理和传输信息。这也是为什么二进制在计算机科学和数字电子技术中被广泛应用的原因。
3、不同的门之间有没有一定的联系?
在数字逻辑电路中,不同的逻辑门(如与门、或门、非门等)之间存在一定的联系和关联。这些联系主要体现在逻辑门的组合和级联运算上。
4、冯·诺依曼体系结构有没有一些缺点和问题?
·存在,以下是一些常见的缺点和问题:
·冯·诺依曼瓶颈:冯·诺依曼体系结构的一个主要缺点是存储器和处理器之间的瓶颈问题。由于存储器和处理器使用同一个总线进行通信,数据传输速度受到限制,导致处理器的运行速度受限。这种瓶颈在处理大规模数据和复杂计算时尤为明显。
·增加功耗:冯·诺依曼体系结构中,处理器和存储器是分别独立进行操作的,需要通过总线进行数据传输。这导致了大量的数据传输和功耗消耗,特别是在多核处理器中。这对能源效率产生了负面影响。
·指令级并行性限制:冯·诺依曼体系结构的指令级并行性有限。由于指令的顺序执行,同一时间只能执行一条指令,无法充分利用多个功能单元或流水线。这限制了程序的执行效率和性能。
·无法充分利用大规模并行计算:冯·诺依曼体系结构无法充分利用大规模并行计算的优势。在处理大规模数据和并行计算任务时,冯·诺依曼体系结构往往面临数据传输、同步和通信的挑战。
·安全性和隐私问题:由于冯·诺依曼体系结构的共享总线和存储器访问机制,存在安全性和隐私问题。例如,由于多个程序可以访问相同的内存地址,可能会导致信息泄露和安全漏洞。
5、单块内存管理,分区内存管理,页式内存管理的优缺点是什么?
·单块内存管理:
优点:简单、易于实现和管理。
缺点:无法有效利用内存空间,容易出现内存碎片(内存被分成多个小块,但这些小块之间的空隙无法被合并利用),导致内存利用率低下。
·分区内存管理:
优点:能够有效利用内存空间,减少内存碎片的产生。
缺点:分配和回收内存的开销较大,需要维护分区表或位图来跟踪内存的使用情况,容易产生外部碎片(内存块之间的空隙)。
·页式内存管理:
优点:实现了虚拟内存的概念,将物理内存划分为固定大小的页面,可以更灵活地管理内存,提供了更高的内存利用率。
缺点:需要额外的页表来进行地址映射,增加了内存访问的开销;可能会出现内部碎片(一个页面中只有部分被使用)。
6、Web是否也是一种程序?
Web是一种基于互联网的服务,它可以提供丰富多彩的功能和应用程序。通常情况下,Web应用程序是通过Web浏览器(如Chrome、Firefox等)来访问和运行的。
课程收获与不足
收获:收获了很多,一份付出一份收获,每次学习新知识的时候开始总会觉得困难,但是当接下来的几天都在练习这个知识点的时候,也逐渐变得娴熟起来,也能熟练运用;当花了很多精力去完成一个代码的时候,当按照想象结果运行成果的时候,那份开心就像解出来一道难题一样;学习c语言也是讲究效率的,无论在书上看了多少遍,始终要亲手敲代码,试着脱离书本去独立完成一个代码,这样子效率才能提高,知识也记得更牢固。
不足:在投入方面还是未能达到预期的时间,这门课也很重要,也能在未来给我很大的帮助,因此我认为投入的时间应该再多一些,其次在脱离书本方面,有的时候写代码还是会照着书写,写出来的代码也很死板,没有自己的思考过程,对知识点的记忆也没有那么牢。
问卷调查
1、你平均每周投入到本课程多长时间?
大约7-8个小时;
2、每周的学习效率有提高吗?
有提高,逐渐摸到了学习这门课的方法;
3、学习效果自己满意吗?
不是很满意,感觉呈现出来的代码我可以完成的更好,这也需要以后进一步学习;
4、课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
有点难做到,但也会去尝试。
5、你觉得这门课老师应该继续做哪一件事情?
在上课的时候讲解代码,一步步拆分使同学听的更明白;
6、你觉得这门课老师应该开始做什么新的事情?
在上课过程中讲一些有趣的计算机小故事,激发学生对计算机的兴趣。