2022年全国计算机二级C选择题题库第套 .pdf

上传人:C****o 文档编号:33659287 上传时间:2022-08-12 格式:PDF 页数:16 大小:161.91KB
返回 下载 相关 举报
2022年全国计算机二级C选择题题库第套 .pdf_第1页
第1页 / 共16页
2022年全国计算机二级C选择题题库第套 .pdf_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《2022年全国计算机二级C选择题题库第套 .pdf》由会员分享,可在线阅读,更多相关《2022年全国计算机二级C选择题题库第套 .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、全国计算机二级C选择题题库第33 套1、下列叙述中正确的是, A) 解决同一个问题的不同算法的时间复杂度一般是不同的B) 解决同一个问题的不同算法的时间复杂度必定是相同的C) 对同一批数据作同一种处理,如果数据存储结构不同,不同算法的时间复杂度肯定相同D) 对同一批数据作不同的处理,如果数据存储结构相同,不同算法的时间复杂度肯定相同参考答案: A 算法的时间复杂度是指执行算法所需要的计算工作量,而计算工作量是用算法所执行的基本运算次数来度量的。解决同一个问题的不同算法的时间复杂度,可能相同也可能不相同。算法的时间复杂度与数据存储结构无关,对同一批数据作同一种处理或者不同处理,数据存储结构相同或

2、者不同,算法的时间复杂度都可能相同或者不同。故选A选项。2、下列处理中与队列有关的是A) 操作系统中的作业调度B) 执行程序中的过程调用C) 执行程序中的循环控制D) 二叉树的遍历参考答案: A 队列是指允许在一端进行插入,而在另一端进行删除的线性表。由于最先进入队列的元素将最先出队,所以队列具有 先进先出 的特性,体现了 先来先服务 的原则。作业调度是指根据一定信息,按照一定的算法,从外存的后备队列中选取某些作业调入内存分配资源并将新创建的进程插入就绪队列的过程。执行程序中的过程调用一般指函数调用,需要调用时候转入被调用函数地址执行程序,与队列无关。执行程序中的循环控制是指算法的基本控制结构

3、,包括对循环条件的判定与执行循环体,与队列无关。二叉树是一个有限的结点集合,二叉树的遍历是指不重复地访问二叉树中的所有结点,与队列无关。故本题选择A选项。3、设栈的存储空间为S(1:m) ,初始状态为 top=m+1。经过一系列入栈与退栈操作后,top=1 。现又要将一个元素进栈,栈顶指针top 值变为A) 发生栈满的错误B) 2 C) m D) 0 参考答案: A 4、栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。题目中初始状态为top=m+1,可知入栈栈顶指针top=top-1, 出栈栈顶指针top

4、=top+1 ,由于栈长为 m ,当 top=1名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 时栈满,不能再进行入栈操作。故选A选项。设二叉树共有150个结点,其中度为1的结点有 10个,则该二叉树中的叶子结点数为A) 71 B) 70 C) 69 D) 不可能有这样的二叉树参考答案: D 在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为0的结点总是比度为2的结点多一个

5、。如果有一棵二叉树,结点总数为150,假设度为 0的结点个数为 n,则有 n+10+n-1=150 ,n=70.5 ,由于结点个数必须是整数,所以不可能有题目中这样的二叉树。故选择D选项。5、非空循环链表所表示的数据结构A) 有根结点也有叶子结点B) 没有根结点但有叶子结点C) 有根结点但没有叶子结点D) 没有根结点也没有叶子结点参考答案: A 在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL 改为指向表头结点,这样的链表称为循环链表。循环链表是线性结构,有且只有一个根结点,每一个结点最多有一个前件,也最多有一个后件。循环链表表头结点为根结点,链

6、表的最后一个结点为叶子节点,虽然它含有一个指向表头结点的指针,但是表头结点并不是它的一个后件。故选择A选项6、设二叉树中共有31个结点,其中的结点值互不相同。如果该二叉树的后序序列与中序序列相同,则该二叉树的深度为A) 31 B) 16 C) 17 D) 5 参考答案: A 二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。由结点值互不相同而后序序列与中序序列相同,可知该二叉树所有的结点都没有右子树,所以 31个结点的二叉树深度为31。故选 A选项。7、在最坏情

7、况下,堆排序的时间复杂度是A) B) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - C) D) 参考答案: B 若有个元素的序列,将元素按顺序组成一棵完全二叉树,当且仅当满足下列条件时称为堆,大根堆是指所有结点的值大于或等于左右子结点的值;小根堆是指所有结点的值小于或等于左右子结点的值。在调整建堆的过程中,总是将根结点值与左、右子树的根结点进行比较,若不满足堆的条件,则将左、右子树根结点值中的大者与根结点值进行交换。堆排序最

8、坏情况需要次比较,所以时间复杂度是,B选项正确。8、软件按功能可以分为应用软件、系统软件和支撑软件( 或工具软件 ) 。下面属于系统软件的是A) 学籍管理系统B) ERP 系统C) C 编译程序D) CAI 软件参考答案: C 计算机软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件。应用软件是为了应用于特定的领域而开发的软件。支撑软件介于系统软件和应用软件之间,协助用户开发软件的工具型软件,其中包括帮助程序人员开发和维护软件产品的工具软件,也包括帮助管理人员控制开发进程和项目管理的工具软件,如Dephi、Pow

9、erBuilder等。选项C属于系统软件,选项A、B、D属于应用软件,故选C 选项。9、存储在计算机内有结构的数据集合是A) 数据库B) 数据库系统C) 数据库管理系统D) 数据结构参考答案: A 数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库系统是由数据库及其管理软件组成的系统,是应用软件。数据库管理系统是数据库系统的核心,它位于用户与操作系统之间,属于系统软件。数据结构是计算机存储、组织数据的方式。故本题选A选项。10、在数据库技术中,为提高数据库的逻辑独立性和物理独立性,数据库的结构被划分成用户级、存储级和A) 概念级B) 外部级C) 管理员级D) 内部级名师资料总结

10、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 参考答案: A 数据库系统在其内部分为三级模式,即概念模式、内模式和外模式。概念模式是数据库系统中全局数据逻辑结构的描述,全体用户的公共数据视图。外模式也称子模式或者用户模式,是用户的数据视图,也就是用户所能够看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。内模式又称物理模式,是数据物理结构和存储方式的描述,是数据在数据库内部的存储方式。所以数据库的结构被划分成

11、用户级、存储级和概念级。故选A选项。11、以下是正确C语言实型常量的是A) .e-1 B) e-1 C) -1e D) 1e-1 参考答案: D 所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。实型常量有两种表示形式:十进制小数形式、指数形式。指数形式中 e后面的指数必须是整数,阶码标志 e之前需要有数字, 由此可知选项A,B,C错误。答案为D选项。12、以下是正确C语言实型常量的是A) .e-1 B) e-1 C) -1e D) 1e-1 参考答案: D 所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语言中,有整型常

12、量、实型常量、字符常量和字符串常量等类型。实型常量有两种表示形式:十进制小数形式、指数形式。指数形式中 e后面的指数必须是整数,阶码标志 e之前需要有数字, 由此可知选项A,B,C错误。答案为D选项。13、以下叙述正确的是A) 在C语言中分号是语句的组成部分B) C 语言程序由 C语句组成,可以省略main函数C) 分号是 C语句之间的分隔符D) 所有程序行都必须用分号结束参考答案: A C语言 C程序的入口函数是main(),因此 C程序中有且只有一个main函数,故选项 B错误。分号是C语言一条语句的结束标志,不是分隔符, C 语言分隔符是用来分隔多个变量、数据项、表达式等的符号,包括逗号

13、、空白符、分号和冒号等等,选项C错误。 C语言的程序不是以分号结束的,分号是C语言一条语句的结束标志,C语言是面向过程的,从main函数开始在main函数里结束,选项D错误。故答案为A选项。14、若有定义:double a, b, c; 能正确给 a,b,c 输入数据的语句是A) scanf( %lf %lf %lf &a, &b, &c ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - B) scanf( %f %f %f

14、,&a, &b, &c ); C) scanf( %lf %lf %lf,a, b, c ); D) scanf( %lf %lf %lf,&a, &b, &c ); 参考答案: D %lf,%le 是针对 double 的,如果仅用%f,输入的数据可能不完全接收,数据的精度可能不足。 %f主要针对 float类型的变量的输入, 因此选项 B错误。根据题目格式可知A,C错误。故答案为 D选项。15、有以下程序#include main( ) int x = 0 x9; printf(%cn, A+x); 程序运行后的输出结果是A) I B) J C) K D) H 参考答案: B printf

