计算机c语言二级练习9-13答案_第1页
计算机c语言二级练习9-13答案_第2页
计算机c语言二级练习9-13答案_第3页
计算机c语言二级练习9-13答案_第4页
计算机c语言二级练习9-13答案_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

第1题:

(1)有以下程序:

#include<stdio.h>

#definePT3.5;

#defineS(x)PT*x*x;

main()

{inta=Lb=2;printf("%4.1f\n",S(a+b));}

程序运行后的输出结果是()o

A)14.0

B)31.5

C)7.5

D)程序有错,无输出结果

M标准答案:D我的答案:

【解析】本题考杳宏定义的用法,进行宏定义时语句不能用分号结束,

否则会出现错误。因此,本题答案为D).

第2题:

(2)以下叙述中错误的是()。

A)在程序中凡是以“#"开始的语句行都是预处理命令行

B)预处理命令行的最后不能以分号表示结束

C)#defineMAX是合法的宏定义命令行

D)C程序对预处理命令行的处理是在程序执行的过程中进行的

X标准答案:D我的答案:

【解析】C语言中的预处理命令以符号#开头,这些命令是在程序编译

之前进行处理的,选项D)的描述错误。故答案选D)。

第3题:

(3)有以下程序:

#include<stdio.h>

#definef(x)x*x*x

main()

{inta=3,s,t;

s=f(a+l);t=f((a+l));

printf("%d/%d%n\s,t);

)

程序运行后的输出结果是()。

A)10,64

B)10,10

C)64,10

D)64,64

*标准答案:A我的答案:

【解析】

s=f(a+l)=a+l*a+l*a+l=10;s=f((a+l))=(a+l)*(a+l)*(a+1)=64.

第4题:

(4)有以下程序:

#include<stdio.h>

#defineSUB(a)(a)-(a)

main()

{inta=2,b=3,c=5/d;

d=SUB(a+b)*c;

printf("%d\n"fd);

)

程序运行后的输出结果是()o

A)0

B)-12

C)-20

D)10

3c标准答案:c我的答案:

【解析】在此处需要直接替换整个式子,SUB(a+b)*c即为

(a+b)・(a+b)*c,代入a,b,c的值可得结果为-20。

第5题:

(5)下列程序的输出结果是()o

#include"stdio.h"

#defineM(x,y)x%y

main()

{inta,m=12,n=100;

a=M(n,m);

printf("%d\n",a-);)

A)2

B)3

C)4

D)5

X标准答案:C我的答案:

【解析】带参数的宏定义命令行形式如下:

第6题:

(6)以下程序的运行结果是()。

#defineMAX(A,B)(A)>(B)?(A):(B)

#definePRINT(Y)printf("Y=%d\t",Y)

main()

{inta=l,b=2,c=3,d=4ft;

t=MAX(a+b,c+d);

PRINT(t);)

A)Y=3

B)存在语法错误

C)Y=7

D)Y=O

*标准答案:C我的答案:

【解析】宏替换不像函数调用要进行参数值的计算、传递等,而只是简

单按照原格式进行字符串的替换。

第1题:

(1)以下程序的输出结果是_[1]_O

#include<stdio.h>

#defineM5

#defineNM+M

mainQ

intk;

k=N*N*5;printf("%d\n",k);

)

X标准答案:55|我的答案:

【解析】程序在编译前的预处理过程中,只是很机械地将宏表达式替换为其对应的值。在本题

中,表达式k=N*N*5经过预处理,被改变成k=5+5*5+5*5,而不是预想的k=(5+5)*(5+5)*5,

经计算,k的值为55。

第1题:

(1)以下程序的输出结果是—LU_0

#include<stdio.h>

#defineM5

#defineNM+M

mainO

{intk;

k=N*N*5;printf("%d\n",k);

X标准答案:55|我的答案:

【解析】程序在编译前的预处理过程中,只是很机械地将宏表达式替换为其对应的值。在本题

中,表达式k=N*N*5经过预处理,被改变成k=5+5*5+5*5,而不是预想的k=(5+5)*(5+5)*5,

经计算,k的值为55。

第1题:

Q)设有定义:

structperson

{intID:charname[1]:}p:

请将scanfC%d”,_[1]_);语句补充完整,使其能够为结构体变量p的成员ID正确读入数据。

X标准答案:&p.ID|我的答案:

【解析】结构体成员的引用通过符号?来表示,通过scanf语句对变量进行赋值时,要用取地址符&。

第2题:

(2)下列程序的运行结果为_[2]

#include<stdio.h>

#include<string,h>

structA

{inta;charb[10];doublec;};

voidf(structA*t);

mainO

{structAa={1001,"ZhangDa",1098.0);

f(&a):printf("%d,%s,%6.1f\n",a.a,a.b,a.c);

)

voidf(structA*t)

{strcpy(t->b,"ChangRong");}

标准答案:

“1001,ChangRong,1098.01我的答案:

