2016年計算機軟考程序員模擬試題
2016年計算機軟件水平測試一年有兩次考試機會,同學們參考了嗎?下面本站小編為大家分享的是計算機軟考程序員模擬試題,希望對大家備考有所幫助!
●試題一
閲讀下列函數説明和C代碼,把應填入其中n處的字句寫在答卷的對應欄內。
【函數1.1説明】
函數strcpy(char*to,char*from)將字符串from複製到字符串to。
【函數1.1】
void strcpy(char*to,char*from)
{while( (1) );}
【函數1.2説明】
函數merge(int a[ ],int n,int b[ ],int m,int *c)是將兩個從小到大有序數組a和b複製合併出一個有序整數序列c,其中形參n和m分別是數組a和b的元素個數。
【函數1.2】
void merge(int a[ ],int n,int b[ ],int m,int *c)
{ int i,j;
for(i=j=0;i
*c++=a[i]
while( (2) )*c++=a[i++];
while( (3) )*c++=b[j++];
}
【函數1.3説明】
遞歸函數sum(int a[ ],int n)的返回值是數組a[ ]的前n個元素之和。
【函數1.3】
int sum(int a[ ],int n)
{ if(n>0)return (4) ;
else (5) ;
}
●試題二
閲讀下列函數説明和C代碼,將應填入(n)處的字句寫在答題紙的對應欄內。
【説明】
該程序運行後,輸出下面的數字金字塔
【程序】
#include
main ()
{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");
}
}
●試題三
閲讀下列函數説明和C代碼,將應填入(n)處的字句寫在答題紙的對應欄內。
【説明】
函數diff的功能是:根據兩個由整數(都大於-32768)按升序構成的單鏈表L1和L2(分別由A,B指向)構造一個單鏈表L3(由*r指向),要求L3中的所有整數都是L1,並且不是L2中的整數,還要求L3中的所有整數都兩兩不等。
【函數】
#include
C.h>
typedef struct node{
int d;
struct node *next
}Node;
void diff(Node *A,Node *B,Node **r)
{
int lastnum;
Node*p;
*r=NULL;
if(!A)return;
while( (1) )
if(A->dd)
{
lastnum=A->d;
p=(Node*)malloc(sizeof(Node));
p->d=lastnum;
p->next=*r; (2) ;
do
A=A->next;
while( (3) );
}
else if(A->d>B->d)
B=B->next;
else{
(4) ;
lastnum=A->d;
while (A && A->d==lastnum)A=A->next;
}
while(A)
{
lastnum=A->d;
p=(Node*)malloc(sizeof(Node));
p->d=lastnum;
(5) ;
*r=p;
while (A && A->d==lastnum) A=A->next;
}
}
●試題四
閲讀下列程序説明和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
#include
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("創建文件錯誤:%sn",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("文件打開錯誤:%sn",fname);return 1;
}
fseek(fcmbn,-sizeof(FileInfo),SEEK_END);/*定位於合併文件末尾的標誌信息*/
fread(&finfo,1,sizeof(FileInfo),fcmbn);
if(th!=0 || strcmp(e,"CombinedFile")){
printf("指定的文件不是合法的合併文件n");
fclose(fcmbn);return 2;
}
fseek(fcmbn,et,SEEK_SET);/*定位於首個原始文件的控制信息*/
for(;;){/*恢復一個(argc>2)或全部(argc=2)原始文件*/
fread(&finfo,1,sizeof(FileInfo),fcmbn);
if(th==0)break;
if(argc>2 && strcmp(e,argv[2]))continue;
if(dofile(fcmbn,&finfo)!=0)break;
}
fcolse(fcmbn);return 0;
}