网友您好, 请在下方输入框内输入要搜索的题目:

题目内容 (请给出正确答案)

●试题四

阅读下列程序说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

本程序从若干个原始文件合并成的合并文件中恢复出其中一个或全部原始文件。所有文件均作为二进制文件进行处理。合并文件中先顺序存储各原始文件,然后顺序存储各原始文件的控制信息,即文件名、文件长度和在合并文件中的位置(偏移量 )。其结构为:

typedef struct{char fname [256]/*原始文件名*/

long length;/*原始文件长度(字节数)*/

long offset;/*原始文件在合并文件中的位置(偏移量)*/

}FileInfo;

在合并文件最后存储如下一个特殊的标志信息作为合并文件的结束标记:

FileInfo EndF1ag={"Combined File",0,_offset};

其中_offset是第一个原始文件的控制信息在合并文件中的位置(偏移量)。

启动本程序的命令行的格式是:

程序名合并文件名[原始文件名]

如果不指定原始文件名,默认恢复合并文件中的所有原始文件。

程序中涉及的部分文件操作的库函数简要说明如下:

int fread (void *buffer,int size,int count,FILE *fbin):从二进制文件流fbin中读取count块长度为size字节的数据块到buffer指向的存储区。返回值为实际读取的数据块数。

int fwrite(void *buffer,int size,int count,FILE *fbin):各参数和返回值的意义与fread相同,但对文件进行写操作。

int fseek(FILE *fbin,long offset,int position):将文件流fbin的读/写位置以position为基准移动offset字节。position的值可以是SEEK_SET(文件头),SEEK_CUR(当前位置),SEEK_END(文件尾);offset为正,表示向文件尾方向移动,为负表示向文件头方向移动,为零表示到基准位置。

long ftell(FILE *fbin):返回文件流fbin的当前读/写位置(相对于文件头的偏移量)。上述偏移量均以字节为单位,即偏移字节数。

【程序】

#include <stdio.h>

#include<string.h>

typedef struct{char fname[256];long length;long offset;

}FileInfo;

void copyfile(FILE *fin,FILE *fout,int fsize)

{char buf[1024];int siz=1024;

while(fsize !=0){/*每次复制siz个字节,直至复制完fsize个字节*/

if(siz >fsize) (1) ;

fread(buf,1,siz,fin);fwrite(buf,1,siz,fout);

fsize= (2) ;}

}

int dofile(FILE *fin,FileInfo *inp)

