数和fwrite函数。 以上函数要求知道格式会用,清楚是用于二进制文件还是文本文件,要把教材文件这章 仔细复习下,不要在考试的时候把这些文件函数搞混了。 第十二章深入讨论 【知识点】编译预处理 1 替拟 后者 如果源文件 为2 de 为可以 解为 1.c和2.c融合到一起成为 个C程序编译。所 把源文件f1.c原样包含到2.c中,使 C程序必有主 件去必有主函粉 【知识点2】标识符作用域 局部变量是在函数内或复合语句内定义的变量,作用域为定义它的函数内。局部变量有 E种类型:自动auto,寄存器register和静态static 自动变量随着函数的使用与否创建消失:寄存器变量分配在cu中,没有内存地址:静 态变量占用固定 仔储甲 且到程序足 定义它的位置到整个源文件结束为止,生有 局变量都是静态变 储 分 续size个字节存储区,返回值类型为void*型。malloc函数常用 于动态创建链表结点,如int eoen)创建n个骨类型的行铭空间o可以理解为n个ll。 fee(p)释放动态分配的存储单元
13 数和 fwrite 函数。 以上函数要求知道格式会用,清楚是用于二进制文件还是文本文件,要把教材文件这章 仔细复习下,不要在考试的时候把这些文件函数搞混了。 第十二章 深入讨论 【知识点 1】编译预处理 凡以#开头的这一行,都是编译预处理命令行,编译预处理不加分号,不占运行时间。 宏替换仅是简单的文本替换,如#define f(x) (x)*(x)和#define f(x) x*x 替换 f(2+2)时就 有区别,前者展开为(2+2)*(2+2),后者为 2+2*2+2。 如果源文件 f2.c 中有#include”f1.c”可以理解为把源文件 f1.c 原样包含到 f2.c 中,使 f1.c 和 f2.c 融合到一起成为一个 C 程序编译。所以一个 C 程序必有主函数,但一个 C 源文 件未必有主函数。 【知识点 2】标识符作用域 局部变量是在函数内或复合语句内定义的变量,作用域为定义它的函数内。局部变量有 三种类型:自动 auto,寄存器 register 和静态 static。 自动变量随着函数的使用与否创建消失;寄存器变量分配在 cpu 中,没有内存地址;静 态变量占用固定存储单元,在程序执行过程不释放,直到程序运行结束。 全局变量是在函数外定义的变量,作用域从定义它的位置到整个源文件结束为止,生存 期为整个程序运行期间。全局变量都是静态变量。 【知识点 3】动态存储分配 malloc(size)用来创建连续 size 个字节存储区,返回值类型为 void *型。malloc 函数常用 于动态创建链表结点,如 int *p; p=(int *)malloc(sizeof(int));。 calloc(n,size)创建 n 个同一类型的存储空间,可以理解为 n 个 malloc。 free(p)释放动态分配的存储单元
第三部分历年真题部分 2005年4月全国计算机等级考试二级笔试试卷 一、选择题(1).(10)每小题2分,(11).(50)每小题1分,共60分) (1)数据的存储结构是指()。 A)存储在外存中的数据 B)数据所占的存储空间 C)数据在计算机中的顺序存储方式 D)数据的逻辑结构在计算机中的表示 (2)下列关于栈的描述中错误的是()。 A)栈是先进后出的线性表 B)栈只能顺序存储 C)栈具有记忆作用 D)对栈的插入与删除操作中,不需要改变栈底指针 (3)对于长度为的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 C)快速排序为n D)快速排序为n(-1)/2 (4)对于长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为(). B)n/2 C)n (5)下列对于线性链表的描述中正确的是()。 A)存储空间不一定是连续,且各元素的存储顺序是任意的 B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面 C)存储空间必须连续,且前件元素一定存储在后件元素的前面 D)在储空间必须连续,日冬元素的存储顺序是任章的 (6)下列对于软件测试的描述中正确的是() A)软件测试的目的是证明程序是否正确 B)款件测试的目的是使程序运行结果正确 C)软件测试的目的是尽可能多地发现程序中的错误 D)软件测试的目的是使程序符合结构化原则 (7)为了使模块尽可能独立,要求()。 A)模块的内聚程度要尽量高 且各模块间的耦合程度要尽量强 B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱 D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 (8)下列描述中正确的是()。 C)软件既是逻辑实体,又是物理实体 D)软件是程序、数据与相关文档的集合
14 第三部分 历年真题部分 2005 年 4 月全国计算机等级考试二级笔试试卷 一、选择题(1)-(10)每小题 2 分,(11)-(50)每小题 1 分,共 60 分) (1)数据的存储结构是指()。 A)存储在外存中的数据 B)数据所占的存储空间量 C)数据在计算机中的顺序存储方式 D)数据的逻辑结构在计算机中的表示 (2)下列关于栈的᧿述中错误的是()。 A)栈是先进后出的线性表 B)栈只能顺序存储 C)栈具有记忆作用 D)对栈的插入与删除操作中,不需要改变栈底指针 (3)对于长度为 n 的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ()。 A)冒泡排序 n/2 B)冒泡排序为 n C)快速排序为 n D)快速排序为 n(n-1)/2 (4)对于长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A)log2n B)n/2 C)n D)n+1 (5)下列对于线性链表的᧿述中正确的是()。 A)存储空间不一定是连续,且各元素的存储顺序是任意的 B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面 C)存储空间必须连续,且前件元素一定存储在后件元素的前面 D)存储空间必须连续,且各元素的存储顺序是任意的 (6)下列对于软件测试的᧿述中正确的是()。 A)软件测试的目的是证明程序是否正确 B)软件测试的目的是使程序运行结果正确 C)软件测试的目的是尽可能多地发现程序中的错误 D)软件测试的目的是使程序符合结构化原则 (7)为了使模块尽可能独立,要求()。 A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强 B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱 D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 (8)下列᧿述中正确的是()。 A)程序就是软件 B)软件开发不受计算机系统的限制 C)软件既是逻辑实体,又是物理实体 D)软件是程序、数据与相关文档的集合
(9)数据独立性是数据库技术的重要特点之一。所谓数据独立性是指()。 A)数据与程序独立存放 B)不同的数据被存放在不同的文件中 C)不同的数据 能被对应的应用程序所使用 D)以上三种说法都不对 (10)用树形结构表示实体之间联系的模型是()。 A)关系模型 B)网状模型 C)层次模型 D)以上三个都是 (11)算法具有5个特性, 下列选项中不属于算法特性的是()。 A)有穷性 B)简洁性 C)可行性 D)确定性 (12)下列选项中可作为C语言合法常量的是()。 A)-80 B)-080 C)-8e1.0 D)-80.0e (13)下列叙述中正确的是()。 C)用C程序实现的算法可以没有输入但必须要有输出 D)用C程序实现的算法可以既没有输入也没有输出 (14)下列不能定义的用户标识符是()。 A)Main B)0 C)_int D)sizeof (15)下列选项中,不能作为合法常量的是()。 A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0 (16)数字字符0的ASCII值为48,运行下列程序的输出结果是()。 main( char a='1',b='2' printf("% b+) printf(%d小n",b-a) A)3.2 B)50.2 C)2.2 D)2,50 (17)下列程序的输出结果是()。 main() {intm=12.n=34: printf("dd",m++,+n); printf("%dd\n",n+++m): A)12353514 B)12353513 C)12343514 D)12343513 (18)有定义语句:intb:char c[10]:,则正确的输入语句是()。 A)scanf("%d%s",&b,&c): B)scanf (%d%s".&b.c): C)scanf ("%d%s".b.c): D)scanf("%d%s",b,&c) (19)有下列程序 main() int m,n,p: scanf ("m=%dn=%dp=%d",&m,&n.&p):
15 (9)数据独立性是数据库技术的重要特点之一。所谓数据独立性是指()。 A)数据与程序独立存放 B)不同的数据被存放在不同的文件中 C)不同的数据只能被对应的应用程序所使用 D)以上三种说法都不对 (10)用树形结构表示实体之间联系的模型是()。 A)关系模型 B)网状模型 C)层次模型 D)以上三个都是 (11)算法具有 5 个特性,下列选项中不属于算法特性的是()。 A)有穷性 B)简洁性 C)可行性 D)确定性 (12)下列选项中可作为 C 语言合法常量的是()。 A)-80 B)-080 C)-8e1.0 D)-80.0e (13)下列叙述中正确的是()。 A)用 C 程序实现的算法必须要有输入和输出操作 B)用 C 程序实现的算法可以没有输出但必须要有输入 C)用 C 程序实现的算法可以没有输入但必须要有输出 D)用 C 程序实现的算法可以既没有输入也没有输出 (14)下列不能定义的用户标识符是()。 A)Main B)_0 C)_int D)sizeof (15)下列选项中,不能作为合法常量的是()。 A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0 (16)数字字符 0 的 ASCII 值为 48,运行下列程序的输出结果是()。 main( ) { char a='1',b='2'; printf("%c,", b++); printf("%d\n", b-a) } A)3,2 B)50,2 C)2,2 D)2,50 (17)下列程序的输出结果是()。 main( ) { int m=12, n=34; printf("%d%d", m++,++n); printf("%d%d\n",n++,++m); } A)12353514 B)12353513 C)12343514 D)12343513 (18)有定义语句:int b; char c[10];,则正确的输入语句是()。 A)scanf("%d%s",&b,&c); B)scanf("%d%s",&b,c); C)scanf("%d%s",b,c); D)scanf("%d%s",b,&c); (19)有下列程序: main( ) { int m,n,p; scanf("m=%dn=%dp=%d",&m,&n,&p);
printf ("%d%d%d\n",m n,p): 若想从键盘上输入数据,使变量m中的值为123,n中的值为456,D中的值为789 则正确的输入是(), A)m=123n=456p=789 B)m=123=456p=789 C)m=123,nm=456,p=789 D)123456789 (20)下列程序的输出结果是()。 main() int a,b,d=25 a=d/10%9: b=a&&(-1): printf("%d,%d\n",a,b): A)61 B)2,1 )6,0 D)2,0 (21)下列程序的输出结果是()。 main() {inti=1.i=2.k=3: if(i++==1&&(++j==31k++==3)) printf("d %d dn",i,j.k): A)123 B)234 C)223 D)233 (22)若整型变量a、b、c、d中的值依次为:1、4,3、2。则条件表达式a<b?a:c<dc: d的值是()。 41 B)2 C)3 D)4 (23)下列程序的输出结果是()。 main() intp[8]=(11,12,13,14,15,16,17,18,i=0,j=0: while(i++<7) if(p[i]%2)j+=p[i]: printf(%dn,j): A)42 B)45 c)56 D)60 (24)下列程序的输出结果是(). main() {char a[7]="a0\0a0\0°:inti,j: i=sizeof(a): J-strlen(a) printf("%d %d\n",i,j): A)22 B)76C)72 D)62 (25)下列能正确定义一维数组的选项是()。 A)inta[5]=0,1,2,3,4 动】 B)char a[]={0,1,2,3,4,5 C)char a=A',B',C D)inta[5]="0123": (26)下列程序的输出结果是()。 int fl(int x.int y)freturn x>y?x:y: 16
16 printf("%d%d%d\n",m,n,p); } 若想从键盘上输入数据,使变量 m 中的值为 123,n 中的值为 456,p 中的值为 789, 则正确的输入是()。 A)m=123n=456p=789 B)m=123 n=456 p=789 C)m=123,n=456,p=789 D)123 456 789 (20)下列程序的输出结果是()。 main( ) { int a,b,d=25; a= d/10%9; b=a&&(-1); printf("%d,%d\n",a,b); } A)6,1 B)2,1 C)6,0 D)2,0 (21)下列程序的输出结果是()。 main( ) { int i=1,j=2,k=3; if(i++ = =1&&(++j= =3‖k++ = =3)) printf("%d %d %d\n",i,j,k); } A)1 2 3 B)2 3 4 C)2 2 3 D)2 3 3 (22)若整型变量 a、b、c、d 中的值依次为:1、4、3、2。则条件表达式 a<b? a∶c<d? c∶ d 的值是()。 A)1 B)2 C)3 D)4 (23)下列程序的输出结果是()。 main( ) { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+ =p[i]; printf("%d\n",j); } A)42 B)45 C)56 D)60 (24)下列程序的输出结果是()。 main( ) { char a[7]="a0\0a0\ 0"; int i,j; i=sizeof(a); j=strlen(a); printf("%d %d\n",i,j); } A)2 2 B)7 6 C)7 2 D)6 2 (25)下列能正确定义一维数组的选项是()。 A)int a[5]={0,1,2,3,4,5}; B)char a[ ]={0,1,2,3,4,5}; C)char a={'A', 'B', 'C'}; D)int a[5]="0123"; (26)下列程序的输出结果是()。 int f1(int x,int y){return x>y?x∶y;}
int f2(int x,int y)(return x>y?y x: main() int a4.b-3.e5,d-2.e.f.g e=f2(f1(a,b),f1(c,d) f=f1(f2(a,b),f2(c,d)) g=a+b+c+d-e-f: printf("%d.%d.%d\n".e.f.g) 1 A)4,3,7 B)3,4,7C)5,2,7 D)2.5,7 (27)已有定义:char a[]="xyz”,b[]=x,'y,’z'}:,下列叙述中正确的是(). A)数组a和b的长度相同 B)a数组长度小于b数组长度 C)a数组长度大于b数组长度 D)上述说法都不对 (28)下列程序的输出结果是()。 void f(int *x,int *y) int t: t=*X,x=*y:米y=t main() {inta[8]=1,2,3,4,5,6,7,8},i,p,q p-a:q=&a[7]: while(p<q) [f(p,q):p++:q-;} for(i=0:i<8:i+)printf(“%d,“,a[i]): A)8,2,3,4,5,6,7,1 B)56,7,8,1,2,3,4 C)1,2,3,4,5,6,7, D)8,7,6,5,4,3,2,1 (29)下列程序的输出结果是()。 main() {inta[3][3].*p.i:p=&a[0][0] for(i-0:i<9:i++) p[i]=i for(i=0:i<3;i++ printf("%d".alll[il): A)012 B)123 C)234 D)345 (30)下列叙述中错误的品() A)对于double类型数组 不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)在程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界” 的出错信息 D)可以通过赋初值的方式确定数组元素的个数 (31)下列程序的输出结果是()。 #define N 20 fun(int a[]int n,int m) int i,j:
17 int f2(int x,int y){return x>y?y∶x;} main( ) { int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(c,d)); f=f1(f2(a,b),f2(c,d)); g=a+b+c+d-e-f; printf("%d,%d,%d\n",e,f,g); } A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,7 (27)已有定义: char a[ ]="xyz",b[ ]={'x', 'y', 'z'};,下列叙述中正确的是()。 A)数组 a 和 b 的长度相同 B)a 数组长度小于 b 数组长度 C)a 数组长度大于 b 数组长度 D)上述说法都不对 (28)下列程序的输出结果是()。 void f(int *x, int *y) { int t; t=*x,*x=*y;*y=t; } main( ) { int a[8]={1,2,3,4,5,6,7,8},i,*p,*q; p=a;q=&a[7]; while(p<q) { f(p,q); p++; q-;} for (i=0;i<8;i+) printf("%d,",a[i]); } A)8,2,3,4,5,6,7,1 B)5,6,7,8,1,2,3,4 C)1,2,3,4,5,6,7,8 D)8,7,6,5,4,3,2,1 (29)下列程序的输出结果是()。 main( ) { int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++) p[i]=i; for(i=0;i<3;i++) printf("%d",a[1][i]); } A)0 1 2 B)1 2 3 C)2 3 4 D)3 4 5 (30)下列叙述中错误的是()。 A)对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)在程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界” 的出错信息 D)可以通过赋初值的方式确定数组元素的个数 (31)下列程序的输出结果是()。 #define N 20 fun(int a[ ],int n,int m) { int i,j;