1、二级 C 语言笔试-435 及答案解析(总分:103.50,做题时间:90 分钟)一、选择题(总题数:40,分数:71.00)1.下面叙述正确的是A) 算法的执行效率与数据的存储结构无关B) 算法的空间复杂度是指算法程序中指令(或语句)的条数C) 算法的有穷性是指算法必须能在执行有限个步骤之后终止D) 以上三种描述都不对(分数:2.00)A.B.C.D.2.若进栈序列为 1,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是 _。A) 1,4,3,2 B) 2,3,4,1 C) 3,1,4,2 D) 3,4,2,1(分数:2.00)A.B.C.D.3.数据的存储结构是指( )。A)
2、数据所占的存储空间 B) 数据的逻辑结构在计算机中的存放形式C) 数据在计算机中的顺序存储方式 D) 存储在计算机外存中的数据(分数:2.00)A.B.C.D.4.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是_。A) 编译程序 B) 操作系统 C) 教务管理系统 D) 汇编程序(分数:2.00)A.B.C.D.5.数据库设计包括两个方面的设计内容,它们是A) 概念设计和逻辑设计 B) 模式设计和内模式设计C) 内模式设计和物理设计 D) 结构特性设计和行为特性设计(分数:2.00)A.B.C.D.6.下列有关数据库的描述,正确的是( )。 A) 数据库设
3、计是指设计数据库管理系统 B) 数据库技术的根本目标是要解决数据共享的问题 C) 数据库是一个独立的系统,不需要操作系统的支持 D) 数据库系统中,数据的物理结构必须与逻辑结构一致(分数:2.00)A.B.C.D.7.以下叙述中正确的是( )。A程序设计的任务就是编写程序代码并上机调试 B程序设计的任务就是确定所用数据结构C程序设计的任务就是确定所用算法 D以上三种说法都不完整(分数:1.00)A.B.C.D.8.在数据库表中,要求指定字段或表达式不出现重复值,应该建立的索引是_。A) 唯一索引 B) 唯一索引和候选索引C) 唯一索引和主索引 D) 主索引和候选索引(分数:2.00)A.B.C
4、.D.9.下面程序输出的结果是_。main()inti=5,j=9,x;x=(ij?i:(j=7);printf(“/n%d,%d“,i,j)A) 5,7 B) 5,5 C) 语法错误 D) 7,5(分数:2.00)A.B.C.D.10.有以下程序段char ch; int k;ch=a; k=12;pnntf(“%c,%d,“,ch,ch,k); printf(“k 二%d/n“,k);已知字符 a 的 ASCII 码值为 97,则执行上述程序段后输出结果是A) 因变量类型与格式描述符的类型不匹配输出无定值B) 输出项与格式描述符个数不符,输出为零值或不定值C) a,97,12k=12D)
5、a,97,k=12(分数:1.00)A.B.C.D.11.若变量已正确说明为 int 类型,要通过语句 scanf(“%d %d %d“,给 a 赋值 3,b 赋值 5,c赋值 8,下面不正确的输入形式是( )。A) 3回车5回车8回车B) 3,5,8回车C) 3回车58回车D) 35回车8回车(分数:1.00)A.B.C.D.12.有以下程序:#includestdio.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) *
6、a*b B) a*bC) a*b* D) ab(分数:1.00)A.B.C.D.13.若变量 a 是 int 类型,并执行了语句:a=A+1.6;则正确的叙述是( )。A) a 的值是字符C B) a 的值是浮点型C) 不允许字符型和浮点型相加 D) a 的值是字符A的 ASCII 码值加上 1(分数:1.00)A.B.C.D.14.设变量 a、b、c、d 和 y 都己正确定义并赋值。若有下列 if 语句if(ab) if(c d) y0; else y1;该语句所表示的含义是( )。(分数:1.00)A.B.C.D.15.设有条件表达式:(EXP)?i+;j-,则以下表达式中(EXP)完全等
7、价的是( )。A(EXP=0) B(EXP!=0)C(EXP=1) D(EXP!=1)(分数:1.00)A.B.C.D.16.有以下程序:#includestdio.hmain()int i,j;for(i=3;i=1;i-)for(j=1;j=2;j+)printf(“%d“,i+j);printf(“/n“);程序运行的结果是_。A) 2 3 4 B) 4 3 2 C) 2 3 D) 4 53 4 5 5 4 3 3 4 3 44 5 2 3(分数:2.00)A.B.C.D.17.有以下程序:#includestdiohmain()int i=1,j=1,k=2;if(j+|k+)doif
8、(i % 2)i+; continue;i+;s+=i;while(i7);printf(“% d/n“, s);执行后的输出结果是_。A) 16 B) 12 C) 28 D) 21(分数:2.00)A.B.C.D.22.以下数组定义中不正确的是_。A) int a23; B) int b3=0,1,2;C) int c100100=0; D) int d3=1,2,1,2,3,1,2,3,4;(分数:2.00)A.B.C.D.23.以下函数定义的类型符是( )。fff(double x)printf(“%f“,x+x);A) 与 x 类型相同 B) void 类型 C) int 类型 D)
9、无法确定(分数:2.00)A.B.C.D.24.下列字符数组初始化语句中,不正确的是( )。A) char c=/goodmorning; B) char c20=“goodmorning“;C) char c=a,b,c,d); D) char c=“goodmorning“);(分数:2.00)A.B.C.D.25.有以下程序:#includestring.hvoid f(char*s,char*t)char k;k=*s; *s=*t; *t=k;s+; t-;if(*s) f(s,t);main( )char str10=“abcdefg“,*p;p=str+strlen(str)/2
10、+1;f(p,p-2);printf(%s/n“,str);程序运行后的输出结果是 _。 A) abcdef B) gfedcba C) gbcdefa D) abedcfg(分数:2.00)A.B.C.D.26.以理程序的输出结果_。main()char st20=“he11/O/t/“;printf(“%d%d/n“,str1en(st),sizeof(st);A) 99 B) 520 C) 1320 D) 2020(分数:2.00)A.B.C.D.27.以下能正确定义二维数组的是_。A) int a3; B) int a3=2*3;C) int a3=; D) int a23=1), 2
11、, 3,4;(分数:2.00)A.B.C.D.28.以下程序运行后的输出结果是 #includestdio.h void f(int *P); main() int a5=1, 2, 3, 4, 5, *r=a; f(r); printf(“%d/n“, *r); void f(int *P) P=p+3; printf(“%d, “, *P); A) 1,4 B) 4,4 C) 3,1 D) 4,1(分数:2.00)A.B.C.D.29.有以下程序#includestdio.hmain()FILE*fp;int k,n,a6=1,2,3,4,5,6;fp=fopen(“d2.dat“,“w“
12、);fprintf(fp,“%d%d%d/n“,a0,a1,a2);fprintf(fp,“%d%d%d/n“,a3,a4,a5);fclose(fp);fp=fopen(“d2.dat“,“r“);fscanf(fp,“%d%d“,char s110=“ABCD“,s210=“EFG“;strcat(s1,s2);while(s2i+!=/0)s2i=s1i;puts(s2);A) ABC B) ABCDEF C) EBCDEFG D) CBD(分数:2.00)A.B.C.D.33.下列程序段的输出结果为( )。#includestdio.hmain()static char a=“lang
13、uage“;char *p;p=a;for(p=a;pa+8;p+=2)putchar(*p);A) language B) lnug C) 有语法错误 D) lang(分数:2.00)A.B.C.D.34.下列选项中不会引起二义性的宏定义是( )。A) #define S(x)x*x B) #define S(x)(x)*(x)C) #define S(x)(x*x) D) #define S(x)(x)*(x)(分数:2.00)A.B.C.D.35.以下有关宏替换的叙述不正确的是( )。 A) 使用宏定义可以嵌套 B) 宏定义语句不进行语法检查 C) 双引号中出现的宏名不替换 D) 宏名必
14、须用大写字母表示(分数:2.00)A.B.C.D.36.有以下程序int a=2;int f(int n)static int a=3;int t=0;if(n%2) static int a=4; t+=a+; else static int a=5; t+=a+; return t+a+;main()int s=a, i;for( i=0; i3; i+) s+=f(i);printf(“%d/n“, s);程序运行后的输出结果是_。(A) 26(B) 28(C) 29(D) 24(分数:2.00)A.B.C.D.37.有以下程序#includestdio.hmain()int a=2,b
15、;b=a2;pfinff(“%d/n“,b);程序运行后的输出结果是( )。A)2 B)4 C)6 D)8(分数:2.00)A.B.C.D.38.执行以下程序后,test.txt 文件的内容是(若文件能正常打开)_。#includemain()FILE *fp;char *s1=“Fortran“,*s2=“Basic“;if(fp=fopen(“test.txt“,“wb“)=NULL)printf(“Cant open test.txt file/n“);exit(1);fwrite(s1,7,1,fp); /*把从地址 s1 开始的 7 个字符写到 fp 所指文件中*/fseek(fp,
16、0L,SEEK_SET); /*文件位置指针移到文件开头*/fwrite(s2,5,1,fp);fclose(fp);(A) Basican(B) BasicFortran(C) Basic(D) FortranBasic(分数:2.00)A.B.C.D.39.以下对结构体类型变量 td 的定义中,错误的是_。A) typedef struct aaint n;float m;AA;AA td;B) struct aaint n;float m;td;struct aa td;C) structint n;floatm;aa;struct aa td;D) structint n;float
17、m;td;(分数:1.00)A.B.C.D.40.在 int (*prt)3;定义中,标识符 prt( )。A) 定义不合法 B) 是一个指针数组名,每个元素都是一个指向整型变量的指针C) 是一个指针,它指向一个具有三个元素的一维数组D) 是一个指向整型变量的指针(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:32.50)41.对长度为 10 的线性表进行冒泡排序,最坏情况下需要比较的次数为 1。(分数:2.00)填空项 1:_42.对长度为 10 的线性表进行冒泡排序,最坏情况下需要比较的次数为 1。(分数:2.00)填空项 1:_43.线性表的存储结构主要分为顺序存储结构
18、和链式存储结构。队列是一种特殊的线性表,循环队列是队列的 1 存储结构。(分数:2.50)填空项 1:_44.深度为 5 的满二叉树中,叶子结点的个数为 1。(分数:2.00)填空项 1:_45.当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行人队运算。这种情况称为U /U。(分数:2.00)填空项 1:_46.已有定义:char c= ;int a=1,b;(此处 c 的初值为空格字符),执行 b=!cif(c=a+b) printf(“yes/n“);else printf(“no/n“);(分数:2.00)填空项 1:_49.若有定义:int a44=l,2,3,4,0
19、,4,6,8,10,1,3,5,7,则初始化后,a22得到的初值是 1。(分数:2.00)填空项 1:_50.下列程序的输出结果是_。#include stdio.hmain()int x=10,y=10,i;for(i=0;x8;y=+iprintf(“%d %d“,x-,y);(分数:2.00)填空项 1:_51.下面程序的功能是输出数组 s 中最大元素的下标,请填空。#include stdio.hmain()int k, p,s=1, -9,7,2, -10,3;for(p =0,k =p; p6; p+)if(spsk)U /Uprintf(“%d/n“, k);(分数:2.00)填
20、空项 1:_52.以下程序运行后输入:3,abcde回车,则输出结果是U /U。# includestring.hmove(char *str,int n)char temp int i;temp=strn-1);for(i=n-1;i0;i-)stri=stri-1;str0=tempmain()char s50;iht n,i,z;scanf(“%d,%s“,z=strlen(s);for(i=1;i=n;i+)move(s,z);printf(“s/n“,s);(分数:2.00)填空项 1:_53.以下程序中函数 fun 的功能是:构成一个如图所示的带头节点的单向链表,在节点的数据域中放
21、入了具有两个字符的字符串。函数 disp 的功能是显示输出该单链表中所有节点中的字符串。请填空完成函数disp。(分数:2.00)填空项 1:_54.下列程序的功能是将字符串 s 中所有的字符 C 删除。请填空。#includestdio.hmain()char s80;int i,j;gets(s);for(i=j=0;si!=“/0“;i+)if(i!=C)_;sj=/0;puts(s);(分数:4.00)填空项 1:_55.以下程序运行后的输出结果是_。main()int a44=1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18;int i=0,j=0,s=
22、0,while(i+4)if(i=2 | i=4) continue ;J=0;do(s+=aij; j+; )while (j4);printf(“%d/n“,s);(分数:2.00)填空项 1:_二级 C 语言笔试-435 答案解析(总分:103.50,做题时间:90 分钟)一、选择题(总题数:40,分数:71.00)1.下面叙述正确的是A) 算法的执行效率与数据的存储结构无关B) 算法的空间复杂度是指算法程序中指令(或语句)的条数C) 算法的有穷性是指算法必须能在执行有限个步骤之后终止D) 以上三种描述都不对(分数:2.00)A.B.C. D.解析:命题目的 本题考查了算法的基本概念。解
23、题要点 算法的执行效率不仅与问题的规模有关,还与数据的存储结构有关;算法的空间复杂度是指执行算法所需要的内存空间;算法的有穷性是指算法必须能在有限的时间内执行完,即算法必须能在执行有限个步骤之后终止。考点链接 时间复杂度。2.若进栈序列为 1,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是 _。A) 1,4,3,2 B) 2,3,4,1 C) 3,1,4,2 D) 3,4,2,1(分数:2.00)A.B.C. D.解析:评析 栈是种后进先出表,选项 C 中,先出栈的是 3,说明此时栈内必然有 1,2,由于 1 先于2 进栈,所以 1 不可能在 2 之前出栈,故选项 C 选种出栈序
24、列是不可能的。3.数据的存储结构是指( )。A) 数据所占的存储空间 B) 数据的逻辑结构在计算机中的存放形式C) 数据在计算机中的顺序存储方式 D) 存储在计算机外存中的数据(分数:2.00)A.B. C.D.解析:解析 数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式,数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。4.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是_。A) 编译程序 B) 操作系统 C) 教务管理系统 D) 汇编程序(分数:2.00)A.B.C. D.解析:知识点 常见软件的种类及含义评析 软件按功
25、能可以分为:应用软件、系统软件、支撑软件(或工具软件)。应用软件是为解决特定领域的应用而开发的软件。例如,事务处理软件,工程与科学计算软件,实时处理软件,嵌入式软件,人工智能软件等应用性质不同的软件。因此选项 C 教务管理系统属于应用软件。系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件,如操作系统,编译程序,汇编程序,网络软件,数据库管理系统等。因此选项 A、B、D 都属于系统软件。5.数据库设计包括两个方面的设计内容,它们是A) 概念设计和逻辑设计 B) 模式设计和内模式设计C) 内模式设计和物理设计 D) 结构特性设计和行为特性设计(分数:2.00)A.
26、B.C.D.解析:解析 数据库设计包括数据库概念设计和数据库逻辑设计两个方面的内容。6.下列有关数据库的描述,正确的是( )。 A) 数据库设计是指设计数据库管理系统 B) 数据库技术的根本目标是要解决数据共享的问题 C) 数据库是一个独立的系统,不需要操作系统的支持 D) 数据库系统中,数据的物理结构必须与逻辑结构一致(分数:2.00)A.B. C.D.解析:解析 数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的致性和完整性;提供数据与
27、应用程序的独立性,从而减少应用程序的开发和维护代价。7.以下叙述中正确的是( )。A程序设计的任务就是编写程序代码并上机调试 B程序设计的任务就是确定所用数据结构C程序设计的任务就是确定所用算法 D以上三种说法都不完整(分数:1.00)A.B.C.D. 解析:解析 程序设计是指设计、编制、凋试程序的方法和过程。内容涉及有关的基本概念、工具、方法以及方法学等。程序设计通常分为问题建模、算法设计、编写代码和编译调试 4 个阶段。8.在数据库表中,要求指定字段或表达式不出现重复值,应该建立的索引是_。A) 唯一索引 B) 唯一索引和候选索引C) 唯一索引和主索引 D) 主索引和候选索引(分数:2.0
28、0)A.B.C.D. 解析:解析 本题考查的知识点是索引概念。主索引表示在指定字段或表达式中不允许出现重复值的索引,这样的索引可以起到主关键字的作用,它强调的“不允许出现重复值”是指建立索引的字段值不允许重复。候选索引和主索引一样要求字段值的唯一性,并决定了处理记录的顺序,在数据库表和自由表中均可为每个表建立多个候选索引。9.下面程序输出的结果是_。main()inti=5,j=9,x;x=(ij?i:(j=7);printf(“/n%d,%d“,i,j)A) 5,7 B) 5,5 C) 语法错误 D) 7,5(分数:2.00)A. B.C.D.解析:评析 条件表达式的般形式为:表达式 1?表
29、达式 2:表达式 3;先求解表达式 1,若为真则求解表达式 2;若表达式 1 的值为假,则求解表达式 3。本题中先判断 ij,不等,执行 j=7;然后执行 x=7。故本题为 A。10.有以下程序段char ch; int k;ch=a; k=12;pnntf(“%c,%d,“,ch,ch,k); printf(“k 二%d/n“,k);已知字符 a 的 ASCII 码值为 97,则执行上述程序段后输出结果是A) 因变量类型与格式描述符的类型不匹配输出无定值B) 输出项与格式描述符个数不符,输出为零值或不定值C) a,97,12k=12D) a,97,k=12(分数:1.00)A.B.C.D.
30、解析:解析 输出格式控制符%c 表示将变量以字符的形式输出;输出格式控制符%d 表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为 a,97;第二个输出语句输出的结果为 k=12。11.若变量已正确说明为 int 类型,要通过语句 scanf(“%d %d %d“,给 a 赋值 3,b 赋值 5,c赋值 8,下面不正确的输入形式是( )。A) 3回车5回车8回车B) 3,5,8回车C) 3回车58回车D) 35回车8回车(分数:1.00)A.B. C.D.解析:解析 本题中,“%d%d%d”表示按整数输入数据,输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车键或
31、Tab 键。选项 B)中不应该使用逗号。12.有以下程序:#includestdio.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*bC) a*b* D) ab(分数:1.00)A.B.C. D.解析:解析 函数 fun 中的第一个 while 循环语句将指针定位在字符串 a 的第一个不是*号的字符上;第二个 whik 循环语句将 a 所指向的字符赋值给 b,直到字符串的结束符为止。调用函数 fun(
32、s,t);,首先将指针指向a,s=“a*b*”,然后将 s 中的字符赋给 t。13.若变量 a 是 int 类型,并执行了语句:a=A+1.6;则正确的叙述是( )。A) a 的值是字符C B) a 的值是浮点型C) 不允许字符型和浮点型相加 D) a 的值是字符A的 ASCII 码值加上 1(分数:1.00)A.B.C.D. 解析:解析 字符“A”要转换成相应的 ASCII 码值,由于运算结果要赋值给 int 型变量,所以对 1.6进行取整运算,最后 a 的值应是 66。14.设变量 a、b、c、d 和 y 都己正确定义并赋值。若有下列 if 语句if(ab) if(c d) y0; els
33、e y1;该语句所表示的含义是( )。(分数:1.00)A.B.C. D.解析:解析 语句 if(cD) y0;else y1;是 if(aB) 语句的一个子句。所以整个 C 语句表达式的意思是:在、 ab 的情况下,如果 cd 则 y0,否则 y1。所以,选项 C) 为正确答案。15.设有条件表达式:(EXP)?i+;j-,则以下表达式中(EXP)完全等价的是( )。A(EXP=0) B(EXP!=0)C(EXP=1) D(EXP!=1)(分数:1.00)A.B. C.D.解析:解析 本题中,当表达式 EXP 不等于 0 时条件成立,执行语句“i+;”,当 EXP 等于 0 时,执行语句“j
34、-;”,等同于条件表达式“(EXP!=0)?i+:j-;”。16.有以下程序:#includestdio.hmain()int i,j;for(i=3;i=1;i-)for(j=1;j=2;j+)printf(“%d“,i+j);printf(“/n“);程序运行的结果是_。A) 2 3 4 B) 4 3 2 C) 2 3 D) 4 53 4 5 5 4 3 3 4 3 44 5 2 3(分数:2.00)A.B.C.D. 解析:解析 本题主要考查 for 循环语句的嵌套。外层主循环执行了 3 次,嵌套的循环语句每轮执行 2次,每次输出 i+j 的值,推出嵌套循环语句后换行。17.有以下程序:#
35、includestdiohmain()int i=1,j=1,k=2;if(j+|k+)doif(i % 2)i+; continue;i+;s+=i;while(i7);printf(“% d/n“, s);执行后的输出结果是_。A) 16 B) 12 C) 28 D) 21(分数:2.00)A. B.C.D.解析:解析 continue 语句的作用是结束本次循环,程序中 while 循环语句的功能是计算 17 之间奇数之和,即 s=1+3+5+7=16。22.以下数组定义中不正确的是_。A) int a23; B) int b3=0,1,2;C) int c100100=0; D) int
36、 d3=1,2,1,2,3,1,2,3,4;(分数:2.00)A.B.C.D. 解析:评析 一维数组的定义方式为:类型说明符数组名常量表达式;选项 A 符合此定义形式,正确;C 语言中多维数组赋初值时可以部分赋值,也可以不指定除第一维以外的其他维的大小,故选项 C 正确;另外,如果对全部数组元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省,所以选项 B 正确,而选项 D 是错误的。23.以下函数定义的类型符是( )。fff(double x)printf(“%f“,x+x);A) 与 x 类型相同 B) void 类型 C) int 类型 D) 无法确定(分数:2.00
37、)A.B.C. D.解析:解析 在函数定义时,由于函数没有说明其类型,所以系统默认一律自动按整型处理。24.下列字符数组初始化语句中,不正确的是( )。A) char c=/goodmorning; B) char c20=“goodmorning“;C) char c=a,b,c,d); D) char c=“goodmorning“);(分数:2.00)A. B.C.D.解析:解析 本题考查两个概念:用单引号括起来的一个字符常量只能存放一个字符;C 语言中没有字符串变量,只能用字符数组来存储字符串。选项 A)中一个单引号内放了若干个字符是错误的;选项 B)和选项 D)选项中将一个字符串赋值
38、给一个字符数组是允许的。25.有以下程序:#includestring.hvoid f(char*s,char*t)char k;k=*s; *s=*t; *t=k;s+; t-;if(*s) f(s,t);main( )char str10=“abcdefg“,*p;p=str+strlen(str)/2+1;f(p,p-2);printf(%s/n“,str);程序运行后的输出结果是 _。 A) abcdef B) gfedcba C) gbcdefa D) abedcfg(分数:2.00)A.B. C.D.解析:解析 p=str+strlen(str)/2+1=str+4,f(p,p-2
39、)的功能是将 p4与 p2互换,p5与 p1互换,p6与 p0互换,最后的结果为 gfedcba。26.以理程序的输出结果_。main()char st20=“he11/O/t/“;printf(“%d%d/n“,str1en(st),sizeof(st);A) 99 B) 520 C) 1320 D) 2020(分数:2.00)A.B. C.D.解析:评析 C 语言中字符串是以/O字符结束的,且 strlen()函数计算的是/O字符前的所有字符的个数。本题中 strlen(st)应为 5。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。sizeof()函数是计算变量或数组
40、的所分配到的内存空间的大小。所以本题的 sizeof(st)为 20。27.以下能正确定义二维数组的是_。A) int a3; B) int a3=2*3;C) int a3=; D) int a23=1), 2, 3,4;(分数:2.00)A.B. C.D.解析:解析 (1)二维数组的定义二维数组的定义方式为:类型说明符数组名常量表达式常量表达式。二维数组在内存中是按行优先的顺序存放的,即先存放第一行的元素,再存放第二行的元素,依次类推。(2)二维数组元素的引用二维数组元素的表示形式为:数组名下标下标,下标可以是整型常量或整型表达式;其范围为:0(常量表达式-1)。(3)二维数组的初始化可以
41、用以下方法对二维数组元素初始化。分行给二维数组赋初值,例如;int a22=(1, 2), 3, 4);这种赋值方式比较直观,把第 1 个大括号内的数据赋给第 1 行的元素,第 2 个大括号内的数据赋给第 2 行的元素,即按行赋值。可以将所有数据写在一个大括号内,按数组排列的顺序对各个元素赋初值。可以对部分元素赋初值,没有初始化的元素值为 0。如果对全部数组元素赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。28.以下程序运行后的输出结果是 #includestdio.h void f(int *P); main() int a5=1, 2, 3, 4, 5, *r=a;
42、 f(r); printf(“%d/n“, *r); void f(int *P) P=p+3; printf(“%d, “, *P); A) 1,4 B) 4,4 C) 3,1 D) 4,1(分数:2.00)A.B.C.D. 解析:解析 本题解题的关键是:实参和形参之间发生的是单向值传递,形参指针 p 的指向发生了改变,但并不影响实参指针 r 的指向。指针 r 指向数组的第一个元素 a0,并把 a0的地址传递给形参 p,执行“p=p+3;“后,指针 p 指向元素 a3,输出*p 的值即输出元素 a3的值 4。由于形参 p 的指向发生改变并不影响实参 r,所以 r 仍然指向 a0,*r 的值即
43、为元素 a0的值 1。所以程序的输出结果为 4,1。29.有以下程序#includestdio.hmain()FILE*fp;int k,n,a6=1,2,3,4,5,6;fp=fopen(“d2.dat“,“w“);fprintf(fp,“%d%d%d/n“,a0,a1,a2);fprintf(fp,“%d%d%d/n“,a3,a4,a5);fclose(fp);fp=fopen(“d2.dat“,“r“);fscanf(fp,“%d%d“,char s110=“ABCD“,s210=“EFG“;strcat(s1,s2);while(s2i+!=/0)s2i=s1i;puts(s2);A)
44、 ABC B) ABCDEF C) EBCDEFG D) CBD(分数:2.00)A.B.C. D.解析:解析 strcat(s1,s2)把 s2 连接到 s1 的后面,s1=ABCDEFG,执行 while(s2i+!=/0)后 i 的值变为 1,往后执行 s2i=s1i时是从把 s1 的第二位给 s2 的第二位开始,把 s1 赋给 s2。33.下列程序段的输出结果为( )。#includestdio.hmain()static char a=“language“;char *p;p=a;for(p=a;pa+8;p+=2)putchar(*p);A) language B) lnug C)
45、 有语法错误 D) lang(分数:2.00)A.B. C.D.解析:解析 本程序首先定义了静态字符数组 a,然后将指针 p 指向数组 a 的首地址。第 1 次 for 循环,p=a,p 指向数组的第 1 个元素,*p 是取指针 p 所指地址的内容,输出 1;第 2 次 for循环,p=p+2,则 p 指向数组的第 3 个元素,*p 是取指针 P 所指地址的内容,输出 n;第 3 次 for 循环,p=p+2,则 p 指向数组的第 5 个元素,*p 是取指针 p 所指地址的内容,输出 u;第 4 次 for 循环,p=p+2,则 p 指向数组的第 7 个元素,*P 是取指针 p 所指地址的内容
46、,输出 g,结束循环。34.下列选项中不会引起二义性的宏定义是( )。A) #define S(x)x*x B) #define S(x)(x)*(x)C) #define S(x)(x*x) D) #define S(x)(x)*(x)(分数:2.00)A.B.C.D. 解析:解析 本题考查带参数的宏的替换。有些参数表达式必须加括号,否则,在实参表达式替换时,会出现错误。35.以下有关宏替换的叙述不正确的是( )。 A) 使用宏定义可以嵌套 B) 宏定义语句不进行语法检查 C) 双引号中出现的宏名不替换 D) 宏名必须用大写字母表示(分数:2.00)A.B.C.D. 解析:解析 本题考查宏替换的规则。宏替换有两类:简单的字符替换和带参数的宏替换。使用宏应注意:宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查:为了区别程序中其他的标示符,宏名的定义通常用大写字母,但不是必须用大写;双引号中出现的宏名不替换;使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。36.有以下程序int a=2;int f(int n)static int a=3;i