2023-2024-1 20231424《计算机基础与程序设计》第15周学习总结

发布时间 2024-01-04 20:48:04作者: 李拜一lby

2023-2024-1 20231424《计算机基础与程序设计》第15周学习总结

作业信息

作业属于的课程 2022-2023-1-计算机基础与程序设计
作业要求 (2022-2023-1计算机基础与程序设计第一周作业)
作业目标 课程总结
作业正文 https://www.cnblogs.com/2004lby/p/17945963

作业内容

第一周作业:
简要内容:
快速浏览教材,每一章提出至少2个不明白的问题。
https://www.cnblogs.com/2004lby/p/17737703.html

自我介绍:
https://www.cnblogs.com/2004lby/p/17666179.html

第二周作业:
简要内容:
学习《计算机基础与程序设计》第一章与《C语言程序设计》第一章并完成云班课测试题
学习编程的意义
计算系统的定义及分层,计算机的历史进程
https://www.cnblogs.com/2004lby/p/17745818.html

第三周作业:
简要内容:
学习《计算机基础与程序设计》第2、3章、《C语言程序设计》第2章,并完成相关测试题。
二进制计数系统,位置计数法,二进制、八进制、十六进制与十进制的转化,计算机中不同形式的数据的表示方法
常量、变量,数据类型,变量赋值
https://www.cnblogs.com/2004lby/p/17764649.html

BASE64编码:
https://www.cnblogs.com/2004lby/p/17764764.html

第四周作业:
简要内容:
学习《计算机科学概论》第4、5章和《C语言程序设计》第三章,并完成相关测试题。
逻辑门,计算机结构,冯·诺伊曼体系结构
算术运算符和表达式,宏常量与const常量
https://www.cnblogs.com/2004lby/p/17779808.html

寻找我的黑客偶像:
https://www.cnblogs.com/2004lby/p/17768709.html

第五周作业:
简要内容:
学习《计算机科学概论》第5章和《C语言程序设计》第4章,并完成相关测试题。
机器语言、汇编语言、伪代码以及测试
字符常量及字符的输入和输出
https://www.cnblogs.com/2004lby/p/17795773.html

第六周作业:
简要内容:
学习《计算机科学概论》第七章和《C语言程序设计》第五章,并完成相关测试题。
解决问题的方法步骤,算法
关系运算符和关系表达式,条件运算符和条件表达式,逻辑运算符和逻辑表达式
https://www.cnblogs.com/2004lby/p/17808704.html

第七周作业:
简要内容:
学习《计算机科学概论》第八章和《C语言程序设计》第六章,并完成相关测试题。
抽象数据类型,栈、队列、列表、树等四种数据结构及其伪代码
计数控制循环、嵌套循环、条件控制循环,流程转移控制
https://www.cnblogs.com/2004lby/p/17824957.html

第八周作业:
简要内容:
学习《计算机科学概论》第九章和《C语言程序设计》第七章,并完成相关测试题。
面对对象方法,编译器、解释器,程序设计语言泛型,布尔表达式、数据归类、输入输出结构
函数的分类、定义、调用,变量的作用域和生存期,模块化程序设计
https://www.cnblogs.com/2004lby/p/17841512.html

第九周作业:
简要内容:
学习《计算机科学概论》第10、11章和《C语言程序设计》第8章,并完成相关测试题。
操作系统,内存管理的三种方式,CPU调度,文件系统,文件,目录,磁盘调度
数组,二维数组,向函数传递数组,数组的排序,数组元素的查找
https://www.cnblogs.com/2004lby/p/17856039.html

第十周作业:
简要内容:
学习《计算机科学概论》第12,13,14章和《C语言程序设计》第9章。
信息系统,电子制表软件,数据库及数据库管理系统,关系模型和结构化查询语言
人工智能AI,图灵测试
模拟和模型,计算机游戏的介绍
指针变量,间接寻址运算符,指针变量做函数参数,函数指针
https://www.cnblogs.com/2004lby/p/17870853.html

第十一周作业:
简要内容:
学习《计算机科学概论》第15,16章,《C语言程序设计》第10章。
计算机网络,开放式系统和网络协议,网络的地址超文本传输语言,交互式网页
字符串,字符串指针,向函数传递字符串,函数返回字符串指针
https://www.cnblogs.com/2004lby/p/17890714.html

第十二周作业:
简要内容:
学习《C语言程序设计》第11章。
指针数组,数组指针,动态数组,动态内存分配
https://www.cnblogs.com/2004lby/p/17904665.html

第十三周作业:
简要内容:
学习《C语言程序设计》第十二章。
结构体,共用体,枚举数据类型,动态数据结构
https://www.cnblogs.com/2004lby/p/17922786.html

第十四周作业:
简要内容:
学习《C语言程序设计》第十三章。
文本文件和二进制文件,文件打开关闭,文件读写
https://www.cnblogs.com/2004lby/p/17937641

实验内容

实验一:Linux基础命令实践实验目的与要,通过熟悉操作系统基本命令,学会操作系统的使用。
内容>

实验二:理解分支结构和循环结构程序设计方法;掌握实现分支结构和循环结构控制语句的使用方法;掌握随机函数的使用方法。
内容:

#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]);
    }
}

实验七:学习缓冲区溢出的原理和防范,并进行实际操作
内容:点击

实验八:Web部署,基于LAMP部署wordpress
内容:点击

问题回答

1.二进制、八进制、十六进制有什么不同的应用吗?

二进制如今主要用在电子技术的数字电路中。比如我们经常使用的计算机能够识别的语言就是二进制语言。数字电路中的高、低电平;导通、截止;开、关;有、无;真、假等等都是二进制表示,二进制的逻辑电路使用0和1表示。
八进制和十六进制在现实主要用在电子技术、计算机编程等领域,这是为了配合二进制而使用的。
十进制主要在日常生活中,而二进制、八进制、十六进制主要用在电子技术行业。二进制是数字电路、处理器等最直接的语言;八进制以及十六进制都是进行存储记忆,但八进制较少使用。十六进制用来表示处理器里的寄存器、存储器的地址、数据。

2.并行计算的优缺点?

并行计算有助于提高 CPU 利用率并提高性能,因为多个处理器同时工作。 此外,一个 CPU 的故障不会影响其他 CPU 的功能。但是由于通信和协调的复杂性,并行解决方案更难实现、调试和证明正确性,而且它们的性能通常比串行解决方案差。

3.单核处理器的优缺点?

成本低 ,耗电量高,运行速度慢。

4.立即寻址模式和直接寻址模式有什么区别?

操作数就在指令中,紧跟在操作码后面,作为指令一部分存放在内存的代码段中,该操作数为立即数,这种寻址方式称为立即寻址方式。
存储单元的有效地址(即:操作数的有效地址)直接由指令给出为直接寻址模式。

5.单块内存管理,分区内存管理,页式内存管理的优缺点是什么?

单块内存管理
优点:简单、易于实现和管理。
缺点:无法有效利用内存空间,容易出现内存碎片(内存被分成多个小块,但这些小块之间的空隙无法被合并利用),导致内存利用率低下。
分区内存管理
优点:能够有效利用内存空间,减少内存碎片的产生。
缺点:分配和回收内存的开销较大,需要维护分区表或位图来跟踪内存的使用情况,容易产生外部碎片(内存块之间的空隙)。
页式内存管理
优点:实现了虚拟内存的概念,将物理内存划分为固定大小的页面,可以更灵活地管理内存,提供了更高的内存利用率。
缺点:需要额外的页表来进行地址映射,增加了内存访问的开销;可能会出现内部碎片(一个页面中只有部分被使用)。

6.顺序文件访问和直接文件访问分别有什么优缺点

顺序文件访问
优点:
简单、易于实现和管理。
适用于对文件进行顺序读取和写入的场景,效率较高。
占用的存储空间相对较小,文件结构简单。
缺点:
难以进行随机访问,如果需要在文件中查找或修改某个特定的记录,需要从文件开头开始逐条读取,效率较低。
删除或插入记录时,可能需要进行大量的数据移动。

直接文件访问(或称为索引文件访问):
优点:
允许随机访问,可以快速定位和读取特定记录。
插入和删除记录相对容易,不需要移动大量数据。
适用于需要频繁更新和查询特定记录的场景。
缺点:
需要维护额外的索引结构,占用更多的存储空间。
相对复杂,需要更多的处理逻辑和算法。
对于顺序读取和写入,效率较低。

7.什么是数据库?什么是数据库管理系统?二者的区别是什么?

数据库是一个有组织的数据存储系统,用于存储、管理和检索数据。它可以被看作是一个类似文件夹的容器,其中可以包含多个表,每个表又包括多个行和列,用来存储不同类型的数据。
数据库管理系统(DBMS)是一种软件系统,用于创建、维护和操作数据库。它提供了一系列工具和功能,包括数据定义语言(DDL)、数据操作语言(DML)、查询语言(QL)等,可以让用户方便地管理和操作数据库。
二者的区别在于,数据库是一种存储和管理数据的系统,而数据库管理系统则是一种为数据库提供管理和操作的软件系统。数据库管理系统是一个更加复杂的系统,它需要提供更多的功能和工具,如安全性、并发控制、备份和恢复等。数据库管理系统的主要目标是为用户提供一个方便、安全、可靠的数据管理环境,使用户可以轻松地存储、查询和分析数据,同时确保数据的完整性和一致性。而数据库本身则是由若干个表组成的数据集合,为数据库管理系统提供了存储和管理数据的基础。

课程收获与不足

我对《计算机科学概论》这本书的学习自我感觉不是很充分,感到书里的内容比较枯燥,所以没用真正用心去钻研,只是将每章内容看一遍,完成作业而已,并没有深入学习其中的知识,有一些前面学到的知识我也忘记了许多,记忆也不牢固,这是我需要改进的地方。

问卷调查

1.你平均每周投入到本课程多长时间?
3小时

2.每周的学习效率有提高吗?
没有明显的感觉到提升

3.学习效果自己满意吗?
一般般,第一次接触这门课程,很多知识点掌握并不扎实

4.课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
我希望我能够将每周写博客记录心得的习惯保持下来,我也会尽力做到一周写一次博客的。

5.你觉得这门课老师应该继续做哪一件事情?
多推荐一些适合信息安全专业同学阅读的书目

6.你觉得这门课老师应该停止做哪一件事情?
讲课速度可能有点快,开始学习的时候不太能跟上

7.你觉得这门课老师应该开始做什么新的事情?
每周搜集同学们在这门课程学习时的困难和问题,并进行统一解答

总结的链接和二维码

链接:https://www.cnblogs.com/2004lby/p/17945963
二维码: