[计算机类试卷]国家二级C语言机试(指针)模拟试卷3及答案与解析.doc

上传人:deputyduring120 文档编号:498012 上传时间:2018-11-30 格式:DOC 页数:26 大小:62.50KB
下载 相关 举报
[计算机类试卷]国家二级C语言机试(指针)模拟试卷3及答案与解析.doc_第1页
第1页 / 共26页
[计算机类试卷]国家二级C语言机试(指针)模拟试卷3及答案与解析.doc_第2页
第2页 / 共26页
[计算机类试卷]国家二级C语言机试(指针)模拟试卷3及答案与解析.doc_第3页
第3页 / 共26页
[计算机类试卷]国家二级C语言机试(指针)模拟试卷3及答案与解析.doc_第4页
第4页 / 共26页
[计算机类试卷]国家二级C语言机试(指针)模拟试卷3及答案与解析.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、国家二级 C语言机试(指针)模拟试卷 3及答案与解析 一、选择题 1 以下程序的功能是:通过调用 calc函数,把所求得的两数之和值放入变量 add中,并在主函数中输出。 #include void calc(float x,float y, float *sum) _ = x+y; main() float x,y,add; scanf(“%f%f“, calc(x,y, printf(“x+y=%fn“,add); calc函数 中下划线处应填入的是( )。 ( A) *sum ( B) sum ( C) for(i=s; i=n; i-) *(x+i+3) = *(x+i); main(

