1、二级 C语言笔试-463 及答案解析(总分:101.50,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.下列关于栈的描述正确的是 _。A) 在栈中只能插入元素而不能删除元素B) 在栈中只能删除元素而不能插人元素C) 栈是特殊的线性表,只能在一端插入或删除元素D) 栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素(分数:2.00)A.B.C.D.2.对长度为 n的线性表进行顺序查找,在最坏的情况下需要比较的次数为( )。A) 125 B) n/2 C) n D) n+1(分数:2.00)A.B.C.D.3.软件是指_。A) 程序 B) 程序和文档C) 算法加数据结
2、构D) 程序、数据与相关文档的完整集合(分数:2.00)A.B.C.D.4.一颗二叉树中共有 70个叶子结点与 80个度为 1的结点,则二叉树的总结点数为_。(A) 219(B) 221(C) 229(D) 231(分数:2.00)A.B.C.D.5.下列关于队列的叙述中正确的是A) 在队列中只能插入数据 B) 在队列中只能删除数据C) 队列是先进先出的线性表 D) 队列是先进后出的线性表(分数:2.00)A.B.C.D.6.在软件开发中,需求分析阶段可以使用的工具是A) N-S图 B) DFD 图 C) PAD 图 D) 程序流程图(分数:2.00)A.B.C.D.7.下列叙述中正确的是(
3、)。A软件测试应该由程序开发者来完成 B程序经调试后一般不需要测试C软件维护只包括对程序代码的维护 D以上三种说法都不对(分数:1.00)A.B.C.D.8.待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码 15被放到第( )个位置。 A) 2 B) 3 C) 4 D) 5(分数:2.00)A.B.C.D.9.有下列二叉树,对此二叉树前序遍历的结果为( )。(分数:1.00)A.B.C.D.10.下列叙述中正确的是_。(A) 为了建立一个关系,首先要构造数据的逻辑关系(B) 表示关系的二维表中各元组的每一个
4、分量还可以分成若干数据项(C) 一个关系的属性名表称为关系模式(D) 一个关系可以包括多个二维表(分数:2.00)A.B.C.D.11.若 x和 y代表整型数,以下表达式中不能正确表示数学关系|x-y|10 的是 _。A) abs(x-y)10 B) x-y-10printf(“%d/n“,(x,y);则以下叙述中正确的是( )。A) 输出语句中格式说明符的个数少于输出项的个数,不能正确输出B) 运行时产生出错信息C) 输出值为 2002D) 输出值为 2003(分数:1.00)A.B.C.D.19.假定所有变量均已正确说明,下列程序段运行后 x的值是( )。a=b=c=0;x=12;if(!
5、a)x-;else x=5;if(c) x=3;else x=4;A) 11 B) 4 C) 12 D) 3(分数:2.00)A.B.C.D.20.若变量已正确定义为 int型,要通过语句 scanf(“%d,%d,%d“, y0; y-)if(y%3=0)printf(“%d“,-y);程序的运行结果是_。A) 741 B) 963C) 852 D) 875421(分数:1.00)A.B.C.D.22.下列能正确定义一维数组的选项是( )。A) int a5=0,1,2,3,4,5;B) char a=0,1,2,3,4,5;C) char a=A,B,C);D) int a5=“0123“
6、;(分数:2.00)A.B.C.D.23.下面的函数调用语句中 func函数的实参个数是( )。func(f2v1,v2),(v3,v4,v5),(v6,max(v7,v8)A3 B4 C5 D8(分数:1.00)A.B.C.D.24.若有定义 int w35;,则以下不能正确表示该数组元素的表达式是A) *(*w+3) B) *(*w+1)4C) *(*(*w+1) D) *( else if(ok2)x=10;x=-1;printf(“%d/n“,x);的输出是_。A) -1 B) 0 C) 1 D) 不确定的值(分数:2.00)A.B.C.D.26.有以下程序#include main(
7、)int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i;for(i=0;i12;i+) csi+;for(i=1;i5;i+) printf(“%d“,ci);printf(“/n“);程序的运行结果是_。(A) 1 2 3 4(B) 2 3 4 4(C) 4 3 3 2(D) 1 1 2 3(分数:2.00)A.B.C.D.27.下面程序main()int x=32;print(“%d/n“,x=x1);的输出是_。A) 100 B) 160 C) 120 D) 64(分数:2.00)A.B.C.D.28.判断 char型变量 c1是否为小写字母的正确表达式为( )。
8、A) a=c1=zB) (c1=A) (c1=z)C) (a=c1(z=c1)D) (c1=a),则不正确的叙述是( )。A) 数组 a的每个元素的初值都是 0B) 数组 a的第一维大小为 1C) 数组 a的行数为 1D) 只有元素 a00和 a01可得到初值 0,其余元素均得不到初值 0(分数:2.00)A.B.C.D.30.下列叙述中,错误的是( )。A) 在同一 C程序文件中,不同函数中可以使用名字相同的变量B) 在 main()函数体内定义的变量是全局变量C) 形参是局部变量,函数调用完成即失去意义D) 若同一文件中全局和局部变量同名,则全局变量在局部变量作用范围内不起作用(分数:2.
9、00)A.B.C.D.31.有以下函数:fun(char *a, char *b) while(*a!=/0)b+;return(*a-*b);该函数的功能是_。A) 计算 a和 b所指字符串的长度之差B) 将 b所指字符串连接到 a所指字符串中C) 将 b所指字符串连接到 a所指字符串后面D) 比较 a和 b所指字符串的大小(分数:2.00)A.B.C.D.32.下述语句中,在字符串 s1和 s2相等时显示“they are Equal“的是( )。A) if(*s1=*s2)puts(“they are Equal“);B) if(!strcmp(s1,s2)puts(“they are
10、Equal“);C) if(s1=s2)puts(“they are Equal“);D) if(strcmp(s1,s2)puts(“they are Equal“);(分数:2.00)A.B.C.D.33.以下不正确的定义语句是( )。A) double x5=2.0,4.0,6.0,8.0,10.0;B) int y5.3=0,1,3,5,7,9;C) charc/=1,2,3,4,5;D) char c2=/x10,/xa,/x8;(分数:1.00)A.B.C.D.34.程序中对 fun函数有如下说明:void * fun();此说明的含义是_。A) fun函数无返回值B) fun函数
11、的返回值可以是任意的数据类型C) fun函数的返回值是无值型的指针类型D) 指针 fun指向一个函数,该函数无返回值(分数:2.00)A.B.C.D.35.设函数中有整型变量 n,为保证其在未赋初值的情况下初值为 0,应选择的存储类别是_。A) auto B) register C) static D) auto或 register(分数:2.00)A.B.C.D.36.设函数 fun的定义形式为:void fun(char ch,float x) 则以下对函数 fun的调用语句中,正确的是 _。A) fun(“abc“,3.0); B) t=fun(D,16.5);C) fun(65,2,8
12、); D) fun(32,32);(分数:2.00)A.B.C.D.37.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是_。A) char s10=“abcdefg“; B) char t=“abcdefg“, * s=t;C) char s10; s=“abcdefg“; D) char s10; strcpy(s, “abcdefg“);(分数:2.00)A.B.C.D.38.下面程序段中 c的二进制值是_。char a=3,b=6,c;c=ab1;A) 00001011 B) 00001111 C) 00011110 D) 00011100(分数:2.00)A.B.C.D.3
13、9.请读程序:#include stdio.hint a=2,4,6,8,;main()int i;int *p=a;for( i=0;i4;i+) ai=*p+;priatf(“%d/n“,a2);上面程序的输出结果是( )。A) 6 B) 8 C) 4 D) 2(分数:2.00)A.B.C.D.40.有以下程序:#include stdio.hvoid funl (char * p)char * q;q=p;while( *q! =/0) (*q) +;q+;mains( )char a = “Program“ , * p;p = fun1 (p); printf(“% s /n“ ,a)
14、;程序执行后的输出结果是( )。A) Prohsbn B) Prphsbn C) Progsbn D) Program(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:35.50)41.某二叉树有 5个度为 2的结点以及 3个度为 1的结点,则该二叉树中共有 1 个结点。(分数:4.00)填空项 1:_42.在面向对象方法中,类的实例称为 1。(分数:1.50)填空项 1:_43.软件危机出现于 20时纪 60年代末,为了解决软件危机,人们提出了 1 的原理来设计软件,这就是软件工程诞生的基础。(分数:2.00)填空项 1:_44.在面向对象的方法中, 1 描述的是具有相似属性
15、与操作的一组对象。(分数:2.00)填空项 1:_45.在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块)。其中U /U的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。(分数:2.00)填空项 1:_46.栈的 3种基本运算是:入栈、退栈和 1。(分数:2.00)填空项 1:_47.数据流图的类型有和事务型。(分数:2.00)填空项 1:_48.设变量已正确定义为整型,则表达式 n=i=2,+i,i+的值为 1。(分数:2.00)填空项 1:_49.用以下语句调用库函数 malloc,使字符指针 st指向具有 11字节的动态存储空间,请填空
16、。st=(char*)_。(分数:4.00)填空项 1:_50.以下程序统计从终端输入的字符中大写字母的个数。用#号作为输入结束标志,请填空。 #includestdio.h #includectype.h main() int num26,i;char c; for(i=0;i26;i+) numi=0; _; while(c!=# if(isupper(c) numc-65+=1; for(i=0;i26;i+) if(numi) printf(“%c,%d/n“,i+65,numi); (分数:2.00)填空项 1:_51.以下程序运行后的输出结果是_。#includestdio.hma
17、in()int a=1,b=7;do b=b/2;a+=b;while(b1);printf(“%d/n“,a);(分数:4.00)填空项 1:_52.有以下程序: #inciudestdio.h int *f(int *P,int *q); main() int m=1,n=2,*r=m; r=f(r,n);printf(“%d/n“,*r); int *f(int*p,int*q) return(*p*q)?p:q; 程序运行后的输出结果是 (11) (分数:2.00)填空项 1:_53.下列程序的输出结果是_。#define P(a) printf(“%d,“,(int)(a)#defi
18、ne PRINT(a) P(a);printf(“the end“)main()int i,a=0;for(i=1 ;i5;i+)PRINT(a+i);printf(“/n“);(分数:2.00)填空项 1:_54.下列程序的运行结果是_。#define POW(r)(r)*(r)main()int x=3,y=2,t;t=POW(x+y);printf(“%d/n“,t);(分数:2.00)填空项 1:_55.下列程序的功能是:求出 ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串 123412132,指定字符 1,则输出 3。请填空。#includestdioh)#deftn
19、e M 81int fun(char * ss,char c)int i=0;for(;U /U;ss+)if(*ss=c) i+;return i;main()char aM,ch;printf(“/nPlease enter a string:“);gets(a);printf(“/nPlease enterachar:“);ch=getchar();printf(“/nThe number of the char is:%d/n“,fun(a,ch);(分数:2.00)填空项 1:_二级 C语言笔试-463 答案解析(总分:101.50,做题时间:90 分钟)一、选择题(总题数:40,分
20、数:66.00)1.下列关于栈的描述正确的是 _。A) 在栈中只能插入元素而不能删除元素B) 在栈中只能删除元素而不能插人元素C) 栈是特殊的线性表,只能在一端插入或删除元素D) 栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素(分数:2.00)A.B.C. D.解析:解析 栈是特殊的线性表,它的一端封闭,在另一端进行插入和删除操作。2.对长度为 n的线性表进行顺序查找,在最坏的情况下需要比较的次数为( )。A) 125 B) n/2 C) n D) n+1(分数:2.00)A.B.C. D.解析:解析 对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进
21、行比较,直到两者相符,查找到所要找的元素为止。在最坏的情况下,要查找的元素是表的最后一个元素或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为 n。3.软件是指_。A) 程序 B) 程序和文档C) 算法加数据结构D) 程序、数据与相关文档的完整集合(分数:2.00)A.B.C.D. 解析:解析 计算机软件是包括程序、数据及相关文档的完整集合。4.一颗二叉树中共有 70个叶子结点与 80个度为 1的结点,则二叉树的总结点数为_。(A) 219(B) 221(C) 229(D) 231(分数:2.00)A. B.C.D.解析:5.下列关于队列的叙述中正确的是A) 在队列
22、中只能插入数据 B) 在队列中只能删除数据C) 队列是先进先出的线性表 D) 队列是先进后出的线性表(分数:2.00)A.B.C. D.解析:解析 队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。队列具有先进先出的特点,它是按“先进先出”的原则组织数据的。6.在软件开发中,需求分析阶段可以使用的工具是A) N-S图 B) DFD 图 C) PAD 图 D) 程序流程图(分数:2.00)A.B. C.D.解析:解析 数据流图简称 DFD,它采用图形方式来表达系统的逻辑功能、数据在系
23、统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。所以 DFD图可以用于需求分析阶段。7.下列叙述中正确的是( )。A软件测试应该由程序开发者来完成 B程序经调试后一般不需要测试C软件维护只包括对程序代码的维护 D以上三种说法都不对(分数:1.00)A.B.C.D. 解析:解析 程序调试由程序开发者完成,是诊断和改正程序中的错误的过程。软件测试由专门的测试人员完成,是发现错误而执行程序的过程。软件维护是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程,是软件生存周期中非常重要的一个阶段。8.待排序的关键码序列为(15,20,9
24、,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码 15被放到第( )个位置。 A) 2 B) 3 C) 4 D) 5(分数:2.00)A. B.C.D.解析:解析 选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。所以第一趟排序后,将选出最小的元素 9放在第一个位置,元素 15则放在第二个位置。9.有下列二叉树,对此二叉树前序遍历的结果为( )。(分数:1.00)A.B.C.D. 解析:解析对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访
25、问左、右子树时,先访问根结点,再依次访问其左、右子树。记住 3种遍历的顺序:前序,访问根一按前序遍历左子树一按前序遍历右子树;中序,按中序遍历左子树一访问根一按中序遍历右子树;后序,按后序遍历左子树按后序遍历右子树访问根10.下列叙述中正确的是_。(A) 为了建立一个关系,首先要构造数据的逻辑关系(B) 表示关系的二维表中各元组的每一个分量还可以分成若干数据项(C) 一个关系的属性名表称为关系模式(D) 一个关系可以包括多个二维表(分数:2.00)A. B.C.D.解析:11.若 x和 y代表整型数,以下表达式中不能正确表示数学关系|x-y|10 的是 _。A) abs(x-y)10 B) x
26、-y-10”表示前而的语句定义完毕,并没有为变量 b定义,可将分号“;”改为逗号“,”即可。17.若有定义:float x=1.5;int a=1,b=3,c=2;则正确的 switch语句是_。(A) switch(x) case 1.0:printf(“*/n“);case 2.0:printf(“*/n“);(B) switch(int)x); case 1:printf(“*/n“);case 2:printf(“*/n“);(C) switch(a+b) case 1:printf(“*/n“);case 2+1:printf(“*/n“);(D) switch(a+b) case
27、1:printf(“*/n“);case c:printf(“*/n“);(分数:1.00)A.B.C. D.解析:18.设有如下程序段:int x=2002,y=2003;printf(“%d/n“,(x,y);则以下叙述中正确的是( )。A) 输出语句中格式说明符的个数少于输出项的个数,不能正确输出B) 运行时产生出错信息C) 输出值为 2002D) 输出值为 2003(分数:1.00)A.B.C.D. 解析:解析 本题考查逗号表达式。逗号表达式的形式为:表达式 1,表达式 2,其求解过程为:先求解表达式 1,再求解表达式 2。整个逗号表达式的值是表达式 2的值。19.假定所有变量均已正确
28、说明,下列程序段运行后 x的值是( )。a=b=c=0;x=12;if(!a)x-;else x=5;if(c) x=3;else x=4;A) 11 B) 4 C) 12 D) 3(分数:2.00)A.B. C.D.解析:解析本题考查 if else语句。第一个 if语句,先判断条件,发现 a=0,则!a 成立,执行下列的语句,x-,得 x=11:第二个 if语句,判断条件,发现 c=o,则条件不成立,执行下列的 else语句,得x=4。20.若变量已正确定义为 int型,要通过语句 scanf(“%d,%d,%d“, y0; y-)if(y%3=0)printf(“%d“,-y);程序的运
29、行结果是_。A) 741 B) 963C) 852 D) 875421(分数:1.00)A.B.C. D.解析:解析 本题考查的重点是 printF()函数和 for循环的执行方式。在循环体内,若 y为的倍数,则执行 print(“%d“,-y)语句。所以,当 y为 9时,输出-y 为 8;当 y为 6时,输出-y 为 5;当 y为 3时,输出-y 为 2;当 y为零时,for 循环结束。因此,选项 C是正确的。22.下列能正确定义一维数组的选项是( )。A) int a5=0,1,2,3,4,5;B) char a=0,1,2,3,4,5;C) char a=A,B,C);D) int a5
30、=“0123“;(分数:2.00)A.B. C.D.解析:解析 在定义数组时,如果赋给的初始值个数大于数值的长度,这样就会越界,因此选项 A错误;选项 C中定义的是一个字符变量 C;选项 D)中整型数组 a中只能存储整型数据,而不能存储字符串常量“0123”。23.下面的函数调用语句中 func函数的实参个数是( )。func(f2v1,v2),(v3,v4,v5),(v6,max(v7,v8)A3 B4 C5 D8(分数:1.00)A. B.C.D.解析:解析 实参是在调用时传递该函数的参数。故选 A。24.若有定义 int w35;,则以下不能正确表示该数组元素的表达式是A) *(*w+3
31、) B) *(*w+1)4C) *(*(*w+1) D) *( else if(ok2)x=10;x=-1;printf(“%d/n“,x);的输出是_。A) -1 B) 0 C) 1 D) 不确定的值(分数:2.00)A. B.C.D.解析:评析 第判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断如此循环,在打印输出语句的前行,程序绐变量 x赋了值,为-1,所以,无论前期如何变化,最后的 x值依然为-126.有以下程序#include main()int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i;for(i=0;i12;i+) csi+;for(i=
32、1;i5;i+) printf(“%d“,ci);printf(“/n“);程序的运行结果是_。(A) 1 2 3 4(B) 2 3 4 4(C) 4 3 3 2(D) 1 1 2 3(分数:2.00)A.B.C. D.解析:27.下面程序main()int x=32;print(“%d/n“,x=x1);的输出是_。A) 100 B) 160 C) 120 D) 64(分数:2.00)A.B.C.D. 解析:评析 是 C语言中规定的左移运算符,例如,a=a2,这个语句即是将 a的二进制数左移两位,左移位相当于该数乘于 2,左移两位相当于该数乘以 2的 2次方。所以,x1=32*2=64。28
33、.判断 char型变量 c1是否为小写字母的正确表达式为( )。A) a=c1=zB) (c1=A) (c1=z)C) (a=c1(z=c1)D) (c1=a),则不正确的叙述是( )。A) 数组 a的每个元素的初值都是 0B) 数组 a的第一维大小为 1C) 数组 a的行数为 1D) 只有元素 a00和 a01可得到初值 0,其余元素均得不到初值 0(分数:2.00)A.B.C.D. 解析:解析 本题考查给二维数组元素赋值。给二维数组元素赋值时应注意下列两点:在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取 0。二维数组第一维的大小由下列规则确定:当初值的个数能被第二维
34、的常量表达式的值除尽时,所得商数就是第一维的大小;当初值的个数不能被第二维的常量表达式的值除尽时,第一维的大小=所得商数+1。30.下列叙述中,错误的是( )。A) 在同一 C程序文件中,不同函数中可以使用名字相同的变量B) 在 main()函数体内定义的变量是全局变量C) 形参是局部变量,函数调用完成即失去意义D) 若同一文件中全局和局部变量同名,则全局变量在局部变量作用范围内不起作用(分数:2.00)A.B. C.D.解析:解析 本题考查函数调用时变量的作用域。形参是局部变量,函数调用完就失去意义了,所以在同一个 C程序文件中,不同的函数体中可以使用名字相同的局部变量。31.有以下函数:f
35、un(char *a, char *b) while(*a!=/0)b+;return(*a-*b);该函数的功能是_。A) 计算 a和 b所指字符串的长度之差B) 将 b所指字符串连接到 a所指字符串中C) 将 b所指字符串连接到 a所指字符串后面D) 比较 a和 b所指字符串的大小(分数:2.00)A.B.C.D. 解析:解析 它的功能是比较 a,b 所指字符串的大小。ab 返回正数,ab 返回负数,a=b 返同 0。32.下述语句中,在字符串 s1和 s2相等时显示“they are Equal“的是( )。A) if(*s1=*s2)puts(“they are Equal“);B)
36、if(!strcmp(s1,s2)puts(“they are Equal“);C) if(s1=s2)puts(“they are Equal“);D) if(strcmp(s1,s2)puts(“they are Equal“);(分数:2.00)A.B. C.D.解析:解析 字符串比较不能用“33.以下不正确的定义语句是( )。A) double x5=2.0,4.0,6.0,8.0,10.0;B) int y5.3=0,1,3,5,7,9;C) charc/=1,2,3,4,5;D) char c2=/x10,/xa,/x8;(分数:1.00)A.B. C.D.解析:解析 在一维数组中
37、要注意的是下标常量表达式的值必须是大于等于零,并且小于自身元素的个数,选项 B) 的下标不是整数,所以错误。34.程序中对 fun函数有如下说明:void * fun();此说明的含义是_。A) fun函数无返回值B) fun函数的返回值可以是任意的数据类型C) fun函数的返回值是无值型的指针类型D) 指针 fun指向一个函数,该函数无返回值(分数:2.00)A.B.C. D.解析:解析 C 语言中函数的定义分为有参函数的定义和无参函数的定义。无参函数的定义形式为:类型标识符函数名() 说明部分语句有参函数的定义有两种形式:类型标识符函数名(形式参数列表)形式参数说明 说明部分语句或类型标识
38、符函数名(类型名 形参 1,类型名 形参 2,) 说明部分语句其中函数名为用户定义的 C语言的合法标识符,其前面的类型标识符用来说明函数值的类型,可以是 C允许的任何类型,如 int、char、float、double 和指针类型等。当函数值为整型时类型标识符可以省略,如果函数没有返回值,类型标识符可以是 void型。当函数的形参多于一个时,各个形参之间用逗号分隔。35.设函数中有整型变量 n,为保证其在未赋初值的情况下初值为 0,应选择的存储类别是_。A) auto B) register C) static D) auto或 register(分数:2.00)A.B.C. D.解析:评析
39、本题主要考查的是存储分类。C 语言中,有两种存储类别:自动类、静态类。有四个与两种存储类别有关的说明符,它们是;auto(自动)、register(寄存器)、static(静态)、extern(外部)。根据题面中“设函数中有整型变量 n”可知,变量 n是局部变量,当在函数体内部使用 static来说明个变量时,可以称该变量为静态局部变量,其与 auto、register 类的变量有两点本质上的区别;在整个程运行期间,静态局部变量在内存的静态存储区中占据着永久性的存储单元;静态局部变量的初值是在编译时赋予的,不是在程序执行期间赋予(自动变量是在程执行过程中赋初值)。对未赋初值的静态局部变量,C
40、编译程序自动给它赋初值 0。所以,要保证变量 n在未赋初值的情况下初值为 0,应选择的存储类别是 static。36.设函数 fun的定义形式为:void fun(char ch,float x) 则以下对函数 fun的调用语句中,正确的是 _。A) fun(“abc“,3.0); B) t=fun(D,16.5);C) fun(65,2,8); D) fun(32,32);(分数:2.00)A.B.C. D.解析:解析 A 选项“abc“的表示字符串,与参数类型不一样。B 选项 fun没有返回值,不能将其用来赋值。D 选项第一个 32不是字符,与参数类型不一样。37.以下程序段中,不能正确赋
41、字符串(编译时系统会提示错误)的是_。A) char s10=“abcdefg“; B) char t=“abcdefg“, * s=t;C) char s10; s=“abcdefg“; D) char s10; strcpy(s, “abcdefg“);(分数:2.00)A.B.C. D.解析:解析 C 语言中不能使用赋值运算符“=”直接对字符数组元素名赋一字符串。选项 C错误。38.下面程序段中 c的二进制值是_。char a=3,b=6,c;c=ab1;A) 00001011 B) 00001111 C) 00011110 D) 00011100(分数:2.00)A.B. C.D.解析
42、:评析 C 语言提供六种位运算符,按优先级由高到低的顺序分别为:取反()、左移()和右移()、按位与 (main()int i;int *p=a;for( i=0;i4;i+) ai=*p+;priatf(“%d/n“,a2);上面程序的输出结果是( )。A) 6 B) 8 C) 4 D) 2(分数:2.00)A. B.C.D.解析:解析 本题考查通过指针引用数组元素。程序通过 ai=*p+;语句,循环地将 2赋给 a0,4赋给 a1,6 赋给 a2,8 赋给 a3,所以输出结果为 6。40.有以下程序:#include stdio.hvoid funl (char * p)char * q;
43、q=p;while( *q! =/0) (*q) +;q+;mains( )char a = “Program“ , * p;p = fun1 (p); printf(“% s /n“ ,a);程序执行后的输出结果是( )。A) Prohsbn B) Prphsbn C) Progsbn D) Program(分数:1.00)A. B.C.D.解析:解析 在 main函数中,p=printf(“the end“)main()int i,a=0;for(i=1 ;i5;i+)PRINT(a+i);printf(“/n“);(分数:2.00)填空项 1:_ (正确答案:1,2,3,4,the en
44、d)解析:解析 本题考查带参数的宏的定义。第 1次循环,i=1 时,调用 PRINT(1),P(1)输出 1;第 2次循环,i=2 时,调用 PRINT(2),P(2)输出 2;第 3次循环,i=3 时,调用 PRINT(3),P(3)输出 3;第 4次循环,i=4 时,调用 PRINT(4),P(4)输出 4,the end。54.下列程序的运行结果是_。#define POW(r)(r)*(r)main()int x=3,y=2,t;t=POW(x+y);printf(“%d/n“,t);(分数:2.00)填空项 1:_ (正确答案:25)解析:解析 本题考查带参数的宏的定义及相关运算。运
45、算过程为:t=POW(x+y)=(2+3)*(2+3)=25。55.下列程序的功能是:求出 ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串 123412132,指定字符 1,则输出 3。请填空。#includestdioh)#deftne M 81int fun(char * ss,char c)int i=0;for(;U /U;ss+)if(*ss=c) i+;return i;main()char aM,ch;printf(“/nPlease enter a string:“);gets(a);printf(“/nPlease enterachar:“);ch=getchar();printf(“/nThe number of the char is:%d/n“,fun(a,ch);(分数:2.00)填空项 1:_ (正确答案:*ss! =/0)解析:解析 从字符串 ss中找出某字符的方法是:从字符串 ss的第一个字符开始,依次进行比较,若ss串的当前字符等于字符 c,则 i+;若 ss串的当前字符和字符 c不同,则继续对 ss串的下一个字符进行比较。本程序采用循环逐一比较的方式,找出某字符在字符串中出现的次数。汀语句的作用是判断某字符与字符串中的当前字符是否相同。