第九周学习总结(2022-2023-1 计算机基础与程序设计)姚博茗
学期(2022-2023-1) 学号(20221407) 计算机基础与程序设计 第九周学习总结
作业信息
这个作业属于哪个课程 | 2022-2023-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2022-2023-1计算机基础与程序设计第九周作业 |
这个作业的目标 | 操作系统责任 内存与进程管理 分时系统 CPU调度 文件、文件系统 文件保护 磁盘调度 |
作业正文 | 见下 |
教材学习内容总结
- 《计算机科学概论》:这两章讲述了计算机中的操作系统的相关内容:操作系统的功能,操作系统实现这些功能的算法,以及文件系统,目录,以及磁盘调度;
- 《C语言基础与程序设计》:这一张讲述了数组这种数据结构以及数组向函数的传递,让我使用C语言编程时更加方便。不必定义很多数组。
教材学习中的问题和解决过程
- 分时是什么意思,书上的定义是被翻译过的,不是很通顺。
解决方案:查找百度知道;
解决:分时就是时间片轮转。分时系统允许多个用户同时连机使用计算机。操作系统采用时间片轮转的方式处理每个用户的服务请求。
CSDN:所谓分时技术,是把处理机时间划分成很短的时间片,轮流地分配给各个用户程序使用,如果某个用户程序在分配的时间片用完之前还未完成计算,该程序就暂停执行,等待下一轮继续计算,此时处理机让给另一个用户程序使用。 - 算法是否应该把程序的所有实现细节说明?
————通过查找后我知道算法不是实现一个程序。就像设计师不是工人一样。算法只是指出应该怎么做,不需要指出实现的细节。4 - 动态分区是如何实现最差匹配的?
——解决途径:CSDN
动态分区分配:动态分区分配是一种动态划分内存的分区方法。这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好合适进程的需要。因此系统中分区的大小和数目是可变的。
2、动态分区的分配策略,有以下几种算法
2.1首次适应算法(First Fit)算法:空闲分区以地址递增的次序链接,分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
2.2最佳适应算法(Best Fit):空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。
2.3最坏适应算法(Worse Fit):又称最大适应算法(Largest Fit),空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。
2.4临近适应算法(Next Fit):又称循环首次适应算法,由首次适应算法演变而成。不同之处是分配内存时从上次查找结束的位置开始继续查找。
版权声明:本文为CSDN博主「光怪陆离的节日」的原创文章
原文链接原文作者:光怪陆离的节日
由这篇文章,我对动态内存分配有了更多的了解。原来,动态内存分配中,最初时,整个内存是一个空闲分区,操作系统选用此分区分配了一个大小正好的内存空间,对于下一个进程,剩余部分为空闲空间,此时无法体现内存分配方法。我认为,当出现外部碎片时,才有内存分配方法。
代码调试中的问题和解决过程
点击查看代码
#include<stdio.h>
#include<math.h>
/*#define EPS 1e-6*/
float Average(float g[][5],int i);/*1)每个学生的平均分;*/
float Clas(float g[][5],int j);/*(2)每门课的平均分;*/
int max(float g[][5],int i);/*(3)找出最高的分数所对应的学生和课程;*/
float Var(float sum1,float sum2);/*(4)求出平均分方差:*/
int main(void)
{
float g[2][5];
int i,j;
float aver1,aver2,cla;
int numclass;
float sum1 = 0,sum2 = 0;/*用来求方差的平方和与和*/
for(i = 0;i<=1;i++)
{
printf("\n输入学生%4d的5个成绩:\n",i+1);
for(j = 0;j<=4;j++)
{
scanf("%f",&g[i][j]);
}
if(i == 0)
{
aver1 = Average(g,i);
}
else
{
aver2 = Average(g,i);
}
}
printf("\n 序号 课程1 2 3 4 5 平均分\n");
for(i= 0;i<=1;i++)//输出
{
printf("\n NO%2d",i+1);
for(j = 0;j<=4;j++)
{
printf("%8.2f",g[i][j]);
}
if(i == 0)
printf("%8.2f",aver1);
else
printf("%8.2f",aver2);
}
printf("\n课平均",i);
for(j = 0; j<=4; j++)
{
cla = Clas(g,j);
sum1 = sum1+cla*cla;
sum2 = sum2+cla;
printf("%8.2f",cla);
}
for(i = 0;i<=1;i++)
{
numclass = max(g,i);
}
if((g[0][numclass]<g[1][numclass]))
{
printf("\n\n最高分%8.2f是%d号学生的第%d门课\n",g[1][numclass],2,numclass+1);
}
else
{
printf("\n\n最高分%8.2f是%d号学生的第%d门课\n",g[0][numclass],1,numclass+1);
}
printf("\n方差 %8.2f",Var(sum1,sum2));
}
float Average(float g[][5],int i)/*1)每个学生的平均分;*///没错
{
int j;
float total = 0;
if (i == 0)
{
for(j = 0;j<= 4;j++)
{
total = g[i][j] + total;
}
}
else
{
for(j = 0;j<= 4;j++)
{
total = g[i][j] + total;
}
}
return total/5;
}
float Clas(float g[][5],int j)//没错
{
int i;
float total;
total = g[i][j]+g[i+1][j];
return total/2;
}
int max(float g[][5],int i)//没错
{
int max = 0;
int j;
for(j = 1;j<=4;j++)
{
if(g[i][j]>=g[i][max])
{
max = j;
}
}
return max;
}
float Var(float sum1,float sum2)
{
sum2 = sum2/5;
return sum1/5-pow(sum2,2);
}
点击查看代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void right();//函数功能:输出相应的鼓励话语
void wrong();//函数功能:输出相应的鼓励话语
int main(void)
{
int a, b, c;
int result, answer;//result是正确结果,answer是学生自己输入的答案
int i;
int count = 0;
float N = 10;//这是学生总人数
float rate;
Start:
count = 0;//防止第二次做题时又把上一次的数加上去
for(i = 0; i<10; i++)
{
if(i != 0)
printf("\n");//再两道题之间换行
srand(time(NULL));
a = rand()%10+1;
b = rand()%10+1;
c = rand()%4+1;//功能用来随机生成四则运算
switch (c)
{
case 1:
result = a*b;
printf("%d*%d=",a,b);
scanf("%d",&answer);
if(answer == result)
{
printf("Right!");
right();
count++;
}
else
{
printf("Wrong!");
wrong();
}
break;
case 2:
result = a+b;
printf("%d+%d=",a,b);
scanf("%d",&answer);
if(answer == result)
{
printf("Right!");
right();
count++;
}
else
{
printf("Wrong!");
wrong();
}
break;
case 3:
result = a-b;
printf("%d-%d=",a,b);
scanf("%d",&answer);
if(answer == result)
{
printf("Right!");
right();
count++;
}
else
{
printf("Wrong!");
wrong();
}
break;
case 4:
if(a%b != 0)
{
do
{
a = rand()%10+1;
b = rand()%10+1;
}
while(a%b != 0);
}
result = a/b;
printf("%d/%d=",a,b);
scanf("%d",&answer);
if(answer == result)
{
printf("Right!");
right();
count++;
}
else
{
printf("Wrong!");
wrong();
}
break;
}
}
printf("The score is %d",10*count);
rate = (count/N)*100;
printf("\nThe rate to answer a correct answer:%f%%\n",rate);
if(rate<75)
{
goto Start;//重新再来做题
}
return 0;
}
void right()
{
srand(time(NULL));//原理:通过生成一个随机数来对应一种鼓励语从而随机出现一种鼓励语
int m;
m = rand()%4+1;
switch (m)
{
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;
}
}
void wrong()
{
srand(time(NULL));
int n;
n = rand()%4+1;
switch (n)
{
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;
}
}
上周考试错题总结
1.Which of the following is a program that translates and executes statements in sequence?
A.
Interpreter
B.
Compiler
C.
Input
D.
Machine code
E.
Bytecode
正确答案: A
你的作答: C
翻译:以下哪一项是按顺序翻译和执行语句的程序?
A.解释器
B编译器
C输入
D机器代码
E字节码
CSDN:解释器:直接执行用编程语言编写的指令的程序。
解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。
找到的解释
2.Modern compilers translate high-level language programs into the corresponding program in machine code.
正确答案: 正确
你的作答: 错误
做题不能太着急
3.A Boolean expression may be an arithmetic expression followed by an integer.
正确答案: 错误
你的作答: 正确
同上
Which of the following paradigms is based on the mathematical concepts of symbolic logic?
A.
Imperative (or procedural)
B.
Functional
C.
Logic
D.
Object-oriented
正确答案: C
你的作答: B
"逻辑编程基于数理逻辑编程"
其他
这周我发现,在CSDN由中国人写的博客要比翻译成中文后的教材更好懂,这可能就是翻译的短板。再好的翻译也不可能保持原汁原味,意思多少会变得令人费解,所以老师让我们学习去看英文资料是有道理的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第...周 | ... | ... | ... | |
第九周 | 170/1300 | 1/9 | 30/90 |