[计算机类试卷]国家二级C语言机试(编译预处理和指针)模拟试卷6及答案与解析.doc

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

1、国家二级 C语言机试(编译预处理和指针)模拟试卷 6及答案与解析 一、选择题 1 设有某函数的说明为 int*func(int a10, int n);则下列叙述中,正确的是 ( A)说明中的 a10写成 a或 *a效果完全一样 ( B)形参 a对应的实参只能是数组名 ( C) func的函数体中不能对 a进行移动指针 (如 a+)的操作 ( D)只有指向 10个整数内存单元的指针,才能作为实参传给 a 2 设有定义: int x=0, *p;紧接着的赋值语句正确的是 ( A) *p=NULL; ( B) p=NULL; ( C) p=x; ( D) *p=x: 3 以下叙述中错误的是 ( A

2、)函数可以返回地址值 ( B)改变函数形参的值,不会改变对应实参的值 ( C)当在程序的开头包含头文件 stdio h时,可以给指针变量赋 NULL ( D)可以给指针变量赋一个整数作为地址值 4 设已有定义: float x;则以下对指针变量 p进行定义且赋初值的语句中正确的是 ( A) int*p=(float)x; ( B) float*p=&x; ( C) float p=&x; ( D) float*p=1024; 5 有以下程序 ,程序运行后的输出结果是 main()int m=1, n=2, *p=&m, *q=&n, *r; r=p; p=q; q=r; printf(“ d,

3、 d, d, d n“, m, n, *p, *q); ( A) 1, 2, 1, 2 ( B) 1, 2, 2, 1 ( C) 2, 1, 2, 1 ( D) 2, 1, 1, 2 6 下面选项中的程序段,没有编译错误的是 ( A) char*sp, s10; sp=“Hello“; ( B) char*sp, s10; s=“Hello“; ( C) char str110=“computer“, str210; str2=str1; ( D) char mark; mark=“PROGRAM“: 7 设有定义 double a10, *s=a;以下能够代表数组元素 a3的是 ( A) (

4、*s)3 ( B) *s3 ( C) *s+3 ( D) *(s+3) 8 有以下程序,执行后的输出结果是 main()int a=1, b=3, c=5; int*p1=&a, *p2=&b, *p=&c; *P=*p1*(*p2); printf(“ d n“, c); ( A) 2 ( B) 3 ( C) 1 ( D) 4 9 若有定义语句: int a23, *p3;则以下语句中正确的是 ( A) p0=&a12; ( B) p0=a; ( C) p=a; ( D) p1=&a; 10 若有定义语句: int year=2009, *p=&year;以下不能使变量 year中的值增至2