【解析】此题考的是结构体用法。函数f的功能为将结构体的第二个变量修改为ChangRong。主函数为运

行f函数后,将结构体输出。

第3题:

(3)设有定义"struct{inta;floatb;charc;}abc,*p_abc=8iabc;",则对结构体成员a的引用方法可以是

abc.a和p_abc_[3]_a。

M标准答案:->|我的答案:

【解析】若结构体变量abc有成员a,并有指针「_2改指向结构变量abc,则引用变量abc成员a的标H

形式有abc.a和p_abc->a»

第4题:

(4)以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结

构体的指针,请将定义补充完整。

structnode

{intinfo;

_【4】_link;};

X标准答案:structnode*|我的答案:

【解析】本题中的结构类型名为structnode,所以空白处应填:structnode*,即定义一个指向自身的结

构体指针。

第5题:

(5)以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。

structst

{charname[20];doublescore;};

mainO

{structstex;

printf(nexsize:%d\n",sizeof<_[5]_));}

X标准答案:structst或exI我的答案:

【解析】结构体类型数据,其数据成员各自占据不同的存储空间,整个结构体变量所占存储单元的字节数为每

一个数据成员所占的存储空间的和。

第6题:

(6)已知head指向•个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整

型。以下函数求出链表中所有链结点数据域的和值,作为函数值返回。清在横线处填入正确内容。

structlink

{intdata;structlink*next;}

main()

{structlink*head;

sum(head);

)

sum(_[6]__)

{structlink*p;ints=0;

p=head->next;

while(p){s+=p->data;p=p->next;}

return(s);}

X标准答案:structlink*head|我的答案:

【解析】因为本题中是用结构体变量构成了链表,所以要从链表头结点,逐个结点的引用结构体的数据域

需要有指向结构体变量的指针,依次指向各个结点,即p=p->next,而用指针引用结构体成员数据的方法

为:

p->datao

第7题:

⑺以卜.程序运行后的输出结果是—[7]_o

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

mainO

{char*p;inti;

p=(char*)malloc(sizeof(char)*20);

strcpy(p,"welcome");

for(i=6:i>=0:i­)putchar(*(p+i));

printf("");free(p);

)

X标准答案:emoclewl我的答案:

【解析】在主:函数中执行for循环语句实现把字符串"welcome”逆序输入。所以输入结果为emoclew,

第8题:

(8)以下程序把三个NODETYPE型的变量链接成一个简单的链表,并在while循环中输出链表结点数据域中

的数据。请填空。

#include<stdio.h>

structnode

{intdata;structnode*next;}:

typedefstructnodeNODETYPE:

mainO

{NODETYPEa,b,c,*h,*P;

a.data=10:b.data=20:c.data=30:h=&a:

a.next二&b;b.next=&c;c.next='\0':

p=h;

while(p){printfC%d,",p->data):_[8]_;}

printf("\n");

)

X标准答案:p=p->next|我的答案:

【解析】打印完一个链表结点的数据域中的数据域后,用p=p—>next使链表指针指向卜一个链表结点。

第9题:

(9)函数min()的功能是:在带头结点的单链表中查找数据域值中最小的结点。请填空。

#include<stdio.h>

structnode

{intdata;

structnode*next;

);

intmin(structnode*first)/*指针first为链表头指针*/

{structnode*p;intm;

p=first->next;m=p->data;p=p->next;

for(;p!=NULL;p=_[9]_)

if(p->data<m)m=p->data;

returnm;

)

X标准答案:p->next|我的答案:

【解析】本题考查的是对链表结点的访问问题。利用结构指针p依次指向每个结点,继而访问各个结点的

据,最终找出其中最小的数据。

第10题:

(10)有如下图所示的双链表结构,请根据图示完成结构体的定义:

lliead(latarchild

structaa

{intdata;

—[10]_}node;

标准答案:structaa

*我的答案:

*lhead,*rchild;|

【解析】结构体对链表的定义。

第n题:

(11)以下程序的功能是建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为

时,表示输入结束(链表头结点的data域不放数据,表空的条件是phonext二二NULL),请填空。

#include<stdio.h>

structlist{intdata;structlist*next;};

structlist*creatlist()

{structlist*p,*q,*ph;inta;ph=(structlist*)malloc(sizeof(structlist));

p=q=ph;printf("Inputanintegernumber;entre-1toend:\nM);

scanf("%d",&a);

while(a!=-l)

{p=(structlist*)malloc(sizeof(structlist));

—[11]—=a;q->next=p;_[12]_=p;scanf("%d",&a);}

p->next='\O';return(ph);}

mainO

{structlist*head;head=creatlistO;}

X标准答案:p->data|q|我的答案:

【解析】本题考杳的是链表这一数据结构对结构体变量中数据的引用。链表的特点是结构体变量中有两个域

•个是数据,另•个是指向该结构体变量类型的指针,用以指明链表的下•个结点。

第12题:

(12)以卜.程序中函数fun的功能是:构成一个如图所示的带头结点的单向链表,在结点的数据域中放入了具

有两个字符的字符串。函数disp的功能是显示输出该单链表中所有结点中的字符串。请填空完成函数disp。

head----------►|-----------►ab|-----------►fed||--------,efI\6

#include<stdio.h>

typedefstructnode/*链表结点结构*/

{charsub[3];

structnode*next;

}Node;

Nodefun(chars)/*建立链表*/

{)

voiddisp(Node*h)

{Node*p:

p=h->next;

while(_[13]_)

{printf("%s\n",p->sub);p=_[14]_;}

}

mainO

{Node*hd:

hd=funO;disp(hd);printf("\n");

)

X标准答案:p!=NULL|p->next|我的答案:

【解析】NULL的ASCH码和'\O'的ASCII码相等,条件到NULL停止循环。把下一个结点的地址赋给p

这样循环,结点可以依次向后取值。

第1题:

(1)有以下程序:

#include<stdio.h>

mainQ

{inta=l,b=2,c=3,x;

x=(aAb)&c;printf("%d\n",x);

)

程序的运行结果是()。

A)O

B)1

C)2

D)3

M标准答案:D我的答案:

【解析】本题考查的是位运算符的使用。1、2、3的二进制形式分别为00000001、00000010.00000013.

首先计算1A2的值为00000011,再将其与3进行"与"运算,得到的结果为00000011,即十进制数3。故本

题答案为D)。