15、(%cn, A+x),x=0 x9(16)转为十进制 x=9, ,因此 printf(%cn, A+9),打印格式要求是 %c,因此在字符 A,按字母顺序向后偏移9个位置,可得结果为J。故答案为 B选项。16、 设有定义: double x=5.16894;, 则语句 printf(%lfn ,(int)(x*1000+0.5)/1000.);的输出结果是A) 5.16900 B) 5.16800 C) 0.00000 D) 输出格式说明符与输出项不匹配,产生错误信息参考答案: A (x *1000+0.5 ) - x 移动 3 位小数,加 0.5, 也就是小数第4位加 5,若这位大于等于5,

16、则进 1到个位。5.16894 * 1000 5168.94 +0.5 5169.44 (int ) (x *1000+0.5)强制转换为整型结果为5169 5169 /1000.0)5.169 ,由于 1000.0 结果自动转换为浮点数所以 printf( %lfn,5.169 )结果是 5.16900 故答案为 A选项。17、有以下程序 #include main() int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理

17、- - - - - - - 第 5 页,共 16 页 - - - - - - - - - printf(%d,%d,%d,%dn,a,b,c,d); 程序输出A) 编译有错B) 0,0,0,3 C) 1,1,2,0 D) 0,1,2,0 参考答案: A C语言规定 else 总是和之前与其最近的且不带else 的if 配对,题目中,if(a=1) b=1;c=2;默认省略的 else 已经配对了, 下一句 else 没有匹配 if 为非法 else 。 另外 if 的判断条件 a=1是赋值语句,不是判断语句,此处也会产生编译错误。因此答案为A选项。18、有以下程序#include main(

18、) int a=-2, b=2; for(; +a & -b;) ; printf(%d,%dn, a,b); 程序运行后的输出结果是A) 0,1 B) 0,0 C) 1,-1 D) 0,2 参考答案: A for(; +a & -b;);for循环的 1,3 表达式缺省项,判断条件为+a&-b; a=-2,b=2;,第一次执行了+a和-b , ,表示为真,循环条件成立,第二次执行+a为0,由于& 运算符,当第一个条件为假时,不执行第二个条件,所以b=1,发生短路, -b 不执行了。因此 a,b 的最终值 0,1 。故答案为 A选项。19、有以下程序#include main( ) int t

19、; scanf(%d, &t ); if( t+ 6 ) printf(%dn, t); else printf(%dn, t-); printf(n); 执行时输入:6,则输出结果是A) 6 B) 8 C) 7 D) 5 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 参考答案: C 后置自增运算:k+表示先运算,后自加。if( t+ 6 ) printf(%dn, t); else printf(%dn, t-);t的初值

20、为 6,t+6, 则条件为假,执行printf(%dn, t-),此时t=7, ,打印 t 值为 7,之后进行自减操作t=6 。 , 。因此打印的结果为7。故答案为 C选项。20、有以下程序#include main( ) char ch = D; while (ch A) ch -; putchar(ch); if (ch = A) break; putchar(ch+1); 程序运行后的输出结果是A) CB B) BCA C) CCBB D) CDBCA 参考答案: D putchar()函数功能是输出一个字符,由whlie 判断条件和 ch初始值可知, , 只要 chA,每次执行二次pu

21、tchar ,否则跳出。第一次输出CD,第二次输出 BC,第三次输出 A,跳出循环。因此答案为 D选项。21、以下程序拟实现计算s=1 + 2*2 + 3*3 + + n*n +,直到 s1000为止。#include main( ) int s,n; s=1; n=1; do n=n+1; s=s+n*n; while(s1000); printf(s=%dn,s); 程序运行后,不能得到正确结果,以下修改方案正确的是A) 把while(s1000); 改为 while(s=1000); B) 把 s=1; 改为 s=0; C) 把 n=1; 改为 n=0; D) 把 n=n+1; 改为 n

22、=n*n; 参考答案: A 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - 题目中程序不能实现预期功能是因为while 的循环条件错误,选项 B,把 s=1, 改为 s=0,最终的结果 s=4, 与题目原意不同, 选项 C,把 n=1; 改为 n=0; 最终的结果 s=2, 与题目原意不同, 选项 D, 把 n=n+1; 改为 n=n*n; 最终的结果 s=2, 与题目原意不同选项 A, 正确的修改了while 循环条件,可以

