1、国家二级( C语言)机试历年真题试卷汇编 21及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)算法就是程序 ( B)设计算法时只需要考虑数据结构的设计 ( C)设计算法时只需要考虑结果的可靠性 ( D)以上三种说法都不对 2 下列叙述中正确的是 ( )。 ( A)有一个以上根结点的数据结构不一定是非线性结构 ( B)只有一个根结点的数据结构不一定是线性结构 ( C)循环链表是非线性结构 ( D)双向链表是非线性结构 3 下列关于二叉树的叙述中,正确的是 ( )。 ( A)叶子结点总是比度为 2的结点少一个 ( B)叶子结点总是比度为 2的结点多一个 ( C)叶子结点数是度为
2、 2的结点数的两倍 ( D)度为 2的结点数是度为 1的结点数的两倍 4 软件生命周期中的活动不包括 ( )。 ( A)市场调研 ( B)需求分析 ( C)软件测试 ( D)软件维护 5 某系统总体结构图如下图所示: 该系统总体结构图的深度是 ( )。 ( A) 7 ( B) 6 ( C) 3 ( D) 2 6 程序调试的任务是 ( )。 ( A)设计测试用例 ( B)验证程序的正确性 ( C)发现程 序中的错误 ( D)诊断和改正程序中的错误 7 下列关于数据库设计的叙述中,正确的是 ( )。 ( A)在需求分析阶段建立数据字典 ( B)在概念设计阶段建立数据字典 ( C)在逻辑设计阶段建立
3、数据字典 ( D)在物理设计阶段建立数据字典 8 数据库系统的三级模式不包括 ( )。 ( A)概念模式 ( B)内模式 ( C)外模式 ( D)数据模式 9 有三个关系 R、 S和 T如下: 则由关系 R和 S得到关系 T的操作是 ( )。 ( A)自然连接 ( B)交 ( C)投影 ( D)并 10 下列 选项中属于面向对象设计方法主要特征的是 ( )。 ( A)继承 ( B)自顶向下 ( C)模块化 ( D)逐步求精 11 以下叙述中错误的是 ( )。 ( A)算法正确的程序可以有零个输入 ( B)算法正确的程序最终一定会结束 ( C)算法正确的程序可以有零个输出 ( D)算法正确的程序
4、对于相同的输入一定有相同的结果 12 以下叙述中正确的是 ( )。 ( A) C语句必须在一行内写完 ( B) C程序中的每一行只能写一条语句 ( C) C语言程序中的注释必须与语句写在同一行 ( D)简单 C语 句必须以分号结束 13 以下选项中关于 C语言常量的叙述错误的是 ( )。 ( A)经常被使用的变量可以定义成常量 ( B)常量分为整型常量、实型常量、字符常量和字符串常量 ( C)常量可分为数值型常量和非数值型常量 ( D)所谓常量,是指在程序运行过程中,其值不能被改变的量 14 以下选项中,不合法的 C语言用户标识符是 ( )。 ( A) a_b ( B) AaBc ( C) a
5、-b ( D) _1 15 若变量均已正确定义并赋值,以下合法的 C语言赋值语句是 ( )。 ( A) x=y=5; ( B) x=n 2 5; ( C) x+n=i; ( D) x=5=4+1; 16 设有定义: int a; float b; 执行 scanf(“ 2d f“, &a, &b); 语句时,若从键盘输入 876 543 0回车 则 a和 b的值分别是 ( )。 ( A) 87和 6 0 ( B) 876和 543 0 ( C) 87和 543 0 ( D) 76和 543 0 17 有以下定义语句,编译时会出现编译错误的是 ( )。 ( A) char a= x2d; ( B
6、) char a= n; ( C) char a=a; ( D) char a=“aa“; 18 当变量 e的值不为 2、 4、 6时,值也为 ”真 ”的表达式是 ( )。 ( A) (c =2&c =6)&(c 2!=1) ( B) (c=2)|(c=4)|(c=6) ( C) (c =2&c =6)&!(c 2) ( D) (c =2&c =6)|(c!=3)|(c!=5) 19 有以下计算公式 若程序前面已在命令行中包含 math h文件,不能够正确计算上述公式的程序段是 ( )。 ( A) if(x =0)y=sqrt(x); if(x 0)y=sqrt(-x); ( B) if(x
7、=0)y=sqrt(x); else y=sqrt(-x); ( C) y=sqrt(x); if(x 0)y=sqrt(-x); ( D) y=sqrt(x =0?x: -x); 20 有以下程序: #include stdio h main( ) int y=10; while(y-); printt(“y= d n“, y); 程序执行后的输出结果是 ( )。 ( A) y=-1 ( B) y=0 ( C) y=1 ( D) while构 成无限循环 21 有以下程序: #include stdio h main( ) int i; for(i=1; i =40; i+) if(i+-+
8、 5=0) if(+i 8=0)printf(“ d“, i); printf(“ n“); 程序执行后的输出结果是 ( )。 ( A) 5 ( B) 24 ( C) 32 ( D) 40 22 有以下程序: #include stdio h main( ) int s; seanf(“ d“, &s); while(s 0) switch(s) case1: prinff(“ d“, s+5); case2: prinff(“ d“, s+4); break; case3: printf(“ d“, s+3); default: prinff(“ d“, s+1); break; scanf
9、(“ d“, &s); 运行时,若输入 1 2 3 4 5 0回车,则输出结果是 ( )。 ( A) 66656 ( B) 6566456 ( C) 66666 ( D) 6666656 23 以下叙述中错误的是 ( )。 ( A)用户定义的函数中可以 没有 return语句 ( B)用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值 ( C)用户定义的函数中若没有 return语句,则应当定义函数为 void类型 ( D)函数的 return语句中可以没有表达式 24 有以下程序: #include stdio h void fun(char*c, int d) *
10、c=*c+1; d=d+1; prinff(“ c, c, “, *c, d); main( ) char b=a, a=A; fun(&b, a); prinff(“ c, c n“, b, a); 程序运行后的输出结果是 ( )。 ( A) b, B, b, A ( B) b, B, B, A ( C) a, B, B, a ( D) a, B, a, B 25 下列选项中,能正确定义数组的语句是 ( )。 ( A) intnum0 2008; ( B) int num; ( C) int N=2008; int humN; ( D) #define N2008 int numN; 26
11、以下函数实现按每行 8个输出 w所指数组中的数据: #include stdio h void fun(int*w, int n) int i; for(i=0; i n; i+) _ prinff(“ d“, wi); prinff(“ n“); 在横线处应填入的语句是 ( )。 ( A) if(i 8=0)prinff(“ n“); ( B) if(i 8=0)continue; ( C) if(i 8=0)prinff(“ n“); ( D) if(i 8=0)continue; 27 有以下程序: #include stdio h void fun(char*c) while(*c)
12、if(*c =a&*c =z) *c=*c=-(a-A)。 c+; main( ) char s81; gets(s); fun(s); puts(s); 当执行程序时从键盘上输入 Hello Beijing回车,则程序运行后的输出结果是( )。 ( A) hello beijing ( B) Hello Beijing ( C) HELLO BEllING ( D) hELLO Beijing 28 有以下程 序: #include stdio h main( ) int a44=1, 4, 3, 2, 8, 6, 5, 7, 3, 7, 2, 5, 4, 8, 6, 1; inti, j,
13、 k, t; for(i=0; i 4; i+) for(j=0; j 3; j+) for(k=j+1; k 4; k+) if(aji aki) t=aji; aji=aki; aki=t; *按列排序 * for(i=0; i 4; i+) printf(“ d, “, aii); 程序运行后的输出结果是 ( )。 ( A) 1, 6, 2, 1, ( B) 8, 7, 3, 1, ( C) 4, 7, 5, 2, ( D) 1, 6, 5, 7, 29 有以下程序 (strcat函数用于连接两个字符串 ): #include stdio h #include string h main
14、( ) char a20=“ABCD 0EFG 0“, b=“IJK“; strcat(a, b); prinff(“ s n“, a); 程序运行后的输出结果是 ( )。 ( A) IJK ( B) ABCDE 0FG 0UK ( C) ABCDIJK ( D) EFGIJK 30 有以下程序段: char name20; int num; scanf(“name= s Bum= d“, name, &num); 当执行上述程序段,并从键盘输入: name=Lili num=1001回车后, name的值为 ( )。 ( A) name=Lili num=1001 ( B) name=Lil
15、i ( C) Lili num= ( D) Lili 31 有以下程序: #include stdio h main( ) char ch=“uvwxyz“, *pc; pc=ch; printf(“ c n“, *(pc+5); 程序运行后的输出结果是 ( )。 ( A) z ( B) 0 ( C)元素 ch5的地址 ( D)字符 y的地址 32 有以下程序: #include stdio h main( ) char s=“012xy“; int i, n=0; for(i=0; si!=0; i+) if(si =a&si =z) n+; prinff(“ d n“, n); 程序运行后
16、的输出结果是 ( )。 ( A) 0 ( B) 2 ( C) 3 ( D) 5 33 有以下程序: #include stdio h int fun(int n) if(n=1) return1; else return(n+fun(n-1); main( ) int x; seanf(“ d“, &x); x=fun(x); prinff(“ d n“, x); 执行程序时,给变量 x输入 10,程序运行后的输出结果是 ( )。 ( A) 55 ( B) 54 ( C) 65 ( D) 45 34 有以下程序: #include stdio h int f(int m) static int
17、 n=0; n+=m: return n; main( ) int n=0; prinff(“ d, “, f(+n); printf(“ d n“, f(n+); 程序运行后的输出结果是 ( )。 ( A) 3, 3 ( B) 1, 1 ( C) 2, 3 ( D) 1, 2 35 设有以下语句: typedef struct TT char c; int a4; CIN: 则下面叙述中正确的是 ( )。 ( A) CIN是 struet Tr类型的变量 ( B) TT是 struet类型的变量 ( C)可以用 TT定义结构体变量 ( D)可以用 CIN定义结构体变量 36 有以下程序: #
18、include stdio h struet ord int x, y; dt2=1, 2, 3, 4; main( ) struet ord*p=dt: printf(“ d, “, +(p- x); prinff(“ d n“, +(p- y); 程序运行后的输 出结果是 ( )。 ( A) 3, 4 ( B) 4, 1 ( C) 2, 3 ( D) 1, 2 37 有以下程序: #include stdio h #define SUB(a)(a)-(a) main( ) int a=2, b=3, c=5, d; d=SUB(a+b)*c; printf(“ d n“, d); 程序运行
19、后的输出结果是 ( )。 ( A) 0 ( B) -12 ( C) -20 ( D) 10 38 有以下程序: #include stdio h main( ) int a=2, b; b=a 2; prinff(“ d n“, b); 程序运行后的输出结果是 ( )。 ( A) 2 ( B) 4 ( C) 6 ( D) 8 39 下列关于 C语言文件的叙述中正确的是 ( )。 ( A)文件由一系列数据依次排列组成,只能构成二进制文件 ( B)文件由结构序列组成,可以构成二进制文件或文本文件 ( C)文件由数据序列组成,可以构成二进制文件或文本文件 ( D)文件由字符序列组成,其类型只能是文本
20、文件 40 有以下程序: #include stdio h main( ) FILE*fp; int a10=1, 2, 3, 0, 0, i; fp=fopen(“d2 dat“, “wb“); fwrite(a, sizeof(int), 5, fp); fwrite(a, sizeof(int), 5, fp); felose(fp); fp=fopen(“d2 dat“, “rb“); fread(a, sizeof(int), 10, fp); felose(fp); for(i=0; i 10; i+) printf(“ d, “, ai); 程序运行后的输出结果是 ( )。 (
21、A) 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, ( B) 1, 2, 3, 1, 2, 3, 0, 0, 0, 0, ( C) 123, 0, 0, 0, 0, 123, 0, 0, 0, 0, ( D) 1, 2, 3, 0, 0, 1, 2, 3, 0, 0, 二、程序填空题 41 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:从形参 ss所指字符串数组中,删除所有串长超过 k的字符串,函数返回剩余字符串的个数。 ss所指字符串数组中共有 N个字符串,且串长小于 M
22、。 请在程序的下 划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include stdio h #include string h #define N 5 #define M 10 int fun(char(*ss)M, int k) int i, j=0, len; *found* for(i=0; i 【 1】 ; i+) len=strlen(ssi); *found* if(len =【 2】 ) *found* strepy(ssj+, 【 3】 ); return j; main
23、( ) char xNM=“Beijing“, “Shanghai“, “Tianjin“, “Nanjing“, “Wuhan“; int i, f; printf(“ nThe original string n n“); for(i=0; i N; i+) puts(xi); printf(“ n“); f=fun(x, 7); prinff(“The string witch length is less than or equal to7: n“); for(i=0; i f; i+)puts(xi); printf(“ n“); 三、程序修改题 42 使用 VC+2010打开考生文
24、件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:逐个比较 p、 q所指两个字符串对应位置上的字符,并 把 ASCII值大或相等的字符依次存放到 c所指的数组中,形成一个新的字符串。 例如,若主函数中 a字符串为 “aBCDeFgH”, b字符串为 “ABcd”,则 c中的字符串应为 “aBcdeFgH”。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不得增行或删行,也不得更改程序的结构 ! #include stdio h #include string h void fun(ch
25、ar*p, char*q, char*C *found* int k=1; *found* while(*p!=*q) if(*p *q)ck=*q; else ck=*p; if(*p)p+; if(*q)q+; k+; main( ) char a10=“aBCDeFgH“, b10=“ABcd“, c80= 0; fur(a, b, c); printf(“The string a: “); puts(a); prinff(“The string b: “); puts(b); prinff(“The result: “); puts(c); 四、程序设计题 43 使用 VC+2010打
26、开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,规定输入的字符串中只包含字母和 *号。请编写函数 fun,其功能是:除了字符串前导的 *号之外,将串中其他 *号全部删除。在编写函数时,不得使用 C语言提供的字符串函数。 例如,字符串中的内容为: “*A*BC*DEF*G*”,删除后,字符串中的内容应当是: “*ABCDEFG”。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include stdio h void fun(char*a)
27、main( ) char s81; void NONO( ); prinff(“Enter a string: n“); gets(s); fun(s); prinff(“The string after deleted: n“); puts(s); NONO( ); void NONO( ) *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*in, *out; int i; char s81; in=fopen(“in dat“, “r“); out=fopen(“out dat“, “w“); for(i=0; i 10; i+) fseanf(in, “ s“
28、, s); fun(s); fprintf(out, “ s n“, s); felose(in); felose(out); 国家二级( C语言)机试历年真题试卷汇编 21答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 算法是指解题方案的准确而完整的描述,算法不等于程序,也不等于计算方法,所以 A错误。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。 2 【正确答案】 B 【试题解析】 线性结构应满足:有且只有一个根结点与每个结点最多有一个前件,也最多有一令后件,所以 B正确。所以有一个以卜根结点的数据结构一定是非线性结构,所以 A错误。循环链表和双向链表都是
29、线性结构的数据结构。 3 【正确答案】 B 【试题解析】 根据二叉树的基本性质 3:在任 意一棵二叉树中,度为 0的叶子结点总是比度为 2的结点多一个。所以选择 B。 4 【正确答案】 A 【试题解析】 软件生命周期可以分为软件定义、软件开发与软件运行维护三个阶段。主要活动阶段是:可行性研究与计划阶段、需求分析、软件设计、软件实现、软件测试、运行和维护,所以选择 A。 5 【正确答案】 C 【试题解析】 根据总体结构图可以看出该树的深度为 3,比如: XY系统 功能 2功能 2 1,就是最深的度数的一个表现。 6 【正确答案】 D 【试题解析】 程序调试的任务是诊断和改正程序 中的错误。 7
30、【正确答案】 A 【试题解析】 数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实和完善的。 8 【正确答案】 D 【试题解析】 数据库系统的三级模式是概念模式、外模式和内模式,所以选择D。 9 【正确答案】 A 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据 T中元组可以判断 R和 s做的是自然连接操作。 10 【正确答案】 A 【试题解析】 面向对象基本方 法的基本概念有对象、类和实例、消息、继承与多态性,所以选择 A。 11 【正确答案】 C 【试题解析】 算法的特征: 有穷性。一个算法
31、(对任何合法的输入 )在执行有穷步后能够结束,并且在有限的时间内完成。 确定性。算法中的每一步都有确切的含义。 可行性。算法中的操作能够用已经实现的基本运算执行有限次来实现。 输入:一个算法有零个或者多个输入,零个输入就是算法本身确定了初始条件。 输出:一个算法有一个或者多个输出,以反映出数据加工的结果。所以C选项错误。 12 【正确答案】 D 【试题解析】 C语句可以跨行来写,但是必须以分号结束,所以 A选项错误。 C程序中的一行可以有多条语句,所以 B选项错误。 C语言中的注释语句可以与原语句放在一行也可以不放在一行,所以 C选项错误。 13 【正确答案】 A 【试题解析】 C语言中,常量
32、是指在程序运行过程中其值不能被改变的量,变量是指运行过程中其值可以改变的量,二者不能混淆,所以 A选项错误。 14 【正确答案】 C 【试题解析】 C语言规定,变量命名必须符合标识符的命名规则, C选项中包含了非法字符 “-”,所以错误。标识符由字母、数字或下划线组成, 且第一个字符必须是大小写英文字母或者下划线,而不能是数字。 15 【正确答案】 A 【试题解析】 B选项中运算符 “ ”的前后必须为整数, C选项中不能将变量赋给表达式 x+n, D选项中不能将表达式 4+1赋给常量 5。 16 【正确答案】 A 【试题解析】 在格式字符前加入一个整数可以指定输入数据所占的宽度所以赋值时会将
33、87赋给 int型变量 a,把 6 0赋给 int型 float型变量 b。 17 【正确答案】 D 【试题解析】 D选项中将字符串常量 “aa”赋给字符变量 a是错误的。 18 【正确答案】 D 【试题解析】 逻辑或运算符中只要有一个运算量为真结果就是真,当 c =2&c =6条件不成立时 c的值肯定不是 2、 3、 4、 5、 6,所以 c!=3,与 c!=5均成立。所以 D选项的结果一定为真。 19 【正确答案】 C 【试题解析】 本题重点考查的知识点是: sqrt( )函数。 sqrt( )函数的作用是计算平方根,要求输出的参数 x必须大于等于 0。题目公式的要求是无论 x大于等于 0
34、还是小于 0, y的值都为 x绝对值的开方。选项 C中调用了 sqrt(x)函数,而没有判断 x的正负,则 y=sqrt(x)会出错。 20 【正确答案】 A 【试题解析】 y-表示 y使用后再自减 1。所以最后 -次 y的值为 0,条件不成立但仍要执行自减操作, y的值为 -1,跳出循环。打印 y的值 -1。 21 【正确答案】 C 【试题解析】 本题的含义是在 1-40的整数的范围中,只有当 i的值能被 5整除,且 i+2的值能被 8整除时,打印 i的值,满足这个条件的只有 32,选择 C选项。 22 【正确答案】 B 【试题解析】 switch语句的执行流程是:首先计算 switch后面
35、圆括号中表达式的值,然后用此值依次 与各个 cage的常量表达式比较,若圆括号中表达式的值与某个 case后面的常量表达式的值相等,就执行此 case后面的语句,执行后遇 break语句就退出 switch语句;若圆括号中表达式的值与所有 case后面的常量表达式都不等,则执行 default后面的语句。然后退出。所以输入 1时打印 65,输入 2时打印 6,输入 3时打印 64,输入 4时打印 5,输入 5时打印 6。 23 【正确答案】 B 【试题解析】 本题重点考察函数返回值的相关知识,函数的值只能通过 return语句返回主调函数,在函数中允许有多个 return语句,但每次调用只能有
36、一个return语句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为 “空类型 ”,类型说明符为 “void”。因此 B选项正确。 24 【正确答案】 A 【试题解析】 本题重点考察函数的调用,首先要了解字母对应的 ASCII码。例如 A为 65, a为 97。即字母 +1则可得到下一个字母。其次是函数形参和实参的问题,运行过程女口下:在 fun(&b, a)中, *c=a, d=65。 *c+1=b, d+1=66,prinff(“ c, c, “, *cc, d);输出 b, B,因为 指针 c指向地址的值为 b,此时b=*c=b;函数返回执行 pfintf(“ c, c
37、 n“, b, a);输出 b, A,因此 A选项正确。 25 【正确答案】 D 【试题解析】 C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A选项错误, C语言中数组没有此类型的定义方法; B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数; C选项错误, N为变量,不能用来定义数组大小。因此 D选项正确。 26 【正确答案】 C 【试题解析】 要按照每行 8个输出数据的话,横线处语句的功 能应付该为:当 i是 8的倍数时 (即 i 8=0),输出一个换行符。因此 C选项正确。 27 【正确答案】 C 【试题解析】 主程序读取整个字符串存于 s中,调用 f
38、un函数,字符指针 c指向数组 s。函数 fun的功能是把指针 c所指向的字符数组中的所有小写字符转换为大写。 gets函数可以把空格作为字符串的一部分输入,以回车作为输入结束。如果 *c为小写字符,则 *c=*c-32(转大写 )。因此 C选项正确。 28 【正确答案】 D 【试题解析】 首先对二维数组进行赋值操作, a00、 a01、 、 a32、a33的值为 1、 4、 、 6、 1。通过 for语句和 if语句,对二维数组各列元素进行由小到大的排序操作,程序最后通过 for语句输出二维数组对角线上的元素。因此 D选项正确。 29 【正确答案】 C 【试题解析】 字符数组 a中包含两个
39、0,遇到第一个 0时就表示字符串 a结束。字符串处理函数 strcat(字符数组 a,字符数组 b),功能是连接两个字符数组中的字符串,把字符串 b连接到 a的后面,结果放在字符数组 a中。连接时将字符串 a后的 0取消,只在新串最后保留一个 0。 本题相当于将 “ABCD”和“IJK”连接。因此 C选项正确。 30 【正确答案】 D 【试题解析】 在输入格式控制 “name= s num= d”中,普通字符 “name=num=”在输入时要原样输入,而格式控制符 s和 d对应各自的输入项,将输入的数据赋给相应的输入项。本题中输入 “name=Lili num=1001回车 ”后,将字符串Li
40、li赋给字符数组 name,整数 1001赋给变量 num。因此 D选项正确。 31 【正确答案】 A 【试题解析】 语句 pc=ch;使得指针变量指向字符数组 ch的首地址,即指向字符 u。则 pc+5指向的是字符向后移动 5位,指向字符 z。所以输出的 *pc+5的值即为 z。因此 A选项正确。 32 【正确答案】 B 【试题解析】 程序首先给字符数组 s赋值为 “012xy”, for循环语句的功能是遍历字符串,通过 if条件语句对字符串中的小写字母计数,在符串中小写字母为 2个,即 n=2。因此 B选项正确。 33 【正确答案】 A 【试题解析】 该程序考察的是函数的递归调用,在调用一
41、个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用 ,执行结果为1+2+3+8+9+10=55 。因此 A选项正确。 34 【正确答案】 D 【试题解析】 该题目中首先区别 +n和 n+,第一次调用 f函数时,将 +n(n自增 l后再参与运算 )作为参数进行传递,此时变量 m的值为 1,执行 n+=m;后,n=1,将 1返回主函数,并输出。第二次调用 f函数时,将 n+(n参与运算后再自增 1)作为参数进行传递,此时变量 m的值为 1,执行语句 n+=m;,由于 n是静态存储变量,因此 n=2,将 2返回主函数并输出。因此 D选项正确。 35 【正确答案】 D 【试题解 析】
42、本题考查 typedef重新声明一种结构体类型,其中 CIN为结构体类型名,而不是结构体变量,所以 D选项正确。 36 【正确答案】 C 【试题解析】 本题考查结构体数组的相关操作, dt为结构体数组,那么指针 p指向了结构体数组的一个元素,所以 p- x为 1, p- y为 2,结果为 2, 3。选项C正确。 37 【正确答案】 C 【试题解析】 本题考查宏定义,宏定义只是做简单的替换,所以本题中SuB(a+b)*c=(a+b)-(a+b)*c=-20,所以答案为 C选项。 38 【正确答案】 D 【试题解析】 本题考查位运算符,题目中将 a向左移两位,左移两位表示乘以4,所以答案为 8,选
43、项 D正确。 39 【正确答案】 C 【试题解析】 本题考查文件的概念,文件是由数据序列组成,可以构成二进制文件或文本文件,所以答案为 C选项。 40 【正确答案】 D 【试题解析】 本题考查文件操作函数,两次 fwrite后, fp文件中已经写入 1,2, 3, 0, 0, 1, 2, 3, 0, 0然后将文件 fp中的内容重新写入数组 a中,最后输出 a为 1, 2, 3, 0, 0, 1, 2, 3, 0, 0,所以选项 D正确。 二、程 序填空题 41 【正确答案】 (1)N (2)k (3)ssi 【试题解析】 填空 1: for循环语句作用是遍历字符串数组中的每一个字符串,所以循环
44、变量 i的循环条件是 i N。 填空 2:题目要求删除串长度小于 k的字符串,所以 if条件语句的条件表达式是len =k。 填空 3:通过字符串拷贝函数将串长不大于 k的字符串另存,并记录个数。 三、程序修改题 42 【正确答案】 (1)int k=0; (2)while(*p|*q) 【试题解析】 (1)变量 k存放数组 c的下标,因此应初始化为 0。 (2)while循环语句的循环条件是判断两个字符串是否到达结尾。 四、程序设计题 43 【正确答案】 void fun(char*a) int i=0; char*p=a; while(*p&*p=*) ai=*p; i+: p+; while(*p) if(*p!=*) ai=*p; i+; p+; ai= 0; 【试题解析】 函数 fun的功能:除了字符串前导的 *号之外,将串中其他 *号全部删除。解答本题: (1)定义一个临时指针 p,初始指向原串首地址; (2)利用循环语句把字符串前导 *号拷贝到原串; (3)继续移动指针,把串中和串尾的非 *号字符拷贝到原串; (4)为修改后的字符串赋结束字符 0。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1