第2题:

⑵已知inta=l,b=3则的值为().

A)3

B)1

C)2

D)4

奖标准答案:C我的答案:

【解析】人是按位异或运算,如果对应位不同则结果为1,相同则为0。

第3题:

(3)有以下程序:

#include<stdio.h>

main()

{inta=5,b=l,t;

t=(a<<2|b);printf("%d\n",t);

)

程序运行后的输出结果是()o

A)21

B)ll

C)6

D)1

M标准答案:A我的答案:

【解析】按位或运算符”「是双目运算符,其功能是参与运算的两数各对应的二进位相或。左移运算符.<<.

是双目运算符,其功能把”<<,左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,

高位丢弃,低位补0。将5变换为二进制数为101,左移2位后为10100,1转换为二进制数为00001,10100亏

00001进行或运算后为10101,再将其转换为十进制数为21。因此,本题答案为A)。

第4题:

(4)有以下程序:

#include<stdio.h>

main()

{chara=4;

printf("%d%nM,a=a<<l);

)

程序的运行结果是()。

A)40

B)16

C)8

D)4

M标准答案:c我的答案:

【解析】左移运算符的功能是把其左边的运算数的各二进制位全部左移若干位,由”<<■■右边的数指定移动

的位数,高位丢弃,低位补0。如a<<l,即把a的各个二进制位向左移动1位,a=00000100(卜进制数为

4),左移1位后为00001000(十进制数为8)。

第5题:

(5)下面程序段的输出为()。

#include"stdio.h"

main()

{printf("%d\n\12<<2);}

A)0

B)47

C)48

D)24

M标准答案:c我的答案:

【解析】<<为左移运算符,运算符的左边是移位对象:右边是整型表达式,代表左移的位数,左移时,不

端(低位)补o;左端(高位)移出的部分舍弃。

第6题:

(6)有以下程序:

#include<stdio.h>

mainO

{unsignedchara=8,c;

c=a>>3;

printf(n%dn,c);

)

程序运行后的输出结果是()o

A)32

B)16

C)1

D)0

*标准答案:C我的答案:

【解析】在程序中对无符号字符变量a的值执行右移3位运算后,其值等于1,再赋给变量c。

第7题:

(7)若有以下程序段:

intr=8;

printf("%d\n",r>>l);

输出结果是()。

A)16

B)8

C)4

D)2

M标准答案:c我的答案:

【解析】8用二进制表示为1000,右移1位后为0100,即十进制4。

第1题:

(1)有以下程序:

#include<stdio.h>

main()

{FILE*fp;charstr[10];

fp=fopen(wmyfile.datM,"wM);

fputs("abe"/fp);fclose(fp);

fp=fopen(nmyfile.dat","a+");

fprintf(fp/%d",28);

rewind(fp);

fscanf(fp,"%s",str);puts(str);

fclose(fp);

)

程序运行后的输出结果是()o

A)abc

B)28c

C)abc28

D)因类型不一致而出错

M标准答案:c我的答案:

【解析】首先打开文件写入字符串"abc”,然后关闭文件,再打开时文件指针定位到了最后,写入“28”,

后重定位位置指针到开始,读取字符串为“abc28\

第2题:

(2)有以下程序:

#include<stdio.h>

main()

{FILE*f;

f=fopen("filea.txt","w");

fprintf(f,"abc");

fclose(f);

)

若文本文件filea.txt中原有内容为:hello,则运行以上程序后,文件filea.txt中的内容为()。

A)helloabc

B)abclo

C)abc

D)abchello

X标准答案:C我的答案:

