📌  相关文章
📜  AKTU 1st Year Sem 1 Solved Paper 2014-15 | COMP。系统和C编程| B段

📅  最后修改于: 2021-05-20 07:28:52             🧑  作者: Mango

论文下载链接:论文|学期1 | 2014-15

时间: 3小时
总分数:100

注意:-

  • 尝试所有问题。每个问题都带有标记。
  • 必要时假定合适的数据。

      2.尝试两个零件:(10 * 2 = 20)

    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. 用示例解释逻辑和位运算符。
      • 逻辑运算符:逻辑运算符用于组合两个或多个条件/约束或补充所考虑的原始条件的评估。逻辑运算符是布尔值true或false。要详细了解不同的逻辑运算符,请访问此链接。

        它们用于组合两个或多个条件/约束或补充所考虑的原始条件的评估。如下所述:

        • 逻辑AND:当同时考虑到两个条件时, “ &&”运算符返回true。否则,它返回false。例如,当a和b都为真(即非零)时, && b返回真。
        • 逻辑或: “ ||”当满足所考虑的条件中的一个(或两个)时,运算符将返回true。否则,它返回false。例如, ||如果a或b之一为true(即非零),则b返回true。当然,当a和b都为true时,它将返回true。
        • 逻辑非: “!”运算符返回true,即不满足考虑条件。否则,它返回false。例如,如果a为假,即a = 0时, !a返回true。
        // C program to demonstrate working of logical operators
        #include 
          
        int main()
        {
            int a=10, b=4, c = 10, d = 20;
          
            // logical operators
          
            // logical AND example
            if (a>b && c==d)
                printf("a is greater than b AND c is equal to d\n");
            else printf("AND condition not satisfied\n");
          
            // logical AND example
            if (a>b || c==d)
                printf("a is greater than b OR c is equal to d\n");
            else printf("Neither a is greater than b nor c is equal "
                        " to d\n");
          
            // logical NOT example
            if (!a)
                printf("a is zero\n");
            else printf("a is not zero");
          
            return 0;
        }
        

        输出:

        AND condition not satisfied
        a is greater than b OR c is equal to d
        a is not zero
      • 按位运算符:按位运算符用于对操作数执行位级运算。首先将运算符转换为位级别,然后对操作数进行计算。诸如加法,减法,乘法等数学运算可在位级别执行,以加快处理速度。要详细了解按位运算运算符,请访问此链接。

        在C语言中,以下6个运算符是按位运算运算符(按位工作)

        • &(按位与)将两个数字作为操作数,并对两个数字的每一位进行“与”运算。仅当两个位均为1时,AND的结果才为1。
        • | (按位或)将两个数字作为操作数,并对两个数字的每一位进行“或”运算。 OR的结果为1,两个位中的任何一位为1。
        • ^(按位XOR)将两个数字用作操作数,并对两个数字的每一位进行XOR。如果两个位不同,则XOR的结果为1。
        • <<(左移)取两个数字,左移第一个操作数的位,第二个操作数确定要移位的位数。
        • >>(右移)取两个数字,右移第一个操作数的位,第二个操作数确定要移位的位数。
        • 〜(按位非)取一个数字并将其所有位求反

        以下是示例C程序。

        /* C Program to demonstrate use of bitwise operators */
        #include
        int main()
        {
            unsigned char a = 5, b = 9; // a = 5(00000101), b = 9(00001001)
            printf("a = %d, b = %d\n", a, b);
            printf("a&b = %d\n", a&b); // The result is 00000001
            printf("a|b = %d\n", a|b);  // The result is 00001101
            printf("a^b = %d\n", a^b); // The result is 00001100
            printf("~a = %d\n", a = ~a);   // The result is 11111010
            printf("b<<1 = %d\n", b<<1);  // The result is 00010010 
            printf("b>>1 = %d\n", b>>1);  // The result is 00000100 
            return 0;
        }
        

        输出:

        a = 5, b = 9
        a&b = 1
        a|b = 13
        a^b = 12
        ~a = 250
        b<<1 = 18
        b>>1 = 4
        
    3. 用C编写格式化和未格式化的输入/输出函数。格式化输出表示根据规格以C语言更改输出模式。这是使用C语言中的格式说明符完成的。格式说明符在输入和输出期间使用。这是一种告诉编译器在使用scanf()进行输入或使用printf()进行输入的过程中变量中包含哪种类型的数据的方法。一些示例是%c,%d,%f等。

      例子:

      #include 
      int main()
      {
          int x = 45, y = 90;
          char ch = 'A';
          printf("%c\n", ch);
          printf("%d\n", x);
          printf("%i\n", x);
          return 0;
      }
      
      输出:
      A
      45
      45
      

      3.尝试两个零件:(10 * 2 = 20)

      1. 使用必要的语法描述C语言中循环语句的类型主要有两种类型的循环:
        1. 入口控制回路:在这种类型的回路中,测试条件要在进入回路主体之前进行测试。 For循环While循环是条目控制的循环。
        2. 出口受控循环:在这种类型的循环中,在循环体末端测试或评估测试条件。因此,无论测试条件为真还是假,循环体都会至少执行一次。做-当循环是退出控制循环。

        循环

        for循环是一种重复控制结构,允许我们编写执行特定次数的循环。该循环使我们可以在一行中一起执行n个步骤。
        句法:

        for (initialization expr; test expr; update expr)
        {    
             // body of the loop
             // statements we want to execute
        }
        

        在for循环中,循环变量用于控制循环。首先将此循环变量初始化为某个值,然后检查此变量是否小于或大于计数器值。如果statement为true,则执行循环主体,并更新循环变量。重复步骤直到退出条件出现。

        • 初始化表达式:在此表达式中,我们必须将循环计数器初始化为某个值。例如:int i = 1;
        • 测试表达式:在此表达式中,我们必须测试条件。如果条件的计算结果为true,那么我们将执行循环主体并更新表达式,否则将退出for循环。例如:i <= 10;
        • 更新表达式:执行循环主体后,此表达式将循环变量增加/减少一些值。例如:i ++;

        循环的等效流程图:

        While循环

        在研究循环时,我们已经知道迭代次数是事先已知的,即我们需要知道循环体需要执行的次数。 while循环用于事先不知道确切的循环迭代次数的情况。根据测试条件终止循环执行。

        语法
        我们已经说过,循环主要由三个语句组成-初始化表达式,测试表达式,更新表达式。三个循环的语法– For,while和dowhile在这三个语句的位置上主要不同。

        initialization expression;
        while (test_expression)
        {
           // statements
         
          update_expression;
        }
        

        流程图

        做while循环

        在do while循环中,循环执行也会根据测试条件终止。 do while循环和while循环之间的主要区别是在do while循环中,条件是在循环主体的末尾进行测试的,即do while循环是退出控制的,而其他两个循环是入口控制的循环。
        注意:在do while循环中,不管测试条件如何,循环体都将至少执行一次。

        语法

        initialization expression;
        do
        {
           // statements
        
           update_expression;
        } while (test_expression);
        

        注意:请注意循环末尾的半冒号(“;”)。

        流程图

      2. 编写一个C程序来查找两个矩阵的乘法。
        // C program to multiply two square matrices.
          
        #include 
          
        const int MAX = 100;
          
        // Function to print Matrix
        void printMatrix(int M[][MAX], int rowSize, int colSize)
        {
            for (int i = 0; i < rowSize; i++) {
                for (int j = 0; j < colSize; j++)
                    printf("%d ", M[i][j]);
          
                printf("\n");
            }
        }
          
        // Function to multiply two matrices A[][] and B[][]
        void multiplyMatrix(int row1, int col1, int A[][MAX],
                            int row2, int col2, int B[][MAX])
        {
            int i, j, k;
          
            // Matrix to store the result
            int C[MAX][MAX];
          
            // Check if multiplication is Possible
            if (row2 != col1) {
                printf("Not Possible\n");
                return;
            }
          
            // Multiply the two
            for (i = 0; i < row1; i++) {
                for (j = 0; j < col2; j++) {
                    C[i][j] = 0;
                    for (k = 0; k < row2; k++)
                        C[i][j] += A[i][k] * B[k][j];
                }
            }
          
            // Print the result
            printf("\nResultant Matrix: \n");
            printMatrix(C, row1, col2);
        }
          
        // Driven Program
        int main()
        {
            int row1, col1, row2, col2, i, j;
            int A[MAX][MAX], B[MAX][MAX];
          
            // Read size of Matrix A from user
            printf("Enter the number of rows of First Matrix: ");
            scanf("%d", &row1);
            printf("%d", row1);
            printf("\nEnter the number of columns of First Matrix: ");
            scanf("%d", &col1);
            printf("%d", col1);
          
            // Read the elements of Matrix A from user
            printf("\nEnter the elements of First Matrix: ");
            for (i = 0; i < row1; i++) {
                for (j = 0; j < col1; j++) {
                    printf("\nA[%d][%d]: ", i, j);
                    scanf("%d", &A[i][j]);
                    printf("%d", A[i][j]);
                }
            }
          
            // Read size of Matrix B from user
            printf("\nEnter the number of rows of Second Matrix: ");
            scanf("%d", &row2);
            printf("%d", row2);
            printf("\nEnter the number of columns of Second Matrix: ");
            scanf("%d", &col2);
            printf("%d", col2);
          
            // Read the elements of Matrix B from user
            printf("\nEnter the elements of First Matrix: ");
            for (i = 0; i < row2; i++) {
                for (j = 0; j < col2; j++) {
                    printf("\nB[%d][%d]: ", i, j);
                    scanf("%d", &B[i][j]);
                    printf("%d", B[i][j]);
                }
            }
          
            // Print the Matrix A
            printf("\n\nFirst Matrix: \n");
            printMatrix(A, row1, col1);
          
            // Print the Matrix B
            printf("\nSecond Matrix: \n");
            printMatrix(B, row2, col2);
          
            // Find the product of the 2 matrices
            multiplyMatrix(row1, col1, A, row2, col2, B);
          
            return 0;
        }
        
        输出:
        Enter the number of rows of First Matrix: 2
        Enter the number of columns of First Matrix: 3
        Enter the elements of First Matrix: 
        A[0][0]: 1
        A[0][1]: 2
        A[0][2]: 3
        A[1][0]: 4
        A[1][1]: 5
        A[1][2]: 6
        
        Enter the number of rows of Second Matrix: 3
        Enter the number of columns of Second Matrix: 2
        Enter the elements of First Matrix: 
        B[0][0]: 1
        B[0][1]: 2
        B[1][0]: 3
        B[1][1]: 4
        B[2][0]: 5
        B[2][1]: 6
        
        First Matrix: 
        1 2 3 
        4 5 6 
        
        Second Matrix: 
        1 2 
        3 4 
        5 6 
        
        Resultant Matrix: 
        22 28 
        49 64 
        
      3. 函数的类型是什么?编写一个C程序,以使用递归查找给定数字的阶乘。有以下类别:

        1. 不带参数和返回值函数:当函数没有参数,它不从调用函数接收任何数据。类似地,当不返回值时,调用函数不会从被调用函数接收任何数据。
          句法 :
          Function declaration : void function();
          Function call : function();
          Function definition :
                                void function()
                                {
                                  statements;
                                }
          
        2. 带有参数的函数,但没有返回值:当一个函数的参数,它接收来自调用函数的任何数据,但它没有返回值。

          句法 :

          Function declaration : void function ( int );
          Function call : function( x );
          Function definition:
                       void function( int x )
                       {
                         statements;
                       }
          
        3. 函数不带任何参数,但返回值:可能有场合,我们可能需要设计可能不带任何参数,但返回一个值给调用函数的功能。一个示例是getchar函数,它没有参数,但它返回一个整数和表示字符的整数类型数据。
          句法 :
          Function declaration : int function();
          Function call : function();
          Function definition :
                           int function()
                           {
                               statements;
                                return x;
                            }
              
        4. 与参数和返回值函数
          句法 :
          Function declaration : int function ( int );
          Function call : function( x );
          Function definition:
                       int function( int x )
                       {
                         statements;
                         return x;
                       }
          

        查找数字阶乘的程序:

        // C program to find factorial of given number
        #include 
          
        // function to find factorial of given number
        unsigned int factorial(unsigned int n)
        {
          
            // Base case
            if (n == 0)
                return 1;
          
            // Recursively call factorial function
            return n * factorial(n - 1);
        }
          
        int main()
        {
          
            int num;
          
            // Ge the number of which
            // factorial is to be calculated
            scanf("%d", &num);
            printf("Enter the number: %d", num);
          
            // Find the factorial
            // and print the result
            printf("\nFactorial of %d is %d",
                   num, factorial(num));
          
            return 0;
        }
        

        输出:

        Enter the number: 5
        Factorial of 5 is 120

      4.尝试两个零件:(10 * 2 = 20)

      1. 如何声明数组?说明数组的各种操作。

        声明数组的示例

        // A character array in C/C++/Java
        char arr1[] = {'g', 'e', 'e', 'k', 's'};
        
        // An Integer array in C/C++/Java
        int arr2[] = {10, 20, 30, 40, 50};
        
        // Item at i'th index in array is typically accessed
        // as "arr[i]".  For example arr1[0] gives us 'g'
        // and arr2[3] gives us 40.
        

        对于数组的操作:

        • 在排序的数组中搜索,插入和删除
        • 搜索,插入和删除未排序的数组
      2. 什么是枚举数据类型?编写一个C程序以使用枚举显示一年中的月份。枚举数据类型:枚举(或枚举)是C语言中用户定义的数据类型。它主要用于将名称分配给整数常量,这些名称使程序易于阅读和维护。

        enum State {Working = 1, Failed = 0}; 

        关键字“ enum”用于在C和C++中声明新的枚举类型。

        以下是枚举声明的示例。

        // The name of enumeration is "flag" and the constant
        // are the values of the flag. By default, the values
        // of the constants are as follows:
        // constant1 = 0, constant2 = 1, constant3 = 2 and 
        // so on.
        enum flag{constant1, constant2, constant3, ....... };
        

        还可以定义enum类型的变量。可以通过两种方式定义它们:

        // In both of the below cases, "day" is 
        // defined as the variable of type week. 
        
        enum week{Mon, Tue, Wed};
        enum week day;
        
        // Or
        
        enum week{Mon, Tue, Wed}day;
        

        C程序使用枚举显示一年中的月份:

        // Another example program to demonstrate working
        // of enum in C
        #include 
          
        enum year { Jan,
                    Feb,
                    Mar,
                    Apr,
                    May,
                    Jun,
                    Jul,
                    Aug,
                    Sep,
                    Oct,
                    Nov,
                    Dec };
          
        int main()
        {
            int i;
            for (i = Jan; i <= Dec; i++)
                printf("%d ", i);
          
            return 0;
        }
        

        输出:

        0 1 2 3 4 5 6 7 8 9 10 11
        

        在此示例中,for循环将从i = 0运行到i = 11,因为最初i的值是Jan,即Jan,它是0,Dec的值是11。

      3. C语言中的差异结构和联合。

      5.尝试两个零件:(10 * 2 = 20)

      1. 说明指针的功能。编写一个C程序以使用指针对给定的数字进行排序。指针功能:
        1. 指针可节省内存空间。
        2. 指针的执行时间更快,因为数据是通过地址操纵的,即直接访问
          内存位置。
        3. 使用指针可以有效地访问内存。指针分配并释放内存空间。内存是动态分配的。
        4. 指针与数据结构一起使用。它们对于表示二维和多维很有用
          数组。
        5. 我们可以访问任何类型的数组的元素,无论其下标范围如何。
        6. 指针用于文件处理。
        7. 指针用于动态分配内存。
        8. 在C++中,声明为基类的指针可以访问派生类的对象。但是,指向派生类的指针不能访问基类的对象。编译器将生成一条错误消息“无法将’A *转换为B *,’”,其中A是基类,而B是派生类。
      2. C中break和continue有什么区别?用简洁的示例描述开关柜的结构。

        Break: Break关键字是一个跳转语句,用于终止循环或切换用例。一旦在循环或切换案例中遇到break关键字,执行就会在该处停止,控制权立即从该点返回到循环或切换后的第一条语句。
        句法:

        break;

        继续:继续也是跳转语句,就像break关键字一样。 Continue关键字与break关键字相反。而不是终止循环,它强制执行循环的下一个迭代。当在循环中执行continue语句时,continue语句之后的循环内代码将被跳过,并且循环的下一个迭代将开始。
        句法:

        continue;

        开关柜的结构:

        switch (n)
        {
            case 1: // code to be executed if n = 1;
                break;
            case 2: // code to be executed if n = 2;
                break;
            default: // code to be executed if n doesn't match any cases
        }

        流程图:
        在Java中切换

        例子:

        // Following is a simple program to demonstrate
        // syntax of switch.
        #include 
        int main()
        {
            int x = 2;
            switch (x) {
            case 1:
                printf("Choice is 1");
                break;
            case 2:
                printf("Choice is 2");
                break;
            case 3:
                printf("Choice is 3");
                break;
            default:
                printf("Choice other than 1, 2 and 3");
                break;
            }
            return 0;
        }
        
        输出:
        Choice is 2
        
      3. 列出“ C”中的各种文件操作。编写一个C程序来计算文件中的字符数。到目前为止,使用C程序的操作是在提示/终端上完成的,该提示/终端没有存储在任何地方。但是在软件行业,大多数程序是编写来存储从程序中获取的信息的。一种这样的方式是将获取的信息存储在文件中。可以对文件执行的不同操作是:
        1. 创建一个新文件(属性为“ a”或“ a +”或“ w”或“ w ++”的fopen)
        2. 打开一个现有文件( fopen )
        3. 从文件读取( fscanf或fgetc )
        4. 写入文件( filePointerrintf或filePointeruts )
        5. 移至文件中的特定位置( fseek,快退)
        6. 关闭文件( fclose )

        括号中的文字表示用于执行这些操作的功能。

        文件操作中的功能: