1、国家二级( C语言)笔试模拟试卷 107及答案与解析 1 算法一般都可以用 _控制结构组合而成。 ( A)循环、分支、递归 ( B)顺序、循环、嵌套 ( C)循环、递归、选择 ( D)顺序、选择、循环 2 数据的存储结构是指 _。 ( A)数据所占的存储空间量 ( B)数据的逻辑结构在计算机中的表示 ( C)数据在计算机中的顺序存储方式 ( D)存储在外存中的数据 3 设有下列二叉树: 对此二叉树中序遍历的结果为_。 ( A) ABCDEF ( B) DBEAFC ( C) ABDECF ( D) DEBFCA 4 在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送 _。 ( A)
2、调用语句 ( B)命令 ( C)口令 ( D)消息 5 检查软件产品是否符合需求定义的过程称为 _。 ( A)确认测试 ( B)集成测试 ( C)验证测试 ( D)验收测试 6 下列工具中为需求分析常用工具的是 _。 ( A) PAD ( B) PFD ( C) N-S ( D) DFD 7 下面不属于软件设计原则的是 _。 ( A)抽象 ( B)模块化 ( C)自底向上 ( D)信息隐蔽 8 索引属于 _。 ( A)模式 ( B)内模式 ( C)外模式 ( D)概念模式 9 在关系数据库中,用来表示实体之间联系的是 _。 ( A)树结构 ( B)网结构 ( C)线性表 ( D)二维表 10
3、将 E-R图转换到关系模式时,实体与联系都可以表示成 _。 ( A)属性 ( B)关系 ( C)键 ( D)域 11 下列叙述中正确的是 _ 。 ( A) C语言编译时不检查语法 ( B) C语言的子程序有过程和函数两种 ( C) C语言的函数可以嵌套定义 ( D) C语言中,根据函数能否被其他源文件调用,被区分为内部函数和外部函数 12 有以下程序: main() int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5); printf(“%d%d%3.1f%3.1fn“, a, c, f, x); 程序运行后的输出结果是 _ 。
4、( A) 1 65 1 6.5 ( B) 1 65 1.5 6.5 ( C) 1 65 1.0 6.5 ( D) 2 65 1.5 6.5 13 以下变量 x、 y、 z均为 double类型且已正确赋值,不能正确表示数学式子x/(y*z)的 C语言表达式是 _ 。 ( A) x/y*z ( B) x*(1/(y*z) ( C) x/y*1/z ( D) x/y/z 14 若 a为 int类型,且其值为 3,则执行完表达式 a+=a-=a*a后, a的值是 _ 。 ( A) -3 ( B) 9 ( C) -12 ( D) 6 15 以下程序段中与语句 k=a b?(b c?1: 0): 0;功
5、能等 价的是 _。 ( A) if(a B) i 0; i-)sum( printf(“%d, %dn“, a,B) ; ( A) 6,1 ( B) 2,1 ( C) 6,0 ( D) 2,0 23 下列选项中非法的表达式是 _。 ( A) 0 =x 100 ( B) i=j=0 ( C) (char)(65+3) ( D) x+1=x+1 24 以下程序的输出结果是 _。 #include stdio.h main() printf(“%dn“, NULL); ( A)不确定的 (因变量无定义 ) ( B) 0 ( C) -1 ( D) 1 25 在下面的语句中,赋值语句错误的是 _。 (
6、A) a=(b=(c=2, d=3); ( B) i+; ( C) a=a/b=2; ( D) a=a a+1; 26 以下程序的输出结果是 _。 main() int k=4,m=1, p; p=func(k,m); printf(“%d, “, p); p=func(k, m); printf(“%dn“,p); func(int a,int B) static int m=0, i=2; i+=m+1; m=i+a+b; return(m); ( A) 8, 17 ( B) 8, 16 ( C) 8, 20 ( D) 8, 8 27 以下程序调用 findmax函数求数组中值最大的元素在
7、数组中的下标,请选择填空: #include stdio.h findmax(int*s,int t,int*k) int p; for(p=0, *k=p;p t; p+) if(sp s*k)_; main() int a10, i, k; for(i=0; i 10; i+)scanf(“%d“,while(-y); printf(“%dn“,y-); ( A) -1 ( B) 1 ( C) 8 ( D) 0 31 在 C语言中,要求运算数必须是整型的运算符是 _。 ( A) % ( B) / ( C) ( D) ! 32 C语言提供的合法的数据类型关键字是 _。 ( A) Double
8、 ( B) float ( C) integer ( D) Char 33 设有以下定义: int a33=1,2,3,4,5,6,7,8,9; int(*Ptr)3=a, *p=a0; 则下列能够正确表示数组元素 a12的表达式是 _。 ( A) *(*ptr+1)2) ( B) *(*(p+5) ( C) (*ptr+1)+2 ( D) *(*(a+1)+2) 34 若有以下说明: int a10=1,2,3,4,5,6,7,8,9,10, *p=a; 则值为 6的表达式是 _。 ( A) *p+6 ( B) *(p+6) ( C) *p+=5 ( D) p+5 35 下列程序的输出结果是
9、 _。 fun() static int x=5; if(x+5)printf(“%d“, x); else printf(“%d“, x+); main() fun(); fun(); ( A) 67 ( B) 69 ( C) 68 ( D) 78 36 下面程序的输出是 _。 main() int m=0xa,n=2; m+=n; printf(“%Xn“,m); ( A) C ( B) c ( C) 99 ( D) 2 37 以下程序的输出结果是 _。 #include string.h main() char*a=“abcdefghi“; int k; fun(a) ; puts(a)
10、 ; fun(char *s) int x, y; char c; for(x=0,y=strlen(s)-1; x y; x+, y-) c=sy; sy=sx;sx=c; ( A) ihgfedcba ( B) abcdefghi ( C) abcdedcba ( D) ihgfefghi 38 设有如下函数定义,则输出结果为 _。 char*fun(char*str) char*p=str; while(*p) if(*p d)continue; p+; return p; main() printf(“%sn“,fun(“welcome!“); ( A) welcome ( B) co
11、me! ( C) w ( D)程序进入死循环 39 以下程序的输出结果是 _。 main() union char i2; int k; r; r.i0=2; r.i1=0; printf(“%dn“,r.k); ( A) 2 ( B) 1 ( C) 0 ( D)不确 定 40 设 p1和 p2是指向同一个 int型一维数组的指针变量, k为 int型变量,则下列不能正确执行的语句是 _。 ( A) k=*p1+*p2; ( B) p2=k; ( C) p1=p2; ( D) k=*p1*(*p2); 41 以下程序的输出结果是 _。 #define f(x) x*x main() int a
12、=6,b=2,c; c=f(A) /f(B) ; printf(“%dn“,C) ; ( A) 9 ( B) 6 ( C) 36 ( D) 18 42 若有以下定义: char s20=“programming“,*ps=s; 则不能代表字符 o的表达式是 _。 ( A) ps+2 ( B) s2 ( C) ps2 ( D) ps+=2, *ps 43 以下程序的输出结果是 _。 main() int i; for(i=1; i 6; i+) if(i%2)(printf(“#“); continue; printf(“*“); printf(“n“); ( A) #*#*# ( B) # (
13、 C) * ( D) *#*#* 44 有如下程序 main() int n=9; while(n 6) n-; printf(“%d“, n); 该程序的输出结果是 _。 ( A) 987 ( B) 876 ( C) 8765 ( D) 9876 45 下列程 序是将一个十进制正整数转化为一个八进制数,在程序的空白处应填入的语句是 _。 #include stdio.h main() int i=9, a, b10=0; scanf(“%d“, 61 若要使指针 p指向一个 double类型的动态存储单元,请填空。 p=【 】 malloc(sizeof(double); 62 函数 myc
14、mp(char*s,char*t)的功能提比较字符串 s和 t的大小,当 s等于 t时返回0,当 s t返回正值,当 s t时返回负值。请填空。 mycmp(char*s,char*t) while(*s=*t) if(*s=0)return0; +s;+t; return( 【 】 ) 63 以下程序运行后的输出结果是 【 】 。 void fun() static int a=0; a+=2; printf(“%d“, A) ; main() int cc; for(cc=1; cc 4, cc+)fun(); printf(“n“); 64 下列程序的运行结果是【 】。 main() u
15、nion EXAMPLE struct int x; int y; in; int a; int b; e: e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf(“%d,%dn“,e.in.x,e.in.y); 65 在对文件进行操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数是【 】函数。 66 下面程序的功能:输出 100以内能被 3整除且个位数为 6的所有整数,请补充完整。 main() int i,j; for(i=0; 【 】 ; i+) j=i*10+6; if( 【 】 )continue; printf(“%d“
16、, j); 67 以下函数用于求出一个 24矩阵中的最大元素值。 max_value(arr) int arr4; int i,j,max; max=arrO0; for(i=0;i 2;i+) for(j=0; 【 】 ;j+) if( 【 】 max)max= 【 】; return(max); 国家二级( C语言)笔试模拟试卷 107答案与解析 1 【正确答案】 D 【试题解析】 算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。 2 【正确答案】 B 【试题解析】
17、 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构。 3 【正确答案】 B 【试题解析】 中序遍历是指首先遍历左子树 ,然后访问根结点,最后遍历右子树:并且在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树的一种二叉树遍历算法。 4 【正确答案】 D 【试题解析】 面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种互合作需要一个机制协助进行,这样的机制称为消息。消息是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。 5 【正确答案】 A 【试题解析】 确认测试的任务是验证软件的功能和性能及其
18、他特性是否满足了需求规 格说明中的确定的各种需求,以及软件配置是否完全、正确。 6 【正确答案】 D 【试题解析】 常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析的常用工具有:数据流图 (DFD)、数据字典 (DD)、判定树和判定表等。 7 【正确答案】 C 【试题解析】 在软件设计过程中,必须遵循软件工程的基本原则:这些原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可靠性。 8 【正确答案】 B 【试题解析】 内模式 (Internal Schema)又称物理模式 (Physical Schema),它给出了数据库物理存储结构与物理存取方法,如数据存储
19、的文件结构、索引、集簇及hash等存取方式与存取路径。 9 【正确答案】 D 【试题解析】 在关系数据库中,用二维表来表示实体之间联系。 10 【正确答案】 B 【试题解析】 关系是由若干个不同的元组所组成,因此关系可视为元组的集合,将 E-R图转换到关系模式时,实体与联系都可以表示成关系。 11 【正确答案】 D 【试题解析】 选项 A的错误在于编译过程中是检查语法的,若发现源程序有语法错误,则 系统会提示出错信息;选项 B的错误在于 C语言中,子程序的作用是由函数来完成的,无过程的概念;选项 C的错误在于函数不可以嵌套定义,但可以嵌套调用。 12 【正确答案】 B 【试题解析】 本题求解步
20、骤如下:先进行, “c*=(x=6.5)” 的运算,由于 x=6.5,表达式相当于 c=c*6.5=10*6.5=65。再进行 “f/=65“的运算,相当于f=f/65=100.0/65,由于 f为单精度实型变量,因此 f的值约为 1.538462。然后进行a=f的运算,由于 a为整型变量,因此 a=1。最后将各个变量的值 按照 printf中的格式要求输出到屏幕,注意变量 f,x按照 ”%3.1f格式输出,即只输出一位小数。 13 【正确答案】 A 【试题解析】 按照自左向右的运算逻辑,选项 A是先做 x/y,然后再乘以 x,显然与题意不符。 14 【正确答案】 C 【试题解析】 C语言中对
21、赋值运算的运算的运算顺序是自右向左。本题中,计算a*a之后, a的值依然为 3,表达式 a*a的值为 9; a-=9, a=3-9=-6: a+=-6, a=-6+-6=-12。 15 【正确答案】 A 【试题解析】 “a b?(b c?1: 0): 0”的求解顺序是:先判断 a b是否为真,如果为真,则执行 b c?1: 0,如果 b c为真,则 (b c?1: 0)的值为 1,从而整个表达式返回 1,否则整个表达式返回 0;如果 a仁 b,则表达式返回 0。因此功能等价的语句应为 if(a b)&(b c)k=1; else k=0;。 16 【正确答案】 C 【试题解析】 C语言中在做逻
22、辑或运算时,自左向右判断各个参加或运算的表达式,一旦运算到某式的值为非零时,表明整个表达式一定为真,余下的语句则不再进行运算。本题中, +x的值为真,则 +y并 没有进行运算,所以 y值不变。 17 【正确答案】 D 【试题解析】 本题程序第一轮循环后 b的值为 9,在进行循环条件测试时,先取b的现值 9与 0比较,然后再将 b减 1。由于 9 0不成立,因此循环结束,这时 b的值已变成 8,本题正确答案为 D。 18 【正确答案】 B 【试题解析】 n+是在语句结束后再加 1,因此, if语句中相当于判断的是 910,当然是执行 if语句后面的 printf语句,而这时,因为 if语句被执行
23、, n的值也被加 1,所以在打印时, n值为 10,而 n-是在 printf语句执行完毕后再 减 1的。 19 【正确答案】 A 【试题解析】 C语言里关系表达式的等于应该是 “ ”。一个等于号表示赋值,即这里面重复的把 1赋给 k,自然表达式 k=1的值总为 1, while后面的表达式恒为真,当然会进入死循环。 20 【正确答案】 D 【试题解析】 C语言觌定,实参变量对形参变量的数据传递是 “值传递 ”,只由实参传给形参,而不能由形参传回来给实参。函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题要求输出 aa0的值,结果应为 1。 21 【正确答案】 A 【试题解析】 由
24、于字符 “5”和 “3”的 ASCII码相差为 2,所以 ch1经过运算后的值应为 65+2=67;同理, ch2经过运算后的值应为 65+3=68,即是字符 “D”。 22 【正确答案】 B 【试题解析】 第 个表达式中,运算的方向是从左至右,所以 a的值为 2;第二个表达式中,等式右边是 个逻辑表达式,由于结果为真,所以表达式的值为 1,即 b为 1。 23 【正确答案】 D 【试题解析】 赋值表达式的左侧不能为常量或表达式,所以 D是非法的表达式。 24 【正确答案】 B 【试题解析】 NULL在 C编译器中是 个值为 0的常量,它的定义在头文件“stdio.h”中,本题的程序在一开始就
25、包含了这个头文件,所以,在打印的时候,将打印出 0。 25 【正确答案】 C 【试题解析】 C语言中的赋值号 “=”是 个运算符; 赋值语句是由赋值表达式加上一个分号构成。赋值表达式的左侧不能为常量或表达式。 26 【正确答案】 A 【试题解析】 将 k和 m的值带入函数 func中,第 次调用完 func()后,其中 m和 i的值要保留,并在第二次调用时使用,这是因为两者都是局部静态变量。所以最后的结果是 8和 17。 27 【正确答案】 D 【试题解析】 k是 个指针,它的值是 个地址,要通过它为主函数的变量改变数据,必须使用 *p,边样就可以把 个下标数赋给 p指针指向的那个内存单元,所
26、以横线处应填入 *k=p。 28 【正确答案】 C 【试题解析】 要使输出结果为 t=4,必须要执行 elset=2*s;和 if(a b)t=s+t;语句。如果执行 if(a b)t=s+t;语句,则条件为 a b,要求 s=3,在该语句前面的语句中没有条件可以满足 s=3;如果孰行 else t=2*s;语句,则条件为 a b,要 求s=2,需要执行 if(a 0)s=s+1;语句,所以应满足条件 0 a b。 29 【正确答案】 B 【试题解析】 实参可以是常量、变量或表达式, (exp1,exp2)是逗号表达式,它的值是 exp2的值; (exp3,exp4,exp5)是逗号表达式,它
27、的值是 exp5的值。所以该函数调用语句含有的实参个数是 2,即: (exp1,exp2)和 (exp3,exp4,exp5)。 30 【正确答案】 D 【试题解析】 do-while语句的特点是先执行循环体,然后判断循环条件是否成立,当循环条件的 值为 0时循环结束。当 y=0时循环结束, printf(“%dn“, y-)语句是先输出 y再自减,所以输出结果为 0。 31 【正确答案】 A 【试题解析】 题目的四个选项中, B、 C、 D都不要求运算数必须为整数,参与模运算 (%)的运算数必须是整型数据。 32 【正确答案】 B 【试题解析】 选项 A和 D中第 个字母大写,不正确;选项
28、C是 PASCAL中的整型关键字,不是 C语言中的关键字。 33 【正确答案】 D 【试题解析】 *(p+5)所指向的数组元素是 a12,所以 B不对; ptr所指向的是个含有三个元素的一维数组,所以 A和 C是错误的。 34 【正确答案】 C 【试题解析】 选项 A, *p+6,其值等于 1+6=7;选项 B, *(p+6),其值等于a6=7;选项 C, *p+=5,其值等于 *p=*p+5=1+5=6;选项 D, p+5是个地址值。 35 【正确答案】 C 【试题解析】 模块的代码开始运行后,使用 static语句声明的变量会 直保持其值,直至该模块复位或重新启动。在第 1次调用 fun函
29、数时, x的初值为 5, if语句的条件不成立,执行 else printf(“%d“x+);语句,输出 6,执行后 x的值变为7,由于 x是静态局部变量,在函数调用结束后,它并不释放,仍保留 x=7。在第2次调用 fun函数时, if语句的条件成立,执行 printf(“%d“,x);语句,输出 8。 36 【正确答案】 A 【试题解析】 格式控制 x表示数据按十六进制格式输出 (不输出前导符 ox)。本题在执行语句 m+=n;后, m的值变为字母 c,又因为在输出 a-f时,如果格式控制符用 X,则以大写字母输出;如果用 x,则以小写字母输出,故本题答案为 A。 37 【正确答案】 A 【
30、试题解析 】 观察子函数 fun()可知,它是实现 个数组首末元素位置互相依次交换。联系主函数,可以看出,是对字符串中的元素依次进行首末位置的对调。 38 【正确答案】 D 【试题解析】 continue语句的作用是用于结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。由于 w d,执行continue语句,结束本次循环 (即跳过 p+;语句 ),还是继续比较 w d,程序进入死循环。 39 【正确答案】 A 【试题解析】 根据共用体的定义可知:共用体 r的成员 k和成员 i2是共用同 段内存空间,所以,当程序给 r.i0赋值后,实际上,共用体成员 k的值也确定
31、了,为 2。所以打印输出的结果应当为 2。 40 【正确答案】 B 【试题解析】 指针变量中只存放地址 (指针 ),不要将 个整型量 (或任何其他非地址类型的数据 )赋给 个指针变量,所以 B是不正确的。 41 【正确答案】 C 【试题解析】 观察程序段可知,对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替 #define命令行中的形参。本题中 c=f(a)/f(b)用 #define f(x)x*x代替得 c=f(6)/f(2),即 c=6*6/2*2,结果为 36。 42 【正确答案】 A 【试题解析】 ps+2就是 s2的地址,即存放字符 o的地址,所以 A是错误的。 43
32、 【正确答案】 A 【试题解析】 i从 i到 5循环 5次, i为 1时,满足条件,打印输出 “#”; i为 2时,条件为假,打印输出 “*”。也就是说,当 i为奇数时,条件为真,程序打印输出 “#”,否则,输出: “*”。 44 【正确答案】 B 【试题解析】 符合 n 6的 n只有 7,8,9;所以循环次数为 3。选项 C、 D可以排赊。又因 n在输出之前要执行 n-,所以输出结果只能是 876。 45 【正确答案】 C 【试题解析】 本题主要考查了进制转换的除余取整法。本算法中,是先对数 c除8取余作为转换后的 8进制数的第 1位,然后对 c整除以 8的商作同样的操作,直到商为 0为止,
33、因此本题应选 C。 46 【正确答案】 B 【试题解析】 从整个表达式来看是个逻辑表达式,而与运算符 “&”的右边的子表达式中由于 z的值为 “A”,而 A的 ASCII码的值小于 a的 ASCII码值,所以这个子表达式的值为真,即 1;在与运算符 “&”的左 边的子表达式是个基于位运算的子表达式,将 x的值与 15做位与运算,表达式值不为零,所以两个子表达式的与值应当为 1。 47 【正确答案】 B 【试题解析】 在 C中可以通过 fopen函数来打开 个文件,在该函数的第二个参数中指定其打开方式。要以读写方式打开文件可以用 “r+“、 “w+“、 “a+“来表示,要打开二进制文件,可以在打
34、开方式中加上字母 b,对于字符文件不要加 b。 48 【正确答案】 A 【试题解析】 在主函数定义了 个共用体变量 a,及 个指向该变量的指针 s。执行 s- i0=0x39; s- i1=0x38;,将分别共用体的第 字节及第二字节存入十六进制数据 0x39及 0x38,由于在共用体中,变量共同占用存储空间,在输出 s-k时,实际上就是输出开始写入的数据,而对于 PC机,在存放血型数据时,低位在前,高位在后,故本题输出为 3839。 49 【正确答案】 C 【试题解析】 选项 A和 B两个表达式都越界了;选项 D中, *t2是目标变量,即 个整型值,而不是地址值。 50 【正确答案】 C 【
35、试题解析】 本题的考查点是结构体类型变量的定义。在选项 C中, aa是 个结构体变 量,而不是结构体名,所以 struct aa td1;是非法的。 51 【正确答案】 中序 【试题解析】 在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、中序遍历和后序遍历。前疗遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树 时,仍然先
36、遍历左子树,然后访问根结点,最后遍历右子树。后序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历右子树,然后访问根结点,最后遍历左子树;并且遍历左、右子树时,仍然先遍历右子树,然后访问根结点,最后遍历左子树。 52 【正确答案】 模块化 【试题解析】 结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化和限制使用 goto语句。自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐 步使问题具体化。逐步求精:对复杂问题,应设计一些子目标作过度,逐步细化。模块化:一个复杂问题,肯定是由若
37、干稍简单的问题构成。模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。限制使用 goto语句。 53 【正确答案】 测试实例 【试题解析】 进行软件测试时,应精心设计测试实例和选择测试数据,以对系统进行全面测试。 54 【正确答案】 概念 或 概念级 【试题解析】 数据库系统在其内部具有三级模式及二级映射,三级模式分别是概念级模式、内部级 模式和外部级模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。 内模式式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及 hash等存取
38、方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,它还未深入到设备级上(如磁盘及磁盘操作)。 外模式也称子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导而出。 55 【正确答案】 数据存储 【试题解析】 数据字典是各类数据描述的集合,它通常包括 5个 部分,即数据项,是数据的最小单位;数据结构,是若干数据项有意义的集合;数据流,可以是数据项,也可以是数据结构,表示某一处理过程的输入或输出;数据存储,处理过程中存取的数据,常常是手工凭证、手工文档或计算机文件;处理过程。 56 【正确答案】 8 【试题解析】 在一般 16位 PC机中,一个 float型
39、数据在内存中占 4个字节 (32位 ),一个 double型数据占 8个字节。 57 【正确答案】 double型 或双精度型 【试题解析】 先进行 w*x的运算,先将字符型 w转换成整型,运算结果为整型; 再将 w*x的结果与 z相加,要先将第一步的整型转换为 double型,运算结果为 double型; 最后将 w*x+z的结果与 y相减,要先将 float型 y转换成double型,结果为 double型。 58 【正确答案】 0 【试题解析】 三目运算符的形式为 (表达式 1)?(表达式 2): (表达式 3)。当 (表达式1)值为真时,返回 (表达式 2)的值;为假时,返回 (表达式
40、 3)的值。题中因为 x 12为假,所以结果为 x-12,即为 0。 59 【正确答案】 x+=1; 【试题解析】 题面中的四条语句的作用是使 x的值加 1,在 C中有多种方法可以对变量进行加 1操作,这里可以利用 C的复合赋值运算符 +=实现,本题答案为x+=1;。 60 【正确答案】 60 【试题解析】 本题定义了一个 3行 2列的二维数组 a,并定义了一个指向两个元素的一维数组指针 p,让 p指向二维数组 a的首行。 *(*(p+2)+1)是引用 a21,其值是 60。 61 【正确答案】 (double*) 【试题解析】 函数 malloc返回的是 void*, 所以若要使指针指向一个
41、 double类型,则必须进行类型转换,类型转换格式为: (数 据类型 *)。 62 【正确答案】 *s-*t 或 -*t+*s 【试题解析】 函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值, *s和 *t表示字符串数组 s和 t的第一个字符,在 while循环中,是通过 s和t值的不断变化来改变指针所指向的字符,要改变 s和 t所指不同字符的 ASCII码的差值,必须使用 “*s-*t”得出。 63 【正确答案】 2 4 6 【试题解析】 static声明的外部变量只限于被本文件引用,而不能被其他文件引用。用 static来声明一个变量的作用有: 对局部变 量用 static
42、声明,则为该变量分配的空间在整个程序执行期间始终存在; 全部变量用 static声明,则该变量的作用域只限于本文件模块 (即被声明的文件中 )。 64 【正确答案】 4, 8 【试题解析】 C语言规定,共用体中各个成员变量在内存中占用同一段内存单元,即 e.in.x和 e.a、 e.b占用同一段内存单元,由于 e.in.x和 e.a、 e.b占用的是同、段内存单元,所以程序最后的打印结果为 “4, 8”。 65 【正确答案】 NNrewind或 fseek 【试题解析】 在对文件进行操作的过程 中,若要求文件的位置回到文件的开头,可以调用 rewind或 fseek函数。其中 rewind函数
43、的作用是将位置指针重新返回文件的开头,而 fseek函数可以实现文件指针的定位。 66 【正确答案】 i 10 i%3! =0 【试题解析】 本题要求输出 100以内能被 3整除且个位数为 6的所有整数,程序中 j=i*10+6;语句是求个位数为 6的整数,由此可得出程序的循环次数为 i 10。然后通过 if语句判断整数是否能被 3整除,若不能则继续下一次循环,若能则输出该整数,所以逻辑表达式为 j%3!=0。 67 【正 确答案】 j 4 arrij arrij 【试题解析】 2*4矩阵实际上就是一个二维数组,结合本题应为 arr24,所以在第一个循环中应当填写 “4”;第二个横线处是要判断当前的数组元素值是否大于max,所以应填写 arrij;第三个横线处是要将当前大于 max的数组元素的值赋给变量 max,所以应当填写 “arrij”。