论文下载链接:论文|学期1 | 2014-15
时间: 3小时
总分数:100
注意:-
- 尝试所有问题。每个问题都带有标记。
- 必要时假定合适的数据。
2.尝试两个零件:(10 * 2 = 20)
- 用整洁的框图描述计算机的基本组件。数字计算机:数字计算机可以定义为可编程机器,它可以读取作为指令传递的二进制数据,处理该二进制数据并显示计算出的数字输出。因此,数字计算机就是那些处理数字数据的计算机。
数字计算机功能部件的详细信息
- 输入单元:输入单元由连接到计算机的输入设备组成。这些设备接受输入并将其转换为计算机可以理解的二进制语言。一些常见的输入设备是键盘,鼠标,操纵杆,扫描仪等。
- 中央处理器(CPU0:输入设备将信息输入计算机后,处理器对其进行处理。CPU被称为计算机的大脑,因为它是计算机的控制中心。它首先从内存中获取指令,然后从计算机中获取指令。然后解释它们以便知道要做什么。如果需要,则从内存或输入设备中获取数据,然后CPU执行或执行所需的计算,然后将输出存储或显示在输出设备上,CPU具有三个负责不同功能的主要组件-算术逻辑单元(ALU),控制单元(CU)和存储器寄存器
- 算术和逻辑单元(ALU):顾名思义,ALU执行数学计算并做出逻辑决策。算术计算包括加法,减法,乘法和除法。逻辑决策涉及两个数据项的比较,以查看哪个数据项更大或更小或相等。
- 控制单元:控制单元负责协调和控制流入和流出CPU的数据流,还控制ALU,存储器寄存器以及输入/输出单元的所有操作。它还负责执行程序中存储的所有指令。它解码获取的指令,对其进行解释,然后将控制信号发送到输入/输出设备,直到所需的操作由ALU和内存正确完成为止。
- 内存寄存器:寄存器是CPU中的临时内存单元。这些用于存储处理器直接使用的数据。寄存器的大小可以不同(16位,32位,64位等),CPU内部的每个寄存器都有特定的函数,例如存储数据,存储指令,在存储器中存储位置地址等。用户寄存器可以由汇编语言程序员用来存储操作数,中间结果等。累加器(ACC)是ALU中的主要寄存器,包含要在ALU中执行的操作的操作数之一。
- 内存:附属于CPU的内存用于存储数据和指令,称为内部存储器。内部存储器分为许多存储位置,每个位置都可以存储数据或指令。每个存储单元的大小均相同,并具有一个地址。借助该地址,计算机可以轻松读取任何内存位置,而不必搜索整个内存。当程序被执行时,它的数据被复制到内部存储器中,并且被存储在存储器中直到执行结束。内部存储器也称为主存储器或主存储器。该存储器也称为RAM,即随机存取存储器。数据访问的时间与其在存储器中的位置无关,因此,该存储器也称为随机访问存储器(RAM)。阅读此文章以了解不同类型的RAM
- 输出单元:输出单元由计算机附带的输出设备组成。它将来自CPU的二进制数据转换为人类可以理解的形式。常见的输出设备是监视器,打印机,绘图仪等。
- 用示例解释逻辑和位运算符。
- 逻辑运算符:逻辑运算符用于组合两个或多个条件/约束或补充所考虑的原始条件的评估。逻辑运算符是布尔值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
- 用整洁的框图描述计算机的基本组件。数字计算机:数字计算机可以定义为可编程机器,它可以读取作为指令传递的二进制数据,处理该二进制数据并显示计算出的数字输出。因此,数字计算机就是那些处理数字数据的计算机。
例子:
#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)
- 使用必要的语法描述C语言中循环语句的类型主要有两种类型的循环:
- 入口控制回路:在这种类型的回路中,测试条件要在进入回路主体之前进行测试。 For循环和While循环是条目控制的循环。
- 出口受控循环:在这种类型的循环中,在循环体末端测试或评估测试条件。因此,无论测试条件为真还是假,循环体都会至少执行一次。做-当循环是退出控制循环。
循环
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);
注意:请注意循环末尾的半冒号(“;”)。
流程图:
- 编写一个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
- 函数的类型是什么?编写一个C程序,以使用递归查找给定数字的阶乘。有以下类别:
- 不带参数和返回值函数:当函数没有参数,它不从调用函数接收任何数据。类似地,当不返回值时,调用函数不会从被调用函数接收任何数据。
句法 :Function declaration : void function(); Function call : function(); Function definition : void function() { statements; }
- 带有参数的函数,但没有返回值:当一个函数的参数,它接收来自调用函数的任何数据,但它没有返回值。
句法 :
Function declaration : void function ( int ); Function call : function( x ); Function definition: void function( int x ) { statements; }
- 函数不带任何参数,但返回值:可能有场合,我们可能需要设计可能不带任何参数,但返回一个值给调用函数的功能。一个示例是getchar函数,它没有参数,但它返回一个整数和表示字符的整数类型数据。
句法 :Function declaration : int function(); Function call : function(); Function definition : int function() { statements; return x; }
- 与参数和返回值函数
句法 :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)
- 如何声明数组?说明数组的各种操作。
声明数组的示例
// 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.
对于数组的操作:
- 在排序的数组中搜索,插入和删除
- 搜索,插入和删除未排序的数组
- 什么是枚举数据类型?编写一个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。
- C语言中的差异结构和联合。
5.尝试两个零件:(10 * 2 = 20)
- 说明指针的功能。编写一个C程序以使用指针对给定的数字进行排序。指针功能:
- 指针可节省内存空间。
- 指针的执行时间更快,因为数据是通过地址操纵的,即直接访问
内存位置。 - 使用指针可以有效地访问内存。指针分配并释放内存空间。内存是动态分配的。
- 指针与数据结构一起使用。它们对于表示二维和多维很有用
数组。 - 我们可以访问任何类型的数组的元素,无论其下标范围如何。
- 指针用于文件处理。
- 指针用于动态分配内存。
- 在C++中,声明为基类的指针可以访问派生类的对象。但是,指向派生类的指针不能访问基类的对象。编译器将生成一条错误消息“无法将’A *转换为B *,’”,其中A是基类,而B是派生类。
- 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 }
流程图:
例子:
// 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
- 列出“ C”中的各种文件操作。编写一个C程序来计算文件中的字符数。到目前为止,使用C程序的操作是在提示/终端上完成的,该提示/终端没有存储在任何地方。但是在软件行业,大多数程序是编写来存储从程序中获取的信息的。一种这样的方式是将获取的信息存储在文件中。可以对文件执行的不同操作是:
- 创建一个新文件(属性为“ a”或“ a +”或“ w”或“ w ++”的fopen)
- 打开一个现有文件( fopen )
- 从文件读取( fscanf或fgetc )
- 写入文件( filePointerrintf或filePointeruts )
- 移至文件中的特定位置( fseek,快退)
- 关闭文件( fclose )
括号中的文字表示用于执行这些操作的功能。
文件操作中的功能: