无纸化真考试题库第35套_第1页
无纸化真考试题库第35套_第2页
无纸化真考试题库第35套_第3页
无纸化真考试题库第35套_第4页
无纸化真考试题库第35套_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、无纸化真考试题库第35套.下列叙述中正确的是A)程序可以作为算法的一种表达方式B)算法的有穷性是指算法的规模不能太大C)算法的复杂度用于衡量算法的控制结构D)算法的效率与数据的存储结构无关参考答案:A算法的有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的。B选项错误。一个算法复杂度的高低体现在运行该算法所需要的计算机资源的多少。C选项错误。算法的效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量,这就与算法本身设计的优劣以及具体的编程实现有关,数据的存储结构会极大的影响程序的执行时间

2、。D选项错误。算法在实现时需要用具体的程序设计语言来实现,所以程序可以作为实现算法的一种表达方式。故选Ai项.某循环队列的存储空间为 Q(1:m),初始状态为front=rear=m 。现经过一系列的入队操作和退队操作后, front=m-1 , rear=m ,则该循环队列中的元素个数为m-11m0参考答案:B循环队列长度为 m,由初始状态为front=rear=m可知此时循环队列为空。入队运算时, 首先队尾指针(rear)进1 (即rear+1),然后在rear指针指向的位置插入新元素。特别的,当队 尾指针rear=m+1时,置rear=1。退队运算时,排头指针(front)进1 (即fr

3、ont+1 ),然后删除front 指针指向的位置上的元素,当排头指针front=m+1时,置front=1。从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,则该循环队列中的元素个数为m-(m-1)=1。故选择A选项3.能从任意一个结点开始没有重复地扫描到所有结点的数据结构是A)循环链表双向链表二叉链表D)有序链表参考答案:A在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点,这样的链表称为循环链表。在循环链表中,只要指 出表中任何一个结点的位置,就可以从它出发没有重复地扫描到表中其

4、他所有的结点。双向链表与二叉链表都可以扫描到所有结点,但是会有重复。有序链表如果是单链表的情况下,不能扫描到所有结点。故 A选项正确4.某棵树中共有25个结点,且只有度为3的结点和叶子结点,其中叶子结点有7个,则该树中度为3的结点数为A)不存在这样的树B) 7 C) 8 D) 6参考答案:A树是一种简单的非线性结构,直观地来看,树是以分支关系定义的层次结构。在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。首先假设这样的树是存在的,由于只有度为3的结点和叶子结点,可知最后一层都为叶子结点,倒数第二层一部分结点的度为3, 一部分结点为叶子结点。结点总数为 25,叶

5、子结点有7个,则度为3的结点有18个,由于(34-1-1)/218,能把字符1输入给变量c、数值2输入给变量d的输入语句是scanf(%d%lf, &c,&d);scanf(%c%lf, &c,&d);scanf(%c%f, &c,&d);scanf(%d%f, &c,&d);参考答案:B%lf是针对double的,如果仅用f,输入的数据可能没有被完全接收 ,数据的精度可能不足, 选项C,D错误。住要针对float类型的变量的输入。立要针对整型数据的输入,住要针 对字符类型的数据的输入,选项A昔误。故答案为B选项13.输出语句:printf(%dn,11+011); 的输出结果是2022022

6、021参考答案:Aprintf(%dn”,11+011) 中,11为十进制,011为八进制形式,打印格式%d表示十进制格式输出,因此,先将八进制数转化为十进制,011(8)=81*1+1*8 0=9,相当于 printf(%dn,11+9),故答案为 20, A选项正确14.以下叙述正确的是A)有些算法不能用三种基本结构来表达B) C语言程序不编译也能直接运行C)结构化程序的三种基本结构是循环结构、选择结构、顺序结构D)如果C语言程序实现的算法很简单,则计算机不进行任何代码转换就能执行程序参考答案:C算法的三种基本结构可以表达任何算法,只是不同的实现复杂度不相同。因此选项A错误。C语言是编译型

7、语言,程序必须先编译、链接才能运行,因此选项B错误。15.若有定义:double x;,则表达式:x=0,x+10,x+ 的值是11.010.00.01.0参考答案:CC语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。1、后置自增运算:k+表示先运算,后自加。2、前置自增运算:+k表示先自加,后运算。因此,表达式x=0,x+10,x+

