本栏目下题库来源于互联网,轻速云承诺对于用户导入平台的题库是严格保密的,不会在此呈现!
轻速云给您提供更好的在线考试系统服务!
2001年度程序员级下午试题
1、【 简答题
试题一
阅读下列程序或函数说明和 C 代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[函数1.1说明]
函数strcmp()是比较两个字符串 s 和 t 的大小。若 s < t 函数返回负数;若 s = t 函数返回0;若 s > t,函数返回正数。
[函数1.1]
int strcmp(char *s,char *t)
{ while ( *s && *t && __(1)__){
    s++;t++ ;
    }
    return __(2)__;
}
[程序1.2说明]
在 n 行 n 列的矩阵中,每行都有最大的数,本程序求这 n 个最大数中的最小一个
[程序1.2]
#include〈stdio.h〉
#define N 100int a[N][N];
void main()
{ int row ,col ,max ,min ,n;
    /*输入合法 n (〈100 ),和输入 m ×n 个整数到数组 a 的代码略*/
    for ( row = 0;row < n;row++) {
        for ( max = a[row][0],col = l ;col < n;col++)
            if (__(3)__) max = a[row][col];
        if (__(4)__) min = max;
        else if(__(5)__) min = max;
    }
    printf ("The min of max numbers is %d\n",min);
} [15分]
解析:
(1) *s == *t
(2) *s - *t
(3) a[row][col] > max
(4) row == 0
(5) max < min
2、【 简答题
试题二
阅读下列程序说明和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[程序2说明]
本程序中的函数 first_insert() 的功能是在已知链表的首表元之前插入一个指定值的表元;函数 reverse_copy() 的功能是按已知链表复制出一个新链表,但新链表的表元链接顺序与已知链表的表元链接顺序相反;函数 print_link() 用来输出链表中各表元的值;函数 free_link()用来释放链表全部表元空间。
[程序2〕
#include〈stdip.h〉
#include〈malloc.h〉
typedef struct node{ int val;
        struct node *next;} NODE;
void first_insert( NODE **p,int v)
{ NODE *q = (NODE *) malloc( sizeof(NODE));
    q -> va1 = v;__(1)__; *p = __(2)__;
}
NODE *reverse_copy(NODE *p)
{ NODE *u;
    for( u = NULL ; p ; p = p ->next ) first_insert(__(3)__);
    return u;
}
void print_link( NODE *p )
{ for( ;__(4)__) printf ("%d\t" , p -> val);
    printf("\n");
void free_link(NODE*p)
{ NODE *u;
    while( p != NULL){ u=p-〉next;free( p );__(5)__;}
}
void main()
{ NODE *link1 , *link2;
int i ;linkl = NULL ;
for( i = 1;i <= 10 ; i++ )
    first insert( &link1,i );
link2 = revere_ copy(link1);
print_link(link1);freeJink(linkl);
print_link(link2);free_link(link2);
} [15分]
解析:
(1) q ->ncxt = *p
(2) q
(3) &u ,p->val
(4) p != NULL; p = p->next
(5) p = u
3、【 简答题
试题三
阅读下列程序说明和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[程序3说明]
本程序从若干个原始文件合并成的合并文件中恢复出其中一个或全部原始文件。所有文件均作为二进制文件进行处理。合并文件中先顺序存储各原始文件,然后顺序存储各原始文件的控制信息,即文件名、文件长度和在合并文件中的位置(偏移量)。其结构为:
typedef stmct{char fnme[256];/*原始文件名*/
    long length;/*原始文件长度(字节数)*/
    long offset;/*原始文件在合并文件中的位置(偏移量)*/
    }FileInfo;
在合并文件最后存储如下一个特殊的标志信息作为合并文件的结束标记:
    F11ek1fo 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 的当前读/写位置(相对于文件头的偏移量)。上述偏移量均以字节为单位,即偏移字节数。
[程序3]
#include〈stdio.h〉
#include〈string.h〉
typedef struct{char fname[256];long length;long offset;}
        }FileInfo;
void copyfile( FILE *fin, FILE *fout, int fsiz)
{ char buf[1024]; int siz = 1024 ;
    while(fsiz != 0) { /*每次复制siz个字节,直至复制完fsiz个字节*/
        if ( siz > fsiz) __(1)__ ;
        fread( buf , 1 , siz , fin ) ; fwrite( buf , 1 , siz , fout );
        fsiz = __(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.fmane , "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 ;
    }
    fclose( fcmbn ) ; return 0 ;
} [15分]
解析:
(1) siz = fsiz
(2) fsiz-siz
(3) ftell(fin)
(4) fin,inp->offset, SEEK_SET
(5) feesk(fin ,offset, SEEK_SET)
4、【 简答题
试题五
阅读下列程序说明和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[程序5说明]
本程序采用递归算法将一个自然数 n 分解成不多于 m 个整数之和。设构成和数 n 的各个整数取于数组 d ,d 中的整数互不相等且由大到小存储。
例如,数组 d 中存储以下整数: d[] = {100 ,81 ,64 ,49 ,36 ,25 ,16 ,9 ,4 ,1} ,则有:
 
n m  程序运行后的输出
100 2  100 = 100
13 2  13 = 9 + 4
14 2  No answer                   (9+4+1超过2个)
71 5  71 = 49 + 9 + 9 + 4         (表示可重复取数)
   
函数 End()的形参 c 表示 d 中可取的整数个数;形参 pd 指向能成为和数的整数的存放位置。
[程序5]
#include〈stdio.h〉
#define N 20
int find( int n ,int m ,int *d ,int c ,int *pd )
{ int r ;
    if ( n == 0 ) return 0 ;  /* 已分解完成 */
    if ( m == 0 || c == 0 ) return -1 ;  /* 不可以分解 */
    if ( __(1)__ ) return find( n ,m , d+1 ,c-1 ,pd ) ;
    else { *pd = *d ;
        r = find( __(2)__ ,d , c , __(3)__ ) ;  /* 继续对剩余数作分解 */
        if ( r >= 0 ) return __(4)__ ;
        return find( n ,m , __(5)__ ,pd ) ;
    }
}
void main()
{ int n ,m ,k ,i ,p[N] ,*pptr = p ;
    int d[ ] = { 100, 81, 64, 49, 36, 25, 16, 9, 4, 1 } ;
    printf( "Enter n , m : " ; scanf( %d %d ,&n ,&m );
    k = find( n , m , d , 10 , pptr ) ;
    if ( k <= O ) printf ( "No answer!\n" ) ;
    else{ printf( "%d = %d" , n , p[0] ) ;
    for ( i = l ; i < k ; i++ )
        printf(" +%d" , p[i] ) ;
    printf("\n");
} [15分]
解析:
(1) n<*d
(2) n-*d ,m-1
(3) pd+1
(4) r+l
(5) d+1 ,c-1
1
1页,共4个题库
1页,共4个题库
轻速云给您提供更好的在线考试系统服务!
推荐
推荐题库
众多企事业单位的信赖之选
36万+企事业单位的共同选择
查看更多合作案例
众多企事业单位的信赖之选
开始使用轻速云组织培训考试
四步组织一场考试答题,一键搭建企业培训平台
免费使用 免费使用 预约演示
咨询热线
400-886-8169
周一到周日 8:00-22:00
©2023 轻速云 苏ICP备16049646号-1 轻速云科技提供专业的在线考试系统、在线培训系统
联系我们
客服热线客服热线:400-886-8169 | 周一至周日 8:00-22:00
©2023 轻速云 苏ICP备16049646号-1
轻速云科技提供专业的在线考试系统、在线培训系统
在线咨询 400-886-8169