1、国家二级( C语言)机试模拟试卷 26及答案与解析 一、选择题 1 下列叙述中错误的是 ( A)数据结构中的数据元素不能是另一数据结构 ( B)数据结构中的数据元素可以是另一数据结构 ( C)空数据结构可以是线性结构也可以是非线性结构 ( D)非空数据结构可以没有根结点 2 为了降低算法的空间复杂度,要求算法尽量采用原地工作 (in place)。所谓原地工作是指 ( A)执行算法时所使用的额外空间固定(即不随算法所处理的数据空间大小的变化而变化) ( B)执行算法时所使用的额外空间随算法所处理的数据空 间大小的变化而变化 ( C)执行算法时不使用额外空间 ( D)执行算法时不使用任何存储空间
2、 3 某循环队列的存储空间为 Q(1:m),初始状态为 front=rear=m。现经过一系列的入队操作和退队操作后, front=m, rear=m-1,则该循环队列中的元素个数为 ( A) m-1 ( B) m ( C) 1 ( D) 0 4 某棵树只有度为 3的结点和叶子结点,其中度为 3的结点有 8个,则该树中的叶子结点数为 ( A) 15 ( B) 16 ( C) 17 ( D)不存在这样的树 5 某二叉树共有 530个结点, 其中度为 2的结点有 250个,则度为 1的结点数为 ( A) 29 ( B) 30 ( C) 249 ( D) 251 6 若某二叉树中的所有结点值均大于其
3、左子树上的所有结点值,且小于右子树上的所有结点值,则该二叉树遍历序列中有序的是 ( A)前序序列 ( B)中序序列 ( C)后序序列 ( D)以上说法均可以 7 将 C语言的整数设为整数类 I,则下面属于类 I实例的是 ( A) -103 ( B) 1.00E+04 ( C) 10.3 ( D) 103 8 下列叙述中正确的是 ( A)软件是程序、数据和文档 ( B)软件是程序和数据 ( C)软件是算法和数据结构 ( D)软件是算法和程序 9 软件生命周期是指 ( A)软件的定义和开发阶段 ( B)软件的需求分析、设计与实现阶段 ( C)软件的开发阶段 ( D)软件产品从提出、实现、使用维护到
4、停止使用退役的过程 10 下列叙述中正确的是 ( A)数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能 ( B)数据库系统能够管理各种类型的文件,而文件系统只能管理程序文件 ( C)数据库系统可以管理庞大的数据量,而文件系统管理的数据量较少 ( D)数据库系 统独立性较差,而文件系统独立性较好 11 关于程序模块化,以下叙述错误的是 ( A)程序模块化可以提高程序运行的效率 ( B)程序模块化可以提高程序编制的效率 ( C)程序模块化可以提高程序代码复用率 ( D)程序模块化可以提高调试程序的效率 12 以下是正确 C语言标识符的是 ( A) 以下程序段的输出结果是 a=11; b=
5、3; c=0; printf(“%dn“,c=(a/b,a%b); ( A) 2 ( B) 0 ( C) 3 ( D) 1 14 以下选项中合法的 C语言常量是 ( A) C-STR ( B) 2014.1 ( C) “1.0 ( D) 2EK 15 设有定义: int x,y,z;,且各变量已赋正整数值,则以下能正确表示代数式 “的 C语言表达式是( )。 ( A) 1.0/x/y/z ( B) 1/x*y*z ( C) 1/(x*y*z) ( D) 1/x/y/(double)z 16 有以下程序 #include stdio.h main() char a,b,c,d; scanf(“%
6、c%c“, c=getchar(); d=getchar(); printf(“%c%c%c%cn“,a,b,c,d); 当执行程序时,按下列方式输入数据(从第 1列开始, CR代表回车,注意:回车也是一个字符) 12 CR 34 CR 则输出结果是 ( A) 12 3 ( B) 12 ( C) 1234 ( D) 12 34 17 有以下程序 #include stdio.h main( ) int a, b; for (a=0; a 3; a+) scanf(“%d“, switch(b) default: printf(“%d,“,b+1); continue; case 1: prin
7、tf(“%d,“, b+1); case 2: printf(“%d,“, b+1); continue; 执行时输入: 1 2 3回车,则输出结果是 ( A) 2,2,3,4,4,4, ( B) 2,3,4, ( C) 2,2,3,4, ( D) 2,3,3,4,5,6, 18 有以下程序 #include stdio.h #include math.h main() double x, y, z; scanf(“%lf%lf“, z= x/ y; while(1) if( fabs(z) 1.0 ) x=y; y=x; z=x/y; else break; printf(“y=%f n“,
8、 y ); 执行时输入: 3.6 2.4回车,则输出结果是 ( A) 2.400000 ( B) 1.5 ( C) 1.6 ( D) 2 19 有以下程序 #include stdio.h main( ) int i; char c; scanf(“%c“, for (i=0; i 5; i+) if (i c) continue; printf(“%d,“, i); 执行时输入: 0回车后,则输出结果是 ( A) 5 ( B) 0,0,0,0,0, ( C) 0,1,2,3,4, ( D) 0,1, 20 以下程序拟实现计算 sum=1+1/2+1/3+ +1/50 。 #include s
9、tdio.h main( ) int i; double sum; sum=1.0; i=1; do i+; sum += 1/i; while( i 50 ); printf(“sum=%lfn“,sum); 程序运行后,不能得到正确结果,出现问题的语句是 ( A) sum += 1/i; ( B) while(i 50); ( C) sum = 1.0; ( D) i+; 21 若有定义语句: double a, *p= 以下叙述中错误的是 ( A)定义语句中的 * 号是一个间址运算符 ( B)定义语句中的 * 号是一个说明符 ( C)定义语句中的 p只能存放 double类型变量的地址
10、( D)定义语句中 *p= for( i=0; i =n; i+ ) r=r*bi; return r; main() int x, a=2,3,4,5,6,7,8,9 ; x=fun( a,3 ); printf(“%dn“, x); 程序运行后的输出结果是 ( A) 24 ( B) 720 ( C) 120 ( D) 6 24 若有语句: int a34, (*p)4; p = a;,则以下选项中叙述错误的是 ( A)系统将开辟一个名为 p的二维数组, p00中的值即为 a00中的值 ( B) p+1代表 a10的地址 ( C) p中将存放 a 数组的首地址 ( D) p+2代表 a 数组
11、最后一行的首地址 25 有以下程序 #include stdio.h void change( char* array, int len ) for (len-; len =0; len-) arraylen += 1; main( ) int i; char array5 = “ABCD“; change(array, 4); for (i=0; i 4; i+) printf(“%c,“, arrayi); 程序运行后的输出结果是 ( A) B,C,D,E, ( B) A,B,C,D, ( C) C,D,E,F, ( D) B,D,F,H, 26 设有以下程序段 float a8 = 1.
12、0, 2.0; int b1 = 0; char c = “A“, “B“; char d = “1“; 以下叙述正确的是 ( A)只有变量 c的定义是合法的 ( B)只有变量 a,b,c的定义是完全合法的 ( C)所有变量的定义都是完全合法的 ( D)只有变量 a, b的定义是完全合法的 27 有以下程序 #include stdio.h main( ) int a4,p,x,i; for( i=3;i 0;i- )ai-1=i*2-1; scanf(“%d“, i=0; while( ai x ) i+; p=i; for( i=3;i p;i- ) ai=ai-1; ap=x; for(
13、 i=0;i 4;i+ ) printf(“%3d“,ai); printf(“n“); 执行时输入: 2回车,则输出结果是 ( A) 1 2 3 4 ( B) 5 4 3 1 ( C) 1 2 3 5 ( D) 3 2 1 4 28 有以下程序 #include stdio.h int fun(int a,int n,int x) int *p=a; while( p a+n if ( p a+n ) return p-a; else return -1; main() int a10=1,2,3,4,5,6,7,8,9,10; printf(“%dn“,fun(a,10,10); 程序运行
14、后的输出结果是 ( A) 9 ( B) -1 ( C) 10 ( D) 0 29 有以下程序 #include stdio.h main( ) char w20, a510=“abcde“, “fghij“, “klmno“, “pqrst“, “uvwxy“; int i; for ( i=0; i 5; i+ ) wi = aii; w5= 0; printf( “%sn“, w ); 程序运行后的输出结果是 ( A) ejoty ( B) afkpu ( C) agmsy ( D) eimqu 30 语句 printf(“%dn“, strlen(“t“n06508AB“);的输出结果是
15、 ( A) 6 ( B) 7 ( C) 8 ( D) 9 31 有以下程序 #include stdio.h #include string.h void fun( char *s, int m1, int m2 ) char t, *p; p=s + m1; s= s+m2; while( s p ) t=*s; *s=*p; *p=t; s+; p-; main() char ss10=“012345678“; int n=6; fun( ss,0,n-1 ); fun( ss,9,n ); fun( ss,0,9 ); printf(“%sn“, ss ); 程序运行后的输出结果是 (
16、A) 012345 ( B) 876543210 ( C) 876543 ( D) 12345678 32 有以下程序 #include stdio.h int m=1,n=2; void sub1(int m,int n) m+=2; n+; void sub2( ) m+; n+=2; main( ) printf(“%d,%d,“,m,n); sub1(4,5); printf(“%d,%d,“,m,n); sub2(); printf(“%d,%dn“,m,n); 程序运行后的输出结果是 ( A) 1,2,1,2,2,4 ( B) 1,2,6,6,7,8 ( C) 1,2,2,4,2,
17、4 ( D) 1,2,6,6,2,4 33 有以下程序 #include ctype.h #include stdio.h long fun( char s ) long n; int sign; for( ; isspace(*s); s+ ); sign=(*s=-)? -1 : 1; if(*s=+ | *s=-) s+; for( n=0 ; isdigit(*s); s+ ) n=10*n+(*s-0); return sign*n; main() char s=“ -26a3“; printf(“%dn “,fun(s); 程序运行后的输出结果是 ( A) -263 ( B) 2
18、( C) 0 ( D) -26 34 设有定义: struct complex int real,unreal; data1=1,8,data2; 则以下赋值语句中错误的是 ( A) data2=(2,6); ( B) data2=data1; ( C) data2.real=data1.real; ( D) data2.real=data1.unreal; 35 有以下程序 #include stdio.h #define S(x) x*x/x main( ) int k = 6, j = 3; printf(“%d,%dn“, S(k+j+2), S(j+k+2); 程序运行后的输出结果是
19、 ( A) 11,11 ( B) 29,29 ( C) 26,29 ( D) 121,121 36 若有定义 typedef int *T10; T a; 则以下选项与 上述定义中 a的类型完全相同的是 ( A) int *a10; ( B) int (*a)10; ( C) int a10; ( D) int (*a10)(); 37 有以下程序 #include stdio.h main( ) FILE *fp; int i, a6=1,2,3,4,5,6,k; fp = fopen( “data.dat“, “w+“ ); for ( i=0; i 6; i+ ) fprintf(fp,
20、 “%dn“, a5-i); rewind(fp); for ( i=0; i 6; i+ ) fscanf(fp, “%d“, printf(“%d,“, k); fclose(fp); 程序运行后的输出结果是 ( A) 6,5,4,3,2,1, ( B) 1,2,3,4,5,6, ( C) 1,1,1,1,1,1 ( D) 6,6,6,6,6,6, 38 有以下程序 #include stdio.h #include stdlib.h void fun( double *p1, double *p2, double *s ) s=( double* )calloc( 1,sizeof(do
21、uble) ); *s = *p1 + *p2; main() double a2=1.1,2.2 , b2= 10.0,20.0 , *q=NULL; fun( a,b,q ); printf(“%5.2f n“, *q ); 程序运行后的结果是 ( A)有运行错误 ( B)输出 11.10 ( C)输出 12.10 ( D)输出 21.10 39 若文件指针 fp已正确指向文件, ch为字符型变量,以下不能把字符输出到文件中的语句是 ( A) fget( fp,ch ); ( B) fputc(ch,fp); ( C) fprintf( fp, “%c“,ch ); ( D) fwrite
22、( 40 有以下程序 #include stdio.h struct ball char color10; int dim; ; main( ) struct ball list2 = “white“, 2, “yellow“, 3; printf(“%s:%dn“, (list+1)- color, list- dim); 程序运行后的输出结果是 ( A) yellow:3 ( B) yellow:2 ( C) white:2 ( D) white:3 二、程序填空题 41 程序通过定义学牛结构体变最,存储学生的学号、姓名和三门课的成绩。函数fun的功 能是:将形参 a中的数据进行修改,把修
23、改后的数据作为函数值返回主函数进行输出。 例如,若传给形参 a的数据中学号、姓名和三门课的成绩依次是: 10001、“ZhangSan”、 95、 80、 88,修改后的数据应为: 10002、 “LiSi”、 96、 81、 89。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h struct student long sno; char name10; float score3; ; /*found*/ 【 1】 f
24、un(struct student a) int i, a sno=10002; /*found*/ strcpy(【 2】 , “Lisi”); /*found*/ for(i=0; i 3; i+)【 3】 +=1; return a; main() struct sLudent s=10001, “ZhangSan”, 95, 80, 88), t; int i; printf(“ n nThe original data: n”); printf(“ nNo: ld Name: s n Scores: ”, s sno, s name); for(i=0; i 3; i+) print
25、f(“ 6 2f”, s scorei); printf(“ n”); t=fun(s); printf(“nThe data after modified: n”); printf(“ nNo: ld Name: s n Scores: ”, t sno, t name); for(i=0; i 3, i+) printf(“ 6 2f”, t Scorei); printf(“ n”); 三、程序修改题 42 下列给定程序中函数 fun的功能是:判断一个褴数是否为素数,若是素数返回1,否则返回 0。 在 main函数中,若 fun返同 1输出 YES,若 fun返回 0输出 NO!。 请改
26、正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include stdio h int fun(int m) int k=2; while(k =m void main() int n; system(“CLS”); printf(“ nPlease enter n: ”); scanf(“ d”, n), if(fun(n)printf(“YES n”); else printf(“NO!n”); 四、程序设计题 43 编写函数 fun,其功能是
27、:将 a、 b中的两个两位正整数合并成一个新的整数放在 c中。合并的方式是:将 a中的十位和个位数依次放在变量 c的百位和个位上,b中的十位和个位数依次放在变量 c的十位和千位上。 例如,当 a=45, b=12,调用该函数后 c=2415。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h void fun(int a, int b, long*c) main() int a, b; long c, printf(“Input a, b;
28、 ”); scanf(“ d d”, a, b); fun(a, b, c); printf(“The result is: ld n”, c), 国家二级( C语言)机试模拟试卷 26答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 数据元素是 一个含义很广泛的概念,它是数据的 “基本单位 “,在计算机中通常作为一个整体进行考虑和处理。数据元素可以是一个数据也可以是被抽象出的具有一定结构数据集合,所以数据结构中的数据元素可以是另一数据结构。 满足有且只有一个根结点并且每一个结点最多有一个前件,也最多有一个后件的非空的数据结构认为是线性结构,不满足条件的结构为非线性结构。 空数据结构
29、可以是线性结构也可以是非线性结构。非空数据结构可以没有根结点,如非性线结构 “图 “就没有根结点。 故选 A选项 2 【正确答案】 A 【试题解析】 算法的空间复杂度是指 执行这个算法所需要的内存空间,包括输入数据所占的存储空间、程序本身所占的存储空间、算法执行过程中所需要的额外空间。 如果额外空间量相对于问题规模(即输入数据所占的存储空间)来说是常数,即额外空间量不随问题规模的变化而变化,则称该算法是原地工作的。 故选 A选项 3 【正确答案】 A 【试题解析】 循环队列长度为 m,由初始状态为 front=rear=m,可知此时循环队列为空。入队运算时,首先队尾指针进 1(即 rear+1
30、),然后在 rear指针指向的位置插入新元素。特别的,当队尾指针 rear=m+1时,置 rear=1。退队运算时,排头指针进 1(即 front+1),然后删除 front指针指向的位置上的元素,当排头指针 front=m+1时,置 front=1。 从排头指针 front指向的后一个位置直到队尾指针 rear指向的位置之间所有的元素均为队列中的元素。如果 rear-front 0,则队列中的元素个数为 rear-front个;如果 rear-front 0,则队列中的元素个数为 rear-front+m 。该题中 m-1 m,即rear-front 0,则该循环队列中的元素个数为( m-1
31、) -m+m=m-1。故选 A选 项 4 【正确答案】 C 【试题解析】 树是一种简单的非线性结构,直观地来看,树是以分支关系定义的层次结构。在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。 由于只有度为 3的结点和叶子结点,可知最后一层都为叶子结点,倒数第二层一部分结点度为 3,一部分为叶子结点,其余的结点的度均为 3,计算度为 3的结点总数 (33-1-1)/2 8 (34-1-1)/2可知,树共有 4层,前两层有度为 3的结点 (33-1-1)/2=4个,第三层有 33=9个结点,其中 4个是度为 3的结点, 5个 是叶子结点,所以该树中的叶子结点数为
32、43+5=17。 故选 C选项 5 【正确答案】 A 【试题解析】 在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为 0的结点总是比度为 2的结点多一个。 二叉树结点总数为 530,度为 2的结点有 250个,则度为 0的结点有 251个,那么度为 1的结点个数为 530-250-251=29。故选 A选项 6 【正确答案】 B 【试题解析】 二叉树遍历可以分为 3种:前序遍历(访问根结点在访问左子树和访问右子树之前) 、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。由于结点值
33、均大于其左子树上的所有结点值,且小于右子树上的所有结点值,那么只要遍历时访问根结点在访问左子树和右子树之间,遍历序列有序,即中序序列有序。故选B选项 7 【正确答案】 A 【试题解析】 整数类实例包括:十进制常量用 0 9表示,不能以 0开头;八进制常量用 0 7表示,必须用 0开头;十六进制常量用 0 9和 A F(a f)表示,必须以 0x或 0X开头。 本题中 B选项是科学计数法表示的浮点数 实例, C选项是浮点数实例, D选项是字符串实例。故选 A选项 8 【正确答案】 A 【试题解析】 计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使
34、用等有关的文档。故选 A选项 9 【正确答案】 D 【试题解析】 通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。选项 A、 B、 C选项均为生命周期的一部分。故选 D选项 10 【正确答案】 A 【试题解析】 数据管理技术的发展经历了 3个阶段:人工管理阶段、文件系统阶段和 数据库系统阶段。三者各自的特点如下表所示。数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能。数据库系统和文件系统的区别不仅在于管理的文件类型与数据量的多少。数据库系统具有高度的物理独立性和一定的逻辑独立性,而文件系统独立性较好。故本题选 A选项 . 11 【正确答案】 A 【试题解
35、析】 模块化程序的优点: 1、易于维护和复用,可以提高程序编制的效率, 2、易于分工合作, 3、易于模块化调试测试。模块化程序的副作用: 1、可能会降低程序运行效率, 2、设计的前期工作需要多花费时间。可知选项 B,C,D正 确 12 【正确答案】 C 【试题解析】 C语言合法标识名的命名规则是 :(1)标识符由字母、数字和下划线组成,( 2)第一个字符不能是数字只能是字母或下划线。选项 A的第一个字符为case 2: printf(“%d,“, b+1); continue;后结束。 2则执行 case 2: printf(“%d,“, b+1); continue;3则执行 default
36、: printf(“%d,“,b+1); continue;得到的结果是 2,2,3,4。故答案为 C选项 18 【正确答案】 A 【试题解析】 题目中程序执行过程中关键语句的结果为: z=1.5, if条件成立,x=2.4, y=2.4, z=1.0,下一次循环 if条件不成立跳出循环,按照格式打印 y值为2.400000。故答案为 A选项 19 【正确答案】 C 【试题解析】 scanf(“%c“, i为整型,因此 1/i是整型类型,当 1/i有小数时,会被截断。因此 1/i结果始终为 0,导致结果出错。,应该改为 sum+=1.0/i。因此答案为 A选项 21 【正确答案】 A 【试题解
37、析】 指针运算符 (通常称为间接引用运算符 :indirection operator或复引用运算符 :dereferencing operator),它返回其操作数 (即一个指针 )所指向的对象的值。定义语句中的 * 号不是一个间址运算符,而是定义指针变量的说明符 ,因此,A项错误, B项正确,原则上说 p可以放 double兼容性的变量地址, C项正确,根据指针的赋值运算,可知 D项正确。故答案为 A选项 22 【正确答案】 A 【试题解析】 函数返回值可以整型、实型、字符型、指针和结构类型,也可以没有返回值。因此选项 A正确,可以返回数组指针 ,因此可知选项 B,C, D错误。故答案为
38、A选项 23 【正确答案】 C 【试题解析】 fun(),求数组指定返回的元素的积。 fun(a,3),求的是数组 a0a3的积。因此结果为 2*3*4*5=120,故答案为 C选项。 24 【正确答案】 A 【试题解析】 (*p)4定义了一个数组指针。 p可以指向类似于 arry4的数组,题设中, p不是一个二维数组,只是可以指向这类二维数组 ,因此选项 A错误。 p+1代表了第一行第一个元素的地址, p=a指向数组 a的首地址,则 B、 C选项正确,同理可知选项 D也正确。故答案为 A选项 25 【正确答案】 A 【试题解析】 函数 change()的作用将从数组尾部将数组内的元素值加 1
39、。数组的初始值为 ABCD,因此经 change()后,得到的值为 BCDE。故答案为 A选项 26 【正确答案】 D 【试题解析】 float a8=1.0, 2.0;定义了一个包含 8个 float型元素的数组,并初始化了数组的前 2项,其他项是随机数。 int b1 = 0,定义了只有一个 int型元素的数组,并初始化为 0。 char c = “A“, “B“;定义一个 char型数组,大小有初始化元素决定,但初始化值是字符串,类型不兼容,编译出错。 char d = “1“;定义一个 char型变量,但是初始化赋值字符串,类型不兼容,编译出错。因此只有a, b定义和初始化正确。故答案
40、为 D选项 27 【正确答案】 C 【试题解析】 第一个 for循环初始化数组 a,分别为 1,3,5,随机数,形成了基本有序的序列,再将输入的数字插入到数组 a,使他们形成有序序列。因此可以分析出,打印的结果为 1,2,3,5。故答案为 C选项 28 【正确答案】 A 【试题解析】 while( p a+n p=a;n=10,x=10;while循环条件成立,直到 p=a+9,结束循环,执行下一条语句, if条件成立,返回 p-a,此时执行p-a=a+9-a=9;因此,输出 9。 故答案为 A选项 29 【正确答案】 C 【试题解析】 数组 a是二维数组,数组 w存放二维数组 a行列值相同位
41、置的元素,由 a510可得 w0w4的元素分别是 agmsy,因此打印结果为 agmsy。故答案为 C选项 30 【正确答案】 A 【试题解析】 字符串 “t“n06508AB“中共有 13个字符,而 strlen()函数从字符串 第一个字符开始扫描,直到碰到第一个结束符 0为止,然后返回计数器值 (长度不包含 “0“)。故输出结果为 6。答案为 A选项 31 【正确答案】 A 【试题解析】 fun(*ss, m1, m2 )的作用是,如果 m1 m2交换数组元素 ssm1,ssm2。因此, fun(ss,0,5)后 ss的 0,1,2,3,4,5,6,7,8,0。 fun(ss,9,6) 后
42、 ss的 0,1,2,3,4,5, 0,8,7,6。 fun(ss,0,9)后 ss的 0,1,2,3,4,5,0,8,7,6。因此打印结果 012345。故答案为 A选项 32 【正确答案】 A 【试题解析】 全局变量与函数体内局部变量同名时,局部变量会覆盖全局变量,因此在 sub1()函数内,全局变量 m, n是不可见的,在 sub1()对 m,n操作的是局部变量,对全局变量不产生影响。但在 sub2()函数内,由于没有和全局变量变量重名,因此在此函数内, m,n是可见的。因此,第一个 printf()打印的是全局变量 m, n,故打印的是 1, 2,第二个 printf(),调用 sub
43、1(),没有修改全局变量 m,n.故打印的是 1, 2,第三个 printf(),之前 调用了 sub2(),修改了全局变量 m, n。因此,打印的是 2, 4,故答案为 A选项。 33 【正确答案】 D 【试题解析】 isspace( )检查参数 c是否为空格字符,也就是判断是否为空格( )、水平定位字符 ( t )、归位键 ( r )、换行 ( n )、垂直定位字符 (v )或翻页 ( f )的情况。若参数 c为空格字符,则返回 TRUE,否则返回NULL(0)。 Isdigit( )函数检查参数 c是否为阿拉伯数字 0到 9。返回值若参数 c为阿拉伯数字,则返回 TRUE,否则返回 NU
44、LL(0)。 fun()函数的第一个 for循环判断字符串是否负号。第二个 for循环获取符号后面的数字字符,并将它们转化为整数。遇到了非数字的字符跳出,最后返回数组的结果。因此,可知首先获取负号,紧接着获取数值 26,遇到了字符 a,跳出返回 -26,因此打印的结果是 -26。故答案为 D选项 34 【正确答案】 A 【试题解析】 结构体变量建议在定义的时候进行初始化。结构体常见的几种初始化方法如下: (1)struct a a1 = .b = 1, .c = 2 ; (2)struct a a1 = b:1, c:2 ; (3)struct a a1 = 1, 2; 计算机内核喜欢用第一种
45、,使用第一种和第二种时,成员初始化顺序可变。因此,可以判断选项 A错误。 35 【正确答案】 B 【试题解析】 #define命令是 C语言中的一个宏定义命令,标识符一般使用大写,为了区分其他标识符 ,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。宏定义不进行其他操作,仅仅只是替换标识符。 S(k+j+2)=k+j+2*k+j+2/k+j+2,经计算可得 29,S(j+k+2)=j+k+2*k+j+2/j+k+2,计算可得 29。因此输出为 29,29。答案为 B选项。 36 【正确答案】 A 【试题解析】 C语言允许由用户自己定义类型说明符,也就是说允许
46、由用户为数据类型取 “别名 “。类型定义符 typedef即可用来完成此功能,可以完全代替原来的类型说明符。因此,变量 a的类型为 int *a10。 typedef int *T10,由于 运算符优先级高于 *,可以看成 typedef int10 *T,替换 T可得 int10 *a= int *a10,因此,答案为 A选项 37 【正确答案】 A 【试题解析】 fopen( “data.dat“, “w+“ ); w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 rewind(fp);使文件 fp的位置指针指向文件开始。 fprintf(f
47、p,“%dn“, a5-i);将 ai输出到 fp指向的文件中。 fscanf(fp, “%d“, 将 fp读入到变量 k中,第一个 for循环将数组中元素倒着输入到 fp指向的文件中, rewind()则指向文件开始,因此打印是数组 a的倒叙。故打印为 6,5,4,3,2,1。答案为 A选项 38 【正确答案】 A 【试题解析】 calloc(n,sizeof(type)在内存的动态存储区中分配 n个长度为 size的连续空间,函数返回一个指向分配起始地址的指针,如果分配不成功,返回NULL。 s在函数 fun()申请了内存空间,但是在调用 fun()函数后会释放掉,因此,最后 q指向 NULL,因此运行是打印出错。答案为 A选项。 39 【正确答案】 A 【试题解析】 fgetc()从文件读入一个字符到指定变量。 fputc()将指定字 符写入 fp文件中, fprintf(),fwrite()均是写入文件操作函数。因此选项 B,C,D错误。答案为A选项 40 【正确答案】 B 【试题解析】 结构体定义时初始化, li
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1