8、的计算过程为首先赋值x=0,然后将x加10,但是并不对x进行赋值,最后计算x+,并,根据后置自增运算的计算结果,即为 x=0.0o,故答案为C选项。 16.有以下程序#include main() int x=1, y=0, a=0, b=0; switch ( x ) case 1: switch(y) case 0: a+; break; case 1: b+; break;a+; b+; break;a+; b+; printf(a=%d, b=%dn, a, b);程序的运行结果是a=2 , b=2a=2 , b=1a=1 , b=1a=1 , b=0参考答案:BC语言还提供了一种用于

9、多分支选择的switch语句,计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表 达式均不相同时,则执行 default后的语句。x=1;进入第一层 switch , y=0;进入第二层 switch ,执行 a+;break;后a=1;在进入 case 2, (这里case 1 :没有break ,)执行了 a+,b+,由于存在break,则跳出switch ,得到a=2,b=1, 因此答案为B选项。左边所有副作用都结束后,才对其右边的子表达式进行

10、运算,并以最右边表达式值作为整个逗号表达式的值。1、后置自增运算:k+表示先运算,后自加。2、前置自增运算:+k表示先自加,后运算。因此,表达式 x=0,x+10,x+的计算过程为首先赋值x=0 ,然后将x加10,但是并不对x进行赋值,最后计算x+,并,根据后置自增运算的计算结果,即为 x=0.0o,故 答案为C选项。.以下程序段中的变量已正确定义for( i=0; i4; i+,i+ )for( k=1; k3; k+ ); printf(* );该程序段的输出结果是A) *C)D)*参考答案:AC语言约定分号为一条语句的结束。因此 for( i=0; i4; i+,i+)for( k=1;

11、 k3; k+ );是完整的语句,对printf();没有任何影响,最后 printf(*), 执行一次。因此答案为砒项.有以下程序#include main() char c;for (; ( c=getchar() != #;) if ( c=a & c=z ) c = c - a + A;putchar(+c);)执行时输入:aBcDefG#烟车,则输出结果是AbCdEFgABCDEFGBCDEFGHbcdefgh参考答案:C循环的作用是将输入的字符串转化为大写,getchar()每次读入一个字符,putchar()每次输出一个字符,当遇到#字符结束。putchar(+c),表示将字符变

12、量c加1后输出。因此,输入 aBcDefG#,得到的结果是 BCDEFGH故答案为 佻项.有以下程序#include int f(int x);main() int n=1,m;m=f(f(f(n); printf(%dn,m);)int f(int x) return x*2; 程序运行后的输出结果是4281参考答案:C在C语言中,需要在 main函数后面定义函数,需要提前声明,否则调用报错,无法找到该函数。m=f(f(f(n), 一共调用3次f()函数,f()函数是对n*2,因此,结果是n*2*2*2,得到结果 为8。故答案为他项.关于地址和指针,以下叙述正确的是A)可以通过强制类型转换让

13、 char型指针指向double型变量B)函数指针p指向一个同类型的函数f时,必须写成:p = &f;C)指针p指向一个数组f时,必须写成:p = &f;D) 一个指针变量p可以指向自身参考答案:A函数指针p指向一个同类型的函数 f时,可以写成:p = f,而不能写成&f,选项B错误。函 数名代表函数的入口地址,指针 p指向一个数组f时,可以写成:p = f,也可写成&f,数组 名f ,可以代表数组的首地址,选项 C错误。指针变量指向的是地址,是个常量,不能将地 址指向另一个地址,选项 D错误。char型根据转化原则可以转化为double类型,因此答案为A选项。21.有以下程序#include

14、 #define N 4int fun( int a口N) int i,j,x=0;for( i=0; iN; i+ )for( j=0; jN; j+ ) if ( i = j )x += aN-1-ji;return x;)main() int xNN= 1, 2, 3, 4), 5, 6, 7, 8), 9, 10, 11, 12),13, 14, 15, 17), y;y = fun(x);printf( %dn, y );)程序运行后的输出结果是34352859参考答案:Afun函数求矩阵反对角线的元素之和。根据 fun()函数,当数组的行列下标相等时,对该行 反对角线上的元素求和。