【解析】"W"表示建立一个供写入的文件。如果文件不存在,系统将用在fopen调用中指定的文件名建立

个新文件,如果指定的文件已存在,则将从文件的起始位置开始写入,文件中原有的内容将全部消失。

第3题:

(3)有以下程序:

#include<stdio.h>

mainO

{FILE*pf;

char*sl="China",*s2="Beijingn;

pf=fopen("abc.dat","wb+");

fwrite(s2,7,1,pf);

rewind(pf):/*文件位置指针回到文件开头*/

fwrite(sl,5,1,pf);

fclose(pf);

)

以上程序执行后abc.dat文件的内容是()。

A)China

B)Chinang

C)ChinaBeijing

D)BeijingChina

M标准答案:B我的答案:

【解析】该题目考查文件相关知识。”wb+”用于打开或建立二进制文件并允许对其进行读和写操作。文件

作先写入了s2,然后将文件指针移动到文件夹,再写入si,这样si就会覆盖掉一部分s2的内容。

第4题:

(4)有以卜程序:

#include<stdio.h>

mainO

{FILE*fp:inta[10]={1,2,3),i,n:

fp=fopen(ndl.dat","w"):

for(i=0:i<3;i++)fprintf(fp,"%d",a[i]);

fprintf(fp,"\n");

fclose(fp);

fp=fopen(ndl.dat",T);

fscanf(fp,"%d",&n);

fclose(fp);

printf(n%d\n",n);

}

程序的运行结果是()o

A)12300

B)123

C)1

D)321

X标准答案:B我的答案:

【解析】在函数中首先把整型数组a[l(^中的每个元素写入文件dl.dat中,然后再次打开这个文件,把文

dl.dat中的内容读入到整型变量n中,最后输出变量n的值。所以正确答案为B)。

第5题:

(5)假定当前盘符下有两个如下文本文件:

文件名al.txta2.txt

内容123#321#

则下面程序段执行后的结果为()。

#include"stdio.h"

voidfc(FILE*p)

{charc;

while((c=fgetc(p))!='#')putchar?;)

main()

{FILE*fp;

fp=fopen("al.txt","r");

fc(fp);

fclose(fp);

fp=fopen("a2.txt","r");

fc(fp);

fclose(fp);

putchar('\n');}

A)123321

B)123

0321

D)以上答案都不正确

M标准答案:A我的答案:

【解析】本题的功能是顺序的读两个文本文件,依次输出。当打开文件时出现错误,fopen函数将返回NULI。

第6题:

(6)如果需要打开一个已经存在的非空文件"Demo”进行修改,卜一面选项中正确的是()。

A)fp=fopen("Demo","r");

B)fp=fopen("Demo","ab+");

C)fp=fopen("Demo","w+");

D)fp=fopen("Demo'7r+");

M标准答案:D我的答案:

【解析】此题考查文件打开方式对文件操作的影响。由于打开文件进行修改,可见选项A)是错误的,因为比

种方式打开时,只能读,不能写,当然无法修改;选项B)是以追加方式“ab+”打开文件读写,以这种方式打

开时,新写入的数据只能追加在文件原有内容之后,但可以对以前的数据读出。换言之,"ab+"或匕+"方式

打文件后,对于写操作,文件指针只能定位在文件的原有内容之后,但对于读操作,文件指针可以定位在全

文件范围内,可见,按此种方式打开文件不能实现文件内容的修改;选项C)以"w+"方式打开文件,此时,

原文件中已存在的内容都被清除,但新写入文件的数据可以被再次读出或再次写入,故也不能实现对文件的

修改。只有以"r+”方式打开文件时,才允许将文件原来数据读出,也允许在某些位置上再写入,从而实现对文

件的修改。

第7题:

(7)阅读以下程序及对程序功能的描述,其中正确的是()。

#include<stdio.h>

mainO

{FILE*in,*out;

char,infile[10],outfile[10];

printf("Entertheinfilename:\n");

scanf("%s",infile);

printf("Entertheoutfilename:\n");

scanf("%s",outfile);

if((in=fopen(infile,"r"))==NULL)

{printf("cannotopeninfile\n");

exit(O);)

if((out=fopen(outfile,"w"))==NULL)

{printf("cannotopenoutfile\n");

exit(O);}

while(!Feof(in))fputc(fgetc(in),out);

fclose(in);fclose(out);}

A)程序完成将磁盘文件的信息在屏幕上显示的功能

B)程序完成将两个磁盘文件合二为一的功能

C)程序完成将一个磁盘文件复制到另一个磁盘文件中

D)程序完成将两个磁盘文件合并并在屏幕上输出

X标准答案:C我的答案:

【解析】本题中,最主要的是掌握几个有关文件的函数的应用。

第8题:

(8)有以下程序:

#include<stdio.h>

mainO