23、得到正确结果。故答案为A选项。22、有以下程序#include main( ) int m,n; scanf(%d%d, &m,&n); while(m!=n) while(mn) m=m-n; while(nm) n=n-m; printf(%dn,m); 该程序的功能是A) 计算 m 和 n的最小公倍数B) 计算 m 和 n的最大公约数C) 计算 m 和 n的差值D) 找出 m 和 n中的较大值参考答案: B 题目使用更相减损术求最大公约数,其思想:1、任意给定两个正整数,判断它们是否都是偶数。若是,则用2约简,若不是则执行第二步。第二步:以较大的数减较小的数,接着把所得的差与较小的数比较

24、,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。因此。故答案为B选项。23、有以下程序 #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=(*f)(a,b); D) k= *f(a,b); 参考答案: D 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -

25、- - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - - - - - - - *与()的优先级, ()的优先级高于*,因为 (*f)()是在定义函数指针。f 指向函数的指针。f=add, 将函数 add() 的首地址赋给指针f ,所以调用函数add() 可以写为 f() ,其返回值是整型,不是指针类型,不能用* 取指针指向的内存单元的数据,故k=*f(a,b)的调用方式错误。答案为 D选项。24、若有定义语句: double x, y,*px,*py; 执行 px=&x; py=&y; 正确的输入语句是A) scanf(%lf %lf,x, y); B) sc

26、anf(%f %f &x, &y); C) scanf(%f %f, x, y); D) scanf(%lf %le, px, py); 参考答案: D %lf ,%le是针对 double 的,如果仅用%f,输入的数据可能不能被完全接收,数据的精度可能不足。 %f主要针对 float类型的变量的输入, 选项 B错误。根据 scanf( 格式 , 变量地址 ) ,选择A,C错误。因此,选择D。25、以下定义数组的语句中错误的是A) int num3= 1,2,3,4,5,6 ; B) int num24= 1,2,3,4,5,6 ; C) int num= 1,2,3,4,5,6 ; D) i

27、nt num4=1,2,3,4,5,6; 参考答案: B int num24= 1,2,3,4,5,6 ;定义数组是 2行4列,但是初始化的结构是3行2列,因此初始化错误。选项A,num3= 1,2,3,4,5,6 ;定义 3行3列的数组。选项D,num4=1,2,3,4,5,6,定义了 2行4列数组 , 选项 C,一维数组的定义和初始化。故答案为B选项。26、有以下程序#include void fun( int a , int n, int flag ) int i=0,j, t; for ( i=0; in-1; i+ ) for ( j=i+1; jn; j+ ) if ( flag

28、) if ( ai aj ) t = ai; ai = aj; aj = t; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - - - - - - - - main( ) int c10= 7,9,10,8,3,5,1,6,2,4 ,i; fun( c, 4, 1 ); fun( c+4, 6, 0 ); for ( i=0;i10; i+ ) printf( %d, ci ); printf(n); 程序运行后的输出结果是A) 7,8,9,10,6,5

29、,4,3,2,1 B) 10,9,8,7,6,5,4,3,2,1 C) 10,9,8,7,1,2,3,4,5,6, D) 1,2,3,4,5,6,7,8,9,10, 参考答案: C fun() 函数作用冒泡法排序,flag 控制升序( 0)或者降序(1) 。 n为参与排序的个数。a为数组的起始地址。因此,fun(a,4,1),数组的前四个降序排序,fun(a+4,6,0)从数组的第四项,后六个升序排序。故结果为10,9,8,7,1,2,3,4,5,6。答案为 C选项。27、有以下程序#include main( ) int i, k=0, a10; for( i=0; i10; i+ ) ai

30、=i; for( i=0; i4; i+ ) k += ai + i; printf(%dn, k); 程序运行后的输出结果是A) 10 B) 16 C) 6 D) 12 参考答案: D 第一个 for 循环对数组 a赋初值,从 09,第二个 for 循环数组前 4项的 ai + i的和。 0+0,1+1,2+2,3+3,经计算的结果为12,因此答案为D选项。28、有以下程序#include int new_div(double a, double b) return a / b + 0.5; main( ) printf(%d, new_div(7.8, 3.1); 程序运行后的输出结果是A

