1、二级 C 语言笔试-81 及答案解析(总分:102.50,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列特征中不是面向对象方法的主要特征的是( )。(分数:2.00)A.多态性B.继承C.封装性D.模块化2.若 ch 为 char 型变量,k 为 int 型变量(已知字符 a 的 ASCII 码是 97),则执行下列语句后输出的结果为( )。ch=b;k=10;printf(“%x,%o,“,ch,ch,k);printf(“k=%d/n“,k);(分数:2.00)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0 值或不定
2、值C.62,142,k=%dD.62,142,k=%103.下列说法中不正确的是( )。(分数:2.00)A.指针是一个变量B.指针中存放的是数值C.指针可以进行加、减等算术运算D.指针变量占用存储空间4.下列合法的声明语句是( )。(分数:2.00)A.int_abc=50;B.double int=3+5e2.5C.long do=1L;D.float 3_asd=3e-3;5.下列叙述中正确的是( )。(分数:2.00)A.在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B.实型变量中允许存放整型数C.若 a 和 b 类型相同,在执行了赋值 a=b 后,b 中的值将放入 a
3、中,但 b 中的值不变D.在 C 程序中,求余运算符“%”两边的类型相同时才能进行运算6.若有定义和语句:int*pp,*p,a=20,b=10;pp=p=p=printf(%d,%d/n“,*p,*pp);则输出结果是( )。(分数:2.00)A.20,10B.20,20C.10,20D.10,107.设计程序时,应采纳的原则之一是( )。(分数:2.00)A.程序的结构应有助于读者的理解B.限制 GOTO 语句的使用C.减少或取消注释行D.程序越短越好8.对长度为 n 的线性表进行顺序查找,在最坏的情况下需要比较的次数为( )。(分数:2.00)A.125B.n/2C.nD.n+19.有下
4、列程序:fun(int x,int y) return (x+y);main()int a=1,b=2,c=3,sum;sm=fun(a+,b+,a+B) ,c+);printf(“%d/n“,sum);执行后的输出结果是( )。(分数:2.00)A.6B.7C.8D.910.sizeof(float)是( )。(分数:2.00)A.一种函数调用B.一种函数定义C.一个浮点表达式D.一个整型表达式11.下列程序的输出结果是( )。main()int i=1,j=2,k=3;if(i+= =1(分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 312.在“文件包含”预处理语句
5、的使用形式中,当#include 后面的文件名用“,(双撇号)括起时,寻找被包含文件的方式是( )。(分数:2.00)A.直接按系统设定的标准方式搜索目录B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索C.仅仅搜索源程序所在目录D.仅仅搜索当前目录13.下列描述错误的是( )。(分数:2.00)A.继承分为多重继承和单继承B.对象之间的通信靠传递消息来实现C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征D.类是具有共同属性、共同方法的对象的集合14.在 C 语言程序中,下列说法正确的是( )。(分数:2.00)A.函数的定义和函数的调用均可以嵌套B.函数的定
6、义不可以嵌套,但函数的调用可以嵌套C.函数的定义可以嵌套,但函数的调用不可以嵌套D.函数的定义和函数的调用均不可以嵌套15.在 C 语言中,while 和 dowhile 循环的主要区别是( )。(分数:2.00)A.dowhile 的循环体不能是复合语句B.dowhile 允许从循环体外转到循环体内C.while 的循环体至少被执行一次D.dowhile 的循环体至少被执行一次16.关于结构化程序设计原则和方法的描述错误的是( )。(分数:2.00)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用 GOTO 语句D.语言中所没有的控
7、制结构,应该采用前后一致的方法来模拟17.判断 char 型变量 c1 是否为小写字母的正确表达式为( )。(分数:2.00)A.a=c1=zB.(c1=A)C.(a=c1(z=c1)D.(c1=a)B.int a34;C.#define N 5D.int a29.5;float aN3;23.若有定义:“int a23;”则对 a 数组的第 i 行第 j 列元素的正确引用为( )。(分数:2.00)A.*(*(a+i)+j)B.(a+i)jC.*(a+i+j)D.*(a+i)+j24.简单的交换排序方法是( )。(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序25.下列能正确
8、定义且赋初值的语句是( )。(分数:2.00)A.int n1=n2=10;B.char c=32;C.float f=f+1.1;D.double x=12.3E2.5;26.下列程序的输出结果是( )。main()int a=4,b=5,c;if(aB) c=a*b;printf(“%d,%d,%d/n“,b,a,C);elsec=b/a;printf(“%d,%d,%d/n“,b,a,C);(分数:2.00)A.4,5,12B.20C.5,4,20D.1227.下列程序的输出结果是( )。#includestdio.hmain()int a=0,i;for(i=1;i5;i+)switc
9、h(i)case 0:case 3:a+=1;case 1:case 2:a+=2;default:a+=3;printf(“%d“,(分数:2.00)A.;A) 19B.18C.6D.828.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对29.设有变量说明 int(*p)m,其中的标识符 p 是( )。(分数:2.00)A.m 个指向整型变量的指针B.指向 m 个整型变量的指针C.一个指向具有 m 个整型元素的一维数组的指针D.具
10、有 m 个指针元素的一维指针数组,每个元素都指向整型变量30.下列能正确进行字符串赋值的是( )。(分数:2.00)A.char s5=“ABCDE“;B.char s5=A,B,C,D,E;C.char*s;s=“ABCDE“;D.char*s; printf(“%s“,s);31.在位运算中,操作数每右移两位,其结果相当于( )。(分数:2.00)A.操作数乘以 2B.操作数除以 2C.操作数除以 4D.操作数乘以 432.若有说明 char s130=“abc“,s2=“defghi“;,则在使用函数 strcat(s1,s2)后,结果是( )。(分数:2.00)A.s1 的内容更新为
11、abcdefghiB.s1 的内容更新为 defghi/0C.s1 的内容更新为 defghiabc/0D.s1 的内容更新为 abcdefghi/033.若变量已正确定义,要求通过 scanf(“%c%d%c%d“,while(-k) printf(“%d“,k-=3);printf(“/n“);执行后的输出结果是( )。(分数:2.00)A.1B.2C.4D.死循环38.若各选项中所用变量已正确定义,fun()函数中通过 return 语句返回一个函数值,下列选项中错误的程序是( )。(分数:2.00)A.main()x =fun(2,10);float fun(int a,intb) B
12、.float fun(int a,intb) main()x =fun(i,j);C.float fun(int,int);main()x =fun(2,10);float fun(int a,intb) D.main()b39.若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是( )。(分数:2.00)A.实参与其对应的形参共占存储单元B.只有当实参与其对应的形参同名时才共占存储单元C.实参与其对应的形参分别占用不同的存储单元D.实参将数据传递给形参后,立即释放原先占用的存储单元40.在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送( )。(分数:2.00)A.调用语
13、句B.命令C.口令D.消息二、填空题(总题数:15,分数:22.50)41.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:1.50)填空项 1:_42.注释一般分为序言性注释和 1 注释。(分数:1.50)填空项 1:_43.在面向对象方法中,类的实例称为 1。(分数:1.50)填空项 1:_44.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:1.50)填空项 1:_45.数据流图的类型有 1 和事务型。(分数:1.50)填空项 1:_46.x、y、x 均为 int 型变
14、量,描述“x、y 和 z 中至少有两个为正数”的表达式是 1。(分数:1.50)填空项 1:_47.与表达式 a+=b 等价的另一书写形式是 1。(分数:1.50)填空项 1:_48.下列程序的输出结果是_。#includestdio.hmain()int x=1,y=1,a=1,b=1;switch(x)case 1:switch(y)case 0: a+; break;case 1: b+; break;case 2:a+;b+;break;printf(“a=%d,b=%d/n“,a,B) ;(分数:1.50)填空项 1:_49.C 语言用于结构化程序设计的 3 种基本结构是 1、选择结
15、构和循环结构。(分数:1.50)填空项 1:_50.下列循环的循环次数是_。int k=2;while(k=0)printf“%d“,k);k-;printf(“/n“);(分数:1.50)填空项 1:_51.若有定义 float b15,*p=b;,且数组 b 的首地址为 200H,则 p+13 所指向的数组元素的地址为 1。(分数:1.50)填空项 1:_52.“printf(“%d/n“,strlen(“/t/“023/xABC/n“);”语句的输出结果是_。(分数:1.50)填空项 1:_53.设有下列宏定义:#define A 2#define B A+3则执行赋值语句;t=B*2;
16、t 为 int 型变量后的值是_。(分数:1.50)填空项 1:_54.下列程序的功能是将字符串 s 中所有的字符 c 删除。请填空。#includestdio.hmain()char s80;int i,j;gets(s);for(i=j=0;si!=/0;i+)if(si!=c)sj=/0;puts(s);(分数:1.50)填空项 1:_55.下列程序的运行结果是_。#includestdio.hfunc(a,b) static int m=0,i=2;i+=m+1;m=i+a+b;return(m);main()int k=5,m=3,p;p=fune(k,m);printf(“%d“,
17、p);p=func(k,m);printf(“%d/n“,p);(分数:1.50)填空项 1:_二级 C 语言笔试-81 答案解析(总分:102.50,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列特征中不是面向对象方法的主要特征的是( )。(分数:2.00)A.多态性B.继承C.封装性D.模块化 解析:解析 面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:分类性、多态性、封装性、模块独立性、继承和多态性等。模块化是结构化程序设计的特点。2.若 ch 为 char 型变量,k 为 int
18、型变量(已知字符 a 的 ASCII 码是 97),则执行下列语句后输出的结果为( )。ch=b;k=10;printf(“%x,%o,“,ch,ch,k);printf(“k=%d/n“,k);(分数:2.00)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0 值或不定值C.62,142,k=%d D.62,142,k=%10解析:解析 第 1 个 printf 函数,格式说明的个数是 2,而输出项的个数是 3,所以对于多余的输出项k 不予输出;第 2 个 printf 函数,有两个%说明,第 1 个%后面的字符要原样输出。知识拓展 本题考查 pr
19、intf 函数的格式。 “%x”和“%o”分别表示以十六进制和八进制无符号型输出整型数据(不带前导 0x 或 0):printf 函数中格式说明符之前插入的任何字符都原样输出:格式说明与输出项的个数也要相等,如果格式说明的个数少于输出项的个数,则对于多余的输出项不予输出。3.下列说法中不正确的是( )。(分数:2.00)A.指针是一个变量B.指针中存放的是数值 C.指针可以进行加、减等算术运算D.指针变量占用存储空间解析:解析 指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是个存储单元,而不是一个字节。4.下列合法的声明语句是( )。(分数:2.00)A.int_ab
20、c=50; B.double int=3+5e2.5C.long do=1L;D.float 3_asd=3e-3;解析:解析 C 语言规定,标识符是由字母、数字或下面线组成,并且它的第一个字符必须是字母或者下画线。另外 C 语言规定了些专用的标识符,它们有着固定的含义,不能更改。int 就是表达变量类型的标识符,它不能再用做变量名和函数名。do 是 C 语言的一个关键字,也不能再用做变量名和函数名。5.下列叙述中正确的是( )。(分数:2.00)A.在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B.实型变量中允许存放整型数 C.若 a 和 b 类型相同,在执行了赋值 a=b 后
21、,b 中的值将放入 a 中,但 b 中的值不变D.在 C 程序中,求余运算符“%”两边的类型相同时才能进行运算解析:解析 选项 A),在赋值表达式中,赋值号的左边只能是变量或者是代表某个存储单元的表达式,不能是任意表达式。在判断选项 B)时首先应该建立这样的概念,整型变量中只能存放整型数,实型变量中能存放实型数,也能存放整型数。选项 C),执行表达式 a=b 后,将把变量 b 存储单元中的值赋给变量a,从而覆盖 a 中原有的值,但 b 中原有的值并不改变。选项 D),在 C 程序中,求余运算符“%”两边的类型均为整型数据。6.若有定义和语句:int*pp,*p,a=20,b=10;pp=p=p
22、=printf(%d,%d/n“,*p,*pp);则输出结果是( )。(分数:2.00)A.20,10B.20,20C.10,20D.10,10 解析:解析 本题考查指针变量的赋值。*pp 是定义了一个指向指针的指针变量,语句 pp=main()int a=1,b=2,c=3,sum;sm=fun(a+,b+,a+B) ,c+);printf(“%d/n“,sum);执行后的输出结果是( )。(分数:2.00)A.6B.7C.8 D.9解析:解析 函数 fun(int x,int y)的功能是返回两个整型数据的和。在主函数中,变量 a,b,c 的初始值分别为 1,2,3。因此逗号表达式“a+,
23、b+,a+b”的值等于 5,表达式 c+的值为 3,调用于函数的表达式为“fun(5,3);”,其返回值等 8。所以变量 sum 的值等于 8。10.sizeof(float)是( )。(分数:2.00)A.一种函数调用B.一种函数定义C.一个浮点表达式D.一个整型表达式 解析:解析 sizeof(float)是 C 语言内部规定的用于计算单精度型变量(float)在计算机的内存中所占用的字节数量的函数,返回一个整数值。11.下列程序的输出结果是( )。main()int i=1,j=2,k=3;if(i+= =1(分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 3 解析
24、:解析 本题考查自增运算符“+”、逻辑与运算符“B.int a34;C.#define N 5D.int a29.5;float aN3; 解析:解析 C 语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式;二维数组的一般定义格式是:类型说明符数组名常量表达式常量表达式。23.若有定义:“int a23;”则对 a 数组的第 i 行第 j 列元素的正确引用为( )。(分数:2.00)A.*(*(a+i)+j) B.(a+i)jC.*(a+i+j)D.*(a+i)+j解析:解析 本题考查如何通过地址来引用数组元素。通过地址来引用数组元素的方法有下列
25、 5 种:aij; *(ai+j); *(*(a+i)+j); *(ai)j; *(if(aB) c=a*b;printf(“%d,%d,%d/n“,b,a,C);elsec=b/a;printf(“%d,%d,%d/n“,b,a,C);(分数:2.00)A.4,5,12B.20C.5,4,20 D.12解析:解析 本题考查 if else 语句。第一个 if 语句,先判断条件,发现 ab 成立,执行下列的复合语句,得 c=a*b=20,b、a 的值不变。27.下列程序的输出结果是( )。#includestdio.hmain()int a=0,i;for(i=1;i5;i+)switch(i
26、)case 0:case 3:a+=1;case 1:case 2:a+=2;default:a+=3;printf(“%d“,(分数:2.00)A.;A) 19 B.18C.6D.8解析:解析 本题考查 switch 语句。当 i=1 时,执行 case 1,因为没有遇到 break 语句,所以依次往下运行,a=a+2=2,a=a+3=5;当 i=2 时,执行 case 2,因为没有遇到 break 语句,所以依次往下运行,a=a+2=7,a=a+3=10;当 i=3 时,执行 case 3,a=a+1=11,因为没有遇到 break 语句,所以依次往下运行,a=a+2=13,a=a+3=1
27、6;当 i=4 时,执行 default,a=a+3=19,结束循环。28.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对 解析:解析 算法的时间复杂度和算法的空间复杂度是从不同的角度来衡量算法的执行情况,它们之间没有内在联系。29.设有变量说明 int(*p)m,其中的标识符 p 是( )。(分数:2.00)A.m 个指向整型变量的指针B.指向 m 个整型变量的指针C.一个指向具有 m 个整型元素的一维数组的指针 D.具有 m 个
28、指针元素的一维指针数组,每个元素都指向整型变量解析:解析 本题考查指向数组的指针变量的声明。这里的 p 表示一个指向数组的指针;*p 表示指针 p指向地址的内容。30.下列能正确进行字符串赋值的是( )。(分数:2.00)A.char s5=“ABCDE“;B.char s5=A,B,C,D,E;C.char*s;s=“ABCDE“; D.char*s; printf(“%s“,s);解析:解析 字符串存储要有结束符“/0”且要占用一个空间,选项 A)、B 的空间不够:printf 用来输出字符,不能输入字符串31.在位运算中,操作数每右移两位,其结果相当于( )。(分数:2.00)A.操作数
29、乘以 2B.操作数除以 2C.操作数除以 4 D.操作数乘以 4解析:解析 在位运算中,操作数每右移两位,相当于在操作数的左侧添 0,最右面的两位被移出,即操作数除以 4。32.若有说明 char s130=“abc“,s2=“defghi“;,则在使用函数 strcat(s1,s2)后,结果是( )。(分数:2.00)A.s1 的内容更新为 abcdefghiB.s1 的内容更新为 defghi/0C.s1 的内容更新为 defghiabc/0D.s1 的内容更新为 abcdefghi/0 解析:解析 strcat(s1,s2)是把 s2 字符串连接到 s1 字符串的末尾,要保证 s1 能容
30、纳下连接后的字符串。33.若变量已正确定义,要求通过 scanf(“%c%d%c%d“,while(-k) printf(“%d“,k-=3);printf(“/n“);执行后的输出结果是( )。(分数:2.00)A.1 B.2C.4D.死循环解析:解析 在程序语句中,k 的初始值为 5,进行第 1 次 while 循环后,k 自减 1 为 4,非 0,执行循环体里的 printf 语句,输出 1,此时 k 的值变为 1。程序执行第 2 次循环时,k 自减 1 变为 0,为假,退出 while 循环语句。所以程序的最后结果为 1。38.若各选项中所用变量已正确定义,fun()函数中通过 ret
31、urn 语句返回一个函数值,下列选项中错误的程序是( )。(分数:2.00)A.main()x =fun(2,10);float fun(int a,intb) B.float fun(int a,intb) main()x =fun(i,j);C.float fun(int,int);main()x =fun(2,10);float fun(int a,intb) D.main()b解析:解析 C 语言规定,函数必须先定义,后调用(函数的返回值类型为 int 或 char 时除外)。在选项A)中,调用的子函数在调用后面定义,所以不正确。在选项 B)、C)中,被调用函数在主调函数之前定义,再在
32、主函数中调用,所以是正确的:在选项 D)中,在主调函数中先对于函数 float fun(int i,int j)进行了定义,然后进行调用。39.若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是( )。(分数:2.00)A.实参与其对应的形参共占存储单元B.只有当实参与其对应的形参同名时才共占存储单元C.实参与其对应的形参分别占用不同的存储单元 D.实参将数据传递给形参后,立即释放原先占用的存储单元解析:解析 本题考查函数调用时的参数传递。函数的形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在函数调用时,实参和其所对应的形参分别占用不同的
33、存储单元,彼此之间不影响。40.在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送( )。(分数:2.00)A.调用语句B.命令C.口令D.消息 解析:解析 在面向对象方法中,对象之间通过消息进行通信。消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎么完成这些处理,接受者独立决定采用什么方式完成所需的处理。二、填空题(总题数:15,分数:22.50)41.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:1.50)填空项 1:_ (正确答案:自顶向下)解析:解析 在程
34、序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些子目标作为过渡,上述方法概括为:自顶向下,逐步细化。42.注释一般分为序言性注释和 1 注释。(分数:1.50)填空项 1:_ (正确答案:功能性)解析:解析 注释一般分为序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,给出程序的整体说明;功能性注释一般嵌在源程序体之中,主要描述其后的语句或程序做什么,43.在面向对象方法中,类的实例称为 1。(分数:1.50)填空项 1:_ (正确答案:对象)解析:解析 在面向对象的程序设计方法中,类是具有相同的属性或方法的对象的抽象,对象是类的实例。44.某二叉树
35、中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:1.50)填空项 1:_ (正确答案:19)解析:解析 在任意一棵二叉树中,度数为 0 的结点(即叶子结点)总比度为 2 的结点多一个,因此该二叉树中叶子结点为 18+1=19。45.数据流图的类型有 1 和事务型。(分数:1.50)填空项 1:_ (正确答案:变换型)解析:解析 典型的数据流类型有两种:变换型和事务型46.x、y、x 均为 int 型变量,描述“x、y 和 z 中至少有两个为正数”的表达式是 1。(分数:1.50)填空项 1:_ (正确答案:(x0)switch(x)case 1:switch(y)cas
36、e 0: a+; break;case 1: b+; break;case 2:a+;b+;break;printf(“a=%d,b=%d/n“,a,B) ;(分数:1.50)填空项 1:_ (正确答案:a=2,b=3)解析:解析 分析程序,程序从 x=1 语句开始执行,之后执行第一个 switch 语句,switch(x)=switch(1),所以执行 case1,case1 语句中包含一个复合 switch 语句:这时执行第二个 switch 语句,此时 y=1,所以 switch(y)=switch(1),因此执行 case1,将 b 加 1,得到 b=2,遇到 break 语句,退出第
37、二个 switch语句,则整个 case 1 的复合语句执行完毕,由于在这个 case 1 的后面没有 break 语句使其退出第一个switch 语句,所以接着执行下列的 case 2 后面的语句,即将 a,b 各加 1,得到 a=2,b=3。49.C 语言用于结构化程序设计的 3 种基本结构是 1、选择结构和循环结构。(分数:1.50)填空项 1:_ (正确答案:顺序结构)解析:解析 结构化程序有 3 种摹本结构,即顺序结构、选择结构(包括 if 语句和 switch 语句)和循环结构(包括 for 语句、while 语句、 dowhile 语句)。50.下列循环的循环次数是_。int k
38、=2;while(k=0)printf“%d“,k);k-;printf(“/n“);(分数:1.50)填空项 1:_ (正确答案:0)解析:解析 解答本题需要注意表达式“k=0”,它是赋值表达式而不是关系表达式,不论 k 为何值,表达式 k=0 总会使 k 为 0,所以不能进入循环。51.若有定义 float b15,*p=b;,且数组 b 的首地址为 200H,则 p+13 所指向的数组元素的地址为 1。(分数:1.50)填空项 1:_ (正确答案:252H)解析:解析 要解答本题,首先要明白在对指针进行加,减运算时,数字“1”不是十进制数的“1”,而是指“1”个存储单元长度。1 个存储单
39、元长度占存储空间的多少,应该视具体情况而定,如果存储单元的基类型是血型,则移动 1 个存储单元的长度就是位移 2 个字节;如果存储单元基类型是 float 型,则移动 1 个存储单元的长度就是位移 4 个字节。所以 p+13 所指向的数组元素的地址为:200H+(13*4) H=252H。52.“printf(“%d/n“,strlen(“/t/“023/xABC/n“);”语句的输出结果是_。(分数:1.50)填空项 1:_ (正确答案:6)解析:解析 strlen()函数的作用是计算字符串的长度并作为函数的返回值,这里的长度不包括串尾的结束标志/0。/tf 是转义字符,代表横向跳若干格:“
40、/“是转义字符,代表双引号;/023只代表一个字符,而不管转义字符后面有几个字符;仅 AB,是以两位十六进制数 AB 表示的 ASCII 码字符,只代表一个字符;/n是转义字符,代表回车换行。5 个字符常量各代表一个字符,再加上字母 C,所以返回的长度是 6。53.设有下列宏定义:#define A 2#define B A+3则执行赋值语句;t=B*2;t 为 int 型变量后的值是_。(分数:1.50)填空项 1:_ (正确答案:8)解析:解析 本题考查带参数的宏定义及相关运算运算过程为:t=B*2=A+3*2=2+3*2=8。54.下列程序的功能是将字符串 s 中所有的字符 c 删除。请
41、填空。#includestdio.hmain()char s80;int i,j;gets(s);for(i=j=0;si!=/0;i+)if(si!=c)sj=/0;puts(s);(分数:1.50)填空项 1:_ (正确答案:Sj+=si)解析:解析 循环开始后如果数组 s 中储存值与字符 c 相同,则 i+直接跳过当前值;如果不相同,则将当前值赋予数组指定位置,并通过 j+将下标加 1,指向下一元素要存储的位置。55.下列程序的运行结果是_。#includestdio.hfunc(a,b) static int m=0,i=2;i+=m+1;m=i+a+b;return(m);main()int k=5,m=3,p;p=fune(k,m);printf(“%d“,p);p=func(k,m);printf(“%d/n“,p);(分数:1.50)填空项 1:_ (正确答案:11 23)解析:解析 在主函数中第一次调用 func 子函数时,m=0,i=2,i=i+m+1=3,m=i+a+b=3+5+3=11。因为在于函数中将 m 和 i 定义成了 static 类型,所以在于函数中对 m 和 i 进行的改变在下一次调用子函数时能进行保存,所以第二次调用于函数时,m=11,i=3,则 i=i+m+1=15, m=i+a+b=15+5+3=23。