📌  相关文章
📜  AKTU 1年级第一学年解题纸2017-18 | COMP。系统和C编程| B段

📅  最后修改于: 2021-05-20 06:36:09             🧑  作者: Mango

论文下载链接:论文|学期1 | 2017-18

时间: 3小时
总分数:100

注意:-

  • 共分为三个部分。 A节为20分, B节为30分, C节为50分。
  • 尝试所有问题。每个问题都带有标记。
  • 必要时假定合适的数据。

2.尝试以下任何三个:(3 * 10 = 30)

  1. 什么是数字计算机?绘制数字计算机的框图,并解释其各个组成部分。
    数字计算机:数字计算机可以定义为可编程机器,它可以读取作为指令传递的二进制数据,处理该二进制数据并显示计算出的数字输出。因此,数字计算机就是那些处理数字数据的计算机。

    数字计算机功能部件的详细信息

    • 输入单元:输入单元由连接到计算机的输入设备组成。这些设备接受输入并将其转换为计算机可以理解的二进制语言。一些常见的输入设备是键盘,鼠标,操纵杆,扫描仪等。
    • 中央处理器(CPU0:输入设备将信息输入计算机后,处理器对其进行处理。CPU被称为计算机的大脑,因为它是计算机的控制中心。它首先从内存中获取指令,然后从计算机中获取指令。然后解释它们以便知道要做什么。如果需要,则从内存或输入设备中获取数据,然后CPU执行或执行所需的计算,然后将输出存储或显示在输出设备上,CPU具有三个负责不同功能的主要组件-算术逻辑单元(ALU),控制单元(CU)和存储器寄存器
    • 算术和逻辑单元(ALU):顾名思义,ALU执行数学计算并做出逻辑决策。算术计算包括加法,减法,乘法和除法。逻辑决策涉及两个数据项的比较,以查看哪个数据项更大或更小或相等。
    • 控制单元:控制单元负责协调和控制流入和流出CPU的数据流,还控制ALU,存储器寄存器以及输入/输出单元的所有操作。它还负责执行程序中存储的所有指令。它解码获取的指令,对其进行解释,然后将控制信号发送到输入/输出设备,直到所需的操作由ALU和内存正确完成为止。
    • 内存寄存器:寄存器是CPU中的临时内存单元。这些用于存储处理器直接使用的数据。寄存器的大小可以不同(16位,32位,64位等),CPU内部的每个寄存器都有特定的函数,例如存储数据,存储指令,在存储器中存储位置地址等。用户寄存器可以由汇编语言程序员用来存储操作数,中间结果等。累加器(ACC)是ALU中的主要寄存器,包含要在ALU中执行的操作的操作数之一。
    • 内存:附属于CPU的内存用于存储数据和指令,称为内部存储器。内部存储器分为许多存储位置,每个位置都可以存储数据或指令。每个存储单元的大小均相同,并具有一个地址。借助该地址,计算机可以轻松读取任何内存位置,而不必搜索整个内存。当程序被执行时,它的数据被复制到内部存储器中,并且被存储在存储器中直到执行结束。内部存储器也称为主存储器或主存储器。该存储器也称为RAM,即随机存取存储器。数据访问的时间与其在存储器中的位置无关,因此,该存储器也称为随机访问存储器(RAM)。阅读此文章以了解不同类型的RAM
    • 输出单元:输出单元由计算机附带的输出设备组成。它将来自CPU的二进制数据转换为人类可以理解的形式。常见的输出设备是监视器,打印机,绘图仪等。
  2. 编写一个程序来检查数字是否为回文。该程序应接受用户键入的任意数字。
    检查该数字是否为回文式的程序:
    // C program to check whether a number
    // is Palindrome or not.
      
    #include 
      
    /* Iterative function to reverse digits of num*/
    int reverseDigits(int num)
    {
        int rev_num = 0;
        while (num > 0) {
            rev_num = rev_num * 10 + num % 10;
            num = num / 10;
        }
        return rev_num;
    }
      
    /* Function to check if n is Palindrome*/
    int isPalindrome(int n)
    {
      
        // get the reverse of n
        int rev_n = reverseDigits(n);
      
        // Check if rev_n and n are same or not.
        if (rev_n == n)
            return 1;
        else
            return 0;
    }
      
    /*Driver program to test reversDigits*/
    int main()
    {
        int n;
      
        // Read n from user
        printf("Enter the number to checked: ");
        scanf("%d", &n);
      
        // Find if n is Palindrome and print
        printf("Is %d a Palindrome number? -> %s\n", n,
               isPalindrome(n) == 1 ? "true" : "false");
      
        // Read n from user
        printf("\nEnter the number to checked: ");
        scanf("%d", &n);
      
        // Find if n is Palindrome and print
        printf("Is %d a Palindrome number? -> %s\n", n,
               isPalindrome(n) == 1 ? "true" : "false");
        return 0;
    }
    
    输出:
    Enter the number to checked: 4562
    Is 4562 a Palindrome number? -> false
    
    Enter the number to checked: 2002
    Is 2002 a Palindrome number? -> true
    
  3. 什么是操作系统?解释操作系统执行的各种类型的功能。计算机系统的基本目标是执行用户程序并简化任务。各种应用程序以及硬件系统均用于执行此工作。操作系统是一种软件,可以管理和控制整个资源集并有效利用计算机的每个部分。

    该图显示了OS如何充当硬件单元和应用程序之间的媒介。

    操作系统功能

    操作系统具有多种要执行的功能。操作系统的一些重要功能可以概括为:

    • 处理器管理:这涉及中央处理器(CPU)的管理。操作系统负责将CPU时间分配给不同的进程。当在指定的时间段内执行完某个进程后,该进程完成其CPU处理时,这称为调度。操作系统使用多种类型的调度技术:
      1. 最短作业优先(SJF)首先安排需要最短CPU时间的进程。
      2. 循环调度:每个进程都以循环方式分配固定的CPU执行时间。
      3. 基于优先级的调度(非抢占式):在此调度中,将根据进程的优先级对进程进行调度,即,优先级最高的进程将排在最前面。如果两个进程的优先级匹配,则根据到达时间进行调度
    • 设备管理:
      操作系统与硬件和连接的设备进行通信,并在它们与CPU之间保持平衡。这一点更加重要,因为CPU处理速度远高于CPU处理速度。
      I / O设备。为了优化CPU时间,操作系统采用了两种技术-缓冲和假脱机。
    • 缓冲:
      在这种技术中,输入和输出数据被临时存储在输入缓冲区和输出缓冲区中。一旦用于输入或输出的信号分别发送到CPU或从CPU发送,操作系统将通过设备控制器将数据从输入设备移至输入缓冲区,并从输出设备移至输出缓冲区。在输入的情况下,如果缓冲区已满,则操作系统将信号发送到程序,该程序处理缓冲区中存储的数据。当缓冲区变空时,程序通知操作系统重新加载缓冲区,然后输入操作继续。
    • 假脱机(在线同时外围设备操作):
      这是一种用于在同一输入/输出设备上处理不同任务的设备管理技术。当网络上有多个用户共享同一资源时,可能有多个用户在同一时间向其发出命令。因此,操作系统将每个用户的数据临时存储在资源附加到的计算机的硬盘上。单个用户无需等待执行过程完成。而是操作系统将数据从硬盘一一发送到资源。
      示例:打印机
    • 内存管理:
      在计算机中,CPU和I / O设备都与内存交互。当需要执行程序时,它将程序加载到主存储器中,直到执行完成为止。此后,该存储空间将被释放并可用于其他程序。操作系统使用的常见内存管理技术是分区和虚拟内存。
    • 分区:
      总内存分为相同大小或不同大小的各种分区。这有助于容纳存储器中的程序数量。该分区可以是固定的,即对于内存中的所有程序都保持不变,也可以是可变的,即,当程序加载到内存时分配内存。后面的方法会减少内存浪费,但是在适当的时间段内,它可能会变得碎片化。
    • 虚拟内存:
      这是操作系统使用的一种技术,它允许用户加载大于计算机主内存的程序。在这种技术中,即使无法将完整程序加载到主存储器中,也会导致程序执行,从而提高了内存利用率。
    • 文件管理:
      操作系统管理计算机上的文件,文件夹和目录系统。计算机上的任何数据均以文件形式存储,并且操作系统使用文件分配表(FAT)保留所有数据的信息。 FAT存储有关文件的一般信息,例如文件名,类型(文本或二进制),大小,起始地址和访问模式(顺序/索引顺序/直接/相对)。操作系统的文件管理器有助于创建,编辑,复制,分配内存到文件,还可以更新FAT。操作系统还注意以适当的访问权限打开文件以读取或编辑它们。
  4. 什么是结构化编程方法?强调结构化编程的优缺点。顾名思义,结构化编程方法可以定义为一种将程序制作为单个结构的编程方法。这意味着代码将一个接一个地执行一条指令。它不支持借助诸如GOTO之类的任何语句从一条指令跳到另一条指令的可能性。因此,这种方法中的指令将以串行和结构化的方式执行。支持结构化编程方法的语言是:

    • C
    • C++
    • Java
    • C#

      ..等等

    相反,在汇编语言(如微处理器8085等)中,语句不会以结构化的方式执行。它允许跳转语句,如GOTO。因此程序流可能是随机的。

    结构化程序主要由三种类型的元素组成:

    • 选择声明
    • 序列陈述
    • 迭代语句

    结构化程序由结构良好且分离的模块组成。但是结构化程序中的进入和退出是一次事件。这意味着该程序使用单项和单项退出元素。因此,结构化的程序可以很好地维护,整洁和干净。这就是为什么结构化编程方法在编程世界中被广泛接受的原因。

    结构化编程方法的优点:

    1. 易于阅读和理解
    2. 友善的用户
    3. 易于维护
    4. 主要基于问题而不是基于机器
    5. 开发更容易,因为它需要更少的精力和时间
    6. 更容易调试
    7. 与机器无关,主要是。

    结构化编程方法的缺点:

    1. 由于它是与机器无关的,因此转换成机器代码需要花费时间。
    2. 转换后的机器代码与汇编语言不同。
    3. 该程序取决于诸如数据类型之类的可变因素。因此,需要随时随地对其进行更新。
    4. 通常,这种方法的开发需要更长的时间,因为它取决于语言。在汇编语言的情况下,由于固定在机器上,因此开发所需的时间更少。
  5. 排序是什么意思?用C编写一个程序,对N个正整数的给定数组的元素进行排序。并给出相同的流程图。使用排序算法根据上的元素运算符重新排列给定阵列或列表元素。运算符用于决定在相应的数据结构元素的新订单。

    例如:以下字符列表按其ASCII值的升序排列。即,具有较小的ASCII值的字符将被首先放置比具有更高的ASCII值的字符。

    排序算法

    选择排序流程图:

    用C编程以对N个正整数的给定数组的元素进行排序:

    // C program to sort the elements
    // of a given array of N positive integers
      
    #include 
      
    void swap(int* xp, int* yp)
    {
        int temp = *xp;
        *xp = *yp;
        *yp = temp;
    }
      
    void selectionSort(int arr[], int n)
    {
        int i, j, min_idx;
      
        // One by one move boundary of unsorted subarray
        for (i = 0; i < n - 1; i++) {
            // Find the minimum element in unsorted array
            min_idx = i;
            for (j = i + 1; j < n; j++)
                if (arr[j] < arr[min_idx])
                    min_idx = j;
      
            // Swap the found minimum element with the first element
            swap(&arr[min_idx], &arr[i]);
        }
    }
      
    /* Function to print an array */
    void printArray(int arr[], int size)
    {
        int i;
        for (i = 0; i < size; i++)
            printf("%d ", arr[i]);
        printf("\n");
    }
      
    // Driver program to test above functions
    int main()
    {
        int arr[] = { 64, 25, 12, 22, 11 };
        int n = sizeof(arr) / sizeof(arr[0]);
        selectionSort(arr, n);
        printf("Sorted array: \n");
        printArray(arr, n);
        return 0;
    }