{FILE*fp;inta[10]={l,2,3,0,0}J;

fp=fopen("d2.dat","wb");

fwrite(a,sizeof(int),5,fp);

fwrite(a,sizeof(int),5,fp);

fclose(fp);

fp=fopen(hd2.dat","rb");

fread(a,sizeof(int),10,fp);

fclose(fp);

for(i=0;i<10;i++)printf("%d",a[i]);

)

程序的运行结果是()。

A)l,2,3,0,0,0,0,0,0,0,

B)l,2,3,1,2,3,0,0,0,0,

C)123,0,0,0,0,123,0,0,0,0,

D)l,2,3,0,0,1,2,3,0,0,

X标准答案:D我的答案:

【解析】本题考杳文件读写函数fread和fwrite的用法。fwrite函数将数组a的前5个元素输出到文件f,

中两次,共10个字节,再调用fread函数从文件fp中读取这10个字节的数据到数组a中,此时数组a的M

容就变为{1,2,3,001,2,3,0,0},最后的输出结果为“1,2,3,0,0,1,2,3,0,0,"。故本题答案为D)。

第9题:

(9)有以卜程序:

#include<stdio.h>

mainO

{FILE*fp;inti,a[6]={1,2,3,4,5,6};

fp=fopen("d3.dat","w+b");

fwrite(a,sizeof(int),6,fp);

fseek(fp,sizeof(int)*3,SEEK_SET):/*该语句使读文件的位置指针从文件头向后移动3个int型

数据*/

fread(a,sizeof(int),3,fp);fclose(fp);

for(i=0;i<6;i++)printf("%d/,a[i]);

)

程序运行后的输出结果是()o

A)4,5,6,456,

B)L2,3,4,5,6,

04,5,6,123,

D)65432,l,

X标准答案:A我的答案:

【解析】首先利用fwrite函数将数组a中的数据写到文件中,接着fseek函数的功能是读文件的位置,指彳

从文件头向后移动3个int型数据,这时文件位黄指针指向的是文件中的第4个int数据"4",然后fread(

数将文件fp中的后3个数据4、5、6读到数组a中,这样就覆盖了数组中原来的前3项数据。最后数组中f

数据就成了{4,5,6,4,5,6,}。

第10题:

(lO)fwrite函数的一般调用形式是()。

A)fwrite(buffer,count,size,fp);

B)fwrite(fp,size,count,buffer);

C)fwrite(fp/count,size,buffer);

D)fwrite(buffer;size,count,fp);

M标准答案:D我的答案:

【解析】fwrite的形式是fwrite(buffersize,count,fp),buffer表示准备输出的数据块的起始地址,size

示每个数据块的字节数,count用来指定每写一次或输出的数据块,fp为文件指针。

第11题:

(11)有以下程序:

#include<stdio.h>

mainO

{FILE*fp;intk,n,a[6]={1,234,5,6};

fp=fopen(nd2.dat","w");

fprintf(fp,"%d%d%d\nn,a[0],a[1],a[2]);

fprintf(fp,"%d%d%d\nn,a[3],a[4],a[5]);

fclose(fp):

fp=fopen("d2.dat","r");

fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);

fclose(fp);

)

程序运行后的输出结果是()o

A)12

B)14

C)1234

D)123456

X标准答案:D我的答案:

【解析】将有6个元素的整型数组分两行输出到•个文件中,因为输出的都是数字并且每行都没有分隔符,

所以当再对其进行读取操作时,每一行都会被认为是一个完整的数,而换行符则作为它们的分隔符。

第12题:

(12)有以下程序:

#include<stdio.h>

main()

{FILE*fp;inti=20,j=30,k,n;

fp=fopen("dl.dat"/w");

fprintf(fp,"%d\n"J);fprintf(fp,"%d\n",j);

fclose(fp);

fp=fopen("dl.dat\"r");

fscanf(fp/'%d%d",&k,&n);printf("%d%d\n",k,n);

fclose(fp);}

程序运行后的输出结果是()o

A)2030

B)2050

C)3050

D)3020

M标准答案:A我的答案:

【解析】本题中,最主要的是掌握几个有关文件函数的应用。

第13题:

(13)设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为()«

A)EOF

B)非0值

C)0

D)NULL

M标准答案:B我的答案:

【解析】函数feof的功能是:测试fp所指文件的位置是否已达到文件尾,如果达到文件尾,则函数返回*

。值,否则返回0,表示文件尚未结束。

第14题:

(14)函数rewind的作用是()。

A)使文件位置指针重新返回文件的开始位置

B)将文件位置指针指向文件中所要求的特定位置

C)使文件位置指针指向文件的末尾

D)使文件位置指针自动移至下个字符位置

3c标准答案:A我的答案:

【解析】函数rewind的功能是将文件指针重新指向一个流的开头,并且无返值。

第1题:

(1)以下程序用来判断指定文件是否能正常打开,请填空。

#include<stdio.h>

main()