5、010的语句是 ( A) (*p)+; ( B) +(*p); ( C) *p+; ( D) *p+=1; 11 有以下程序 main() int a5=2, 4, 6, 8, 10, *p, *k; p=a: k=&p; printf(“ d“, *(p+); printf(“ d n“, *k); 程序运行后的输出结果是 ( A) 4 4 ( B) 2 4 ( C) 2 2 ( D) 4 6 12 以下叙述中正确的是 ( A)如果 p是指针变量,则 *p表示变量 P的地 址值 ( B)如果 p是指针变量,则 &p是不合法的表达式 ( C)在对指针进行加、减算术运算时,数字 1表示 1个存储

6、单元的长度 ( D)如果 p是指针变量,则 *p+1和 *(p+1)的效果是一样的 13 有以下程序 (注:字符 a的 ASCII码值为 97) main()char*s=“abc“; doprintf(“ d“, *s 10); +s; while(*s); 程序运行后的输出结果是 ( A) abc ( B) 7890 ( C) 979899 ( D) 789 14 设有定义: char*c;以下选项中能够使 c正确指向一个字符串的是 ( A) char str=“string“; c=str; ( B) scanf(“ s“, c); ( C) c=getchar(); ( D) *c=“

7、string“; 15 有以下程序 #include stdio h 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) scanf(“ d“ , &p) ( D) printf(“ d n“, p); 16 若有定义语句: double a, *p=&a;以下叙述中错误的

8、是 ( A)定义语句中的 *号是一个说明符 ( B)定义语句中的 p只能存放 double类型变量的地址 ( C)定义语句中 *p=&a把变量 a的地址作为初值赋给指针变量 p ( D)定义语句中的 *号是一个间址运算符 17 若有以下定义 int x10, *pt=x;则对 x数组元素的正确引用是 ( A) *(x+3) ( B) *&x10 ( C) *(pt+10) ( D) pt+3 18 有以下程序 int fun1(double a)return a*=a; int fun2(double x, double y) double a=0, b=0; a=fun1(x); b=fun

9、1(y); return(int)(a+b); main() double w; w=fun2(1 1, 2 0); 程序执行后输出结果是 ( A) 5 00 ( B) 5 ( C) 5 21 ( D) 0 0 19 有以下程序 void fun(char*s)char a10; main()char*p=“PROGRAM“; strcpy(a, “STRING“); fun(P); s=a; printf(“ s n“, p); 程序运行后的输出结果是 (此处口代表空格 ) ( A) STRING口口口口 ( B) PROGRAM ( C) STRING口口口 ( D) STRING 20

10、有以下程序 void fun(int n, int*s)int f; if(n=1)*s=n+1; elsefun(n 1, &f); *s=f; main() int x=0; fun(4, &x); printf(“ d n“, x); 程序运行后的输出结果是 ( A) 1 ( B) 3 ( C) 4 ( D) 2 21 有以下程序 #include stdio h int fun(char*s) char*p=s; while(*p!=0)p+; return(p-s); main()printf(“ d n“, fun(“goodbey!“); 程序的输出结果是 ( A) 6 ( B)

11、 8 ( C) 0 ( D) 7 22 有以下程序 #include stdio h main() #define N 4 int xN=1, 2, 3), 4), 5, 6, 7, 8), 9,10, void fun(int aN, int b) yN, i; int i; fun(x, y); for(i=0; i N; i+)bi=aii; for(i=0; i N; i+)printf(“ d, “, yi); printf(“ n“); 程序的运行结果是 ( A) 1, 2, 3, 4, ( B) 1, 4, 5, 9, ( C) 1, 0, 7, 0, ( D) 3, 4, 8,

12、 10, 23 有 下列程序: void f(int*q) main() int i=0; int a5=l, 2, 3, 4, 5), i; for(; i 5; i+)(*q)+; f(a); for(i=0; i 5; i+)printf(“ d, “, ai); 程序运行后的输出结果是 ( A) 2, 2, 3, 4, 5, ( B) 6, 2, 3, 4, 5, ( C) 1, 2, 3, 4, 5, ( D) 2, 3, 4, 5, 6, 24 有以下程序 #include stdio h main() void fun(char*c, int d) char b=a, a=A;

13、*c=*c+1; d=d+1; fun(&b, a); printf(“ c, c n“, b, a); printf(“ c, c, “, *c, d); 程序运行后的输出结果是 ( A) b, B, b, A ( B) b, B, B, A ( C) a, B, B, a ( D) a, B, a, B 25 以下函数按每行 8个输出数组中的数据: void fun(int*w, int n) int i; for(i=0; i n; i+) _ printf(“ d“, wi); printf(“ n“); 下划线处应填入的语句是 ( A) if(i 8=0)printf(“ n“);

14、( B) if(i 8=0)continue; ( C) if(i 8=0)printf(“ n“); ( D) if(i 8=0)continue; 国家二级 C语言机试(编译预处理和指针)模拟试卷 6答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 函数 func为返回值为指针的函数,有两个形参,形参数组 a为指针变量,保存实参数组的首地址,其元素个数由实参数组决定,因此说明中的a10写成 a或 *a效果完全一样。 【知识模块】 编译预处理和指针 2 【正确答案】 B 【试题解析】 定义指针变量时,必须将指针变量初始化为 NULL(为空 ),否则,如果不赋给它地址,系统会随机给它