15、故结果为4+7+11+13=34,答案为A选项。22.有以下程序#include #define N 3void fun( int xN, int *r1, int *r2 ) int i, j;*r1 = *r2 =0;for( i=0; iN; i+ ) j=N - (i+1); if (x*r1*r2 xij) *r1 = i; *r2 = j; ) main() int aNN = 1,5,7,9,2,6,4,3,8 , i,j;fun( a,&i,&j ); printf(%dn, aij);程序运行后的输出结果是86 C) 7 D) 9参考答案:Cfun()获取矩阵正反对角线的元素

16、的最大值,fun()中for( i=0; iN; i+ ) j=N - (i+1);/反对角线列位置if (x*r1*r2 xij) *r1 = i; *r2 = j; /比较正反对角线的元素,使得*r1,*r2始终只在最大元素的位置。由数组元素可得,正反对角线的最大元素为7。答案为C选项23.对于以下函数声明void fun(int array4, int *ptr);以下叙述中正确的是A) array, ptr都是指针变量B)调用fun函数时,实参的值将逐一复制给arrayC)调用fun函数时,array按值传送,ptr按地址传送D) array是数组,ptr是指针,它们的性质不同参考答案

17、:Avoid fun(int array4,int *ptr); fun()函数,第一个参数虽然是数组类型,但是会退化为指针,并且形参数组的个数没有用。第二个参数是指针,因此实际上二个形参都是指针。两个形参都是指针,传递的都是地址,而不是值。可知选项B、C D昔误。答案为Ai项24.设有定义:int x10,*p=x,i;,若要为数组x读入数据,以下选项正确的是for(i=0;i10;i+) scanf(%d,p+i);for(i=0;i10;i+) scanf(%d,*p+i);for(i=0;i10;i+) scanf(%d,*(p+i);for(i=0;i10;i+) scanf(%d,

18、xi);参考答案:AC语言声明scanf(,);可知scanf()的第二个参数是地址,因此, 从四个答案中可以判断,只有选项A是pi的地址,其他的均是变量本身。故答案为A选项。.有以下程序#include main() char s=012xy08s34f4w2;int i, n=0;for ( i=0; si!=0; i+ )if(si = 0 & si = 9) n+; printf(%dn,n);)程序运行后的输出结果是7038参考答案:C题意统at字符s中阿拉伯数字的个数。char s= / 012xy08s34f4w2 z ;元素是字符型。/ 0,=48;而/ 0 / =0;因此可以

19、计算出/0 /之前阿拉伯数字的个数,由字符串s可知,有3个阿拉伯数字。答案为 C选项。.有以下程序段char str 4 12 =aaa,bbb,ccc,ddd , *p4;int i;for( i=0; i4; i+ ) pi=stri;以下选项中不能正确引用字符串的是*P3P3str2*p参考答案:A*p3p30是一个字符,不是字符串,选项A错误。p3和str2和*p分别代表了ddd,ccc,aaa 。答案为A选项。27.有以下程序#include int mul(int val)static int init = 1;return init *= val;main( )int i;for

20、 (i=1; i=5; i+) printf(%d, mul(i);程序运行后的输出结果是A) 1,2,6,24,120,1,2,3,4,5,1,1,1,1,1,1,2,4,6,8,参考答案:Astatic静态变量只在声明日初始化一次。mul()累乘,第一次init=1,init*=val, 第二次 init=1,val=2, 第三次 init=2,val=3, 第四次 init=6,val=4, 第五层 init=24,val=5, 因此结果为1,2,6,24,120 。故答案为A选项。28.有以下程序#include void fun( int n )static int k=0;if(n

21、0) printf(-); n=-n; k+=n%10; printf(%d,k);if(n/10) fun(n/10);main( )int x=-12;fun(x); printf(n);程序运行后的输出结果是-2,3-1,-2,-2,-3,-2,1参考答案:Afun()函数使用了静态变量,静态变量只在声明时初始化一次。首先实参的数值是-12 , if判断后输出负号,并将 n=12,计算k+=n%10 k+=2 2,因此输出2,后将数值除以10,结果 为1,递归调用fun ()函数,第二次调用 fun(),此时n=1, k=2,计算k+=n%10 k+=1 3,因 此打印3,。故最后打印结