{FILE*fp;

if(((fp=fopen("test.txt","rM))==_[1]_))

printff未能打开文件!\n)

else

printf("文件打开成功!\n)

)

X标准答案:NULLI我的答案:

【解析】本题考查fopen函数的用法。若fopen不能实现打开任务时,函数会带回一个出错信息,出错用

因可能是磁盘出现故障,磁盘无法建立新文件等,此时fopen函数将带回一个空指针NULL。因此通过判断

返回I值是否为NULL即可判断是否读取文件正确。

第2题:

(2)以下程序的功能是从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空。

#include<stdio.h>

main()

{FILE*fp;charch:

fp=fopen(_12]—);

ch=fgetc(fp);

while(!feof(fp)){putchar(ch);ch=fgetc(fp);}

putchar('\n');fclose(fp);

}

X标准答案:"filea.dat",TI我的答案:

【解析】fopen函数的调用方式通常为fopen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat

文件,并且读取文件中的内容。所以空白处应当填入"filea.dat",T\

第3题:

(3)以下程序运行后的输出结果是—【3】

#include<stdio.h>

mainO

{FILE*fp;intx[6]={l,2,3,4,5,6},i;

fp=fopen("test.dat","wb");

fwrite(x,sizeof(int),3,fp);

rewind(fp);

fread(x,sizeof(int),3,fp);

for(i=0;i<6;i++)printf("%dn,x[i]);

printf("w);

fclose(fp);

}

X标准答案:1234561我的答案:

【解析】首先函数fwrite从数组x中读取3个元素x[l],x[2],x[3]写入到文件testdat中,然后调用函效

rewind把文件位置指针置于文件开头,再调用fread函数从testdat中读取3个整数x[l],x[2],x[3]到我

组x中,最后输出数组x中各个元素的值。

第4题:

⑷以下程序的运行结果是—[4]_o

#include<stdio.h>

mainO

{FILE*fp;

inta[10]={l,2,3,0,0),i;

fp=fopenCd2.dat,,,"wb");

fwrite(a,sizeof(int),5,fp);

fwrite(a,sizeof(int),5,fp);

fclose(fp);

fp=fopen("d2.dat",,,rb");

fread(a,sizeof(int),10,fp);

fclose(fp);

for(i=0;i<10;i++)printf("%d",aLi]);

X标准答案:12300123001我的答案:

【解析】本题考查文件读写函数fread和fwrite的用法。fwrite函数将数组a的前5个元素输出到文件乃

中两次,共10个字节,再调用fread函数从文件fp中读取这10个字节的数据到数组a中,此时数组a的M

容就变为{1,2,3,0,0,123,0,0},最后的输出结果为"1230012300”。

第5题:

(5)fseek函数的正确调用形式是—[5]_«

标准答案:fseek(文件指针,位

X我的答案:

移量,起始点)1

【解析】本题考查函数fseek的用法。fseek函数的调用形式为:

第1题:

(1)算法的有穷性是指()。

A)算法程序的运行时间是有限的

B)算法程序所处理的数据量是有限的

C)算法程序的长度是有限的

D)算法只能被有限的用户使用

M标准答案:A我的答案:

【解析】算法具有6个特性。①有穷性:一个算法必须(对任何合法的输入值)在执行有穷步之后结束,且每一

步都可在有限时间内完成,即运行时间是有限的。②确定性:算法中每一条指令必须有确切的含义,读者理

解时不会产生歧义。③可行性:•个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算

执行有限次来实现。④输入:一个算法有零个或多个输入,这些输入取自某个特定的对象的集合。⑤输出

一个算法有一个或多个输出。

第2题:

(2)下面叙述中正确的是()。

A)算法的执行效率与数据的存储结构无关

B)算法的空间复杂度是指算法程序中指令(或语句)的条数

C)算法的有穷性是指算法必须能在执行有限个步骤之后终止

D)以上三种描述都不对

%标准答案:C我的答案:

【解析】算法的执行效率不仅与问题的规模有关,还与数据的存储结构仃关;算法的空间复杂度是指执行算

法所需要的内存空间;算法的有穷性是指算法必须能在有限的时间内执行完,即算法必须能在执行有限个??

骤之后终止。

第3题:

(3)下列叙述中正确的是()。

A)算法的效率只与问题的规模有关,而与数据的存储结构无关

B)算法的时间复杂度是指执行算法所需要的计算工作量

C)数据的逻辑结构与存储结构是一一对应的

D)算法的时间复杂度与空间复杂度一定相关

M标准答案:B我的答案:

【解析】根据时间复杂度和空间复杂度的定义可知,算法的时间复杂度与空间复杂度并不相关。数据的逻帆

结构就是数据元素之间的逻辑关系,它是从逻辑上描述数据元素之间关系的,是独于计算机的;数据的存

储结构是研究数据元素和数据元素之间的关系如何在计算机中表示的,它们并非一一对应。算法的执行效理

不仅与问题的规模有关,还与数据的存储结构有关。

第4题:

(4)下列叙述中正确的是()。

A)•个算法的空间复杂度大,则其时间复杂度也必定大

