1、二级 C语言笔试-397 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是A) 一个逻辑数据结构只能有一种存储结构B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分数:1.00)A.B.C.D.2.下列叙述中正确的是A) 在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B) 在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C) 在栈中,栈底指针不变,栈中
2、元素随栈顶指针的变化而动态变化D) 上述三种说法都不对(分数:1.00)A.B.C.D.3.下列数据结构中,能用二分法进行查找的是A) 顺序存储的有序线性表 B) 线性链表C) 二叉链表 D) 有序线性链表(分数:1.00)A.B.C.D.4.在面向对象方法中,具有相似属性与操作的一组对象称为A) 类 B) 实例 C) 消息 D) 数据(分数:1.00)A.B.C.D.5.下面不属于软件工程三要素的是A) 方法 B) 环境 C) 工具 D) 过程(分数:1.00)A.B.C.D.6.软件详细设计的主要任务是确定每个模块的A) 算法和使用的数据结构 B) 外部接口C) 功能 D) 编程(分数:1
3、.00)A.B.C.D.7.检查软件产品是否符合需求定义的过程称为A) 确认测试 B) 集成测试 C) 验证测试 D) 验收测试(分数:1.00)A.B.C.D.8.在数据库系统中,所谓数据的独立性是指A) 数据与程序独立存放 B) 不同的数据被存放在不同的文件中C) 不同的数据只能被对应的应用程序所使用 D) 以上三种说法都不对(分数:1.00)A.B.C.D.9.人员基本信息一般包括:身份证号、姓名、性别、年龄等,其中可以作为主关键字的是A) 身份证号 B) 姓名 C) 性别 D) 年龄(分数:1.00)A.B.C.D.10.设有关系 R和 S,关系代数表达式 R-(R-S)表示的是A)
4、Rs B) R-S C) Rs D) RS(分数:1.00)A.B.C.D.11.以下叙述中正确的是A) C语言程序将从源程序中第一个函数开始执行B) 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C) C语言规定必须用 main作为主函数名,程序从此开始执行,在此结束D) main作为用户标识符,用以命名任意一个函数作为主函数(分数:1.00)A.B.C.D.12.下列是用户自定义标识符的是A) _w1 B) 3_xy C) int D) LINE-3(分数:1.00)A.B.C.D.13.执行以下程序时输入 1234567CR,则输出结果是#include stdio.h
5、main()int a=1,b;scanf(“%3d%2d“,printf(“%d%d/n“,a,b);A) 12367 B) 12346 C) 12312 D) 12345(分数:1.00)A.B.C.D.14.以下选项中,不能作为合法常量的是A) 1.234e05 B) 1.234e+5 C) 1.234e0.5 D) 1.234e0(分数:1.00)A.B.C.D.15.有以下程序,其中%u 表示按无符号整数输出main()unsigned int x=0xFFFF; /*x的初值为十六进制数*/printf(“%u/n“,x);程序运行后的输出结果是A) -1 B) 65535 C)
6、32767 D) 0xFFFF(分数:1.00)A.B.C.D.16.当用户要求输入的字符串中含有空格时,应使用的输入函数是A) scanf() B) getchar() C) gets() D) getc()(分数:1.00)A.B.C.D.17.若执行下面的程序时,从键盘输入 6和 2,则输出结果是main()int a,b,k;scanf(“%d,%d“,if(ab) k=a%b;else k=b%a;printf(“%d/n“,k);A) 5 B) 3 C) 2 D) 0(分数:1.00)A.B.C.D.18.有以下程序:fun(int x)int p;if(x=0|x=1) retu
7、rn(3);p=x-fun(x-2);return p;main()printf(“%d/n“,fun(7);执行后的输出结果是A) 7 B) 3 C) 2 D) 0(分数:1.00)A.B.C.D.19.已有定义:char c;,程序前面已在命令行中包含 ctype.h文件,不能用于判断 c中的字符是否为大写字母的表达式是A) isupper(c) B) A=c=ZC) A=clong b;double x,y;则以下选项中正确的表达式是A) a%(int)(x-y) B) a=x!=y; C) (a*y)%b D) y=x+y=x(分数:1.00)A.B.C.D.22.运行下面的程序时,从
8、键盘输入字母 H,则输出结果是#include stdio.hmain()char ch;ch=getchar();switch(ch)case H:printf(“Hello!/n“);case G:printf(“Good moming!/n“);default:printf(“Bye_Bye!/n“);A) Hello! B) Hello!Good Moring!C) Hello! Good morning!Bye_Bye!D) Hello!Bye_Bye!(分数:1.00)A.B.C.D.23.有以下程序:#include stdio.hmain()char s=“012x4y/08s
9、34f4w2“;int i,n =0;for(i=0;si!=0;i+)if(si=0printf(“%d/n“,n);程序运行后的输出结果是A) 0 B) 3 C) 4 D) 7(分数:1.00)A.B.C.D.24.有以下程序:main()int a=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf(“%d,%d,%d,%d/n“,a,b,c,d);程序运行后输出结果是A) 0,1,2,0 B) 0,0,0,3 C) 1,1,2,0 D) 编译有错(分数:1.00)A.B.C.D.25.定义如下变量和数组:int i;int x33=1,2,3,4,5
10、,6,7,8,9;则下面语句的输出结果是for(i=0;i3;i+)printf(“%d“,x2-11);A) 9 5 1 B) 7 4 1 C) 7 5 3 D) 9 6 3(分数:1.00)A.B.C.D.26.在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是A) auto和 register B) extern和 register C) auto_和 static D) static和 register(分数:1.00)A.B.C.D.27.有以下程序:#include stdio.hint fun(int a,int b)if(b=0) return a;else retu
11、rn( fun(-a,-b);main()printf(“%d/n“,fun(4,2);程序的运行结果是A) 1 B) 2 C) 3 D) 4(分数:1.00)A.B.C.D.28.有以下程序:point( char木 p)p+=3;main()char a4=1,2,3,4,*p=a;point(p);printf(“%c/n“,*p);程序运行后的输出结果是A) 1 B) 2 C) 3 D) 4(分数:1.00)A.B.C.D.29.阅读下列程序段,程序的输出结果为#include “stdio.h“#define M(X,Y) (X)*(Y)#define N(X,Y) (X)/(Y)m
12、ain()int a=5,b=6,c=8,k;k=N(M(a,b),c);printf(“%d/n“,k);A) 3 B) 5 C) 6 D) 8(分数:1.00)A.B.C.D.30.设有以下函数:void fun(int n,char*s)则下面对函数指针的定义和赋值均正确的是A) void(*pf)();pf;fun; B) void*pf();pf=fun;C) void*pf();*pf=fun; D) void(*pf)(int,char);pf=(分数:1.00)A.B.C.D.31.有以下程序:#include stdio.hvoid fun(int *s,int n1,int
13、 n2)int i,j,t;i=n1;j=n2;while(ij) t=si;si=sj;sj=t;i+;j-;main()int a10=1,2,3,4,5,6,7,8,9,0,k;fun(a,0,3);fun(a,4,9);fun(a,0,9);for(k=0;k10;k+)printf(“%d“,ak);printf(“/n“);程序的运行结果是A) 0987654321 B) 4321098765 C) 5678901234 D) 0987651234(分数:1.00)A.B.C.D.32.下面结构体的定义语句中,错误的是A) struct ord int x;int y;int z;
14、struct ord a;B) struct ord int x;int y;int z; struct ord a;C) struct ord int x;int y;int z; a;D) struct int x;int y;int z;a;(分数:1.00)A.B.C.D.33.有以下程序:void f(int *q)int i=0;for(;i5;i+)(*q)+;main()int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+) printf(“%d,“,ai);程序运行后的输出结果是A) 2,2,3,4,5, B) 6,2,3,4,5, C) 1,2,3,4
15、,5, D) 2,3,4,5,6,(分数:1.00)A.B.C.D.34.有以下程序:#include stdio.hvoid fun(char*a,char*b)while(*a=*)a+;while(*b=*a)b+;a+;main()char *s=“*a*b*“,t80;fun(s,t);puts(t);程序的运行结果是A) *a*b B) a*b C) a*b* D) ab(分数:1.00)A.B.C.D.35.有以下程序:#include stdio.hstruct stint x,y; data2=1,10,2,20;main()struct st*p=data;printf(“
16、%d,“,p-y);printf(“%d/n“,(+p)-x);程序的运行结果是A) 10,1 B) 20,1 C) 10,2 D) 20,2(分数:1.00)A.B.C.D.36.有以下程序:int fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return sum;main()int a=1,2,3,4,5,b=6,7,8,9,s=0;s= fun(a,5)+fun(b,4); printf(“%d/n“,s);程序执行后的输出结果是A) 45 B) 50 C) 60 D) 55(分数:1.00)A.B.C.D.37.有以
17、下程序:int add (int a,int b) return (a+b);main()int k,(*f)(),a=5,b=10;f=add;则以下函数调用语句错误的是A) k=(*f)(a,b); B) k=add(a,b); C) k=*f(a,b); D) k=f(a,b);(分数:1.00)A.B.C.D.38.有以下程序段:struct stint x; int *y; *pt;int a=1,2,b=3,4;struct st c2=10,a,20,b;pt=c;以下选项中表达式的值为 11的是A) *pt-y B) pt-x C) +pt-x D) (pt+)-x(分数:1.
18、00)A.B.C.D.39.有以下程序(strcat 函数用于连接两个字符串):#include stdio.h#include string.hmain()char a20=“ABCD/0EFG/0“,b=“IJK“;strcat(a,b);printf(“%s/n“ ,a);程序运行后的输出结果是A) ABCDE/0FG/0IJK B) ABCDIJKC) IJK D) EFGIJK(分数:1.00)A.B.C.D.40.以下程序:main()unsigned char a=2,b=4,c=5,d;d=a|b;dprintf(“%d/n“,d);程序运行后的输出结果是A) 3 B) 4 C
19、) 5 D) 6(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:60.00)41.一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后依次出栈,则元素出栈的顺序是 1。(分数:4.00)填空项 1:_42.在一棵二叉树上第 6层的结点数最多是 1。(分数:4.00)填空项 1:_43.耦合和内聚是评价模块独立性的两个主要标准,其中 1,反映了模块内部各成分之间的联系。(分数:4.00)填空项 1:_44. 1运算指从关系模式中指定若干属性组成新的关系。(分数:4.00)填空项 1:_45.负责数据库中查询操作的数据库语言是 1。(分数:4.0
20、0)填空项 1:_46.有以下程序:main()int m,n,p;scanf(“m=%dn=%dp=%d“,printf(“%d%d%d/n“,m,n,p);若想从键盘上输入数据,使变量 m中的值为 111,n 中的值为 222,p 中的值为 333,则正确的输入为_。(分数:4.00)填空项 1:_47.以下程序的输出结果是_。float fun(int x,int y)return(x+y);main()int a=2,b=5,c=8;printf(“%3.0f/n“,fun(int)fun(a+c,b),a-c);(分数:4.00)填空项 1:_48.以下程序的输出结果是_。main(
21、)int y=9;for(;y0;y-)if(y%3=0)printf(“%d“,-y);continue;(分数:4.00)填空项 1:_49.以下程序用于判断 a、b、c 能否构成三角形,若能则输出 YES,否则输出 NO。当给 a、b、c 输入三角形的三条边长时,确定 a、b、c 能构成三角形的条件是需同时满足 3个条件:a+bc,a+cb,b+ca。请填空。main()float a,b,c;scanf(“%f%f%f“,k=N;k+) sk=k+1;printf(“%d/n“,fun(s,4,N);(分数:4.00)填空项 1:_51.有以下程序:#include stdio.hin
22、t *f(int*p,int*q);main()int m=1,n=2, *r=r=f(r,printf(“%d/n“,*r);int *f(int *p,int *q)return(*p*q)?p:q;程序运行后的输出结果是_。(分数:4.00)填空项 1:_52.下面程序的功能是输出数组 s中最大元素的下标。请填空。main()int k,p,s=1,-9,7,2,-10, 3;for(p=0,k=p;p6;p+)if(spsk) _printf(“%d/n“,k);(分数:4.00)填空项 1:_53.阅读下面程序段,执行后输出的结果是_。#include “stdio.h“main()
23、char fun(char,int);char a=A;int b=13;a=fun(a,b);putchar(a);char fun(char a,int b)char k;k=a+b;return k;(分数:4.00)填空项 1:_54.有以下程序:#include stdio.hmain()int m,n;scanf(“%d%d“,while(mn) n=n-m;printf(“%d/n“,m);程序运行后,当输入 14 63回车时,输出结果是_。(分数:4.00)填空项 1:_55.以下程序运行后的输出结果是_。#include stdio.hmain()FILE *fp;int x
24、6=1,2,3,4,5,6,i;fp=fopen(“test.dat“,“wb“);fwrite(x,sizeof(int),3,fp);rewind(fp);fread(x,sizeof(int),3,fp);for(i=0;16;i+)printf(“%d“,xi);printf(“/n“);fclose(fp);(分数:4.00)填空项 1:_二级 C语言笔试-397 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是A) 一个逻辑数据结构只能有一种存储结构B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构C) 一
25、个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分数:1.00)A.B.C.D. 解析:解析 一种数据的逻辑结构根据需要可以表示成多种存储结构。而采用不同的存储结构,其数据处理的效率是不同的。数据的逻辑结构与存储结构都可以分为线性和非线性结构。2.下列叙述中正确的是A) 在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B) 在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C) 在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D) 上述三种说法都不对(分数:1.00)A.B.C.
26、D.解析:解析 栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。当有新元素进栈时,栈顶指针向上移动;当有元素出栈时,栈顶指针向下移动。在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化。3.下列数据结构中,能用二分法进行查找的是A) 顺序存储的有序线性表 B) 线性链表C) 二叉链表 D) 有序线性链表(分数:1.00)A. B.C.D.解析:解析 二分法查找只适用于顺序存储的有序表。在此所说的有序表是指线性表中的元素按值非递减排列,即从小到大,但允许相邻元素相等。4.在面向对象方法中,具有相似属性与操作的一组对象称为A) 类 B)
27、实例 C) 消息 D) 数据(分数:1.00)A. B.C.D.解析:解析 将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象集合。5.下面不属于软件工程三要素的是A) 方法 B) 环境 C) 工具 D) 过程(分数:1.00)A.B. C.D.解析:解析 软件工程包括三个要素:方法、工具和过程。软件工程方法为软件开发提供了“如何做”的技术。工具支持软件的开发、管理、文档生成;过程支持软件开发各个环节的控制和管理。6.软件详细设计的主要任务是确定每个模块的A) 算法和使用的数据结构 B) 外部接口C) 功能 D) 编程(分数:1.00)A. B.C.D.解析:解析 软件详
28、细设计的任务,是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。7.检查软件产品是否符合需求定义的过程称为A) 确认测试 B) 集成测试 C) 验证测试 D) 验收测试(分数:1.00)A. B.C.D.解析:解析 确认测试的任务是验证软件的功能和性能及其他特征是否满足了需求规格说明中确定的各种需求以及软件配置是否完全、正确。8.在数据库系统中,所谓数据的独立性是指A) 数据与程序独立存放 B) 不同的数据被存放在不同的文件中C) 不同的数据只能被对应的应用程序所使用 D) 以上三种说法都不对(分数:1.00)A.B.C.D. 解析:解析 数
29、据的独立性是指数据库中数据独立于应用程序且不依赖于应用程序,即数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。9.人员基本信息一般包括:身份证号、姓名、性别、年龄等,其中可以作为主关键字的是A) 身份证号 B) 姓名 C) 性别 D) 年龄(分数:1.00)A. B.C.D.解析:解析 主关键字是表中区别不同的记录的标识,在该表中只有身份证号具有这个作用,所以用其作为主关键字。10.设有关系 R和 S,关系代数表达式 R-(R-S)表示的是A) Rs B) R-S C) Rs D) RS(分数:1.00)A. B.C.D.解析:解析 R-S 表示属于 R但不属于 S,R-(R-S)表
30、示属于 R但不属于(R-S),即相当于 RS。11.以下叙述中正确的是A) C语言程序将从源程序中第一个函数开始执行B) 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C) C语言规定必须用 main作为主函数名,程序从此开始执行,在此结束D) main作为用户标识符,用以命名任意一个函数作为主函数(分数:1.00)A.B.C. D.解析:解析 一个 C语言源程序至少包含一个 main函数。无论 main函数在程序中的位置如何,它都是C语言程序的主函数,是程序执行的入口和出口。12.下列是用户自定义标识符的是A) _w1 B) 3_xy C) int D) LINE-3(分数
31、:1.00)A. B.C.D.解析:解析 C 语言规定用户标识符由英文字母、数字和下划线组成,且第一个字符必须是字母或下划线,由此可见选项 B),D)是错误的;此外,C 语言不允许用户将关键字作为标识符,而选项 C)选项中的int是 C语言的关键字。13.执行以下程序时输入 1234567CR,则输出结果是#include stdio.hmain()int a=1,b;scanf(“%3d%2d“,printf(“%d%d/n“,a,b);A) 12367 B) 12346 C) 12312 D) 12345(分数:1.00)A.B.C.D. 解析:解析 scanf 函数中的格式控制说明为“%
32、3d%2d”,分别选中输入中的 3位和 2位,因此a=123,b=45。因此正确答案为 D)。14.以下选项中,不能作为合法常量的是A) 1.234e05 B) 1.234e+5 C) 1.234e0.5 D) 1.234e0(分数:1.00)A.B.C. D.解析:解析 C 语言的语法规定,字母 e(E)之前必须有数字,且 e(E)后面的指数必须是整数,而选项 C)中,e(E)后面的指数是小数,所以不合法。15.有以下程序,其中%u 表示按无符号整数输出main()unsigned int x=0xFFFF; /*x的初值为十六进制数*/printf(“%u/n“,x);程序运行后的输出结果
33、是A) -1 B) 65535 C) 32767 D) 0xFFFF(分数:1.00)A.B. C.D.解析:解析 本题考查的是整型无符号数的输出。%u 的作用是按无符号的十进制形式输出整型数,整型无符号数的取值范围在 065535 之间,无符号数不能表示成小于 0的负数,十六进制数 0xFFFF转换为二进制位其值为 16个 1,代表的整数就是 65535。16.当用户要求输入的字符串中含有空格时,应使用的输入函数是A) scanf() B) getchar() C) gets() D) getc()(分数:1.00)A.B.C. D.解析:解析 本题综合考查了输入函数的使用。scanf 函数
34、会将空格视为分隔符,getchar 函数只能输入单个字符,getc 函数是文件操作函数,显然都不符合题意。通过 gets函数输入字符串时,输入的空格被认为是字符串的一个字符。17.若执行下面的程序时,从键盘输入 6和 2,则输出结果是main()int a,b,k;scanf(“%d,%d“,if(ab) k=a%b;else k=b%a;printf(“%d/n“,k);A) 5 B) 3 C) 2 D) 0(分数:1.00)A.B.C. D.解析:解析 本题考查简单的 ifelse语句。先执行条件 if(ab),显然不成立,然后执行 else语句。18.有以下程序:fun(int x)in
35、t p;if(x=0|x=1) return(3);p=x-fun(x-2);return p;main()printf(“%d/n“,fun(7);执行后的输出结果是A) 7 B) 3 C) 2 D) 0(分数:1.00)A.B.C. D.解析:解析 因为 fun(int x)是一个递归函数,所以主函数中 fun(7)经过 3次递归调用,其过程可以描述为“fun(7)=7-fun(5)=7-(5-fun(3)=7-(5-(3-fun(1)=7-(5-(3-3)=7-5=2”,所以最后的输出结果为 2。19.已有定义:char c;,程序前面已在命令行中包含 ctype.h文件,不能用于判断
36、c中的字符是否为大写字母的表达式是A) isupper(c) B) A=c=ZC) A=clong b;double x,y;则以下选项中正确的表达式是A) a%(int)(x-y) B) a=x!=y; C) (a*y)%b D) y=x+y=x(分数:1.00)A.B. C.D.解析:解析 选项 A)中,如果 x与 y的值相等,则取余时就会有除数为 0的情况。选项 C)中取余的两个数据都应为整数,不能有一方为实型变量,而 a*y的结果为 double型。选项 D)表达式本身就错误,不能给表达式赋值。所以,本题的答案为 B)。22.运行下面的程序时,从键盘输入字母 H,则输出结果是#incl
37、ude stdio.hmain()char ch;ch=getchar();switch(ch)case H:printf(“Hello!/n“);case G:printf(“Good moming!/n“);default:printf(“Bye_Bye!/n“);A) Hello! B) Hello!Good Moring!C) Hello! Good morning!Bye_Bye!D) Hello!Bye_Bye!(分数:1.00)A.B.C. D.解析:解析 本题主要对 switch语句进行了考查。switch 语句的执行过程为:进入 switch结构后,对条件表达式进行运算,然后
38、从上至下寻找与条件表达式值相匹配的 case,以此作为入口,执行 switch结构中后面的各语句,直到遇到 break语句,则跳出 switch语句,如果各 case都不匹配时,则执行default后面的语句。本题中 ch为字符H,所以 caseH条件中的语句将被执行,由于没有 break语句,所以 caseG后的语句也被执行,由于同样没有 break语句,所以 default后的语句也被执行了。23.有以下程序:#include stdio.hmain()char s=“012x4y/08s34f4w2“;int i,n =0;for(i=0;si!=0;i+)if(si=0printf(“
39、%d/n“,n);程序运行后的输出结果是A) 0 B) 3 C) 4 D) 7(分数:1.00)A.B.C. D.解析:解析 本题的程序是要统计字符串 s中数字的个数,其中前 6个字符中有 4个满足选择条件,此时 n为 4,然后遇到字符/0,这个转义字符表示值为 0的空字符 NULL,此时循环条件不满足,因此循环结束。24.有以下程序:main()int a=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf(“%d,%d,%d,%d/n“,a,b,c,d);程序运行后输出结果是A) 0,1,2,0 B) 0,0,0,3 C) 1,1,2,0 D) 编译有错
40、(分数:1.00)A.B.C.D. 解析:解析 if 中的语句组包含两条语句,但是没有花括号,所以编译有错。如果这个时候没有 else,就理解成语句组只有一条语句,编译将是正确的。25.定义如下变量和数组:int i;int x33=1,2,3,4,5,6,7,8,9;则下面语句的输出结果是for(i=0;i3;i+)printf(“%d“,x2-11);A) 9 5 1 B) 7 4 1 C) 7 5 3 D) 9 6 3(分数:1.00)A.B.C. D.解析:解析 本题考查二维数组元素的引用方法。本题通过二维数组的行、列下标来定位元素的位置,从而实现元素的引用。26.在 C语言中,只有在
41、使用时才占用内存单元的变量,其存储类型是A) auto和 register B) extern和 register C) auto_和 static D) static和 register(分数:1.00)A. B.C.D.解析:解析 本题的考查点是变量的存储类型。auto、register、static、extern 分别是定义自动变量、寄存器变量、静态变量、外部变量,其中,自动变量和寄存器变量属于动态存储,调用时临时分配单元;而静态变量和外部变量属于静态存储,在整个程序运行时都存在。27.有以下程序:#include stdio.hint fun(int a,int b)if(b=0) r
42、eturn a;else return( fun(-a,-b);main()printf(“%d/n“,fun(4,2);程序的运行结果是A) 1 B) 2 C) 3 D) 4(分数:1.00)A.B. C.D.解析:解析 本题考查函数的参数传递以及 if条件语句。当变量 b为 0时,将 a的值返回给主调函数,因此 a进行两次自减 1后,将其值返回并输出。28.有以下程序:point( char木 p)p+=3;main()char a4=1,2,3,4,*p=a;point(p);printf(“%c/n“,*p);程序运行后的输出结果是A) 1 B) 2 C) 3 D) 4(分数:1.00
43、)A. B.C.D.解析:解析 在函数 point调用时,系统自动为函数的形参 p分配内存空间,并赋值为实参 p的值。当执行语句“p+=3”;时,系统操作的是形参 p的内存空间,更改形参 p的内容,而实参指针变量 p的值未受影响,即指针变量作为函数参数时,不能更改实参指针变量的指向。故在“printf(“%c/n“,*p)”;语句中,p 仍然指向字符数组的首元素。29.阅读下列程序段,程序的输出结果为#include “stdio.h“#define M(X,Y) (X)*(Y)#define N(X,Y) (X)/(Y)main()int a=5,b=6,c=8,k;k=N(M(a,b),c
44、);printf(“%d/n“,k);A) 3 B) 5 C) 6 D) 8(分数:1.00)A. B.C.D.解析:解析 带参数的宏定义命令行形式如下:#define 宏名(形参表)替换文本。首先进行 M的宏替换,之后再进行 N的宏替换,替换后的表达式为(a)*(b)/(c)。30.设有以下函数:void fun(int n,char*s)则下面对函数指针的定义和赋值均正确的是A) void(*pf)();pf;fun; B) void*pf();pf=fun;C) void*pf();*pf=fun; D) void(*pf)(int,char);pf=(分数:1.00)A. B.C.D.
45、解析:解析 函数指针的定义形式是:数据类型标识符(木指针变量名)()。void(*pf)()定义了一个没有返回值的函数指针 pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数。所以给 pf赋值时,只把函数名 fun赋给 pf即可。所以正确答案为选项 A)。31.有以下程序:#include stdio.hvoid fun(int *s,int n1,int n2)int i,j,t;i=n1;j=n2;while(ij) t=si;si=sj;sj=t;i+;j-;main()int a10=1,2,3,4,5,6,7,8,9,0,k;fun(a,0,3);fun(a,4,9);fun
46、(a,0,9);for(k=0;k10;k+)printf(“%d“,ak);printf(“/n“);程序的运行结果是A) 0987654321 B) 4321098765 C) 5678901234 D) 0987651234(分数:1.00)A.B.C. D.解析:解析 函数 fun(int*s,int n1,int n2)的功能是对数组 s中的元素进行首尾互相调换。所以在主函数中,当 fun(a,0,3)执行完后,数组 a12=4,3,2,1,5,6,7,8,9,0;再执行fun(a,4,9),数组 a12=4,3,2,1,0,9,8,7,6,5;再执行 fun(a,0,9),数组 a
47、12=5,6,7,8,9,0,1,2,3,4。所以正确答案为选项 C)。32.下面结构体的定义语句中,错误的是A) struct ord int x;int y;int z;struct ord a;B) struct ord int x;int y;int z; struct ord a;C) struct ord int x;int y;int z; a;D) struct int x;int y;int z;a;(分数:1.00)A.B. C.D.解析:解析 定义结构体变量有 3种方式:先声明结构体类型,再定义变量名,如选项 A)所示;在声明类型的同时定义变量,如选项 C)所示;直接定义结构体类型变量,如选项 D)所示。33.有以下程序:void f(int *q)int i=0;for(;i5;i+)(*q)+;main()int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+) printf(“%d,“,ai);程序运行后的输出结果是A) 2,2,3,4,5, B) 6,2,3,4,5, C) 1,2,3,4,5, D) 2,3,4,5,6,(分数:1.00)A.B. C.D.