2、) int m=0,1,2,3,4,5,6,7,8,9,k; fun(m,10-4,3); for(k=0; k void swap(char *x, char *y) char t; t=*x; *x=*y; *y=t; main() char *s1=“abc“, *s2=“123“; swap(s1,s2); printf(“%s,%sn“,s1,s2); 程序执行后的输出结果是( )。 ( A) 1bc,a23 ( B) abc,123 ( C) 123,abc ( D) 321,cba 7 有以下函数 int fun(char *x, char *y) int n=0; while

3、( (*x=*y) y+; n+; return n ; 函数的功能是( )。 ( A)统计 x和 y所指字符串中最前面连续相同的字符个数 ( B)查找 x和 y所指字符串中是否有 0 ( C)将 y所指字符串赋给 x所指存储空间 ( D)统计 x和 y所指字符串中相同的字符个数 8 下列语句组中,正确的是( )。 ( A) char *s;s=“Olympic“; ( B) char s7;s=“Olympic“; ( C) char *s;s=“Olympic“; ( D) char s7;s=“Olympic“; 9 有以下函数 int fun(char *s) char *t=s; w

4、hile(*t+); return(t-s); 该函数的功能是( )。 ( A)计算 s所指字符串占用内存字节的个数 ( B)比较两个字符串的大小 ( C)计算 s所指字符串的长度 ( D)将 s所指字符串复制到字符串 t中 10 有以下程序(注:字符 a的 ASCII码值为 97) #include main() char *s = “abc“ ; do printf (“%d“, *s%10); +s; while ( *s ); 程序运行后的输出结果是( )。 ( A) 789 ( B) abc ( C) 7890 ( D) 979899 11 设有定义: char *c; 以下选项中能

5、够使 c正确指向一个字符串的是( )。 ( A) char str =“string“; c=str; ( B) scanf(“%s“,c); ( C) c=getchar( ); ( D) *c=“string“; 12 有以下程序( 说明:字母 A的 ASCII码值是 65 ) #include void fun (char *s) while( *s ) if( *s%2 ) printf(“%c“,*s); s+; main() char a =“BYTE“; fun(a); printf(“n“); 程序运行后的输出结果是( )。 ( A) YE ( B) BT ( C) YT (

6、D) BY 13 有以下程序 #include int fun() static int x=1; x+=1; return x; main() int i,s=1; for(i=1;i void fun(char *p) +p; printf(“%sn“,*p); main() char *a = “Morning“, “Afternoon“, “Evening“, “Night“; fun(a); 程序的运行结果是( )。 ( A) Afternoon ( B) fternoon ( C) Morning ( D) orning 16 有以下程序 #include int fun(int

7、x,int n) static int sum=0, i; for(i=0;i main() char ch =“uvwxyz“,*pc; pc=ch; printf(“%cn“, *(pc+5); 程序运行后的输出结果是( )。 ( A) z ( B) 0 ( C)元素 ch5的地址 ( D)字符 y的地址 18 以下选项中正确的语句组是( )。 ( A) char *s; s=“BOOK!“; ( B) char *s; s=“BOOK!“; ( C) char s10; s=“BOOK!“; ( D) char s; s=“BOOK!“; 19 若有以下定义和语句 #include ch

8、ar s110= “abcd!“, *s2=“n123“; printf(“%d %dn“, strlen(s1), strlen(s2); 则输出结果是( )。 ( A) 5 5 ( B) 10 5 ( C) 10 7 ( D) 5 8 20 有以下程序 #include void fun1(char *p) char *q; q=p; while(*q!=0) (*q)+; q+; main() char a=“Program“, *p; p= fun1(p); printf(“%sn“,a); 程序执行后的输出结果是( )。 ( A) Prohsbn ( B) Prphsbn ( C)

9、Progsbn ( D) Program 21 有以下函数 int aaa(char *s) char *t=s; while(*t+); t-; return(t-s); 以下关于 aaa函数功能叙述正确的是( )。 ( A)求字符串 s的长 度 ( B)比较两个串的大小 ( C)将串 s复制到串 t ( D)求字符串 s所占字节数 22 有以下程序 #include void fun( char *a, char *b ) while( *a=* ) a+; while( *b=*a ) b+;a+; main() char *s=“*a*b*“ , t80; fun(s,t); puts

10、(t); 程序的运行结果是( )。 ( A) a*b* ( B) a*b ( C) *a*b ( D) ab 23 下列函数的功能是 void fun(char *a,char *b) while(*b=*a)!=0) a+; b+; ( )。 ( A)将 a所指字符串赋给 b所指空间 ( B)使指针 b指向 a所指字符串 ( C)将 a所指字符串和 b所指字符串进行比较 ( D)检查 a和 b所指字符串中是否有 0 24 设有如下程序段 #include char s20=“Beijing“, *p; p=s; 则执行 p=s;语句后, 以下叙述正确的是( )。 ( A)可以用 *p表示 s

11、0 ( B) s数组中元素的个数和 p所指字符串长度相等 ( C) s和 p都是指针变量 ( D)数组 s中的内容和指针变量 p中的内容相同 25 有以下程序 #include main() char s=“abcde“; s+=2; printf(“%dn“,s0); 执行后的结果是( )。 ( A)程序出错 ( B)输出字符 c的 ASCII码 ( C)输出字符 c ( D)输出字符 a的 ASCII码 26 有以下程序 #include #include void fun(char *s, int n) char *t; int i, j; for (i=0; i strlen(sj)

12、t = si; si = sj; sj = t; main() char *ss=“bcc“,“bbcc“,“xy“, “aaaacc“, “aabcc“; fun(ss, 5); printf(“%s,%sn“, ss0,ss4); 程序的运行结果是( )。 ( A) xy,aaaacc ( B) aaaacc,xy ( C) bcc,aabcc ( D) aabcc,bcc 27 有以下程序 #include void fun(char *t , char *s) while(*t!=0) t+; while( (*t+ = *s+ )!=0 ) ; main() char ss10=“a

13、cc“,aa10=“bbxxyy“; fun(ss, aa); printf(“%s,%sn“, ss,aa); 程序的运行结果是( )。 ( A) accbbxxyy,bbxxyy ( B) acc,bbxxyy ( C) accxxyy,bbxxyy ( D) accxyy,bbxxyy 28 有以下程序 #include #include void fun (char *w, int m ) char s, *p1, *p2; p1=w; p2=w+m-1; while ( p1 int b=2; int fun(int *k ) b=*k+b; return (b); main() i

14、nt a10=1,2,3,4,5,6,7,8, i; for(i=2;i char *a=“you“; char b =“Welcome you to China!“; main() int i, j=0; char *p; for ( i=0; bi !=0; i+ ) if (*a = bi) p=a; for (j=i; *p!=0; j+) if (*p != bj) break; p+; if (*p=0) break; printf(“%s“, 则程序的输出结果是( )。 ( A) you to China! ( B) to China! ( C) me you to China!

15、 ( D) China! 31 若有以下程序 #include char *a=“you“, b =“welcome#you#to#China!“; main() int i,j=0; char *p; for ( i=0; bi!=0; i+ ) if (*a = bi) p= for (j=0; aj!=0; j+) if (aj != *p) break; p+; if (aj=0) break; printf(“%sn“, p); 则程序的输出结果是( )。 ( A) #to#China! ( B) #you#to#China! ( C) me#you#to#China! ( D) #

16、China! 32 以下选项中,能正确进行字符串赋值的是( )。 ( A) char *s = “ABCDE“ ; ( B) char s5 = A, B, C, D, E ; ( C) char s45 = “ABCDE“ ; ( D) char *s ; gets( s ); 33 有以下程序 #include void fun( char *p ) int i; for(i=0; i void fun( char *p, int n ) char b6=“abcde“; int i; for( i=0,p=b; in; i+ ) pi=bi; main() char a6=“ABCDE“

17、; fun(a, 5); printf(“%sn“,a); 程序运行后的输出结果是( )。 ( A) ABCDE ( B) abcde ( C) edcba ( D) EDCBA 国家二级 C语言机试(指针)模拟试卷 3答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 sum为一个指针变量,所以要将 x、 y的和赋值给 sum指向的变量,需要使用取值运算符 *,答案选 A。 【知识模块】 指针 2 【正确答案】 A 【试题解析】 函数 fun()的功能是将数组 x下标为 n+3至 s+3的元素被下标为 n到 s的元素覆盖,所以调用函数 fun(m,10-4,3);结束后数组 m中第

18、7到 10个元素被数组 m的第 4到 7个元素覆盖,数组中的元素为 0,1,2,3,4,5,3,4,5,6,答案选A。 【知识模块】 指针 3 【正确答案】 A 【试题解析】 考查行指针。 (*p)4表示一个能存放四个整型元素首地址的一维数组的首地址。 “p=a;“表示将 p指向数组 a的第一行第一个数据的地址, *(*p+2)与*(*(a+0)+2)等价,表示数组 a第一行第二个元素的值。答案选 A。 【知识模块】 指针 4 【正确答案】 A 【试题解析】 字符数组存放字符串的时候只有在定义数组的时候可以直接把字符串常量赋值给字符数组,其他情况则不可以,但是在非定义情况下把一个字符串常量赋值

19、给一个指针是可以的,所以答案选 A。 【知识模块】 指针 5 【正确答案】 A 【试题解析】 选项 A不能,因为当 *s=?0?时, while(*s)跳出循环,这样字符串结束标志 ?0?没有复制给 *t,造成 *t不完 整。而其他几个选项都可以将 ?0?复制过去,答案选 A。 【知识模块】 指针 6 【正确答案】 A 【试题解析】 语句 “char *s1=“abc“, *s2=“123“;“表示将字符串 “abc“的首地址赋值给字符指针 s1,把字符串 “123“赋值给字符指针 s2,函数 swap()交换的只是两个指针指向的变量的值,即交换的是对应字符串的第一个字符,所以答案选A)。 【

20、知识模块】 指针 7 【正确答案】 A 【试题解析】 循环判定条件 “(*x=*y) “的结束条件为 t到达了 当前字符串的尾部,即 *t=?0? 成立,之后 t+,所以 t-s计算的是该字符串首尾(连带着字符串结束符)之间间隔了几个元素,由于每个字符占用 1个字节,所以也相当于计算了 s所指字符串占用内存字节的个数,答案选 A。 【知识模块】 指针 10 【正确答案】 A 【试题解析】 字符常量与其 ASCII码值一一对应,在计算的时候,可以用字符数据对应的 ASCII码代表该字符参与运算,所以输出语句 “printf (“%d“, *s%10);“输出的结果分别为 97%10、 98%10

21、、 99%10,即答案选 A。 【知识模块】 指针 11 【正确答案】 A 【试题解析】 字符指针必须指向一个地址,只有选项 A)将 c指向了一个存放字符串的字符数组的首地址,选项 B)、 C)则没有给指针变量 c赋予确定的指向,选项 D)不应该使用取值运算符 “*“,所以答案选 A)。 【知识模块】 指针 12 【正确答案】 A 【试题解析】 函数 fun()的功能是输出字符数组中 ASCII码不能被 2整除的字符,答案选 A。 【知识模块】 指针 13 【正确答案】 A 【试题解析】 静态变量在编译时就被分 配存储空间,所占用存储单元直到程序结束时才释放,其初始化只进行一次。所以五次调用