B)一个算法的空间复杂度大,则其时间复杂度必定小

C)一个算法的时间复杂度大,则其空间复杂度必定小

D)上述三种说法都不对

M标准答案:D我的答案:

【解析】算法的复杂度主要包括时间复杂度和空间复杂度。算法的时间复杂度,是指执行算法所需要的计§

工作量,可以用执行算法的过程中所需基本运算的执行次数来度量;算法的空间复杂度,是指执行这个算i

所需要的内存空间。根据各自的定义可知,算法的时间复杂度与空间复杂度并不相关。

第5题:

(5)算法的时间复杂度是指()。

A)执行算法程序所需要的时间

B)算法程序的长度

C)算法执行过程中所需要的基本运算次数

D)算法程序中的指令条数

M标准答案:c我的答案:

【解析】算法的复杂度主要包括算法的时间复杂度和空间复杂度。所谓算法的时间复杂度是指执行算法E

需要的计算工作量,即算法执行过程中所需要的基本运算的次数;算法的空间复杂度•股是指执行这个算i

所需要的内存空间。

第6题:

(6)下列叙述中正确的是()。

A)有一个以I:根结点的数据结构不一定是非线性结构

B)只有一个根结点的数据结构不一定是线性结构

C)循环链表是非线性结构

D)双向链表是非线性结构

3c标准答案:B我的答案:

【解析】线性结构指的是数据元素之间存在着”一对一■线性关系的数据结构,这样的结构中只有一个根结点

如循环链表和双向链表;非线性结构指的是数据元素之间存在着"一对多"非线性关系的数据结构,这样的?

构中可能有•个根结点,如树形结构,也可能有多个根结点,如网状结构。故本题答案为B)。

第7题:

(7)下列叙述中正确的是()。

A)程序执行的效率与数据的存储结构密切相关

B)程序执行的效率只取决于程序的控制结构

C)程序执行的效率只取决于所处理的数据量

D)以上三种说法都不对

3c标准答案:A我的答案:

【解析】程序执行的效率与很多因素有关,如数据的存储结构、程序所处理的数据量、程序所采用的算法等

顺序存储结构和链式存储结构在数据插入和删除操作上的效率就存在差别,其中链式存储结构在此类操作一

的效率要高一些。

第8题:

(8)数据结构作为计算机的一门学科,主要研究数据的逻辑结构,对各种数据结构进行的运算,以及()。

A)数据的存储结构

B)计算方法

Q数据映象

D)逻辑存储

M标准答案:A我的答案:

【解析】数据结构作为计算机的•门学科,主要研究和讨论以下三个方面的问题:①数据集合中各数据人

素之间所固有的逻辑关系,即数据的逻辑结构;②在对数据进行处理时,各数据元素在计算机中的存储关系,

即数据的存储结构;③对各种数据结构进行的运算。

第9题:

(9)数据结构中,与所使用的计算机无关的是数据的()。

A)存储结构

B)物理结构

C)逻辑结构

D)物理和存储结构

*标准答案:C我的答案:

【解析】数据结构概念一般包拈数据的逻辑结构、存储结构及数据上的运算集合等。数据的逻辑结构只抽

象地反映数据元素之间的逻辑关系,而不管它在计算机中的存储形式。

第10题:

(10)下列叙述中正确的是()。

A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的

B)线性表的链式存储结构所需要的存储空间一般要大于顺序存储结构

C)线性表的链式存储结构所需要的存储空间一般要小于顺序存储结构

D)上述三种说法都不对

X标准答案:B我的答案:

【解析】线性表的顺序存储结构是把线性表中相邻的元素存放在相邻的内存单元中,而链式存储结构是用一

组任意存储单元来存放表中的数据元素,为了表示出每个元素与其直接后继元素之间的关系,除了存储元强

本身的信息外,还需存储•个指示其直接后继的指针。故线性表的链式存储结构所需的存储空间一股要大二

顺序存储结构,答案为B)。

第11题:

(U)线性表L=(al,a2,a3,...,ai,...,an),下列说法中正确的是()。

A)每个元素都有一个直接前件和直接后件

B)线性表中至少要有个元素

C)表中各元素的排列顺序必须是由小到大或由大到小

D)除第个元素和最后个元素外,其余每个元素都有且只有•个直接前件和直接后件

*标准答案:D我的答案:

【解析】线性表可以为空表;第个元素没有直接前件,最后个元素没有直接后件;在线性表的定义中,

元索的排列并没有规定大小顺序。

第12题:

Q2)线性表的顺序存储结构和线性表的链式存储结构分别是()。

A)顺序存取的存储结构、顺序存取的存储结构

B)随机存取的存储结构、顺序存取的存储结构

C)随机存取的存储结构、随机存取的存储结构

D)任意存取的存储结构、任意存取的存储结构

X标准答案:B我的答案:

【解析】顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公共

LOC(ai)=LOC(al)+(i-l)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都

得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。

第13题:

(13)下列关于栈的叙述中正确的是()。