31、) 1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - B) 2 C) 3 D) 0 参考答案: C new_div() 的返回值是 int 类型,因此, a/b(a ,b均为 double 类型 )+0.5 的小数部分被将被截断。经计算,7.8/3.1+0.5=2.516+0.5=3.016,故打印的结果为3。故答案为 C选项。29、函数 fun 的功能是在 a所指的具有 n个元素的数组中查找最大值并返回给调用函数,函数不

32、完整。int fun(int *a,int n) int *p,*s; for( p=a,s=a; p-as B) *p*s C) apas D) p-ap-s 参考答案: B 函数 fun 的功能是在 a所指的具有 n个元素的数组中查找最大值并返回。通过for 比较, s始终指向最大值的那个元素。取指针的值,使用*p,因此比较使用*p 和*s ,又因为找最大值,当*s*p 时,修改指针s的指向,因此答案为B选项。30、有以下程序 #include #include main() char str20=One*World,One*Dream!,*p=str1; printf(%d,strlen

33、(p); printf(%sn,p); 程序运行后的输出结果是A) 10,One*Dream! B) 9,One*Dream! C) 9,One*World D) 10,One*World 参考答案: A unsigned int strlen(char *s); 计算字符串 s的( unsigned int型)长度,不包括0在内; p 指向数组的第二个元素,因此strlen(p)=10,并打印,故答案为A选项。31、有以下程序#include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -

34、 - 第 11 页,共 16 页 - - - - - - - - - #include main( ) int i, len; char b=Welcome you to Beijing!; len = strlen(b); for ( i=0; ilen; i+ ) if ( bi = ) strcpy(b, b+i+1); i=0; printf( %sn, b ); 程序运行后的输出结果是A) Beijing! B) to Beijing! C) Welcome you to Beijing! D) you to Beijing! 参考答案: A for 循环的作用就是每次遇到空格,将空

35、格后面的移动到数组的最前面。因此数组最后的状态时 Beijing!0g!0ng!neijing!0;但是 printf(%s)打印遇到 0 自动结束。因此,打印Beijing!。故答案为 A选项。32、有以下程序#include int f( int k ) static int n=0; int m=0; n+; m+; k+; return n+m+k; main( ) int k; for ( k=0; k2; k+ ) printf( %d, f(k) ); printf( n); 程序运行后的输出结果是A) 3,5, B) 3,6, C) 3,7, D) 0,3, 参考答案: A s

36、tatic静态变量只在声明时初始化 一次。因此,第一次调用函数f(k=0),此时 n=m=k=0, 经过自增操作 n=1,m=1,k=1, 返回值为 3,第二次调用函数f(k=1),此时 n=1,k=1,m=0, 经过自增操作, n=2,k=2,m=1, 返回值为 5. 故最终结果为 3,5 。故答案为 A选项。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 33、有以下程序#include int m=12; int fu

37、n( int x,int y ) static int m=3; m= x * y - m ; return (m); main() int a=7, b=5; m=fun( a, b )/m; printf(%dn, fun( a, b )/m ); 程序运行后的输出结果是A) 2 B) 1 C) 3 D) 0 参考答案: B 局部变量覆盖全局变量,但是全局变量的声明周期还存在。f() 函数调用完成后,由于m 全局变量,被修改为32,即函数的返回值32,此时 m=32/12,第二次调用 f(a,b),函数的返回值为 3, 此时 m=2,故输出为 1。所以答案为 B选项。34、有以下程序#in

38、clude #include main( ) char a = TEXT, *b = +, c3 = 1; printf(%d,%d, strlen(a), sizeof(a); printf(%d,%d, strlen(b), sizeof(b); printf(%d,%d,n, strlen(c), sizeof(c); 程序运行后的输出结果是A) 4,5,2,4,1,3, B) 4,4,2,2,1,1, C) 5,5,3,3,2,2, D) 4,4,2,2,1,3 参考答案: A sizeof( ) 是运算符,在头文件中typedef 为unsigned int ,其值在编译时即计算好了

39、,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。strlen(*char)是函数,要在运行时才能计算。参数必须是字符型指针(char* ) 。当数组名作为参数传入时,实际上数组就退化成指针了。它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 16 页 - - - - - - - - - 的第一个地址开始遍历