22、果为-2, 3,。故答案为 颂项。.有以下程序#include struct Sint n; int a20; ;void f(struct S *p) int i,j, t;for (i=0; in-1; i+)for (j=i+1; jn; j+)if (p-ai p-aj) t= p-ai; p-ai = p-aj; p-aj = t; main() int i; struct S s=10, 2,3,1,6,8,7,5,4,10,9;f(&s);for (i=0; is.n; i+) printf(%d, s.ai);程序运行后的输出结果是A) 1,2,3,4,5,6,7,8,9,10

23、,B) 10,9,8,7,6,5,4,3,2,1,C) 2,3,1,6,8,7,5,4,10,9,D) 10,9,8,7,6,1,2,3,4,5,参考答案:A结构体s中n代表数组的实际长度,a是个定长数组。函数f(),对结本体S内的a数组元素 使用冒泡法进行递增排序。因此最终数组的元素是一个递增序列。故答案为A选项。.有以下程序#include typedef struct stu char name10; char gender; int score; STU;void f( STU a, STU *b, STU c ) *b = c =a;printf( %s,%c,%d, b-name,

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

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

26、但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。题设中,参数b是地址传递,因此会直接影响实参变量。a,c是值传递,传递是a,c的拷贝, 不会a,c实参产生影响,因此,调用函数返回,c没有被修改,b被修改了。故答案为A选项。31.有以下程序#include #define SUB( x,y ) (x)*(y) main() int a=3, b=4;printf(%d n, SUB( a+, b+ );程序运行后的输出结果是151216

27、20参考答案:B#define命令是 曲言中的一个宏定义命令,标识符一般使用大写,为了区分其他标识符,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。宏定义不进行其他操作,仅仅只是替换标识符。后置自增运算:k+表示先运算,后自加。意思是遇到k+了,先把当前的k的值拿来参加运算,后面再去管它的自加。SUB(a+,b+)(a+)*(b+)3*4。故答案为 B选项。.有以下程序#include main() struct cm int x; int y; a2=4,3,2,1 ;printf(%d n, a0.y/a0.x*a1.x );程序运行后的输出结果是14

28、03参考答案:C由结构体的定义同时初始化可知,a0.x=4,a0.y=3,a1.x=2,a1.y=1,因此计算 a0.y/a0.x*a1.x=3/4*2=(3/4)*2=0*2=0,故答案为他项。.以下选项中的编译预处理命令行,正确的是#define E 2.38#define PI_2 1.56#define int INT#DEFINE TRUE参考答案:A无参宏定义格式:#define 标识符 字符串,标识符与 C语言规定相同,因此,可知选项B,多了 #,选项C使用c语言的关键字,选项 D格式不对。因此答案为 A选项。.设有以下程序段struct bookfloat price;char

29、 language;char title20;rec, *ptr;ptr = &rec;要求输入字符串给结构体变量rec的title成员,错误的输入语句是A) scanf(%s, ptr.title);B) scanf(%s, rec.title);C) scanf(%s, (*ptr).title);D) scanf(%s, ptr-title);参考答案:A-是指针特用的,.用于指定元素的成员。ptr是指针,只能用-,因此选项A错误。*p 是指定元素(rec)可以使用.运算,因此选项 D正确。选项B,rec.title代表数组title ,同理选项C正确。答案为 A选项。35.有以下程序#

30、include #include struct computer char CPU10; ;main( )struct computer pc1, pc2;strcpy(pc1.CPU, 3.2G);strcpy(pc2.CPU, ?);pc1 = pc2;printf(%sn, pc1.CPU);程序运行后的输出结果是A) ?B) 3.2GC) ?D) ?.2G参考答案:C二个类型相同的结构体,可以使用一个给另一个初始化,使它们相等。前提是右值结构体变量所有成员全部初始化了。pc1=pc2,pc2的成员值和pc1中对应的成员相等。因此pc1.CPU输出? ? ? ?。答案为他项。.有以下程序#include main( )int a = 2, b;b = (a = 1) + 4;printf(%d,%d, a, b);程序运行后的输出结果是A) 1,5B) 2,4C) 2,6D) 2,5参考答案:Aa=1等价于a=a1,即a除以2,则a=2,b=(a1)+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论