15、分配一个地址。 【知识模块】 编译预处理和指针 3 【正确答案】 D 【试题解析】 指针变量的值只能是存储单元地址,而不能是一个整数,选项 D)的描述是错误,为待选答案。函数可以返回内存空间的地址,同时函数形参和实参分别占用不同的内存单元,改变形参的值不会改变对应实参的值,在头文件stdio.h中, NULL被定义为 void型的指针。 【知识模块】 编译预处理 和指针 4 【正确答案】 B 【试题解析】 定义指针变量的一般形式为:类型名 *指针变量名 1, *指针变量名2 ;。对一个指针变量赋值要通过求地址运算符 ( )获得变量的地址值,然后把此地址值赋给指针变量。因而在选项 A)的表达式中

16、,赋值号的左边表示定义了指针变量 D,而右边表示求变量 x的地址值。 【知识模块】 编译预处理和指针 5 【正确答案】 B 【试题解析】 在主函数定义了 3个整数指针变量 p, q, r,并且使 p指向 m, q指向 n,再执行 “r=p; p=q; q=r; ”这三条语句,使 q指向 m, p指向 n,再输出变量 “m, n, *p, *q”时,它们值分别为 1, 2, 2, 1。 【知识模块】 编译预处理和指针 6 【正确答案】 A 【试题解析】 选项 B)中数组名为常量,不能赋值,选项 C)字符数组之间无法完成赋值操作,选项 D)和选项 B)相同,无法对数组进行赋值。 【知识模块】 编译

17、预处理和指针 7 【正确答案】 D 【试题解析】 语句 *s=a,使用指针变量 s指向一维数组 a的首地址,所以 *(s+3)表示的是引用数组 a3。 【知识模块】 编译预处理和指针 8 【正 确答案】 B 【试题解析】 程序使整型指针 p1、 p2、 p3指向 a、 b、 c值所存放的地址空间。然后再将指针变量 *p1、 *p2中的值的乘积赋给指针变量 *p,即赋给变量 c,输出 c的值 3。 【知识模块】 编译预处理和指针 9 【正确答案】 A 【试题解析】 定义语句 “int a23, *p3; ”定义了整型二维数组 a23和指针数组 p3。在 C语言中,二维数组名也是一个存放地址常量的

18、指针,其值为二维数组中第一行的地址。所以选项 A)中,把整型数组 a0的指针赋给 p0。 【知识模块】 编译预处理和指针 10 【正确答案】 C 【试题解析】 由于自加运算符 +一的运算级高于间接运算 *的运算级,所以选项 A)的表达式 *p+不能使变量 year中的值增至 2010。 【知识模块】 编译预处理和指针 11 【正确答案】 B 【试题解析】 主函数中指针变量 p指向数组 a中下标为 0的元素, k指向 p,那么 *(p+)的值为 2, p指向数组中下标为 1的元素, k指向 p,所以 *k的值为 4。 【知识模块】 编译预处理和指针 12 【正确答案】 C 【试题解析】 移动指针

19、是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。因此,只有当指针指向一串连续的存储单元时,指针的移动才有意义。当指针指向一串连续的存储单元时,可以对指针变量进行加上或减去一个整数的运算,也可以对指向同一串连续存储单元的两个指针进行相减的运算。除此之外,不可以对指针进行任何其他的算术运算。 C语言提供了一个间接访问运算符 (*),又称间址运算符,它是一个单目运算符,优先级比较高,高于普通的算术运算符,但是低于 ()运算符,因此 *p+1和 *(p+1)的含义是不一样。当指针变量 中存放了一个确切的地址值时,就可以用 “间接访问运算符 ”通过指针来引用该地址的存储单元

20、。 【知识模块】 编译预处理和指针 13 【正确答案】 D 【试题解析】 因为小写字符 a, b, c的 ASCII的值分别为 97, 98, 99,而在 do while循环语句中,每次对字符的 ASCII的值取余数并输出。第一次循环输出 7,第二次循环输出 8,第三次循环输出 9。 【知识模块】 编译预处理和指针 14 【正确答案】 A 【试题解析】 在题目的题干中定义了字符指针变量 c,在选项 A)中,首先定义字符 数组 str,然后再把字符数组 str的首地址赋给字符指针变量 c。所以选项 A)是正确的。在选项 D)中,如果在定义字符指针 c时,同时给 c赋初值时,这样的表达式是正确的