22、fun()函数,计算的结果为s=1+2+3+4+5+6=21,答案选 A。 【知识模块】 指针 14 【正确答案】 A 【试题解析】 将字符串赋值给指针变量时不需要写大括号,选项 B)错误;字符数组存放字符串的时候只有在定义数组的时候可以直接把字符串常量赋值给字符数组,其他情况则不可以,选项 C)、 D)错误;答案选 A)。 【知识模块】 指针 15 【正确答案】 A 【试题解析】 二级指针 p访问字符串数组 时, +p表示指针 p指向下一个字符串的首地址,所以输出的结果为第二个字符串的内容,即答案选 A。 【知识模块】 指针 16 【正确答案】 A 【试题解析】 考查静态变量。静态变量在编译

23、时就被分配存储空间,所占用存储单元直到程序结束时才释放,初始化只进行一次。函数 fun()的功能是在 sum的基础上累加数组 x中所有的数字,函数 fun(a,5)返回值为 15,计算函数 fun(b,4),sum不再初始化,仍为 15,累加后返回值为 45,所以计算得到的最终结果为 60,答案选 A。 【知识模块】 指针 17 【正确答案】 A 【试题解析】 数组名表示该数组的首地址, *pc=ch则将 pc指向了字符数组 ch的第一个元素的地址, *(ch+i)、 chi、 pci和 *(pc+i)四者等价,所以 *(pc+5)表示字符数组 ch的第六个元素,即 z,答案选 A。 【知识模