40、,直到遇到结束符NULL ,返回的长度大小不包括NULL 。sizeof(a)求数组 a所占空间的大小,包括字符串最后的0 ,所以 sizeof(a)=5,strlen()遇到 0 就结束, strlen(a)=4。strlen(b)是指针指向的字符串长度,sizeof(b)是指针的大小。strlen(c)是字符串的长度,sizeof(c)是数组的长度。因此,输出4,5,2,4,1,3。故答案为 A选项。35、以下与存储类别有关的四组说明符中,全部属于静态类的一组是A) extern和static B) auto和static C) register和static D) register和ex

41、tern 参考答案: A auto 用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字通常会被省略,因为所有的变量默认就是auto 的。register定义的变量告诉编译器尽可能的将变量存在CPU 内部寄存器中而不是通过内存寻址访问以提高效率。static变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。当static用来修饰全局变量时,它就改变了全局变量

42、的作用域。extern 限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。extern 外部声明 , 该变量在其他地方有被定义过。因此,答案为A选项。36、为了建立如图所示的存储结构(即每个结点含两个域,data 是数据域, next 是指向结点的指针域)则在()处填入的选项是()。struct link char data;() node; data next A) struct link *next; B) link next; C) link *next; D) struct link next; 参考答案: A 存储结构用链式存储。链式结构每个节点有个指针域,指针域指向

43、下一个链式结构的节点,因此指针域的结构应该是该结构形式,因此应定义为struct link* next,故答案为 A选项。struct是结构体的说明符,不能省略。37、有以下程序#include #include typedef struct stu char name10; char gender; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - - - - int score; STU; void f( char name10,ch

44、ar gender,int score ) strcpy( name, Sun ); gender = m; score = 370; main( ) STU b=Zhao, m, 290, a=Qian, f, 350; b=a; printf( %s,%c,%d, b.name, b.gender, b.score ); f( b.name, b.gender, b.score ); printf( %s,%c,%dn, b.name, b.gender, b.score ); 程序运行后的输出结果是A) Qian,f,350,Sun,f,350 B) Qian,f,350,Qian,f,

45、350 C) Qian,f,350,Sun,m,370 D) Zhao,m,290,Sun,m,370 参考答案: A C语言函数参数传递大致分为:1、值传递过程中,被调函数的形参作为被调函数的局部变量处理,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。2、地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量

46、。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。结构体中 name 是数组,做实参传递,会退化为指针,因此调用f() ,b.name发生修改,其他的成员,传递的是拷贝,不会被修改。因此输出Sun,f,350。故答案为 A选项。38、有以下程序#include main() char a=3, b=6, c; c=(ab)2; printf(%d n, c ); 程序运行后的输出结果是A) 5 B) 1 C) 20 D) 18 参考答案: C 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -

47、- - - - - - 第 15 页,共 16 页 - - - - - - - - - 运算符为按位异或运算符,即01=1,10=1,11=0,00=0,因此 ab=101 在进行 操作,变为 101002=2010,因此答案为C选项。39、以下叙述正确的是A) 表达式 sizeof(FILE*) = sizeof(int*) 的值为真B) 文件指针的值是一个整数,它的值一定小于文件字节数C) 文件指针的值是所指文件的当前读取位置D) 使用 fscanf 函数可以向任意类型的文件中写入任意数量的字符参考答案: A sizeof(FILE*)=4,因为 file* 为指针,指针的大小4 ,siz

48、eof(int*)=4,理由同前面。文件指针的值是地址,是一个16进制的数,它的值不一定小于文件字节数, 因此选项 B错误。文件指针是所指文件的当前读取位置,而不是文件指针的值因此选项C错误。intfscanf(FILE*stream,constchar*format,argument.); fscanf 函数可以向任意类型的文件,写入任意数量不能超过系统的缓冲区,写文件先写入缓冲区,最后一起写入文件,因此选项D错误。答案为A选项。40、函数 fgetc 的功能是从指定文件中读入一个字符,以下与其功能完全相同的函数是A) fread B) fscanf C) fgets D) getc 参考答案: D fgets 读取一个长度为(n-1) 的字符串,fread 按照指定的长度读取数据项,对应2进制的打开方式,fscanf 按指定格式读,对应文本打开方式,getc 从指定的文件读入一个字符,即从fp 所指向的文件中读入一个字符赋给ch。因此答案为 D选项。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