1、二级 C 语言分类模拟题 549 及答案解析(总分:62.50,做题时间:90 分钟)一、选择题(总题数:40,分数:62.50)1.有以下程序: #includestdio.h #includestdlib.h main() int*a,*b,*c; a=b=c=(int*)malloc(sizeof(int); *a=1;*b=2,*c=3; a=b; printf(“%d,%d,%d/n“,*a,*b,*c); 程序运行后的输出结果是_。(分数:1.00)A.1,1,3B.2,2,3C.1,2,3D.3,3,32.C 语言程序中,运算对象必须是整型数的运算符是_。(分数:1.00)A.%
2、B./C.D.*3.开发软件时对提高开发人员工作效率至关重要的是 _(分数:1.00)A.操作系统的资源管理功能B.先进的软件开发工具和环境C.程序人员的数量D.计算机的并行处理能力4.有以下程序 #includestdio.h void fun(int a,int b) int t; t=a;a=b;b=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; for(i=0;i10;i+=2)fun(ci,ci+1); for(i=0;i10;i+)printf(“%d,“,cfi); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.1,2,3
3、,4,5,6,7,8,9,0,B.2,1,4,3,6,5,8,7,0,9,C.0,9,8,7,6,5,4,3,2,1,D.0,1,2,3,4,5,6,7,8,9,5.若要求从键盘读入含有空格字符的字符串,应该使用函数_。(分数:1.00)A.getc ()B.gets()C.getchar()D.scanf()6.以下正确的函数定义是_。(分数:1.00)A.double f1(int x,int y)B.double f1(int x;int y)C.double f1(int x;float y)D.double f1(int x,y)7.设有宏定义: #define IsDIV(k,n)
4、(k%n=1)?1:0) 且变量 m 已正确定义并赋值,则宏调用: IsDIV(m,5) for(i=0; in; i+) max=MIN; if(maxxi)max=xi; return max; 造成错误的原因是_。(分数:1.00)A.定义语句“int i, max;”中 max 未赋初值B.赋值语句“max=MIN;”中,不应给 max 赋 MIN 值C.语句“if(maxxi)max=xi;”中判断条件设置错误D.赋值语句“max=MIN;”放错了位置9.有以下程序: #includestdio.h main() unsigned char a=2, b=4, c=5, d; d=a
5、 | b;d printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:1.00)A.3B.4C.5D.610.下列说法不正确的是_。(分数:2.50)A.调用函数时,实参可以是表达式B.调用函数时,实参与形参可以共用内存单元C.调用函数时,将实参的值复制给形参,使实参变量和形参变量在数值上相等D.调用函数时,实参与形参的类型必须一致11.有以下程序: #include stdio.h main( ) int a5=2,4,6,8,10, *p,* *k; P=a; k= printf(“%“,*(p+ +); printf(“%d/n“,* * k); 程序运行后的输出结果是_。
6、(分数:2.50)A.4 6B.4 4C.2 2D.2 412.若有以下程序: #include stdio.h char f(char x) return x*x+“a“; main( ) char a, b=0; for(a=0; a4; a+ =1) b=f(a); putchar(b); 则程序的输出结果是_。(分数:2.00)A.abcdB.ABEJC.abcjD.ABCD13.若变量 a、b、x、i 都已正确定义并赋值,则以下符合 C 语言语法的表达式是_。(分数:2.50)A.a+=a-=(b=4)*(a=3)B.x%(-3);C.a=a*3=2D.y=float(i)14.下列
7、叙述中错误的是_。(分数:2.50)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句15.有以下程序段: char a3, b=“China“; a=b; printf(“% s“, a); 则_。(分数:1.00)A.运行后将输出 ChinaB.运行后将输出 ChC.运行后将输出 ChiD.编译出错16.有以下程序 #includestdio.h #define PT 3.5; #define S(x)PT*x*x; main() int a=1,b=2;printf(“%4.1f/n“,S(a+b)
8、; 程序运行后的输出结果是_。(分数:1.00)A.31.5B.程序有错无输出结果C.7.5D.14.017.下面语句的输出结果是_。 printf(“%d/n“,strlen(“/t“/065/xff/n“);(分数:1.00)A.14B.8C.5D.输出项不合怯,无正常输出18.以下关于 C 语言的叙述中正确的是_。(分数:2.50)A.预处理命令通常位于函数体外面,但也可以位于函数体中间B.C 语言中的变量定义须在其他语句之前C.在 C 语言程序的书写中,一个语句必须单占一行D.一个 C 语言源程序可以由一个或多个源文件组成,每个源文件可由自己的 main 函数19.以下选项中与 if(
9、a=1) a=b; else a+; 语句功能不同的 switch 语句是_。(分数:1.00)A.switch(a=1)case 0:a=b;break;case 1:a+;B.switch(a)case 1:a=b;break;default:a+;C.switch(a)defauh:a+;break;case 1:a=b;D.switch(a=1)case 1:a=b;break;case 0:a+;20.以下程序的输出结果是_。 main() int a=7, b=8, *p, *q, *r; p= q= r=p; p=q; q=r; printf(“%d, %d, %d, %d/n“
10、, *p, *q, a, b); (分数:2.50)A.8,7,8,7B.7,8,7,8C.8,7,7,8D.7,8,8,721.表达式 a+=a-=a=9 的值是_。(分数:1.00)A.9B.-9C.18D.022.有以下程序: #includestdio.h main() int m=1,n=2,*p= r=p; p=q; q=r; printf(“%d,%d,%d,%d/n“,m,n,*p,*q); 程序的运行结果是_。(分数:2.00)A.2,1,1,2B.1,2,1,2C.2,1,2,1D.1,2,2,123.已知字符“A“的 ASCII 代码值是 65,字符变量 c1 的值是“A
11、“,c2 的值是“D“,则执行语句printf(“%d,%d“,c1,c2-2);的输出结果是_。(分数:1.00)A.65,68B.A,68C.A,BD.65,6624.有以下程序 #include stdio.h void fun(char *t,char *s) while(*t!=0) t+; while(*t+=*s+)!=0); main() char ss10=“acc“,aa10=“bbxxyy“; fun(ss,aa); printf(“%s,%s/n“,ss,aa); 程序的运行结果是_。(分数:1.00)A.accbbxxyy,bbxxyyB.acc,bbxxyyC.ac
12、cxxyy,bbxxyyD.accxyy,bbxxyy25.在数据管理技术发展的三个阶段中,数据共享最好的是_。(分数:2.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段D.三个阶段相同26.下列语句组中正确的是_。(分数:2.00)A.char*s;s=“Olympic“;B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;27.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“, 语句为变量 a1 和 a2 赋数值 10 和 20,为变量 c1 和 c2 赋字符 X 和 Y。以下所示的输入形
13、式中正确的是(注:代表空格字符)_。(分数:3.00)A.10X回车20Y回车B.10X20Y回车C.10X回车20Y回车D.10X20Y回车28.有如下程序: #includestdio.h main() FILE*fp1; fp1=fopen(“f1.txt“, “w“); fprintf(fp1, “abc“); fclose(fp1); 若文本文件 f1.txt 中原有内容为:good,则运行以上程序后文件 f1.txt 中的内容为_。(分数:2.50)A.goodabcB.abcdC.abcD.abcgood29.若变量已正确定义,在 if(W) printf(“%d/n“,k);
14、中,以下不可替代 W 的是_。(分数:2.00)A.a b+cB.ch=getchar()C.a= =b+cD.a+ +30.设有定义语句 int (*f)(int); 则以下叙述正确的是_。(分数:1.00)A.f 是指向函数的指针变量,该函数具有一个 int 类型的形参B.f 是基类型为 int 的指针变量C.f 是指向 int 类型一维数组的指针变量D.f 是函数名,该函数的返回值是基类型为 int 类型的地址31.以下关于 long、int 和 short 类型数据占用内存大小的叙述中正确的是_。(分数:2.50)A.均占 4 个字节B.根据数据的大小来决定所占内存的字节数C.由用户自
15、己定义D.由 C 语言编译系统决定32.若有以下说明和定义: typedef int*INTEGER; INTEGER p, *q; 以下叙述正确的是_。(分数:1.00)A.p 是 int 型变量B.p 是基类型为 int 的指针变量C.q 是基类型为 int 的指针变量D.程序中可用 INTEGER 代替 int 类型名33.标准函数 fgets(s,n,f)的功能是_。(分数:1.00)A.从 f 所指的文件中读取长度为 n 的字符串存入指针 s 所指的内存B.从 f 所指的文件中读取长度不超过 n-1 的字符串存入指针 s 所指的内存C.从 f 所指的文件中读取 n 个字符串存入指针
16、s 所指的内存D.从 f 所指的文件中读取长度为 n-1 的字符串存入指针 s 所指的内存34.有两个关系 R 与 S 如下,由关系 R 和 S 得到关系 T,则所使用的操作为_。 R A A1 B B1 a 0 f 3 a 0 n 2 b 1 f 3 b 1 n 2 a 1 f 4 S A A1 a 0 b 1 T B B1 f 3 n 2 (分数:1.00)A并B.自然连接C除D交35.在面向对象方法中,实现信息隐蔽是依靠_。(分数:1.00)A.对象的继承B.对象的多态C.对象的封装D.对象的分类36.C 语言可执行程序的开始执行点是_。(分数:2.50)A.包含文件中的第一个函数B.程
17、序中第一个函数C.程序中的 main()函数D.程序中第一条语句37.C 语言中,能识别处理的文件为( )。(分数:1.00)A.文本文件和数据块文件B.文本文件和二进制文件C.流文件和文本文件D.数据文件和二进制文件38.以下选项中可用做 C 程序合法实数的是_。(分数:1.00)A.3.0e0.2B1e0CE9D.9.12E39.某个工厂有若干个仓库,每个仓库存放有不同的零件,相同零件可能放在不同的仓库中。则实体仓库和零件间的联系是_。(分数:1.00)A.多对多B.一对多C.多对一D.一对一40.有以下程序 #includestdio.h main() char ch=“uvwxyz“,
18、 *pc; pc=ch; printf(“%c/n“, *(pc+5); 程序运行后的输出结果是_。(分数:2.00)A.0BzC.元素 ch5的地址D.字符 y 的地址二级 C 语言分类模拟题 549 答案解析(总分:62.50,做题时间:90 分钟)一、选择题(总题数:40,分数:62.50)1.有以下程序: #includestdio.h #includestdlib.h main() int*a,*b,*c; a=b=c=(int*)malloc(sizeof(int); *a=1;*b=2,*c=3; a=b; printf(“%d,%d,%d/n“,*a,*b,*c); 程序运行后
19、的输出结果是_。(分数:1.00)A.1,1,3B.2,2,3C.1,2,3D.3,3,3 解析:解析 malloc()函数动态分配一个整型的内存空间,然后把函数返回的地址用(int *)强制类型转换为整型指针,再把它赋给 a、b、c,即让指针变量 a、b、c 都指向刚申请的内存空间。所以只有最后一个赋值语句*c=3 的值保留在了该空间内。又因为 a、b、c 三个指针变量均指向该空间,所以打印该空间内的数值均为 3。所以选择 D 选项。2.C 语言程序中,运算对象必须是整型数的运算符是_。(分数:1.00)A.% B./C.D.*解析:解析 %为取余运算符,要求预算对象为整形数据。答案选择 A
20、。3.开发软件时对提高开发人员工作效率至关重要的是 _(分数:1.00)A.操作系统的资源管理功能B.先进的软件开发工具和环境 C.程序人员的数量D.计算机的并行处理能力解析:4.有以下程序 #includestdio.h void fun(int a,int b) int t; t=a;a=b;b=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; for(i=0;i10;i+=2)fun(ci,ci+1); for(i=0;i10;i+)printf(“%d,“,cfi); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.1,2,3,4,
21、5,6,7,8,9,0, B.2,1,4,3,6,5,8,7,0,9,C.0,9,8,7,6,5,4,3,2,1,D.0,1,2,3,4,5,6,7,8,9,解析:解析 函数调用中发生的数据传递是单向的,即只能把实参的值传递给形参,而不能把形参的值反向地传递给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化,所以数组 c 中的元素的值并没有变化,故选择 A。5.若要求从键盘读入含有空格字符的字符串,应该使用函数_。(分数:1.00)A.getc ()B.gets() C.getchar()D.scanf()解析:解析 函数 getchar()的作用是从终端(或系统隐含指定的输
22、入设备)输入一个字符,且只能接受个字符(回车符也算是个字符),所以 getchar()不能用宋读入字符串。scanf()函数要求按定的格式来输入,若同时输入多个字符串,则以空格或回车分割,所以空格不能被识别为个字符,也就无法读入空格字符。函数 gets()的作用是从终端输入个字符串 (包括空格)至字符数组,直到遇到换行符为止,所以可以用来键盘读入空格字符。6.以下正确的函数定义是_。(分数:1.00)A.double f1(int x,int y) B.double f1(int x;int y)C.double f1(int x;float y)D.double f1(int x,y)解析:
23、7.设有宏定义: #define IsDIV(k,n)(k%n=1)?1:0) 且变量 m 已正确定义并赋值,则宏调用: IsDIV(m,5) for(i=0; in; i+) max=MIN; if(maxxi)max=xi; return max; 造成错误的原因是_。(分数:1.00)A.定义语句“int i, max;”中 max 未赋初值B.赋值语句“max=MIN;”中,不应给 max 赋 MIN 值C.语句“if(maxxi)max=xi;”中判断条件设置错误D.赋值语句“max=MIN;”放错了位置 解析:解析 “max=MIN;”语句应放在 for 循环之前,否则每次循环时都
24、重新赋值,值没有变化。9.有以下程序: #includestdio.h main() unsigned char a=2, b=4, c=5, d; d=a | b;d printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:1.00)A.3B.4 C.5D.6解析:解析 P=a; k= printf(“%“,*(p+ +); printf(“%d/n“,* * k); 程序运行后的输出结果是_。(分数:2.50)A.4 6B.4 4C.2 2D.2 4 解析:解析 本题主要考查指针。首先通过 p=a 使 p 指向数组的第 1 个元素,所以输出 2;在输出 2 以后,由于 p+,
25、即 p 就指向数组的第 2 个元素,* *k 就是取出 p 所指向元素的值,而 p 指向的是数组的第2 个元素,即输出 4:因此 D 选项正确。12.若有以下程序: #include stdio.h char f(char x) return x*x+“a“; main( ) char a, b=0; for(a=0; a4; a+ =1) b=f(a); putchar(b); 则程序的输出结果是_。(分数:2.00)A.abcdB.ABEJC.abcj D.ABCD解析:解析 该题目首先初始化变量 a 和 b,通过 for 循环语句使 a 取值为 0、1、2、3,f 函数的功能是将 a*a
26、+“a“的值返回给 b,即 b 为 a、b、e、j。最后通过字符输出函数 putchar()将 b 输出。因此 C 选项正确。13.若变量 a、b、x、i 都已正确定义并赋值,则以下符合 C 语言语法的表达式是_。(分数:2.50)A.a+=a-=(b=4)*(a=3) B.x%(-3);C.a=a*3=2D.y=float(i)解析:解析 取余运算符%两边都应是正数,赋值语句左边必须是变量,不能是表达式,强制转换语句强制类型应加括号,而非加在变量上。14.下列叙述中错误的是_。(分数:2.50)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序
27、运行 D.赋值表达式末尾加分号就构成赋值语句解析:解析 C 语言规定每条语句和数据定义的最后必须有一个分号,分号是 C 语句的必要组成部分。复合语句也称为“语句块”,其形式如下:语句 1;语句 2;语句 n;,即用一对大括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需要慎用。15.有以下程序段: char a3,
28、b=“China“; a=b; printf(“% s“, a); 则_。(分数:1.00)A.运行后将输出 ChinaB.运行后将输出 ChC.运行后将输出 ChiD.编译出错 解析:16.有以下程序 #includestdio.h #define PT 3.5; #define S(x)PT*x*x; main() int a=1,b=2;printf(“%4.1f/n“,S(a+b); 程序运行后的输出结果是_。(分数:1.00)A.31.5B.程序有错无输出结果 C.7.5D.14.0解析:解析 宏定义不是 C 语句,末尾不需要有分号。因此语句“printf(“%4.1f/n“,S(a
29、+b);”展开后为“printf(“%4.1f/n“,3.5;*a+b*a+b;);”,所以程序会出现语法错误。17.下面语句的输出结果是_。 printf(“%d/n“,strlen(“/t“/065/xff/n“);(分数:1.00)A.14B.8C.5 D.输出项不合怯,无正常输出解析:解析 在 C 语言中,以“/”开头的字符均为转义字符,其中“/”后可跟 13 位八进制数或在“/”后跟字母 x 及 12 位十六进制数,以此来代表一个特定的字符。18.以下关于 C 语言的叙述中正确的是_。(分数:2.50)A.预处理命令通常位于函数体外面,但也可以位于函数体中间 B.C 语言中的变量定义
30、须在其他语句之前C.在 C 语言程序的书写中,一个语句必须单占一行D.一个 C 语言源程序可以由一个或多个源文件组成,每个源文件可由自己的 main 函数解析:解析 源程序中可以有预处理命令(include 命令仅为其中的一种)。C 语言中的变量可以在使用之前的任何位置进行定义。C 语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。一个 C 语言源程序可以由一个或多个源文件组成,但仅可以有一个 main 函数。19.以下选项中与 if(a=1) a=b; else a+; 语句功能不同的 switch 语句是_。(分数:1.00)A.switch(a=1)case
31、 0:a=b;break;case 1:a+; B.switch(a)case 1:a=b;break;default:a+;C.switch(a)defauh:a+;break;case 1:a=b;D.switch(a=1)case 1:a=b;break;case 0:a+;解析:解析 如果 a 等于 1 则执行 a=b;否则 a+;选项 A 不符,所以选择 A。20.以下程序的输出结果是_。 main() int a=7, b=8, *p, *q, *r; p= q= r=p; p=q; q=r; printf(“%d, %d, %d, %d/n“, *p, *q, a, b); (分
32、数:2.50)A.8,7,8,7B.7,8,7,8C.8,7,7,8 D.7,8,8,7解析:解析 在“r=p;p=q;q=r;”三个语句是表示 p 与 q 交换,经过交换后 p 指向 b 的地址,q 指向a 的地址,因此最后输出为 8,7,7,8,故选择 C 选项。21.表达式 a+=a-=a=9 的值是_。(分数:1.00)A.9B.-9C.18D.0 解析:解析 +=、-=、=等符号优先级相同结合性是由右至左,所以选 D。22.有以下程序: #includestdio.h main() int m=1,n=2,*p= r=p; p=q; q=r; printf(“%d,%d,%d,%d/
33、n“,m,n,*p,*q); 程序的运行结果是_。(分数:2.00)A.2,1,1,2B.1,2,1,2C.2,1,2,1D.1,2,2,1 解析:解析 int m=1,n=2,*p=的输出结果是_。(分数:1.00)A.65,68B.A,68C.A,BD.65,66 解析:解析 打印时以%d 整型格式打印输出,所以字符标量 c1 的值打印出来就是 65,从 c2-2 的值打印出来就是 68-2,即 66。所以选择 D 选项。24.有以下程序 #include stdio.h void fun(char *t,char *s) while(*t!=0) t+; while(*t+=*s+)!=
34、0); main() char ss10=“acc“,aa10=“bbxxyy“; fun(ss,aa); printf(“%s,%s/n“,ss,aa); 程序的运行结果是_。(分数:1.00)A.accbbxxyy,bbxxyy B.acc,bbxxyyC.accxxyy,bbxxyyD.accxyy,bbxxyy解析:解析 函数 fun 的功能是将第二个字符串链接到第一个字符串的末尾,第二个字符串不变。所以选择 A。25.在数据管理技术发展的三个阶段中,数据共享最好的是_。(分数:2.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段 D.三个阶段相同解析:解析 数据管理技术发展至
35、今经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,逻辑性强物理性少,使用方便,在各方面的表现都最好,一直占据数据库领域的主导地位,因此本题答案为 C。26.下列语句组中正确的是_。(分数:2.00)A.char*s;s=“Olympic“; B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;解析:解析 若 s 被定义为指针,选项 A 表示将指针 s 指向一个字符串,选项 C 表示为指针 s 赋一个字符串的值,显然选项 A 正确,选项 C 错误;若 s 被定义为数组,且要为该数组
36、直接赋值,则必须在定义时进行,因此选项 B 和选项 D 都错误。27.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“, 语句为变量 a1 和 a2 赋数值 10 和 20,为变量 c1 和 c2 赋字符 X 和 Y。以下所示的输入形式中正确的是(注:代表空格字符)_。(分数:3.00)A.10X回车20Y回车 B.10X20Y回车C.10X回车20Y回车D.10X20Y回车解析:解析 考查的知识点是:数据输入。scanf 函数是 C 语言提供的标准输入函数,作用是在终端设备(或系统隐含指定的输入设备)上输入数据。scanf()函数的一般形式为:scanf(格式控制,输入项表);
37、本题中的格式控制字符串是“%d%c%d%c”,其中%d 表示要输入的是整数;%c 则表示输入的是字符,且各控制符之间无任何分隔字符,故要求输入的数据之间也不能分开(若要求连续输入的都是数据类型,则必须以空格等空白字符分隔每个数据,因为系统不知道应该如何去分隔这一系列数据)。而选项 B、C、D 在10 和 X 之间均插入空格,所以不正确。28.有如下程序: #includestdio.h main() FILE*fp1; fp1=fopen(“f1.txt“, “w“); fprintf(fp1, “abc“); fclose(fp1); 若文本文件 f1.txt 中原有内容为:good,则运行
38、以上程序后文件 f1.txt 中的内容为_。(分数:2.50)A.goodabcB.abcdC.abc D.abcgood解析:解析 当用“w”打开时,已存在一个以该文件名命名的文件,则在打开时将该文件删除,再重新建立一个新文件,因此当输入时原来的内容已被覆盖,所以只有后输入的内容,故选择 C 选项。29.若变量已正确定义,在 if(W) printf(“%d/n“,k); 中,以下不可替代 W 的是_。(分数:2.00)A.a b+c B.ch=getchar()C.a= =b+cD.a+ +解析:解析 选项 A 是非法的表达式,C 语言中没有运算符。30.设有定义语句 int (*f)(i
39、nt); 则以下叙述正确的是_。(分数:1.00)A.f 是指向函数的指针变量,该函数具有一个 int 类型的形参 B.f 是基类型为 int 的指针变量C.f 是指向 int 类型一维数组的指针变量D.f 是函数名,该函数的返回值是基类型为 int 类型的地址解析:解析 f 是指向函数的指针,所以 B、C、D 选项错误,答案选择 A。31.以下关于 long、int 和 short 类型数据占用内存大小的叙述中正确的是_。(分数:2.50)A.均占 4 个字节B.根据数据的大小来决定所占内存的字节数C.由用户自己定义D.由 C 语言编译系统决定 解析:解析 几类整型数所占用的字节数因编译系统
40、或计算机系统的规定不同而有所差异。32.若有以下说明和定义: typedef int*INTEGER; INTEGER p, *q; 以下叙述正确的是_。(分数:1.00)A.p 是 int 型变量B.p 是基类型为 int 的指针变量 C.q 是基类型为 int 的指针变量D.程序中可用 INTEGER 代替 int 类型名解析:33.标准函数 fgets(s,n,f)的功能是_。(分数:1.00)A.从 f 所指的文件中读取长度为 n 的字符串存入指针 s 所指的内存B.从 f 所指的文件中读取长度不超过 n-1 的字符串存入指针 s 所指的内存 C.从 f 所指的文件中读取 n 个字符串
41、存入指针 s 所指的内存D.从 f 所指的文件中读取长度为 n-1 的字符串存入指针 s 所指的内存解析:解析 fgets(s,n,f)函数的功能是从 f 所指文件中读入 n-1 个字符放入以 s 为起始地址的空间内;如果未读满 n-1 个字符时已读到了一个换行符或 EOF,则结束本次读入。因此确切地说,调用 fgets()函数最多只能读入 n-1 个字符。34.有两个关系 R 与 S 如下,由关系 R 和 S 得到关系 T,则所使用的操作为_。 R A A1 B B1 a 0 f 3 a 0 n 2 b 1 f 3 b 1 n 2 a 1 f 4 S A A1 a 0 b 1 T B B1
42、f 3 n 2 (分数:1.00)A并B.自然连接C除 D交解析:解析 常用的扩充运算有交、除、连接及自然连接等。并:RS 是将 S 中的记录追加到 R 后面。交:RS 结果是既属于 R 又属于 S 的记录组成的集合。上述两种操作中,关系 R 与 S 要求有相同的结构,故A、D 选项错误。自然连接:去掉重复属性的等值连接。自然连接要求两个关系中进行比较的是相同的属性,并且进行等值连接,可知 B 选项错误。除运算可以近似地看作笛卡尔积的逆运算。当 ST=R 时,则必有 RS=T,T 称为 R 除以 S 的商。设关系 R 有属性 M1,M2,Mn,关系 S 有属性 Mn-s+1,Mn-s+2,Mn
43、,此时有:RS=M1,M2,Mn-S(R)-M1,M2,Mn-s(M1,M2,Mn-s(R)S)。由 S 中有属性 A 和 A1,T 中属性为 B 和 B1,在 R 元组中找到对应于 s 中两个元组的 T 中元组为 f3 与n2。R 中最后一个元组与 S 中无对应关系,所以在 T 中也不会出现。故 C 选项正确。35.在面向对象方法中,实现信息隐蔽是依靠_。(分数:1.00)A.对象的继承B.对象的多态C.对象的封装 D.对象的分类解析:解析 对象的封装性是指从外部看只能看到对象的外部特征,即只需知道数据的取值范围和可以对该数据施加的操作,而不需要知道数据的具体结构以及实现操作的算法。36.C
44、 语言可执行程序的开始执行点是_。(分数:2.50)A.包含文件中的第一个函数B.程序中第一个函数C.程序中的 main()函数 D.程序中第一条语句解析:解析 每个 C 程序有且只有一个主函数 main(),且程序必须从 main()函数开始执行,并在 main()函数中结束。37.C 语言中,能识别处理的文件为( )。(分数:1.00)A.文本文件和数据块文件B.文本文件和二进制文件 C.流文件和文本文件D.数据文件和二进制文件解析:解析 C 语言中,能识别处理的文件为文本文件和二进制文件,故 B 为所选。38.以下选项中可用做 C 程序合法实数的是_。(分数:1.00)A.3.0e0.2
45、B1e0 CE9D.9.12E解析:解析 A 选项中 e 后面的指数必须为整数,所以错误。C 语言规定,E 之前必须要有数字,所以 C选项错误。E 后面必须要有数字,且必须为整数,所以 D 选项错误。39.某个工厂有若干个仓库,每个仓库存放有不同的零件,相同零件可能放在不同的仓库中。则实体仓库和零件间的联系是_。(分数:1.00)A.多对多 B.一对多C.多对一D.一对一解析:解析 一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。每个仓库存放有不同的零件,相同零件可能放在不同的仓库中,故实体仓库和零件间的联系是多对多,A 选项正确。40.有以下程序 #includestdio.h main() char ch=“uvwxyz“, *pc; pc=ch; printf(“%c/n“, *(pc+5); 程序运行后的输出结果是_。(分数:2.00)A.0Bz C.元素 ch5的地址D.字符 y 的地址解析:解析 main 函数输出字符串第 6 个元素对应的数据,所以答案为 B。