24、块】 指针 18 【正确答案】 A 【试题解析】 将字符串赋值给指针变量时不需要写大括号,选项 B)错误;字符数组存放字符串的时候只有在定义数组的时候可以直接把字符串常量赋值给字符数组,其他情况则不可以,选项 C)、 D)错误;答案选 A)。 【知识模块】 指针 19 【正确答案】 A 【试题解析】 strlen()函数的功能为计算字符串的实际长度(不包含结束标志),计算机在存储字符串的时候会自动在字符串结束处加上结束标志 ?0?,所以用strlen()函数计算得数组 s1的字符串的长度为 5。字符指针 s2指向的字符串中有两个转义字符, ?n?和 ? ?分别代表一个字符,所以计算得 s2指向

25、的字符串的长度值也为 5,答案选 A。 【知识模块】 指针 20 【正确答案】 A 【试题解析】 函数 fun()的功能是将指针 q指向的字符串从当前 q指向的位置起至字符串结束,每个字符的 ASCII码值自增 1,即字母变为字母表中的下一个字母,调用函数时,语句 “p=“将指针 p指向字符数组 a的第四个元素的地址,即从第四个元素开始,每个元素变为对应字母表的下一个字母,所以答案选A。 【知识模块】 指针 21 【正确答案】 A 【试题解析】 数组名代表该数组的首地址。而函数循环 “while(*t+);“的结束条件为 t到达了当前字符串的尾部,即 *t=?0?成立,之后执行语句 “t+“。