{ long offset;

FILE *fout;

if((fout=fopen(inp->fname,"wb"))==NULL){

printf("创建文件错误:%s\n",inp->fname);

return 1;

}

offset= (3) ;/*保留合并文件读/写位置*/

fseek( (4) );/*定位于被恢复文件首*/

copyfile(fin,fout,inp->length);

fclose(fout);

printf("\n---文件名:%\n文件长:%1d.

\n",inp->fname,inp->length);

(5) ;/*恢复合并文件读/写位置*/

return 0;

}

int main(int argc,char *argv[])

{FileInfo finfo;

char fname[256];FILE *fcmbn;

if(argc<2){printf("输入合并文件名:");scanf("%s",fname);}

else strcpy(fname,argv[1]);

if((fcmbn=fopen(fname,"rb"))==NULL){

printf("文件打开错误:%s\n",fname);return 1;

}

fseek(fcmbn,-sizeof(FileInfo),SEEK_END);/*定位于合并文件末尾的标志信息*/

fread(&finfo,1,sizeof(FileInfo),fcmbn);

if(finfo.length!=0 || strcmp(finfo.fnane,"CombinedFile")){

printf("指定的文件不是合法的合并文件\n");

fclose(fcmbn);return 2;

}

fseek(fcmbn,finfo.offset,SEEK_SET);/*定位于首个原始文件的控制信息*/

for(;;){/*恢复一个(argc>2)或全部(argc=2)原始文件*/

fread(&finfo,1,sizeof(FileInfo),fcmbn);

if(finfo.length==0)break;

if(argc>2 && strcmp(finfo.fname,argv[2]))continue;

if(dofile(fcmbn,&finfo)!=0)break;

}

fcolse(fcmbn);return 0;

}


参考答案

更多 “ ●试题四阅读下列程序说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】本程序从若干个原始文件合并成的合并文件中恢复出其中一个或全部原始文件。所有文件均作为二进制文件进行处理。合并文件中先顺序存储各原始文件,然后顺序存储各原始文件的控制信息,即文件名、文件长度和在合并文件中的位置(偏移量 )。其结构为:typedef struct{char fname [256]/*原始文件名*/long length;/*原始文件长度(字节数)*/long offset;/*原始文件在合并文件中的位置(偏移量)*/}FileInfo;在合并文件最后存储如下一个特殊的标志信息作为合并文件的结束标记:FileInfo EndF1ag={"Combined File",0,_offset};其中_offset是第一个原始文件的控制信息在合并文件中的位置(偏移量)。启动本程序的命令行的格式是:程序名合并文件名[原始文件名]如果不指定原始文件名,默认恢复合并文件中的所有原始文件。程序中涉及的部分文件操作的库函数简要说明如下:int fread (void *buffer,int size,int count,FILE *fbin):从二进制文件流fbin中读取count块长度为size字节的数据块到buffer指向的存储区。返回值为实际读取的数据块数。int fwrite(void *buffer,int size,int count,FILE *fbin):各参数和返回值的意义与fread相同,但对文件进行写操作。int fseek(FILE *fbin,long offset,int position):将文件流fbin的读/写位置以position为基准移动offset字节。position的值可以是SEEK_SET(文件头),SEEK_CUR(当前位置),SEEK_END(文件尾);offset为正,表示向文件尾方向移动,为负表示向文件头方向移动,为零表示到基准位置。long ftell(FILE *fbin):返回文件流fbin的当前读/写位置(相对于文件头的偏移量)。上述偏移量均以字节为单位,即偏移字节数。【程序】#include stdio.h#includestring.htypedef struct{char fname[256];long length;long offset;}FileInfo;void copyfile(FILE *fin,FILE *fout,int fsize){char buf[1024];int siz=1024;while(fsize !=0){/*每次复制siz个字节,直至复制完fsize个字节*/if(siz fsize) (1) ;fread(buf,1,siz,fin);fwrite(buf,1,siz,fout);fsize= (2) ;}}int dofile(FILE *fin,FileInfo *inp){ long offset;FILE *fout;if((fout=fopen(inp-fname,"wb"))==NULL){printf("创建文件错误:%s\n",inp-fname);return 1;}offset= (3) ;/*保留合并文件读/写位置*/fseek( (4) );/*定位于被恢复文件首*/copyfile(fin,fout,inp-length);fclose(fout);printf("\n---文件名:%\n文件长:%1d.\n",inp-fname,inp-length);(5) ;/*恢复合并文件读/写位置*/return 0;}int main(int argc,char *argv[]){FileInfo finfo;char fname[256];FILE *fcmbn;if(argc2){printf("输入合并文件名:");scanf("%s",fname);}else strcpy(fname,argv[1]);if((fcmbn=fopen(fname,"rb"))==NULL){printf("文件打开错误:%s\n",fname);return 1;}fseek(fcmbn,-sizeof(FileInfo),SEEK_END);/*定位于合并文件末尾的标志信息*/fread(finfo,1,sizeof(FileInfo),fcmbn);if(finfo.length!=0 || strcmp(finfo.fnane,"CombinedFile")){printf("指定的文件不是合法的合并文件\n");fclose(fcmbn);return 2;}fseek(fcmbn,finfo.offset,SEEK_SET);/*定位于首个原始文件的控制信息*/for(;;){/*恢复一个(argc2)或全部(argc=2)原始文件*/fread(finfo,1,sizeof(FileInfo),fcmbn);if(finfo.length==0)break;if(argc2 strcmp(finfo.fname,argv[2]))continue;if(dofile(fcmbn,finfo)!=0)break;}fcolse(fcmbn);return 0;} ” 相关考题
考题 ●试题四阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。【函数】void QuickSort(int A[],int s,int t){int i=s,j=t+1,temp;int x=A[s];do{do i++;while (1) ;do j--;while(A[j]x);if(ij){temp=A[i]; (2) ; (3) ;}}while(ij);A[a]=A[j];A[j]=x;if(si-1) (4) ;if(j+1t) (5) ;}

考题 阅读下列程序说明和C++程序,把应填入其中(n)处的字句,写在对应栏内。【说明】阅读下面几段C++程序回答相应问题。比较下面两段程序的优缺点。①for (i=0; i<N; i++ ){if (condition)//DoSomething…else//DoOtherthing…}②if (condition) {for (i =0; i<N; i++ )//DoSomething}else {for (i=0; i <N; i++ )//DoOtherthing…}

考题 ●试题二阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】该程序运行后,输出下面的数字金字塔【程序】includestdio.hmain (){char max,next;int i;for(max=′1′;max=′9′;max++){for(i=1;i=20- (1) ;++i)printf(" ");for(next= (2) ;next= (3) ;next++)printf("%c",next);for(next= (4) ;next= (5) ;next--)printf("%c",next);printf("\n");}}

考题 试题三(共 15 分)阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。

考题 (a)智能网概念模型中分布功能平面模型如下图所示,请根据此图将应填入(n)处的 字句写在答题纸的对应栏内。

考题 ()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]下面程序是一个带参数的主函数,其功能是显示在命令行中输入的文本文件内容。[C语言函数]#include"stdio.h"main(argc,argv) int argc; char *argv[]; { (1) ; if((fp=fopen(argv[1],”r’’))== (2) ) { printf(”file not open!\n”);exit(0);} while( (3) ) putchar( (4) ); (5); }

考题 阅读下列说明和C++-代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。 【C++代码】 #include using namespace std; class invoice{ public: (1){ cout

考题 阅读下列说明和C++代码,回答问题,将解答填入答题纸的对应栏内。 【说明】某航空公司的会员积分系统将其会员划分为:普卡 (Basic)、银卡(Silver)和金卡 (Gold) 三个等级。非会员 (NonMember) 可以申请成为普卡会员。会员的等级根据其一年内累积 的里程数进行调整。描述会员等级调整的状态图如图 5-1 所示。现采用状态 (State) 模式实现上述场景,得到如图 5-2 所示的类图。 【问题1】(15分)阅读上述说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

考题 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer,当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态,现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。

考题 阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。 【说明】 某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种 类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。