第九周学习总结(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);
}
1.在编写写这个非常长的代码时,我发现很容易就会把if判断语句写成赋值语句,导致循环进入死循环。所以我应当写成if(0 == i)这样,可以让编译器帮忙。 *
点击查看代码
#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
posted @ 2022-10-29 20:58  北寒带  阅读(44)  评论(0编辑  收藏  举报