A)栈顶元素最先会被删除

B)栈顶元素最后才会被删除

C)栈底元素永远不会被删除

D)以上三种说法都不对

X标准答案:A我的答案:

【解析】栈是限定在一端进行插入与删除的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另

一端为栈底(bottom);栈底固定,而栈顶浮动。栈按照后进先出的原则存储数据,先进入的数据被压入栈底,

最后进入的数据在栈顶,需要读数据时从栈顶开始弹出数据(最后一个进入数据被第一个读出来)。所以栈

的元素最先被删除,本题答案为A)。

第14题:

Q4)下列叙述中正确的是()。

A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化

B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化

Q在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化

D)I:述三种说法都不对

M标准答案:c我的答案:

【解析】栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的

另一端称为栈底。当有新元素进栈时,栈顶指针向上移动;当有元素出栈时,栈顶指针向下移动。在栈中栈

底指针不变,栈中元素随栈顶指针的变化而动态变化,故答案为C)。

第15题:

(15)下列数据结构中,能够按照■■先进后出"原则存取数据的是()。

A)循环队列

B)栈

C)队列

D)二叉树

M标准答案:B我的答案:

【解析】栈是限定只在一端进行插入与删除的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底

栈顶元素总是后被插入的元素、也是最先被删除的元素-;栈底元素总是最先被插入的元素,也是最后才能技

删除的元素。栈是按照“先进后出”或“后进先出”的原则组织数据的。

第16题:

(16)对于循环队列,下列叙述中正确的是()。

A)队头指针是固定不变的

B)队头指针一定大于队尾指针

C)队头指针一定小于队尾指针

D)队头指针可以大于队尾指针,也可以小于队尾指针

X标准答案:D我的答案:

【解析】循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指

是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,有时也可能是队尾指针大于队头指针,

答案为D)。

第17题:

(17)支持子程序调用的数据结构是(

A)栈

B)树

C)队列

D)二又树

X标准答案:A我的答案:

【解析】栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用于函数时要首4

保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置

继续向下执行,这种调用符合栈的特点,因此本题的答案为A)。

第18题;

(18)一个栈的初始状态为空。现将元素1、2、3、4,5、A、B、C、D、E依次入栈,然后依次出栈,则元

素出栈的顺序是()。

A)12345ABCDE

B)EDCBA54321

OABCDE12345

D)54321EDCBA

X标准答案:B我的答案:

【解析】栈的特点是先进后出,所以全部入栈后再全部出栈所得的序列顺序应该与入栈序列的顺序相反。

第19题:

(19)下列叙述中正确的是()。

A)循环队列有队头和队尾两个指针,因此循环队列是非线性结构

B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

C)在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

D)循环队列中元素的个数是由队头指针和队尾指针共同决定的

M标准答案:D我的答案:

【解析】循环队列是线性表的一种,所以选项A)错误。循环队列的入队和出队需要队尾指针和队头指针共1(1

完成,所以选项B)和C)错误。

第20题:

(20)下列关于栈的叙述中正确的是()o

A)栈按”先进先出“组织数据

B)栈按"先进后出”组织数据

Q只能在栈底插入数据

D)不能删除数据

M标准答案:B我的答案:

【解析】在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的•端称为栈底。栈顶元素总是最

后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才会被删除

的元素。因而栈是按照“先进后出"或"后进先出”的原则组织数据的。

第21题:

(21)栈和队列的共同特点是()。

A)都是先进先出

B)都是先进后出

C)只允许在端点处插入和删除元素

D)没有共同点

*标准答案:C我的答案:

【解析】栈和队列都是•种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:

栈只允许在表的一端进行插入或删除操作,是一种"后进先出"的线性表;而队列只允许在表的一端进行插八

操作,在另一端进行删除操作,是一种"先进先出”的线性表。

第22题:

(22)栈通常采用的两种存储结构是()。

A)顺序存储结构和链式存储结构

B)散列方式和索引方式

C)链表存储结构和数组

D)线性存储结构和非线性存储结构

3c标准答案:A我的答案:

【解析】和线性表类似,栈也有两种存储方法,一是顺序栈,二是链式枝。栈的顺序存储结构是利用一”

地址连续的存储单元一次存储自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素的位置,由于栈的

操作是线性表操作的特例,相对而言,链式栈的操作更易于实现。

第23题:

(23)如果进栈序列为el,e2,e3,e4,则可能的出栈序列是()。

A)e3,el,e4,e2

B)e2,e4,e3,el

C)e3,e4,el,e2

D)任意顺序

X标准答案:B我的答案:

【解析】由栈"后进先出"的特点可知:A)中el不可能比e2先出,C)中eL不可能比e2先出,D)中栈是先进

第24题:

(24)某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)()。

A)3

B)4

C)6

D)7

X标准答案:D我的答案:

【解析】叶子结点个数=度为2的结点个数+1,在此题中叶子结点个数为L说明度为2的结

温馨提示

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

评论

0/150

提交评论