[计算机类试卷]国家二级C语言机试(选择题)模拟试卷69及答案与解析.doc

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

1、国家二级 C语言机试(选择题)模拟试卷 69及答案与解析 一、选择题 1 有以下程序: #include void f(int*P, int*q); main( ) int m=1, n=2, *r=&m; f(r, &n); printf(“ d, d“, m, n); void f(int*P, int*q) P=P+1; *q=*q+1: 程序运行后的输出结果是 ( )。 ( A) 2, 3 ( B) 1, 3 ( C) 1, 4 ( D) 1, 2 2 设已有定义: float x;,则以下对指针变量 P进行定义且赋初值的语句中正确的是 ( )。 ( A) int *P=(float)

2、x; ( B) float *P=&x; ( C) float P=&x; ( D) float *P=1024; 3 若有定义语句: double a, *P=&a; 以下叙述中错误的是 ( )。 ( A)定义语句中的 *号是一个间址运算符 ( B)定义语句中的 *号是一个说明符 ( C)定义语句 中的 P只能存放 double类型变量的地址 ( D)定义语句中, *P=&a把变量 a的地址作为初值赋给指针变量 P 4 有以下程序: #include main( ) int a=1, b=3, c=5; int *p1=&a, *p2=&b, *P=&c; *P=*p1*(*p2); pri

3、ntf(“ d n“, c); 执行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 5 以下叙 述中正确的是 ( )。 ( A) int*p1; int*p2; int*p3;都是合法的定义指针变量的语句 ( B)指针变量只能通过求地址运算符 (&)来获得地址值 ( C)语句 P=NULL;与 P= 0;是等价的语句 ( D)语句 P=NULL;执行后,指针 P指向地址为 0的存储单元 6 以下叙述中正确的是 ( )。 ( A)即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同 ( B)如果企图通过一个空指针来访问一个存储单元,将会得到一

4、个出错信息 ( C)设变量 p是 个指针变量,则 语句 p=0;是非法的,应该使用 p=NULL ( D)指针变量之间不能用关系运算符进行比较 7 有以下程序: #include main( ) int n, *p=NULL; *P= n: printf(“Input n: “); scanf(“ d“, &p); printf(“output n: “); printf(“ d n“,p); 该程序试图通过指针 P为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是 ( )。 ( A) int n, *P: NULL; ( B) *P=&n; ( C) scartf(“ d“, &p

5、) ( D) printf(“ d n“, P); 8 若有定义语句: double x, y, *px, *Py;执行了 px= x; Py=&y;之后,正确的输入语句是 ( )。 ( A) scanf(“ If le“, px, PY); ( B) seanf(“ f f“ t&x, &y); ( C) scanf(“ f f“, x, y); ( D) scanf(“ If If“, x, y); 9 以下程序段完全正确的是 ( )。 ( A) int *p; seanf(“ d“, &p); ( B) int *p; scanf(“ d“, P); ( C) int k, *P=&k;

6、 scanf(“ d“, P); ( D) int k, *p; *P=&k; scanf(“ d“, P); 10 若有定义语句: int a23, *P3; 则以下语句中正确的是 ( )。 ( A) P=a; ( B) p0=a; ( C) p0=&a12; ( D) p1=&a; 11 若有以下程序: #include int *f(int *s, int *t) int *k; if(*s *t) k=s; s=t; t=k; retum s; main( ) int i=3, j=5, *P=&i, *q=&j, *r; r=f(P, q); printf(“ d, d, d, d,

7、 d n“, i, j, *P, *q, *r); 则程序的输出结果是 ( )。 ( A) 3, 5, 5, 3, 5 ( B) 3, 5, 3, 5, 5 ( C) 5, 3, 5, 3, 5 ( D) 5, 3, 3, 5, 5 12 有以下程序: #include inelude int fun(int n) int *P; p ram=(int*)malloe(sizeof(int); *p=n; return *p; main( ) int a; a=fun(10); printf(“ d n“, a+fun(10); 程序的运行结果是 ( )。 ( A) 0 ( B) 10 ( C