26、循环结束后继续执行语句 “t-“,此时指针 *t=?0?,所以 t-s计算的是该字符串首尾(不连带字符串结束符)之间间隔了几个元素,即计算了 s所指字符串的实际长度,答案选 A。 【知识模块】 指针 22 【正确答案】 A 【试题解析】 函数 fun()中第一个 while循环的作用是查找字符指针 a指向的字符串中第一个不为 *的元素的地址,第二个 while循环是把当前位置起剩余的字符串复制给字符数组 b,所以函数 fun()的功能是将字符指针 a指向的字符串第一个不为 *的字符起至该字符串结束传给指针 b,所以输出结果为选项 A 【知识模块】 指针 23 【正确答案】 A 【试题解析】 w

27、hile循环的循环条件为 “(*b=*a)!= ?0?“即将字符指针 a指向的字符赋值给 *b且该字符不为字符串结束符 ?0?,则将指针 a、 b后移一位,所以该循环的作用是把 a所指的字符串赋值给 b指向的内存空间,答案选 A。 【知识模块】 指针 24 【正确答案】 A 【试题解析】 语句 “p=s;“执行完毕后,即将指针 p指向了数组 s的首地址,所以*p即等价于 s0,选项 A)正确;字符数组存放字符串, C语言编译系统会自动在其 后面添加上结束标识符 0,所以 s数组中元素个数为 8(算上了结束标识符),而 p指向的字符串长度为 7,选项 B)错误;数组名 s为一个指针常量,选项 C

28、)错误;指针变量 p存放的是一个地址值,即为数组 s的首地址,和数组 s中的内容不一致,选项 D)错误;所以答案选 A)。 【知识模块】 指针 25 【正确答案】 A 【试题解析】 数组名为一个指针常量,不能对其进行修改,所以语句 “s+=2;“会出现编译错误,答案选 A。 【知识模块】 指针 26 【正确答案】 A 【试题解析】 函数 fun()的功能是字符串数组 s中的字符串依照其字符串长度从小到大排列,所以被调函数 “fun(ss, 5); “执行完毕后,字符串数组 ss为 “xy“, “bcc“, “bbcc“, “aabcc“, “aaaacc“,所以输出结果为选项 A)。 【知识模

29、块】 指针 27 【正确答案】 A 【试题解析】 函数 fun()中第一个 while循环将指针 t指向了当前字符串的尾部,而第二个 while循环则是将 s指向的字符串赋值给指针 t指向的后续空间,所以函数 fun()的功能是把 s指向的字符串复制到 t指向的字符串尾 部,所以输出结果为选项 A)。 【知识模块】 指针 28 【正确答案】 A 【试题解析】 函数 fun()中 w指向的为一个字符串的首地址,该函数中将 p1指向字符串首地址,而将 p2指向该字符串第 m个元素,然后用 while()循环实现这一段字符串首尾对应元素的互换,所以函数 fun()的功能是把 w指向的字符串从前 m个

30、字符逆序排列,输出的答案选 A。 【知识模块】 指针 29 【正确答案】 A 【试题解析】 函数 fun()的功能是用 b累加传入的参数值 *k,主函数中第一次执行语句 “b=fun(“时,调用函数 fun(“调用函数 fun(“会将该字符串整体输出。所以函数fun()的功能是输出二维指针 p指向的字符串数组的前 4个字符串,答案选 A。 【知识 模块】 指针 34 【正确答案】 A 【试题解析】 strlen(s)函数的功能是计算 s指向字符串的实际长度(不包含结束标志),由于数组的起始下标为 0,所以字符串最后一个字符的下标为 strlen(s)-1,所以填入的内容为 -1,答案选 A。 【知识模块】 指针 35 【正确答案】 A 【试题解析】 函数 fun()的功能是将字符数组 b的地址赋值给指针 p,语句“pi=bi;“其实无用。由于函数的参数传递过程中,形参只是实参的一个副本,若形参和实参为两个地址,则形参指针指向的变化不 能影响到实参指针的指向。所以该函数 fun()调用中,并不能改变实参 a的指向,所以调用函数后, a指向的字符串内容不变,答案选 A。 【知识模块】 指针

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1