《2001上半年程序员考试真题及答案-下午卷.doc》由会员分享,可在线阅读,更多相关《2001上半年程序员考试真题及答案-下午卷.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2001上半年程序员考试真题及答案-下午卷试题一阅读下列程序或函数说明和 C 代码,将应填入_(n)_处的字句写在答题纸的对应栏内。函数1.1说明函数strcmp()是比较两个字符串 s 和 t 的大小。若 s t,函数返回正数。函数1.1int strcmp(char *s,char *t) while ( *s & *t & _(1)_) s+;t+ ; return _(2)_;程序1.2说明在 n 行 n 列的矩阵中,每行都有最大的数,本程序求这 n 个最大数中的最小一个程序1.2#includestdio.h#define N 100int aNN;void main() int r
2、ow ,col ,max ,min ,n; /*输入合法 n (100 ),和输入 m n 个整数到数组 a 的代码略*/ for ( row = 0;row n;row+) for ( max = arow0,col = l ;col 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 (%dt ,
3、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 fsiz) _(1)_ ; fread( buf , 1 , siz , fin ) ; fwrite( buf , 1 , siz , fout ); fsiz = _(2)_; int dofile( FILE *fin , FileInfo *inp ) long of
4、fset ; 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)_
5、; /*恢复合并文件读/写位置*/ return 0 ;int main( int argc ,char *argv ) FileInfo finfo ; char fname256 ; FILE *fcmbn; if (argc 2) 或全部 ( argc = 2 )原始文件*/ fread( &finfo , 1 , sizeof( FileInfo ) , fCmbn ) ; if ( finfo.length = 0 ) break ; if ( argc 2 & strcmp( finfo.fname , argv2 ) ) continue ; if ( dofile( fcmbn
6、 , &finfo ) != 0 ) break ; fclose( fcmbn ) ; return 0 ;试题四阅读下列程序说明和C代码,将应填入_(n)_处的字句写在答题纸的对应栏内。程序4说明设一个环上有编号为 0n-1 的 n 粒不同颜色的珠子(每粒珠子颜色用字母表示, n 粒珠子颜色由输入的字符串表示)。以环上某两粒珠子间为断点,从断点一方按顺时针方向取走连续同色的珠子,又从断点另一方按逆时针方向对剩下珠子取走连续同色的珠子,两者之和为该断点可取走珠子的粒数。移动断点,能取走的珠子数不尽相同。本程序找出可以取走最多的珠子数及断点的位置。程序中用双向链表存储字符串。例如,编号为0-9
7、的10粒珠子颜色的字符串为“aaabbbadcc,对应链表为: 若在2号与3号珠子间为断点,共可取走6粒珠子,且为取走的珠子数最多。程序4#includestdio.h#includestring.h#includemalloc.htypedef struct node char d ; struct node *fpt ; /*后继指针*/ struct node*bpt ; /*前趋指针*/ NODE ;NODE *building( char *s ) /*生成双向循环链表*/ NODE *p = NULL , *q ; while ( *s ) q = ( NODE * ) mallo
8、c( sizeof( NODE ) ) ; q - ch = *s+ ; if ( p = NULL ) p = q - fpt = q - b t = q ; else p - bpt - fpt = q ; q - fpt = p ; q -bpt = _(1)_; _(2)_ ; returnint count( NODE *start , int maxn ,int step ) /*求可取走珠子粒数*/ int color ,c ; NODE *p ; color = -1 ; C = 0 ; for ( p = start ; c O ? p - fpt ; p - bpt ) i
9、f ( color = -1 ) color = p - ch ; else if (_(3)_) break ; c+ returnint find ( char *s ,int *cutpos ) /*寻找取走珠子数最多的断点和粒数*/ int i , c , cut , maxc = 0 ,1en = strlen(s) ; NODE *p ; if ( ( p = building(s) ) = NULL ) *cu1tpos = -1 ; return -1 ; i = 0 ; do c = count( p , 1en ,1 ) ; c = c + _(4)_ ; if ( c m
10、axc ) maxc = c ; cut = i ; _(5)_ ; i+ ; while (i = 0 ) return _(4)_ ; return find( n ,m , _(5)_ ,pd ) ; void main() int n ,m ,k ,i ,pN ,*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 (
11、 No answer!n ) ; else printf( %d = %d , n , p0 ) ; for ( i = l ; i ncxt = *p(2) *s - *t(2) q(3) arowcol max(3) &u ,p-val(4) row = 0(4) p != NULL; p = p-next(5) max bpt(2) fsiz-siz(2) p-bpt = q(3) ftell(fin)(3) p-ch != color(4) fin,inp-offset, SEEK_SET(4) eount(p-bpt,len-c,-1)(5) feesk(fin ,offset, SEEK_SET)(5) p = p-fpt试题五(1) n*d(2) n-*d ,m-1(4) r+l(3) pd+1(5) d+1 ,c-1