8、) 20 ( D)出错 13 有以下程序: include void fun(int a, int n) int i, t; for(i=0; i #defilie N 4 void fun(int aN, int b) int i; for(i=0; i #inelude void fun(int*p1, int*p2, int*s) s=(int*)malloc(sizeof(int); *s=*p1+*(p2+); main( ) int at2=1, 2, b2=10, 20, *s=a; fun(a, b, s); printf(“ d n“, *s); 程序运行后的输出结果是 (

9、)。 ( A) 11 ( B) 10 ( C) 1 ( D) 2 16 有以下程序: #include #include main( ) char strzo=“One*World“, “One*Dream!“, *P=str1; printf(“ d, “, strlen(P); printf(“ s n“, P); 程序运行后的输出结果是 ( )。 ( A) 10, One*Dream! ( B) 9, One*Dream! ( C) 9, One*Wodd ( D) 10, One*World 17 若有定义: int w35; 则以下不能正确表示该数组元素的表达式是 ( )。 ( A)

10、 *(&w00+1) ( B) *(*w+3) ( C) *(*(w+1) ( D) *(w+1)4 18 有以下程序: #include void fun(char *p) +P; printf(“ s n“, *p); main( ) char*a=“Morning“, “Afternoon“, “Evening“, “Night“; fun(a); 程序的运行结果是 ( )。 ( A) Afternoon ( B) fternoon ( C) Morning ( D) orning 19 有以下程序,程序中库函数 islower(ch)用以判断 ch中的字母是否为小写字母: #inclu

11、de #include void fun(char*p) int i=0; while(pi) if(Pi=&islower(pi-1) pi-1=Pi-1-a+A; i+; main( ) char sl100=“ab cd EFG!“; fun(s1); printf(“ s n“, s1); 程序运行后的输出结果是 ( )。 ( A) ab cd EFg! ( B) Ab Cd EFg! ( C) ab cd EFG! ( D) aB eD EFG! 20 有以下程序: #include void fun(char *p) int i; for(i=0; i 4; i+)printf(“

12、 s“, Pi); main( ) char*s6=“ABCD“, “EFGH“, “IJKL“, “MNOP“, “QRST“, “UVWX“; fun(s); printf(“ n“); 程序运行后的输出结果是 ( )。 ( A) ABCDEFGHIJKL ( B) ABCD ( C) AEIM ( D) ABCDEFGHIJKLMNOP 21 下列语句组中,正确的是 ( )。 ( A) char*s; s=“Olympic“; ( B) char s7; s=“Olympic“; ( C) char*s; s=“Olympic“; ( D) char s 7; s=“Olympic“;

13、22 有以下程序 (注:字符 a的 ASCII码值为 97): #include main() char *s=“abc“; do pfintf(“ d“, *s 10); +8; while(*s); 程序运行后的输出结果是 ( )。 ( A) 789 ( B) abe ( C) 7890 ( D) 979899 23 设有定义: char*c; 以下选项中能够使 c正确指向一个字符串的是 ( )。 ( A) char six=“string“; c=str; ( B) scanf(“ s“, c); ( C) c=getchar( ); ( D) *c=“string“; 24 设有定义语

14、句: int(*f)(int); 则以下叙述正确的是 ( )。 ( A) f是基类型为 int的指针变量 ( B) f是指向函数的指针变量,该函数具有一个 int类型的形参 ( C) f是指向 int类型一维数组的指针变量 ( D) f是函数名,该函数的返回值是基类型为 int类型的地址 25 有以下程序: #include int add(int a, int b)return(a+b); main() int k, (*f)(), a=5, b=10; f=add; 则以下函数调用语句错误的是 ( )。 ( A) k=f(a, b); ( B) k=add(a, b); ( C) k=(*

15、f)(a, b); ( D) k=*f(a, b); 26 有以下程序: #include include main( ) int *a, *b, *c; a=b=c=(in*)malloc(sizeof(int); *a=1; *b=2, *c=3; a=b; pfintf(“ d, d, d n“, *a, *b, *c); 程序运行后的输出结果是 ( )。 ( A) 1, l, 3 ( B) 2, 2, 3 ( C) 1, 2, 3 ( D) 3, 3, 3 27 以下语句中存在语法错误的是 ( )。 ( A) char ss620; 881=“right?“; ( B) char ss

16、()20=“right?“; ( C) char*ss6; 881=“right“; ( D) char*ss()=“right?“; 28 若有以下程序: inchde int k=7; void f(int *s) int *t=&k; *8=t; printf(“ d, d, d, “, k, *t, *s); main() int i=3, *P=&i, *r= p; f(r); printf(“ d, d, d n“, i, *p, *r); 则程序的输出结果是 ( )。 ( A) 3, 3, 3, 7, 7, 7 ( B) 3, 7, 7, 7, 7, 7 ( C) 7, 7, 7

17、, 3, 3, 3 ( D) 7, 7, 7, 3, 7, 7 29 若有以下程序: #include int k=7, m=5; void f(int *s) int *t=&k; 8=&t; *s=&m; printf(“ d, d, d, “, k, *t, *s); main( ) int i=3, *p=&i, *r=&p; f(r); printf(“ d, d, d n“, i, *p, *r); 则程序的输出结果是 ( )。 ( A) 7, 5, 7, 3, 5, 7, ( B) 7, 5, 7, 3, 3, 3, ( C) 7, 5, 5, 3, 3, 3, ( D) 7,

18、7, 5, 3, 3, 3, 国家二级 C语言机试(选择题)模拟试卷 69答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 在 f(int*p, int*q)函数中,执行 p=p+1是将 p所对应的地址加 1,而 *q=*q+1是将 q所指向的 (n的地址所对应的 )值加 1,所以 m所对应的值没有变,而 n的值则为 3。因此 B选项正确。 2 【正确答案】 B 【试题解析】 指针是用来存放地址的变量, 用 (类型名 *指针变量名 )的形式定义。赋值时应将某个变量地址即 x赋给指针变量,所以选择 B。 3 【正确答案】 A 【试题解析】 在变量定义 double a, *p=&a;中

19、, *号是一个指针运算符,而非间址运算符,所以 A错误。 4 【正确答案】 C 【试题解析】 该程序中 int*p1=&a, *p2= b, *p= c;定义了三个指针变量,并赋值,即使 p1指向 a; p2指向 b; p指向 c。 *p=*p1*(*p2);该语句是给 p所指的存储单元 c赋值,就是 p1所指的存储单元的值,即 a的值,与 p2所指的存 储单元 (b)的值相乘,也就是 c=a*b,等价于 c=1*3=3;因此 C选项正确。 5 【正确答案】 A 【试题解析】 B选项描述不正确,指针变量可以通过求地址运算符 (&)来获得地址值,也可以通过指针变量获得地址值,还可以通过标准函数获

20、得地址值; C选项中, p=NULL;和 p=0;或 p= 0;等价; D选项中,语句 p=NULL;执行后,指针 p并不是指向地址为 0的存储单元,而是具有一个确定的值一 “空 ”。因此 A选项正确。 6 【正确答案】 B 【试题解析】 A选项描述不正确,指针变量的赋值只能赋 予地址,决不能赋予任何其它数据,否则将引起错误; C选项中, p=NULL;和 p=0;是等价的; D选项中,指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系。因此 B选项正确。 7 【正确答案】 A 【试题解析】 选项 B的正确写法应为 p=&n;选项 C的正确写法应为 scanf(“d“, p)

21、;选项 D的正确写法应为, printf(“ d n“, *p)。 8 【正确答案】 A 【试题解析】 因为 x, y都是 double型数据,所以输入的格式字符应为 lf,所以 B与 C错误。 D选 项中 scanf(“ lf lf“, x, y);应为 scanf(“ lf lf“, x,&y)。 9 【正确答案】 C 【试题解析】 A选项中错在没有对指针进行初始化,是无效指针,并且在scanf(“ d“, p)中无需再进行取地址操作; B选项中没有对指针进行初始化,是无效指针; D选项中语句 *p= k;的左端 * p是指针所指内存空阔的值, k是地址,应为 p=&k。因此 C选项正确。

22、 10 【正确答案】 C 【试题解析】 A选项错误,因为 p是指向一个指针数组,作为数组名,不能指向别的地方。 B选项 错误,因为 p0是一个 int指针,也就是 int*;而 a是一个指向指针的指针 int*。 C选项正确,因为 p0是一个 int*, a12是 int, &a12是int*,类型吻合。 D选项错误,因为 a作为数组名,不能取其地址。即使能取,p1是 int*, &a是 int*,类型不对。因此 C选项正确。 11 【正确答案】 B 【试题解析】 在主函数中分别给整型变量 i、 j和指针型变量 p、 q赋初值,并声明指针变量 r;调用 f函数,并将实参变量 p和 q的值传递给

23、形参变量 s和 t,而且 f函数是指针型函数 ,即函数的返回值是一个地址。在 f函数中,如果条件成立。则将指针变量 s和 t互换,并且将指针 s的地址返回主函数。最后输出 i, j,*p, *q, *r的值,即 3, 5, 3, 5, 5。因此 B选项正确。 12 【正确答案】 C 【试题解析】 malloc(sizeof(int)的作用是开辟一个长度为 sizeof(int)的存储空间,并通过强制类型转换 (int*)将此存储空间的地址赋给一个整型的指针变量 p,然后执行语句 *p=n,使得 *p的值为 10,并通过 return返回此值,即 a的值为10。最后在主函数中通过 printf(

24、)函数输出 a+fun(10)=10+10=20。 13 【正确答案】 A 【试题解析】 本题中的函数 fun()的功能是将数组 k中前 5个元素倒序,因此返回后数组 k中的元素排列是 5, 4, 3, 2, 1, 6, 7, 8, 9, 10。最后打印输出 k2到 k7元素的值,即 321678,故选择 A选项。 14 【正确答案】 A 【试题解析】 本题中由 fun函数可知, b0=a00-a03=1-4=-3, b1=a1 1-a12=6-7=-1, b22-a21=1-10=1, b3=a33-a31=16-13=3。因此主函数中打印 y数组元素的值为 A选项。 15 【正确答案】 C

25、 【试题解析】 本题考查数组名作为函数参数。执行 fun函数后, s的值并没有发生变化,仍然是指向 a,所以输出结果为 1,故选项 C正确。 16 【正确答案】 A 【试题解析】 p是指向二维字符数组第二行 “One*Dream!”的数组指针,所以长度是 10,打印输出的也是该字符串。 17 【正确答案】 D 【试题解析】 A选项中的 “*(&w00+1)”表示 w01; B选项中的 “*(*w+3)”表示 w03; C选项中的 “*(*(w+1)”表示 w01;而 D选项中的 “*(w+1)4”的正确写法是 “(*w+1)4”,表示 w14,因此选择 D选项。 18 【正确答案】 A 【试题

26、解析】 本题主函数中定义了一个指针数组 a,可以将它看成一个以字符指针为元素的一维数组。和一般的一维数组名能赋给同类型指针变量一样,该字符指针数组也可以赋给指向字符指针的指针,所以数组名 a可以用做函数 fun()的实参。在 fun()函数中, +p操作使形参 p向后移动一个字符指针的位置,即指针 a1的位置。故最后通过 printf()函数输出的字符串为 “Afternoon”。因此 A选项正确。 19 【正确答案】 D 【试题解析】 调用 fun函数后,实参数组名 sl传给形参指针 p, p也指向数组s1。 fun函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小

27、写字母,就把前一个字符转换为大写。程序中语句 pi-1=pi-1-a+A;即 p pi-1=pi-1-32,意思是将 pi-1中的 字符转换为大写。因此 D选项正确。 20 【正确答案】 D 【试题解析】 本题考查字符串数组。 s表示指向字符数组的指针, s指向了第一个字符串, s+指向了第二个字符串,所以最后输出结果为 D选项。 21 【正确答案】 A 【试题解析】 字符型指针变量可以用选项 A的赋值方法赋值: char *s;s=“Olympic“,选项 C的写法: char*s, s=“Olympic“;是错误的。字符数组可以在定义的时候初始化: char s=“Olympic“;或者

28、char s=“Olympic“;都是正确的,但是不可以在定义字符数组后对数组名赋值 (数组名是常量,代表数组首地址 ),所以选项 B和选项 D都是错误的。对于本例,选项 B、 D中的字符数组 s的大小至少为 8,才能存放下字符串 (字符串的末尾都有结束标志 “ 0“)。 22 【正确答案】 A 【试题解析】 因为小写字符 a、 b、 c的 ASCII的值分别为 97、 98、 99,而在 do while循环语句中,每次对字符的 ASCII的值取余数并输出,所以分别输出 7、8、 9。 23 【正确答案】 A 【试题解析】 A选项为正确用法,先将字符串存于 字符数组中,然后将数组名赋给字符指

29、针 (数组名代表数组首地址,定义数组时为其分配确定地址 )。 C选项错误, getchar()函数输入字符给字符型变量,而不是字符指针。 B选项和 D选项有类似的错误,两个选项并无语法错误,但运行时可能会出现问题。因为在 B选项和 D选项中,字符指针没有被赋值,是个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据。在这个不确定的区域重新存放字符串,可能会发生无法预知的错误。因此 A选项正确。 24 【正确答案】 B 【试题解析】 int(*f)(int);为指 向函数的指针变量的定义方法,其中 f为指向函数的指针变量,第一个 int为函数返回值类型,第二个 int为函数的

30、形参类型。因此 B选项正确。 25 【正确答案】 D 【试题解析】 D选项中的 “*f(a, b)”表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量 k。 26 【正确答案】 D 【试题解析】 malloc函数动态分配一个整型的内存空间,然后把函数返回的地址用 (int*)强制类型转换为整型指针,再把它赋给 a、 b、 c,即让指针变量 a、 b、 c都指向 刚申请的内存空间。所以只有最后一个赋值语句 “*c=3”的值保留在了该空间内,因为 a、 b、 c三个指针变量均指向该空间,所以打印该空间内的数值为 3。 27 【正确答案】 A 【试题解析

31、】 数组定义后,不可以对数组整体赋面, s是二维数组,因 ss1是一维字符数组,即字符串,字符串赋值可以使用 “strcpy(ss1, “right“); ”这样的形式,而选项 A中对二维数组中的第 l维 (相当于一个一维数组 )赋值,是不可以的。选项 B和 D是定义时对数组初始化,这是可以的。选项 C中,将字符串在内存中的首地址赋给指 针数组的一个元素,这也是可以的。 28 【正确答案】 D 【试题解析】 在主函数中分别给整型变量 i、指针型变量 p和指向指针的指针变量 r赋初值;调用 f函数,并将实参变量 r的值传递给形参变量 s。在 f函数中,通过 “printf(“ d, d, d,

32、“, k, *t, *s); ”语句输出 7, 7, 7;返回主函数,通过 “printf(“ d, d, d n“, i, *p, *r); ”语句再输出 3, 7, 7。因此 D选项正确。 29 【正确答案】 C 【试题解析】 在主函数中首先初始化整型变量 i,将 i的地址赋给 指针变量 p,再将指针变量 p的地址赋给指向指针的指针变量 r;调用 f函数,将变量 r的值传递给变量 s;由于 k和 m分别赋值 7和 5,执行语句 “printf(“ d, d, d, “,k, *t, *s); ”的结果为 7, 5, 5;返回主函数,执行语句 “printf(“ d,d, d、 n“, i, *p, *r); ”的结果为 3, 3, 3。因此 C选项正确。

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

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

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