2023-2024-1 20231409 《计算机基础与程序设计》课程总结

发布时间 2024-01-07 15:52:55作者: 20231409佟伟铭

2023-2024-1 20231409 《计算机基础与程序设计》课程总结

 

 

每周作业链接汇总

 

第一周作业

.了解计算系统,编译器和汇编器的区别,安装Linux操作系统,学习Linux基础,浏览计算机科学概论,提出问题

 

第二周作业

学习计算机概念和编程基础

 

第三周作业

数据表示方法和C语言基本数据类型

 

第四周作业

学习C语言中的基本算术运算,计算机基础中的冯诺伊曼体系结构、读取-执行周期以及罗马数字与阿拉伯数字转换

 

第五周作业

Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白盒

 

第六周作业

说明了提出问题和解决问题的做法,介绍了有简单参数的算法。说明了选择和循环的算法。数组是同构项目的有名集合,记录是异构项目的有名集合。排序包括选择排序 冒泡排序和插入排序说明了选择控制结构,学习了if,if-else,else-if,switch语句,以及逻辑运算符与&&,或||,非!。

 

第七周作业

数据结构,本章介绍了栈(先进后出),队列(先进先出),列表(线性,无线),树,二叉树(每个节点只有一个父母节点,两个子节点),二叉检索树,图(可有向可无向),深度优先搜索和广度优先搜索,单源最短路搜索,各类参数。

 

第八周作业

功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行

 

第九周作业

操作系统责任,内存与进程管理,分时系统,CPU调度,文件、文件系统,文件保护,磁盘调度

 

第十周作业

简要内容:信息系统,数据库与SQL,人工智能与专家系统,人工神经网络,模拟与离散事件,排队系统,天气与地震模型,图形图像

 

第十一周作业

计算机网络,网络拓扑,云计算,网络安全,Web,HTML,CSS,Javascript,XML,字符串的应用

 

第十二周作业

指针与数组,指针和一维及二维数组的关系,指针数组的应用以及动态数组

 

第十三周作业

结构体和共用体

 

第十四周作业

文件操作

 

实验

实验一:通过熟悉操作系统基本命令,学会操作系统的使用
云班课 - 作业活动-作答 (mosoteach.cn)
实验二:基本控制结构编程练习

一、实验内容

   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.

 

 

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

 

int main() {

    srand(time(NULL));

    int score = 0;

    int zqs = 0;

    float zql = 0;

 

    while (zql < 75) {

        zqs = 0;

        for (int i = 0; i < 10; i++) {

            int a = rand() % 10 + 1;

            int b = rand() % 10 + 1;

            int result;

            char c;

 

            int fuhao = rand() % 4;

            switch (fuhao)

                {

                   case 0:

                     result = a + b;

                       c= '+';

                    break;

                   

                case 1:

                    result = a - b;

                    c = '-';

                    break;

                case 2:

                    result = a * b;

                    c = '*';

                    break;

                case 3:

                    result = a / b;

                    c = '/';

                    break;

            }

 

            printf("%d %c %d = ", a, c, b);

            int magic;

            scanf("%d", &magic);

 

            if (magic == result) {

                int huida = rand() % 4;

                switch (huida) {

                    case 0:

                        printf("Very good!\n");

                        break;

                    case 1:

                        printf("Excellent!\n");

                        break;

                    case 2:

                        printf("Nice work!\n");

                        break;

                    case 3:

                        printf("Keep up the good work!\n");

                        break;

                }

                score += 10;

                zqs++;

            } else {

                int huida = rand() % 4;

                switch (huida) {

                    case 0:

                        printf("No. Please try again.\n");

                        break;

                    case 1:

                        printf("Wrong. Try once more.\n");

                        break;

                    case 2:

                        printf("Don’t give up!\n");

                        break;

                    case 3:

                        printf("Not correct. Keep trying.\n");

                        break;

                }

            }

        }

 

        zql = (float)zqs / 10 * 100;

 

        printf("Total score: %d\n", score);

        printf("Correct rate: %.2f%%\n", zql);

    }

 

    printf("Congratulations! You have achieved a correct rate of %.2f%%.\n", zql);

    printf("Total score: %d\n", score);

    return 0;

}

实验三:考试
实验四:函数与数组编程练习

一、实验内容

 

   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

#include <stdio.h>

 

#define MAX_STUDENTS 40

 

void shuru(int xh[], float scores[], int size) {

    printf("请输入学生成绩和学号:\n");

    int i;

    for (i = 0; i < size; i++) {

        printf("成绩:");

        scanf("%f", &scores[i]);

        printf("学号:");

        scanf("%d", &xh[i]);

       

    }

}

 

