范文一:在计算机中为什么采用二进制
在计算机中为什么采用二进制,
在计算机中,广泛采用的是只有"0"和"1"两个基本符号组成的二进制数,而不使用人们习惯的十进制数,原因如下:
(1)二进制数在物理上最容易实现。例如,可以只用高、低两个电平表示"1"和"0",也可以用脉冲的有无或者脉冲的正负极性表示它们。 (2)二进制数用来表示的二进制数的编码、计数、加减运算规则简单。 (3)二进制数的两个符号"1"和"0"正好与逻辑命题的两个值"是"和"否"或称"真"和"假"相对应,为计算机实现逻辑运算和程序中的逻辑判断提供了便利的条件。
(4)制数只有0和1两种数字符号,在存储、处理和传输的过程中的可靠性最强,不易出错。同时,也提高了计算机本身的稳定性和可靠性。
范文二:计算机中带符号的整数为何采用二进制的补码进行存储?
我们都知道在计算机内部数据的存储和运算都采用二进制,是因为计算机是由很多晶体管组成的,而晶体管只有2种状态,恰好可以用二进制的0和1表示,并且采用二进制可以使得计算机内部的运算规则简单,稳定性高。在计算机中存在实数和整数,而整数又分为无符号整数和有符号整数,无符号的整数表示很简单,直接采用其二进制形式表示即可,而对于有符号数的表示却成了问题,如何表示正负?如何去处理正负号?下面来具体说下其中的原因,在这之前先了解一下原码、反码和补码这几个概念。
1.原码、反码和补码的概念
在了解原码、反码和补码之前先说一下有符号数和无符号数。用过C语言的都知道在C语言中用signed和unsigned来标识一个数是否是有符号还是无符号类型的。对于一个8bit的二进制来说,若当做无符号数处理,其能表示的整型值范围是0~255,但是这样表示数据就有个局限性,如果数据是负的该如何表示?因此就引入了有符号类型的概念,对于有符号类型,规定取最高位为符号位,若最高位为0,则为正数,否则为负数,这样一来对于8位二进制,示数值的就只有7位了,能够表示的非负数值范围变为0~127,负值范围为-127~-1,相当于可以理解为将无符号类型能够表示的128~255拿来去表示-127~-1了。事实上,在计算机内部存储中,计算机自己是无法去区分无符号还是有符号类型的,对于255和-1,在计算机内部存储的都是11111111。换个角度来说,如果事先知道内存中存储了这样一个8位二进制11111111,但是谁也不能肯定它具体表示什么数值,是-1还是255?这个是需要靠程序员自己去指定的,如果指定为无符号类型,则编译器则通过相应指令将其转换为数值255。事实上对于-x的二进制补码表示形式和(256-x)(256-x当做无符号类型处理)的二进制表示形式相同,从这里可以略微了解了补码的含义了。在教材中对于原码、反码以及补码一般是这么定义的:
对于正数原码、反码以及补码是其本身。负数的原码是其本身,反码是对原码除符号位之外的各位取反,补码则是反码加1。
因为(-x)的二进制补码形式和256-x的二进制表示形式相同,而255-x相当于对x的每一位取反,那么256-x就是255-x后加1。
注意:1)原码、反码、补码的概念是针对有符号类型而言的。
2)实数始终是有符号类型的(实数并不是采用补码形式存储的,具体可参考《浅谈C/C++的浮点数在内存中的存储方式》一文),整型数据包括无符号和有符号类型的。
2.采用补码表示带符号的整数的原因
对于有符号类型的整数,有原码、反码和补码三种形式,最后选择了补码来表示,具体来说有下面几点原因。
1)能够统一+0和-0的表示
采用原码表示,+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 000 0000;
采用反码表示,+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111 1111;
采用补码表示,+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111 1111+1=1 0000 0000,因为计算机会进行截断,只取低8位,所以-0的补码表示形式为0000 0000。
从上面可以看出只有用补码表示,+0和-0的表示形式才一致。正因为如此,所以补码的表示范围比原码和反码表示的范围都要大,用补码能够表示的范围为-128~127,0~127分别用00000000~01111111来表示,而-127~-1则用10000001~11111111来表示,多出的10000000则用来表示-128。因此对于任何一个n位的二进制,假若表示带符号的整数,其表示范围为-2^(n-1)~2^(n-1)-1,且有MAX+1=MIN。看下面一段代码:
char ch=127;ch++;
ch的值是多少?它的值是-128,读者可以上机验证一下。
假如不采用补码来表示,那么计算机中需要对+0和-0区别对待,显然这个对于设计来说要增加难度,而且不符合运算规则。
2)对于有符号整数的运算能够把符号位同数值位为一起处理
由于将最高位作为符号位处理,不具有实际的数值意义,那么如何在进行运算时处理这个符号位?如果单独把符号位进行处理,显然又会增加电子器件的设计难度和CPU指令设计的难度,但是采用补码能够很好地解决这个问题。下面举例说明:
比如-2+3=1
如果采用原码表示(把符号位同数值位一起处理):
1 000 0010+0 000 0011=1 000 0101=(-5)原,显然这个结果是错误的。
如果采用反码表示
1 111 1101+0 000 0011=1 0000 0000=0 0000000=(+0)反,显然这个结果也是错误的。
如果采用补码表示
1 111 1110+0 000 0011=1 0000 0001=0000 0001=(1)补,结果是正确的。
从上面可以看出,当把符号位同数值位一起进行处理时,只有补码的运算才是正确的。如果不把符号位和数值位一起处理,会给CPU指令的设计带来很大的困难,如果把符号位单独考虑的话,CPU指令还要特意对最高位进行判断,这个对于计算机的最底层实现来说是很困难的。
3)能够简化运算规则
对于-2+3=1这个例子来说,可以看作是3-2=1,也即[3]+[-2]=1,从上面的运算过程可知采用补码运算相当于是
[3]补+[-2]补=[1]补,也即可以把减法运算转换为加法运算。这样一来的好处是在设计电子器件时,只需要设计加法器即可,不需要单独再设计减法器。
总的来说,采用补码主要有以上几点好处,从而使得计算机从硬件设计上更加简单以及简化CPU指令的设计。
测试代码
#include 1.1 计算机中为什么采用二进制表示形式。 答: 容易表示,电路简单可靠。 运算简单。 逻辑性强。 1.2 将下列不同进制的数从大到小排列: (110110010)2 、(208)10 、(322)8 、(A8)16 答: (110110010)2、(322)8、(208)10、(A8)16 1.3 什么是数的定点表示方法,什么是数的浮点表示方法,试比较两者可表示的数的范围。 答: 定点数是将小数点固定在数中某个约定的位置 如果机器数采用浮点表示,则小数点的位置是不固定的,可以浮动 1.4 简述冯?诺依曼计算机的基本特点。 答: 采用存储程序方式,即程序和数据放在同一个存储器中,两者没有区别。指令同数据一 样可以送到运算器进行运算,即由指令组成的程序是可以修改的。 存储器是按地址访问的线性编址的唯一结构,每个单元的位数是固定的。 指令由操作码和地址码组成。 通过执行指令,直接发出控制信号来控制计算机的操作。 机器以运算器为中心,输入/输出设备与存储器间的数据传送都经过运算器。 数据以二进制表示。 1.5 简述程序设计的一般过程。 答: (1) 分析问题。提出解决问题的可行方案。 (2) 确定算法。针对提出的可行方案确定解决问题、完成任务的每一个细节步骤。 (3) 编程。使用程序设计语言把上述算法严格地描述出来(即写成程序),输入到计算机里并 存盘。 (4) 在计算机上运行并调试这个程序。如果在运行过程中发现了错误,就仔细分析出错的原 因,然后更正错误。再次运行该程序,直到程序准确无误并得到正确的输出结果为止。 (5) 总结。写出书面报告。 1.6 解释下列概念:数据、指令、程序、数据结构。 答: 数据(data):是对信息的一种符号表示,在计算机科学中是指所有能输入到计算机中并 被计算机程序处理的符号的总称。 程序,是为了完成一个完整的任务而编写的计算机能够接受并运行的一条条指令。简 言之,程序就是指令的序列。 数据结构是研究计算机中大量数据存储的组织形式,并定义相应的运算以提高计算机的数据处理能力的一门科学。 1.7 什么是操作系统,简述操作系统的功能。 答: 操作系统是用来管理计算机系统的软硬件资源,提高计算机系统资源 的使用效率,方便用户使用的程序集合。 (1) 处理器管理 (2) 存储器管理 (3) 输入/输出设备管理 (4) 文件管理 (5) 人机交互功能 1.8 简述编译程序结构的五道“工序”。 答: (1) 词法分析程序 (2) 语法分析程序 (3) 中间代码生成程序 (4) 优化程序 (5) 目标代码生成程序 1.9 简述软件开发的生命周期。 答: 一个软件的生存周期包括以下几个阶段: (1) 问题定义与需求分析。 (2) 总体设计(或称概要设计)。 (3) 详细设计。 (4) 编写程序和单元测试。 (5) 综合测试和确定运行。 (6) 系统维护。 2.1 简述编程语言的发展历史。 答: 计算机语言不断得到发展,由低级语言发展到高级语言。 低级语言又称面向机器的语言,是指这类语言依赖于机器。由于不同的计算机一般有着不同 的指令系统,因此由这类语言编写的程序移植性很差。这类语言主要有机器语言和汇编语言。 汇编语言再向自然语言方向靠近,便发展到了高级语言阶段。高级语言编写的程序易学、易 读、易修改,通用性好,不依赖于机器。但机器不能对用其编制的程序直接运行,必须经过语言 处理程序的翻译后才可以被机器接受。 2.2 简述解释型语言和编译型语言的区别。 答: (1) 解释型 这种方式效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其 解释器,但这种方式比较灵活,可以动态地调整、修改应用程序,如BASIC 语言和Perl 语言。 (2) 编译型 这种方式的目标程序可以脱离其语言环境独立执行,而且效率较高。现在大多 数的编程语言都是编译型的,C 语言就属于编译型语言。 2.3 简述C 语言的特点。 答: 语言本身简洁、灵活,便于学习和使用。 C 语言又归为中级语言,是因为它把高级语言的成分同汇编语言的功能结合了起来。 运算符类型丰富。 C 语言数据类型丰富,并有多种数据结构,但与Pascal 或Ada 相比,它却不是强类型语 言。 C 语言是一种结构化程序设计语言。 C 语言又称函数式语言。 程序设计较自由,语法限制不严格。 2.4 阅读本书附录,了解C 语言的各种版本、Visual C++ 6.0 开发系统的操作和库函数的使用。 2.5 什么是结构化程序设计, 答: 程序只用三种基本的控制结构实现,只有一个入口和一个出口。 2.6 算法的特性是什么, 答: 解题算法是一个有穷的动作序列。 该动作序列只有一个开始动作。 序列中每一个动作仅有一个后继动作。 序列终止表示问题得到解答或问题无解。 2.7 比较传统流程图、N-S 图和PAD 图的优缺点。 答: 流程图允许用流线使流程任意转移,而结构化程序设计主张限制这种无规律的任意转向 N-S 图把程序结构限制在顺序、选择与重复等几种基本结构内,使用者只能遵守结构化程序设计的规定。但是,如果程序内嵌套的层数过多,内层的方块越画越小,一方面增加了画图的难度,另一方面使图的清晰性受到影响。 PAD(Problem Analysis Diagram)图即问题分析图。PAD 图是近年来在软件开发中被广泛用 来描述算法的一种图表示法。相比而言,流程图和N-S 图都是采用自上而下的方法,而PAD 除 了自上而下以外,还可以自左向右地展开,所以,如果说流程图和N-S 图是一维的算法描述,那 么PAD 图就是二维的。它能展现算法的层次结构,更直观易懂。 2.8 用传统流程图与N-S 图描述下列算法: a. 已知长方形的长和宽,求其面积。 b. 求0~100 中的全部偶数之和。 c. 求50 个整数中的最小植。 2.9 什么是集成开发环境, 答: 将编辑、编译、调试等功能集成在一个桌面环境中,这就是集成开发环境。 3.1 开发一个C 程序包括哪几个步骤,每个步骤的作用是什么, 答: (1) 编辑。程序员使用任意编辑软件(编辑器)将编写好的C 程序输入计算机,构成源程序文件,存盘时文件名应以.c 为扩展名。 (2) 编译。编译时,编译器首先会检查源程序中每一条语句的语法。 (3) 连接。编译后产生的目标文件是可重定位的程序模块,不能直接运行。 (4) 测试与调试。一个程序经过编译、连接产生了可执行程序后,就可以开始测试和调试了。 (5) 运行。生成可执行文件后,程序就可以在操作系统控制下运行。 3.2 C 语言对自定义标识符有哪些要求, 答: (1) 必须由一个字母(a~z,A~Z)或下划线(_)开头; (2) 其他部分可以用字母、下划线或数字(0~9)组成; (3) 大小写字母表示不同意义,即代表不同的标识符; (4) 自定义标识符不能使用 C 语言的关键字。 3.3 编程实现下列运算。 a. 已知半径,求圆面积和球体积。 #define PI 3.14159 #include "stdio.h" int main() { float r, s, v; printf("please insert a number:"); scanf("%f", &r); s = PI*r*r; v = (float)4*PI*r*r*r/3; printf("s = %f, v = %f\n", s, v); return 0; } b. 将两个数的值交换。 #include "stdio.h" int main() { int a, b, t; printf("please insert two number:"); scanf("%d%d",&a, &b); printf("a = %d, b = %d\n", a, b); t = a; a = b; b = t; printf("a = %d, b = %d\n", a, b); return 0; } c. 求一个实数的绝对值。 #include "stdio.h" int main() { float a; printf("please insert a number:"); scanf("%f", &a); if(a < 0)=""> a = -a; printf("a = %f\n", a); return 0; } d. 求sin(23.8)的值。 #include "math.h" #include "stdio.h" int main() { float a, i = 23.8; a = sin(i); printf("sin(23.8) = %f\n", a); return 0; } 4.1 在C 语言中为什么要定义数据类型, 4.2 假设inta=2,b=3,c=4,计算下列表达式: a. 1/a*b*c b. 1/(a*b*c) c. 1/a/b/c d. 1.0/(a*b*c) e. (float)1/(a*b*c) 答: A,0.000000 B,0.000000 C,0.000000 D,0.041667 E,0.041667 4.3 假如int x=1, y=1, z=1, u=0,求u = x ++ && y ++ || z++ 的值。 答: 1 4.4 写出下列表达式: a. 求一元二次方程ax2+bx+c=0 实根。 b. 计算浮点数a 的整数部分位数。 c. 已知三角形三边长a, b, c,求三角形面积。 d. 数学式子5x+6sinx+x3-4cos(x2+ 1)+x+ 1。 e. a、b 两变量中有且只有一个是0。 4.5 定义int a=20, n=10;,分别写出执行下列语句后a 的值。 a. a/=a+a b. a%=n%=7 c. a += a -= a *= a 答: 0 2 0 4.6 定义int x=10,y=7,z=5;,计算下列表达式的值。 a. x b. z = x-y, x*2, y-z, z+2 c. (++z >= y--)?++z:y— 答: 0 2 0 4.7 写出下面程序的输出结果。 #include 答: 1 4.8 写出下面程序的输出结果。 #include 答: 25 4.9 写出下面程序的输出结果。 #include 答: 0 4.10 写出下面程序的输出结果。 #include 答: i=1,j=1,k=3 4.11 写出下面程序的输出结果。 #include k=(a=2,b=5,a>b?a++:b++,a+b); printf("%d\n",k); return 0; } 答: 8 4.12 写出下面程序的输出结果。 #include 答: 3.50 4.13 写出下面程序的输出结果。 #include 答: Internet,Internet,Internet Inter,Inter ,Inter 4.14 按照运算符优先级从高到低的顺序,写出本章所学过的各个运算符(算术运算符、关 系运算符、逻辑运算符、条件运算符、赋值运算符、强制类型转换运算符等)。 答: ( ) [ ] -> . ! ~ ++ -- + - * &(类型) sizeof * / % + - <>> <><=> >= == != & ^ | & & | | ? : = += -= *= /= %= &= ^= |= <=>>= , 4.15 编程实现下列功能:输入3 个字符后,按各字符的ASCII 码大小顺序小从小到大输出 这些字符。 #include "stdio.h" int main() { int i; char min, mid, max, s[3]; printf("please input 3 chars:"); scanf("%c%c%c", s, s + 1, s + 2); min = (s[0] < s[1])?="" s[0]:s[1];=""> min = (min < s[2])?="" min:s[2];=""> max = (s[0] > s[1])? s[0]:s[1]; max = (max > s[2])? max:s[2]; for(i = 0; i < 2;="" i++)=""> { if(s[i] != min && s[i] != max) { mid = s[i]; break; } } printf("%c%c%c\n", min, mid, max); } 4.16 编程实现下列功能:输入3 个数后,求它们的平均值,然后输出其中与平均值之差的 绝对值最小的那个数。 #include "stdio.h" float f(float a, float ave) { float d; if((a - ave) >= 0) { d = a - ave; } else d = ave - a; return d; } int main() { float ave, m, min, s[3]; int i = 0; printf("please insert 3 numbers:"); scanf("%f%f%f", s, s + 1, s + 2); ave = (float)(s[0] + s[1] + s[2])/3; while(i < 3)=""> { m = f(s[i], ave); if(i == 1 || m < min)=""> min = m; m = min + ave; i++; } printf("the average is%f, the most adjacent number is%f\n", ave, m); return 0; } 5.1 写出下面程序的输出结果。 #include 答: d=10,x=1 5.2 写出下面程序的输出结果。 #include 答: a=11 5.3 写出下面程序的输出结果。 #include 答: -1 5.4 写出下面程序的输出结果。 #include { if ( j%2) continue;x++; } x++; } printf("x=%d\n",x); return 0; } 答: x=8 5.5 写出下面程序的输出结果。 #include 答: a=2,b=1 5.6 编程实现运输公司对用户计算运费的方法。路程(s)越远,每公里运费越低。标准如下: s,250 没有折扣 250?s,500 2,折扣 500?s,1000 5,折扣 1000?s,2000 8,折扣 2000?s,3000 10,折扣 3000?s 15,折扣 #include "stdio.h" int main() { int s; float m; printf("please insert lenth:"); scanf("%d", &s); if(s < 250)=""> m = 0; else if(s >= 250 && s < 500)=""> m = .02; else if(s >= 500 && s < 1000)=""> m = .05; else if(s >= 1000 && s < 2000)=""> m = .08; else if(s >= 2000 && s <> m = .1; else if(s >= 3000) m = .15; printf("m = %f\n", m); } 5.7 编程解决货物征税问题。价格在,万元以上的征5 %,5000 元以上1 万元以下的征3 %, 1000 元以上5000 以下的征2 %,1000 元以下的免税,读入货物价格,计算并输出税金。 #include "stdio.h" int main() { int m; float s,t; scanf("%d",&m); if(m <= 1000)="">=> t = 0; else if(m >1000 && m <= 5000)="">=> t = (m - 1000) * .02; else if(m > 5000 && m <= 10000)="">=> t = 80 + (m - 5000) * .03; else if (m > 10000) t = 80 + 150 + (m - 10000) * .05; printf("t = %f\n", t); } 5.8 编程实现下面的功能:输入一个正整数,要求以相反的顺序输出该数。例如,输入12345, 则输出为54321。(提示:可以从个位开始,按位输出整数的每一位。) #include "stdio.h" int main() { int m; int s = 0, i = 0; scanf("%d", &m); while(m != 0) { s = m % 10; printf("%d", s); m = m / 10; } printf("\n"); return 0; } 5.9 编程实现下面的功能:输入x,求下列级数和,直至末项小于10-7 为止。 2 3 4 1 2! 3! 4! ! n x x x x x n , , , , , , , ? ? 5.10 编程实现下面的功能:输出1~500 中能被7 除余5、被5 除余3、被3 除余2 的数(每 行输出5 个数)。 #include "stdio.h" int main() { int i = 1; int j = 0; while (i <= 500)="">=> { if(i % 7 == 5 && i % 5 == 3 && i % 3 ==2) { printf("%d ", i); j++; } if(j % 5 == 0 && j != 0) { printf("\n"); j = 0; } i++; } return 0; } 5.11 编程实现下面的功能:按下面求平方根的迭代公式求x,要求精确到小数点后10 位。 2 / ) ( 1 n n n x a x x , , , 5.12 编程求解百钱百鸡问题。中国古代数学家张丘建在他的《算经》中提出了著名的“百 钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏 各几何? #include "stdio.h" int main() { int x, y, z; for (x = 0; x < 100;="" x++)=""> for (y = 0; y < 100;="" y++)=""> { z = 100 - x -y; if (z % 3 == 0 && (5*x)+(3*y)+(z/3) == 100) { printf("x = %d, y = %d, z = %d \n", x, y, z); } } return 0; } 5.13 为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回 原文。例如,可以按以下规律将电文变成密码:将字母A 变成字母E,a 变成e,即变成其后的 第4 个字母,W 变成A,X 变成B,Y 变成C,Z 变成D。按上述规律转换字母,非字母字符不 变,如“Wonderful!”转换为“Asrhivjyp!”。编程实现下面的功能:输入一行字符,输出其相应 的密码。 #include "stdio.h" int main() { char ch; while ((ch=getchar()) != '\n') { if(ch >= 'W' && ch <= 'z')="">=> ch = 'A' + (ch - 'W'); else if(ch >= 'A' && ch < 'w')=""> ch += 4; else if(ch >= 'w' && ch <= 'z')="">=> ch = 'a' + (ch - 'w'); else if(ch >= 'a' && ch < 'w')=""> ch += 4; printf("%c", ch); } return 0; } 6.1 写出下面程序的输出结果。 #include 答: 14 6.2 编程实现下面的功能:从键盘输入10个整数并保存到数组中,然后计算它们的平均值, 找出其中的最大数和最小数,并显示结果。 #include "stdio.h" int main() { int s[10]; int min, max, i, A = 0; float ave; printf("please inser 10 numbers:"); for(i = 0; i < 10;="" i++)=""> { scanf("%d", s + i); } min = max = *s; for(i = 0; i < 10;="" i++)=""> { min = (min < *(s="" +="" i))?="" min:*(s="" +="" i);=""> max = (max > *(s + i))? max:*(s + i); A += *(s + i); } ave = (float)A/10; printf("the average is %f\nthe minimal number is %d\nthe maximal number is %d\n", ave, min, max); return 0; } 6.3 编程实现下面的功能:从键盘输入一个字符串,要求不通过调用strlen()来实现统计 字符串中的字符个数。 #include "stdio.h" int main() { char ch; int i = 0; while ((ch = getchar()) != '\n') { i++; } printf("the quantity of chars is %d\n", i); return 0; } 6.4 编程实现下面的功能:输入一个字符串,输出其中大写英文字母出现的次数。 #include "stdio.h" int main() { char ch; int i = 0; while((ch = getchar()) != '\n') { if(ch >= 'A' && ch <= 'z')="">=> i++; } printf("the quantity of capital letter is %d\n", i); return 0; } 6.5 编程实现下面的功能:把从键盘输入的字符串逆序存放并输出。 #include "stdio.h" int main() { int i, j; char ch; char* pResult = NULL; char* pTemp = NULL; char* pcr = NULL; pResult = (char*)malloc(sizeof(char)); pResult[0] = '\0'; while((ch = getchar()) != '\n') { pTemp = (char*)malloc(2 * sizeof(char)); pTemp[0] = ch; pTemp[1] = '\0'; pResult = strcat(pResult, pTemp); free(pTemp); } pcr = (char*)malloc((strlen(pResult) + 1) * sizeof(char)); for(i = strlen(pResult) - 1, j = 0; i >= 0; i--) { pcr[j] = pResult[i]; j++; } pcr[j] = '\0'; printf("%s\n", pcr); return 0; } 6.6 编程实现下面的功能:将一行字符中的每个单词的第一个字母改成大写。 #include "stdio.h" #include "string.h" int main() { int n,i; char a[1000]; int s='A'-'a'; printf("Input a string : "); gets(a); n=strlen(a); a[0]+=s; for(i=1;i { if(a[i]==' ') { a[i+1]+=s; } } printf("%s\n",a); return 0; } 6.7 编程实现下面的功能:已知一个排好序的数组,输入一个数,按原来排序的规律将它 插入到数组中。 #include { int a[12]={1,2,3,5,7,9,12,32,45,56,67}; int n,i,j; printf("input a number :"); scanf("%d",&n); for(i=0;i<11;i++)>11;i++)> { if(n<=a[i])>=a[i])> { for(j=11;j>i;j--) { a[j]=a[j-1]; } a[i]=n; break; } } for(i=0;i<12;i++)>12;i++)> { printf("%d ",a[i]); } printf("\n"); return 0; } 6.8 编程实现下面的功能:输入10个数,将其中的最小数与第一个数交换,将最大数与最 后一个数交换。 #include "stdio.h" int main() { int a[10]; int i,max,min,maxnum,minnum; printf("Input 10 numbers:"); for(i=0;i<10;i++)>10;i++)> { scanf("%d",&a[i]); } minnum=maxnum=0; max=min=a[0]; for(i=0;i<10;i++)>10;i++)> { if(a[i]>max) { max=a[i]; maxnum=i; } if(a[i] { min=a[i]; minnum=i; } } a[minnum]=a[0]; a[0]=min; a[maxnum]=a[9]; a[9]=max; for(i=0;i<10;i++)>10;i++)> { printf("%d ",a[i]); } return 0; } 6.9 编程实现下面的功能:删除一个字符串中的某一个字符。 #include { int i,n; char a[100],s; printf("Inpute a string:"); gets(a); printf("Inpute a number:"); scanf("%d",&s); n=strlen(a); for(i=s;i { a[i-1]=a[i]; } a[i-1]=""; return 0; } 7.1 写出下面程序的输出结果。 #include 答: y=22 7.2 写出下面程序的输出结果。 #include "stdio.h" int main(void) { int a=2,*p1,**p2; p2=&p1; p1=&a; a++; printf("%d,%d,%d\n",a,*p1,**p2); return 0; } 答: 3,3,3 7.3 写出下面程序的输出结果。 #include "stdio.h" int main(void) { int a=2,*p,**pp; pp=&p; p=&a; a++; printf("%d,%d,%d\n",a,*p,**pp); } 答: 3,3,3 7.4 利用指针实现将字符串a 的内容复制到字符串b 中。 #include { char *a; char *b; a=malloc(100,sizeof(char)); b=malloc(100,sizeof(char)); a="babsdsdf"; b="sfdsf"; alen=strlen(a); blen=strlen(b); for(i=blen;i *(b+i)=*(a+i-blen); return 0; } 7.5 利用指针实现统计字符串中空格数的操作。 #include "stdio.h" int main() { int num=0; char a[20]; char *str; char ch; printf("\nPlease input:(<20)");>20)");> gets(a); str=a; while((ch=*str++)!='\0') if(ch==' ') num++; printf("%d",num); return 0; } 7.6 利用指针编写程序:把从键盘输入的字符串逆序存放并输出。 #include { char data; struct node *link; }*head; int main() { char ch; struct node *p; head = NULL; printf("\nplease input:"); while((ch=getchar())!='\n' ) { p=(struct node *)malloc(sizeof(struct node)); p->data=ch; p->link=head; head=p; } p=head; printf("output:"); while( p!=NULL ) { printf("%c ", p->data); p = p->link; } return 0; } 7.7 利用指针编写程序:删除一个字符串中的某一个字符。 #include void delchr(char *s,char c) { char *p,*q; p=s; q=p; while(*s!='\0') if(*s==c) s++; else *p++=*s++; *p='\0'; while(*q!='\0') { printf("%c",*q); q++; } } int main() { char a[20]; char b; printf("\nplease input:"); gets(a); printf("input the word to del:"); scanf("%c",&b); delchr(a,b); return 0; } 7.8 已知两个升序序列,利用指针将它们合并成一个升序序列并输出。 #include int main() { int i, j, k; char a[3] = {1, 3, 5}; char b[3] = {4, 6, 7}; char c[6] ; i = j = k = 0; while (k < 6="" &&="" i="">< 3="" &&="" j="">< 3)=""> { if(a[i] > b[j]) { c[k++] = b[j++]; } else if (a[i] < b[j])=""> { c[k++] = a[i++]; } else { c[k++] = a[i]; i++; j++; } } while (i < 3="" &&="" k="">< 6)=""> { c[k++] = a[i]; i ++; } while (j < 3="" &&="" k="">< 6)=""> { c[k++] = b[j]; j ++; } for (i = 0; i < 6;="" i++)=""> printf("%d ", c[i]); return 0; } 8.1 写出下面程序的运行结果。 long fib(int n) { if(n>2) return(fib(n-1)+fib(n-2)); else return(2); } #include return 0; } 答: 4 8.2 写出下面程序的运行结果。 #include 答: BASIC C++ COBOL FORTRAN Pascal 8.3 写出下面程序的运行结果。 #include 答: 4 8.4 写出下面程序的运行结果。 int a=100; void fun(void) { int a=10; printf("%d\n",a); } #include 答: 100 30 10 101 8.5 程序填空题,要求使用指向函数的指针变量调用函数max()并求最大值。 #include 答: 8.6 编写程序实现下面的功能:通过函数调用方式计算字符串的长度。 #include "stdio.h" int StrLen(char* str) { int Lenth; for(Lenth = 0; str[Lenth] != '\0'; Lenth++) {} return Lenth; } int main() { int lenth; char* Test = NULL; Test = "hello world"; lenth = StrLen(Test); printf("the lenth of string hello world is %d\n", lenth); return 0; } 8.7 编写程序实现下面的功能:通过函数调用方式实现n×n 矩阵的转置。 #define n 3 #include "stdio.h" void f(char matrix[n][n]) { int i, j; char temp; for(i = 0; i < n;="" i++)=""> { for(j = 0; j < n;="" j++)=""> { temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } } int main() { char matrix[n][n]; f(matrix); return 0; } 8.8 编写程序实现下面的功能:通过函数调用方式实现一个整数的逆置,如123 逆置后为 321。 #include "stdio.h" int f(int num) { int result = 0; for(; num != 0; num /= 10) { result = result * 10 + num % 10; } return result; } int main() { int integer; int N; printf("please insert a integer:"); scanf("%d", &integer); N = f(integer); printf("this is the result:%d\n", N); return 0; } 8.9 编写程序实现下面的功能:通过函数调用方式将一个十制数转换成相应的八进制数。 #include "stdio.h" void display(int T) { printf("the octal of that integer is %o\n", T); } int main() { int test; printf("please insert a integer:"); scanf("%d", &test); display(test); return 0; } 8.10 编写程序实现下面的功能:主函数接受键盘输入的年、月、日,通过子函数计算该日 是该年的第几日。 #include "stdio.h" int counter(int year, int month, int date) { int i; int aYear[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int LeapYear[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int result = 0; if(((year % 100) != 0 && (year % 4) ==0) || (year % 400) == 0) { for(i = 0; i < (month="" -="" 1);="" i++)=""> { result += LeapYear[i]; } result += date; } else { for(i = 0; i < (month="" -="" 1);="" i++)=""> { result += aYear[i]; } result += date; } return result; } int main() { int year, month, date; int result; printf("please insert the date(yyyy mm dd):"); scanf("%d%d%d", &year, &month, &date); result = counter(year, month, date); printf("this is the %d(th) day in this year.\n",result); return 0; } 8.11 编写程序实现下面的功能:输入10 个整数,将其中最小的数与第一个数对换,将其 中最大的数与最后一个数对换。写3 个函数分别完成下列操作: a. 输入10 个数。 b. 对输入的数进行处理。 c. 输出10 个数。 #include "stdio.h" void input(int N[], int n) { int i; printf("please insert 10 integers:"); for(i = 0; i < n;="" i++)=""> { scanf("%d", N + i); } } void output(int N[], int n) { int i; printf("sequence is "); for(i = 0; i < n;="" i++)=""> { printf("%d ", *(N + i)); } printf(" "); } void adjust(int N[], int n) { int i, j; int min, max; min = max = N[0]; for(i = 0; i < n;="" i++)=""> { min = (min < n[i])?="" min:n[i];=""> max = (max > N[i])? max:N[i]; } for(j = 0; j < n;="" j++)=""> { if(N[j] == min) N[j] = N[0]; if(N[j] == max) N[j] = N[n - 1]; } N[0] = min; N[n - 1] = max; } int main() { int N[10]; input(N, 10); adjust(N, 10); output(N, 10); return 0; } 8.12 编写程序实现下面的功能:用递归法并通过函数调用方式将一个整数转换成字符串, 如整数123 对应的字符串为“123”。 #include "stdio.h" #include "string.h" char* translate(int temp) { char* pResult = NULL; char* pTemp = NULL; if(temp >= 0 && temp < 10)=""> { pTemp = (char*)malloc(2 * sizeof(char)); pTemp[1] = '\0'; switch(temp) { case 0: pTemp[0] = '0'; break; case 1: pTemp[0] = '1'; break; case 2: pTemp[0] = '2'; break; case 3: pTemp[0] = '3'; break; case 4: pTemp[0] = '4'; break; case 5: pTemp[0] = '5'; break; case 6: pTemp[0] = '6'; break; case 7: pTemp[0] = '7'; break; case 8: pTemp[0] = '8'; break; case 9: pTemp[0] = '9'; break; } return pTemp; } pResult = strcat(translate(temp/10), translate(temp%10)); return pResult; } int main() { int A; char* pCh = NULL; printf("please insert a integer:"); scanf("%d", &A); pCh = translate(A); printf("the result is %s\n", pCh); return 0; } 8.13 编写程序实现下面的功能:在主函数输入5 个字符串,利用子函数对它们进行排序, 然后在主函数输出排序后的字符串。 #include { int i,p,j; char *temp; temp=malloc(100,sizeof(char)); for(i=0;i { p=i; for(j=i+1;j if(strcmp(a[j],a[p])<0)>0)> p=j; if(p!=i) { strcpy(temp,a[p]); strcpy(a[p],a[i]); strcpy(a[i],temp); } } } int main() { int i; char a[5][100]; printf("Input 5 string:"); for(i=0;i<5;i++)>5;i++)> scanf("%s",&a[i]); Rank(a,5); for(i=0;i<5;i++)>5;i++)> printf("%s ",a[i]); printf("\n"); return 0; } 9.1 写出下面程序的输出结果。 #include "stdio.h" int main(void) { struct student { char name[10]; float k1; float k2; }a[2]={{"zhang",100,70},{"wang",70,80}},*p=a; printf("\nname:%s total=%f",p->name,p->k1+p->k2); printf("\nname:%s total=%f\n",a[1].name,a[1].k1+a[1].k2); return 0; } 答: name:zhang total=170.000000 wang total=150.000000 name: 9.2 写出下面程序的输出结果。 #include "stdio.h" int main(void) { union { char s[2]; int i; }g; g.i=0x4142; printf("g.i=%x\n",g.i); printf("g.s[0]=%x\t g.s[1]=%x\n",g.s[0],g.s[1]); g.s[0]=1; g.s[1]=0; printf("g.s=%x\n",g.i); return 0; } 答: g.i=4142 g.s[0]=42 g.s[1]=41 g.s=1 9.3 求下面程序的运行结果。 # define SQURARE(n) ((n)*(n)) #include 答: 1 9 25 49 81 9.4 求下面程序的运行结果。 #define PT 5.5 #define S(x) PT*x*x #include 答: 9.5 9.5 编写程序实现下面的功能:用结构体存放下表中的数据,然后输出每人的姓名和实发 工资数(基本工资+浮动工资 支出)。 姓名 基本工资 效益工资 税 赵一 2000.00 800.00 80.00 王二 1500.00 500.00 50.00 张三 1600.00 600.00 60.00 9.6 编写程序实现下面的功能:输入10 个学生的学号、姓名和3 门课程的成绩,输出平均 分最高的学生的信息。 #include "stdio.h" struct student { char* num; float lessons[3]; float ave; char* name; }* stu; void infoInput(struct student* stu) { char ch[2] = {' ', '\0'}; stu->name = (char*)malloc(sizeof(char)); stu->name[0] = '\0'; printf("please input the name of a student:"); while((ch[0] = getchar()) != '\n') { stu->name = strcat(stu->name, &ch); } ch[0] = ' '; printf("and he(she)'s number:"); while((ch[0] = getchar()) != '\n') { stu->num = strcat(stu->num, &ch); } printf("the scores of he(she)'s three lessons:"); scanf("%f%f%f", stu->lessons, stu->lessons + 1, stu->lessons + 2); getchar(); stu->ave = (stu->lessons[0] + stu->lessons[1] + stu->lessons[2])/3; } void infoOutput(struct student* stu) { printf("name:%s\n", stu->name); printf("number:%d", stu->num); printf("the scores of three lessons is: %2f %2f %2f\n", stu->lessons[0], stu->lessons[1], stu->lessons[2]); printf("and the average of three lessons is:%2f\n", stu->ave); } int main() { int i; struct student* temp; struct student stus[10]; for(i = 0; i < 10;="" i++)=""> { infoInput(stus + i); } temp = stus; for(i = 0; i < 10;="" i++)=""> { temp = (temp->ave > (stus + i)->ave)? temp:(stus + i); } printf("the student who get highest average is this one:\n"); infoOutput(temp); return 0; } 10.1 什么是缓冲文件系统, 答: C 语言在输入/输出中使用了缓冲技术,即在内存中为输入的磁盘文件开辟了一个缓冲区(缺省为512 字节),该缓冲区装满后,再启动磁盘一次,将缓冲区的内容装到磁盘文件中去。这就是缓冲文件系统。 10.2 FILE *类型的作用是什么, 答: FILE 结构体指针指出了打开文件所对应的FILE结构体在内存中的地址。 10.3 fopen 函数的第二个参数通常为"r"、"w"和"a",这个参数的意义是什么,每一个值 的含义是什么, 答: 第二个以只读字符串形式出现的参数mode 界定了文件访问操作的模式 "r" 以只读方式打开一个文本文件,如果输入文件不存在或未找到,则fopen 失败 "w" 以只写方式打开一个文本文件,如果输出文件已存在,内容将全覆盖 "a" 以追加方式在文本文件末尾增加数据,如果它不存在,则先建立该文件 10.4 fopen 函数如何向其调用函数报告错误, 答: 如果在打开文件时发生错误,则fopen 都返回NULL,即0。 10.5 getc 函数返回值的类型为什么是int, 答: 如果返回的是一个字符型,而字符编码一共只有256 个,因此就没有一个值可以用作文件结束标志。通过扩展定义,使得getc 返回一个整数值,这样的实现可以返回一个合法字符数据以外的值作为文件结束标志。通常,在stdio.h 中这个值被称为EOF,其值为 1。 10.6 fgets 函数的三个参数分别是什么, 答: char *fgets(char *buffer,int bufSize,FILE *source); 其功能是:从source 所关联的磁盘文件中读入bufSize 1 个字符,最后加一个'\0'结束符。 10.7 使用函数fgets 时,要注意什么, 答: 使用copyFile 函数时,与source 关联的磁盘文件不能是由面向记录的函数fwrite创建的文本文件,因为这种文件所记录的格式是数据块。对于数据块的处理,是按照数据块的长度进行的,因此用fgets 无法提取数据。而用面向字符的I/O 所创建的文件及格式化的I/O 所创建的文件都可以用fgets 提取数据。 10.8 printf 和fprintf 之间有什么不同, 答: printf 函数是针对标准设备的格式化输出,fprintf 是对于用户定义的文件进行格式化输出。 10.9 编写一个程序,要求将一个文本文件中的小写字母转换为大写字母,然后复制到另一 个文件中。 #include int main() { FILE *fp; FILE *fp2; char ch; if((fp=fopen("10.9.txt","rt"))==NULL) { printf("Cannot open file strike any key exit!"); getchar(); exit(1); } if((fp2=fopen("10.92.txt","wt"))==NULL) { printf("Cannot open file strike any key exit!"); getchar(); exit(1); } ch=fgetc(fp); if(ch<='z' &&ch="">='a') ch+='A'-'a'; while (ch!=EOF) { fputc(ch,fp2); ch=fgetc(fp); if(ch<='z' &&ch="">='a') ch+='A'-'a'; } fclose(fp); fclose(fp2); return 0; } 10.10 编写一个程序,要求读入一个文件,统计文件的行数、字数和字符数, 11.1 什么是静态分配、自动分配(栈式分配)和动态分配,并举例说明。 答: 静态分配是指在编译时就确定了运行时变量在内存中的位置。 自动分配是指在编译时并不确定变量在内存中的位置,而是在调用函数时给变量分配空间,函数返 回时释放空间。 动态分配是指在程序运行过程中动态申请内存的方法。 11.2 比较malloc 函数、calloc 函数及realloc 函数的异同。 答: malloc 函数可以动态申请一个地址连续的固定大小的内存空间,其分配的单位为字节。malloc 函数返回的是申请空间的首地址,申请的单元个数是由nByte 给定。 calloc(10,sizeof(int))与malloc(10*sizeof(int))实现的功能是一样的。 11.3 什么是线性表、队列和栈,简述它们之间异同。 答: 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。 队列是一种先进先出的特殊线性表。 栈是一种先进后出的特殊线性表。 11.4 根据链栈的定义,设计链栈的接口及接口的实现。 11.5 重新设计循环队列,使新的循环队列不受空间限制。 11.6 用一个链表存放若干个学生信息(如学号、姓名等)。要求按照学号递增顺序排列, 可以插入、删除、修改和查找某个学生的信息。 11.7 将习题12.6 中的学生信息按照逆序输出。 只有0和1两个状态,需要表示0、1两种状态的电子器件很多,如开关的接通和断开,晶体管的导通和截止、磁元件的正负剩磁、电位电平的低与高等都可表示0、1两个数码。使用二进制,电子器件具有实现的可行性 二进制数的运算法则少,运算简单,使计算机运算器的硬件结构大大简化(十进制的乘法九九口诀表55条公式,而二进制乘法只有4条规则)。 二进制数在物理上最容易实现。例如,可以只用高、低两个电平表示"1"和"0",也可以用脉冲的有无或者脉冲的正负极性表示它们。 当人类尚处於屈指数"数"的阶段时,人们利用手指的屈或伸,记不大於十的数目是不会有什麼困难的,而对於大於十的数目,就感到屈指难数了。於是,"十"就成了记数的一个关键点,它迫使人们去创造一种可以记十以上数的办法 除了十进制以外,在数学萌芽的早期,还出现过五进制、二进制、三进制、七进制、八进制、十进制、十六进制、二十进制、六十进制等多种数字进制法。在长期实际生活的应用中,十进制最终占了上风。 珠算中也有部分五进制, ,“三下五除二”;日月之间是三十进制的;年月之间是十二进制的; 简述计算机采用二进制的原因? 1. 技术实现简单。2.简化运算规则。3.适合逻辑运算。4.易于进行转换。 什么是定点数?什么是浮点数? 定点数:小数点的位置是固定的,因而小数点不必使用特别的记号表示,一般来说,小数点可以固定在任意位置。在计算机中常用两种简单约定:将小数点的位置固定在最高数位之前,或者固定在数据最低位之后,前者是定点小数,后者是定点整数。 浮点数:是将比例因子以适当的形式表示在数据中,并根据每个数据的具体要求进行浮动,这样在有限的位数的情况下,既扩大了数的表示范围,又保持了数据的有效精度。 简述二进制的特点:运算简单,便于物理实现,节省设备 简述计算机中如何区分汉字编码和ASCII码? 汉字编码的每个字节的最高位置1,当ASCII码用一个字节表示时,最高位为0。 简述国标码与机内码的区别? 国标码是用于统一不同的计算机系统之间所用的不同编码,使不同系统之间的汉字信息可以相互交换。 简述计算机各基本组成部分的功能? 运算器:对数据编码进行算术运算和逻辑运算。 控制器:计算机的指挥中心,使计算机的各个部分自动协调工作。工作的实质是解释程序,执行指令。 存储器:存放程序和数据。 输入设备:将人们熟悉的信息形式变换成计算机能接受并识别的信息形式。 输出设备:将计算机运算的结果转换为人类或其他设备能接受的形式。 简述硬件与软件的关系? 1. 计算机系统以硬件为基础,通过软件来扩展功能 2. 硬件只完成最基本的功能,而复杂的功能通过软件来完成 3. 计算机系统的硬件和软件可以相互转化,互为补充 4. 指令系统是硬件和软件之间的交界面 试比较ROM和RAM的异同点? ROM放在主板上,它的信息只能读不能写,但断电不会丢失其保存的信息,常用来保存启动计算机时经常需要的一些指令。 RAM用于临时保存数据,便于CPU对数据进行处理,RAM中的数据可以读出和写入,但RAM中保存的信息一旦掉电就会全部丢失。 什么是操作系统,它的五大功能是什么? 操作系统是为了合理高效,方便地利用计算机系统,而对其硬件资源和软件资源进行管理的软件。操作系统具有处理机管理,存储器管理,设备管理,文件管理以及用户接口五大功能。 简述单元格工作表以及工作薄之间的关系? 一个Excel文件是一个工作薄,工作薄包含一张或多张工作表,工作表是二维表格,表格中一行和一列的交叉点是一个单元格,在单元格中可以输入数据。 如何向单元格中输入公式?如何复制已有的公式? 向单元格中输入公式以“二”开头,后跟公式表达式即可。复制包含公式的单元格同时复制了公式,或者在编辑栏中选中含“二”的公式表达式,在目标单元格粘贴即可。 PowerPoint演示文稿放映类型有哪些? 1. 演讲者放映。2.观众自行浏览。3.在展台浏览。 计算机网络主要有哪些功能? 1. 信息交换。2.资源共享。3.公布式处理。 什么是IP地址,它们分几类? 为了使连入Internet的计算机在相互通信中能相互识别,Internet上的每一台主机都有一个唯一的地址标识,这个统一地址标识是由IP协议规定的,称为IP地址。为适应不同规模的网络,Internet委员会定义了5种地址类别,分别为A、B、C、D、E类。 ADSL是一种什么技术? ADSL(非对称数字用户环路)是目前国际上用来对现有电话网络进行宽带改造的一种通信方式。是接入技术中最常用的一种,由美国Bellcore在1989中首先提出,是一种通过现有普通电话线为家庭为公室,提供宽带数据传输服务的技术,具有很高的传输速率,能够在普通电话线上提供高达8Mbit/s下行速率,传输距离可达3Km~5Km。 光纤接入网具有哪些特点? 1.带宽带:由于光纤接入网本身的特点,可以提供高速接入Internet,ATM以及电信宽带IP网的各种应用系统,从而享用宽带网提供的各种宽带。 2.网络的可升级必能好:光纤网易于通过技术升级成倍扩大带宽。因此,光纤接入网可以满足近期各种信息的传送需求。以这一网络为基础可以构建面向各种业务和应用的信息传送系统。 3.双向传输:电信网本身的特点决定了这种接入技术的交互性能好,特别是在向用户提供双向实时业务方面具有明显优势 4.接入简单,费用少:用户端只需要一块网卡,投资百元左右,就可高速接入Internet,实现10Mbit/s到桌面的接入。 简述Client/Server交互模式的特点? 服务器应用程序被动的等待通信,而客户应用程序主动的启动通信,即客户机向服务器发出服务请求,服务器则等待,接收。处理客户机请求,并将处理结果送回客户机。 简述电子邮件的特点和系统组成? 电子邮件特点:1,信息传递快捷迅速2,接收发送方便,操作简单易学3,所需费用低廉,甚至完全免费4,具有自动定时邮寄,自动答复和群发功能5,可发送多种格式的邮件 在电子邮件中不仅可以发送文本文件,还可以发送图形,声音等各种文件,并且在电子邮件附件中可以发送任何文件,一个电子邮件系统由三个主要组成构件:用户代理,邮件服务器以及邮件发送和读取协议。 什么是多媒体技术? 指能够同时采集,获取,加工处理储存传播或展示两个以上不同类型信息媒体,并将其综合,使之建立起有机的逻辑联系集成为一个系统且具有良好交互性的技术。 简述多媒体、个人计算机系统的组成? 1.功能强大,运算速度快的CPU。目前一般为多核处理器,且有流媒体运算指令。 2.管理和控制各种接口与设备的软/硬件配置 3.具有足够大的存储空间和数据吞吐量 4.高分辨率显示接口与输入设备接口 5.可处理音频的接口与设备 6.可处理图像视频的接口设备 7.可存储大量数据的配置(如硬盘,光盘)。 计算机病毒有哪些特点? 隐蔽性,传染性,破坏性,复制性。 发现自己的计算机感染上病毒应当如何处理? 立即查毒杀毒,并加强计算机病毒预防工作 高级语言的基本实现技术有哪些?各有什么特点? 高级语言的基本实现技术是编译和解释; 对于采用编译方式实现高级语言,人们首先针对具体语言开发出一个翻译软件。 其功能就是将采用该种高级语言书写的源程序翻译为所用计算机的机器语言的等价程序,用这种高级语言写出程序后,只要将它送给翻译程序,就能得到与之对应的机器语言程序即目标程序。此后,只要命令计算机执行这个机器语言目标程序。计算机就能完成所需工作。源程序经过一次编译,得到的目标程序可以多次执行。 对于采用解释方式实现高级语言,人们首先针对具体高级语言开发出一个解释软件,这个软件的功能就是读入这种高级语言的程序。并能一步步的按照程序要求工作,完成程序所描述的计算。有了这种解释软件,只要直接将写好的程序送给运行着这个软件的计算机,该种语言的解释程序将程序逐条解释逐条执行,执行完只得结果,而不保存解释后的机器代码,下次运行此程序时还要重新解释执行。 试比较主存和辅存的异同? 主存即内存条,用以提高计算机的性能,用于存放急需处理的信息。 辅存是用于存放当前不需要立即使用的信息。是主存的后备和补充,只能与内存交换信息。不能被计算机系统中的其它部件直接访问,一旦需要,再和内存成批交换信息。 主存采用半导体电路器件,速度快,容量小,价格高,断电后信息消失。 辅存采用机械设备,磁性材料,容量大,价格便宜,速度慢,断电后信息仍存在。 转载请注明出处范文大全网 » 在计算机中为什么采用二进制 范文三:11 计算机中为什么采用二进制表示形式
范文四:计算机为什么采用二进制
范文五:简述计算机采用二进制的原因