21、。而本题不是在定义指针 c时,同时给 c赋初值。 【知识模块】 编译预处理和指针 15 【正确答案】 A 【试题解析】 选项 A)表示在程序中,声明定义变量语句 “int n, *p=NULL; ”定义了整型变量 n和指针变量 p,并且指针变量 p初始化为空。其他的语句都是错误的。其中选项 B), &n的地址应存放到指针变量 p中,而选项 C)中数据输入项错误 ,选项 D)输出地址信息。 【知识模块】 编译预处理和指针 16 【正确答案】 D 【试题解析】 在指针定义语句 “double a, *p= a”中,指针变量 p前面的 *号,只是一个说明符,说明变量 p是指针类型的变量。 【知识模块

22、】 编译预处理和指针 17 【正确答案】 A 【试题解析】 本题考查指针的调用。 x代表 x10数组的首地址指针, pt是指向x10数组的首地址的指针,即两者指向同一内存单元。 *(x+3)等同于 x3。 【知识模块】 编译预处理和指针 18 【正确答案】 A 【试题解析】 子函数 fun1(doubIe a)的功能是返回 a的平方值的整数部分。子函数 fun2(double x, double y)的功能是返回 x的平方值的整数部分与 y的平方值的整数部分的和。又因为题中变量 w的定义为 double型,函数 fun(2)的定义为 int型,按照各类数值型数据间的混合运算,整型数据被转换为实

23、型数据。所以双精度型变量 w的值为 5 00。 【知识模块】 编译预处理和指针 19 【正确答案】 B 【试题解析】 函数 fun的主要功能是把字符串 “STRING“,存放到字符数组 a中, s指向该字符串,函数调用结束以后,释放 s和 a指向的空间,主函数调用fun(p),并不能更改 p的值,因此 p的指向没有改变。 【知识模块】 编译预处理和指针 20 【正确答案】 D 【试题解析】 函数 fun为递归调用函数,如果 n的值为 1,那么后面形参指向的空间存放 n+1,否则继续计算 fun(n 1)的值。调用分析过程: fun(4,&x)fun(3 , x)fun(2 , x)fun(1

24、, x)在回归的过程中,对于 x内的数据并没有改动。 【知识模块】 编译预处理 和指针 21 【正确答案】 B 【试题解析】 函数 fun的主要功能是计算字符串中实际字符的个数,因此。“goodbey!“含有字符为 8,返回值为 8。 【知识模块】 编译预处理和指针 22 【正确答案】 C 【试题解析】 函数 fun(int aN, int b)的功能是把矩阵 aNN主对角线上的元素赋给一维数组 b。在主函数中由 xN的初始化可知,其主对角线上的元素是 1, 0, 7, 0,所以当执行完函数够 (x, y)后,一维数组元素 y中的元素值为1, 0, 7, 0。 【知识模块】 编译预处理和指针

25、23 【正确答案】 B 【试题解析】 void f(int*q)函数的功能是对 (*q)的值连续 5次自加 1。在 main()函数中 f(a)语句把一维数组 a5的首地址作为实参,传递给函数 f(int*q)的形参 q,然后在函数 f(int*q)内, a0连续 5次自加 1后, a0的值就变成 6。所以输出为6, 2, 3, 4, 5。 【知识模块】 编译预处理和指针 24 【正确答案】 A 【试题解析】 本题中 fun函数的参数传递方式,形参 c是传地址,形参 d是 传值,所以在主函数中,执行胁时,把变量 b的地址传给了 c,把 a的值传递给了d,经过运算,输出的值为 b B。在主函数的输出语句中,输出变量 b的值为 b,变量 a的值为 A。 【知识模块】 编译预处理和指针 25 【正确答案】 A 【试题解析】 本题考查判断语句与循环语句。欲使每行输出 8个数据,则必然使用取余运算,当 i 8=0时先输出一个换行符再输出字符。选项 D)中, continue语句的作用是停止执行本次循环位于 continue后面的语句,而进入下一次循环。 【知识模块】 编译预处理和指针

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

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

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