float jisuan(float scores[], int size ) {

  float  total = 0;

    int i;

    for (i = 0; i < size; i++) {

        total += scores[i];

    }

    return total;}

    float Average(float total, int size) {

    return total / size;

}

 

 

 

void paiming(int xh[], float scores[], int size) {

    int i, j, temp1,temp2;

  

   

    for (i = 0; i < size-1; i++) {

        for (j = i+1; j < size; j++) {

            if (scores[j] > scores[i]) {

                temp1 = scores[j];

                scores[j] = scores[i]; 

                scores[i] = temp1;

               

                temp2 = xh[j];

                xh[j] = xh[i];

                xh[i] = temp2;

            }

        }

    }

   

    printf("学号   排名   成绩\n");

    for (i = 0; i < size; i++) {

        printf("%d. %d %.2f\n", xh[i], i+1, scores[i]);

    }

}

 

 

void cjb(int xh[], float scores[], int size) {

    printf("成绩表:\n");

    int i;

   

    for (i = 0; i < size; i++) {

        printf("%d %.2f\n", xh[i], scores[i]);

    }

}

 

void cpm(int xh[], float scores[], int size) {

    printf("请输入要查询的学生学号:\n");

    int id;

    scanf("%d", &id);

    int rank = -1;

    int i;

    for (i = 0; i < size; i++) {

        if (xh[i] == id) {

            rank = i + 1;

            printf("学号 %d 的学生排名为 %d\n", id, rank);

            break;

        }

    }

    if (rank == -1) {

        printf("未找到学号 %d 的学生\n", id);

    }

}

 

void calculatez(float scores[], int size, int z[]) {

    int i;

    for (i = 0; i < 5; i++) {

        z[i] = 0;

    }

 

    for (i = 0; i < size; i++) {

        if (scores[i] < 60) {

            z[0]++;

        } else if (scores[i] < 70) {

            z[1]++;

        } else if (scores[i] < 80) {

            z[2]++;

        } else if (scores[i] < 90) {

            z[3]++;

        } else {

            z[4]++;

        }

    }

}

 

void printz(int z[], int size) {

    printf("成绩分布统计:\n");

    printf("<60分: %d人\n", z[0]);

    printf("60-69分: %d人\n", z[1]);

    printf("70-79分: %d人\n", z[2]);

    printf("80-89分: %d人\n", z[3]);

    printf("90分以上: %d人\n", z[4]);

}

 

int main() {

    int xh[MAX_STUDENTS];

    float scores[MAX_STUDENTS];

    int size;

    int choice;

 

    printf("请输入学生人数:\n");

    scanf("%d", &size);

 

    shuru(xh, scores, size);

 

    while (1) {

        printf("请选择要执行的操作:\n");

        printf("(1) Calculate total and average score of course\n");

        printf("(2) Sort in descending order by score\n");

        printf("(3) Sort in ascending order by number\n");

        printf("(4) Search by number\n");

        printf("(5) Statistic analysis\n");

        printf("(6) List record\n");

        printf("(7) Exit\n");

 

        scanf("%d", &choice);

 

        switch (choice) {

            case 1: {

                 float total = jisuan(scores, size);

                float average = Average(total, size);

                printf("总分: %.2f, 平均分: %.2f\n", total, average);

                break;

            }

            case 2:

                paiming(xh,  scores,size);

                break;

            case 3:

               cjb(xh, scores, size);

                break;

            case 4:

                cpm(xh, scores, size);

                break;

            case 5: {

                int z[5];

                calculatez(scores, size, z);

                printz(z, size);

                break;

            }

            case 6:

                     

               printf("每个学生的信息:\n");

                printf("学号   成绩\n");

                int i;

                for (i = 0; i < size; i++) {

                   

                   

                    printf("%d %.2f\n", xh[i], scores[i]);

                }

                float total = jisuan(scores, size);

                float average = Average(total, size);

                printf("课程总分:%.2f,平均分:%.2f\n", total, average);

                break;

 

            case 7:

                return 0;

            default:

                printf("无效的选项\n");

        }

    }

 

    return 0;

 

实验五:考试
实验六:文件与结构体编程练习

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:

然后,根据用户输入的选项执行相应的操作。

- #include <stdio.h>

#include <string.h>

#include <stdlib.h>

 

#define MAX_STUDENTS 50

 

 

typedef struct {

    int student_id;

    char name[50];

    int scores[3];

    int total_score;

    float average_score;

} Student;

 

Student students[MAX_STUDENTS];

int num= 0;

 

void shuru() {

    if (num < MAX_STUDENTS) {

       

        printf("Enter student ID: ");

        scanf("%d", &students[num].student_id);

        printf("Enter name: ");

        scanf("%s", students[num].name);

        printf("Enter score 1: ");

        scanf("%d", &students[num].scores[0]);

        printf("Enter score 2: ");

        scanf("%d", &students[num].scores[1]);

        printf("Enter score 3: ");

        scanf("%d", &students[num].scores[2]);

 

        num++; 

 

        printf("Record appended.\n");

    } else {

        printf("Maximum number of students reached.\n");

    }

}

 

void jisuan() {

    int i;

  

    for (i = 0; i < num; i++) {

        students[i].total_score = students[i].scores[0] + students[i].scores[1] + students[i].scores[2];

        students[i].average_score = students[i].total_score / 3.0;

    }

}

void mingci() {

 

   

    int i, j;

    for (i = 0; i < num - 1; i++) {

        for (j = 0; j < num - i - 1; j++) {

            int total_j = students[j].scores[0] + students[j].scores[1] + students[j].scores[2];

            int total_j1 = students[j + 1].scores[0] + students[j + 1].scores[1] + students[j + 1].scores[2];

            if (total_j > total_j1) {

                Student temp = students[j];

                students[j] = students[j + 1];

                students[j + 1] = temp;

            }

        }

    }

jisuan();

   

    printf("Ranking by total score:\n");

    for (i = 0; i < num; i++) {

        int total = students[i].scores[0] + students[i].scores[1] + students[i].scores[2];

        printf("Student %s - Total Score: %d\n", students[i].name, total);

    }

}

 

void chengji() {

   

    int i, j;

    for (i = 0; i < num - 1; i++) {

        for (j = 0; j < num - i - 1; j++) {

            if (strcmp(students[j].name, students[j + 1].name) > 0) {

                Student temp = students[j];

                students[j] = students[j + 1];

                students[j + 1] = temp;

            }

        }

    }

 

 

    printf("Scoreboard by name:\n");

 

   for (i = 0; i < num; i++) {

        printf("Student %s - Total Score: %d\n", students[i].name, students[i].total_score);

    }

}

 

void search(char *name) {int i;

    for ( i = 0; i < num; i++) {

        if (strcmp(students[i].name, name) == 0) {

            int total = students[i].scores[0] + students[i].scores[1] + students[i].scores[2];

            float average = total / 3.0;

            printf("Student found:\n");

            printf("Name: %s\n", students[i].name);

            printf("Total score: %d\n", total);

            printf("Average score: %.2f\n", average);

            return;

        }

    }

    printf("Student not found.\n");

}

void writeFile() {

    FILE *file = fopen("students.txt", "w");

    if (file) {int i;

        for ( i = 0; i < num; i++) {

            int total = students[i].scores[0] + students[i].scores[1] + students[i].scores[2];

            float average = total / 3.0;

            fprintf(file, "%d %s %d %d %d %d %.2f\n", students[i].student_id, students[i].name,

                    students[i].scores[0], students[i].scores[1], students[i].scores[2],

                    total, average);

        }

        fclose(file);

        printf("Records written to file.\n");

    } else {

        printf("Error writing to file.\n");

    }

}

 

void readFile() {

    FILE *file = fopen("students.txt", "r");

    if (file) {

        while (fscanf(file, "%d %s %d %d %d", &students[num].student_id, students[num].name,

                      &students[num].scores[0], &students[num].scores[1], &students[num].scores[2]) == 5) {

          

            int total = students[num].scores[0] + students[num].scores[1] + students[num].scores[2];

            float average = total / 3.0;

            students[num].total_score = total;

            students[num].average_score = average;

            num++;

        }

        fclose(file);

        printf("Records read from file.\n");

    } else {

        printf("Error reading from file.\n");

    }

}

 

int main() {

    int choice;

    do {

        printf("1. 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");

        printf("Please enter your choice: ");

        scanf("%d", &choice);

 

        switch (choice) {

            case 1:

                shuru();

                break;

            case 2:

                jisuan();

                break;

            case 3:

            mingci(); 

            break;

            case 4:

            chengji(); 

            break;

               

            case 5:

                printf("Enter name to search: ");

                char name[50];

                scanf("%s", name);

                search(name);

                break;

            case 6:

                writeFile();

                break;

            case 7:

                readFile();

                break;

            case 0:

                printf("Exiting program.\n");

                break;

            default:

                printf("Invalid choice. Please try again.\n");

        }

    } while (choice != 0);

 

    return 0;

}

 

   

}



实验七:缓冲区溢出
云班课 - 作业活动-作答 (mosoteach.cn)
实验八:Web部署
云班课 - 作业活动-作答 (mosoteach.cn)

收获