
程序员考试考前冲刺预测卷及考点解析
本文给出了《程序员考试考前冲刺预测卷及考点解析》相关程序文件,以供读者练习时参考。读者
也可依照书中所给出的评分标准得出自己的测试分数,从而大致评估自己对试卷所考核知识点的掌握程
度。另外说明一点,先进国家类似考试已没有标准答案的说法,抽象地给标准答案是困难的。对于本文
所 提 供 的 程 序 文 件 , 读 者 可 带 批 评 性 的 眼 光 对 其 进 行 继 承 和 发 展 。 欢 迎 到 http://
296525818.blog.51cto.com
跟贴拍砖!
郭春柱
2008.3.24 17:30
第 1 章
试题 1
喜迎 2008 年北京夏季奥运会!以下【C 程序】能将一个给定汉字(例如,奥运会的“会”字)的点阵
逆时针旋转 90 度,并输出旋转前后的点阵数据及字形。
图 1-15 本应用程序输出结果示意图

◙ 程序员考试考前冲刺预测卷及考点解析 ◙
【C 程序】
#include <stdio.h>
#define EMPTY '.'
#define NONEMPTY 'x'
#define LEFT 0
#define RIGHT 1
main ()
{ static unsigned old[16]=
{ 0x0100,0x0240,0x0420,0x0810,0x1004,0x23c2,
0x4001,0x8ff8,0x0100,0x0200,0x0400,0x0800,
0x1000,0x2004,0x7ffe,0x0001
};
unsigned new[16];
turnleft( old,new );
display( old,new );
}
turnleft( old,new)
unsigned old[],new[];
{ int row,k;
for ( row=0;row<16;row++ )
for ( ( 1 ) ;k<16;k++ )
new[row]|=(( old[k]>> ( 2 ) ) &1) << ( 3 ) ;
}
display( old,new )
unsigned *old,*new;
{ char out[2][17],letter[2];
int row,col;
letter[0] = EMPTY;
letter[1] = NONEMPTY;
out[LEFT][16]=out[RIGHT][16]= ( 4 ) ;
for ( row = 0;row<16;row++,old++,new++ )
{ for ( col = 0;col<16;++col )
{ out[LEFT][col] = letter[ ( ( 5 ) ) &1];
out[RIGHT][col] = letter[ ( ( 6 ) ) &1];
}
printf("\n %4x %s ",*old,&out[LEFT][0]);
printf(" %4x %s",*new,&out[RIGHT][0]);
}
}
·2·

◙ 第 1 章 考前冲刺预测卷 1 ◙
试题 3
以下【C 程序】的功能是,从正文文件 text_01.ini 读入一篇英文短文,统计该短文中不同单词和它的
出现次数,并按词典编辑顺序将单词及它的出现次数输出到正文文件 word_xml.out 中。
【C 程序】
#include <stdio.h>
#include <malloc.h>
#include <ctype.h>
#include <string.h>
#define INF "TEXT_01.INI"
#define OUTF "WORD_XML.OUT"
typedef struct treenode {
char *word;
int count;
struct treenode *left, *right;
}BNODE;
int getword(FILE *fpt,char *word);
void binary_tree(BNODE **t,char *word)
{ BNODE *ptr, *p;
int cmpres;
p = NULL;
( 1 ) ;
while (ptr) { /*寻找插入位置*/
cmpres = strcmp( word , ( 2 ) ); /* 保存当前比较结果 */
if (!cmpres) {
( 3 ) ;
return;
}
else {
( 4 ) ;
ptr = cmpres > 0 ? ptr->right : ptr->left;
}
}
ptr = (BNODE *)malloc(sizeof(BNODE));
ptr->right = ptr->left = NULL;
ptr->word = (char *)malloc(strlen(word)+1);
strcpy(ptr->word,word );
ptr->count = 1;
if (p == NULL)
( 5 ) ;
·3·

◙ 程序员考试考前冲刺预测卷及考点解析 ◙
else
if (cmpres > 0)
p->right = ptr;
else
p->left = ptr;
}
void midorder(FILE *fpt, BNODE *t)
{ if ( ( 6 ) )
return;
midorder( fpt , t->left);
fprintf( fpt , " %s %d\n " , t->word , t->count);
midorder( fpt , t->right);
}
void main()
{ FILE *fpt;
char word[40];
BNODE *root = NULL;
if ((fpt = fopen(INF , "r")) == NULL) {
printf("Can't open file %s\n",INF);
return;
}
while (getword(fpt,word) == 1)
binary_tree( ( 7 ) );
fclose(fpt);
fpt = fopen(OUTF,"w");
midorder(fpt, root);
fclose(fpt);
}
·4·

◙ 第 1 章 考前冲刺预测卷 1 ◙
第 2 章
试题 2
以下【C 程序】能将自然数 1,2,……,N
2
按蛇形方式逐个顺序存入 N 阶矩阵。换言之,程序从 a
n0
开始到 a
0n
为止(n = N-1)顺序填入自然数,交替地对每一斜列从左上元素向右下元素或从右下元素向左
上元素存数。
【C 程序】
#include <stdio.h>
#define SIZE 10
int a[SIZE][SIZE], k;
main()
{ int i, j, n, N;
for (N = 3;N<=SIZE; N++)
{ k = 1;
makeArray (n = N-1);
printf ("\nN = %d;\n",n+1);
for (i = 0;i<=n; i++)
{ for (j = 0; j<=n; j++)
printf("%4d",a[i][j]);
printf ("\n");
}
}
}
makeline (int row_start, int col_start, int row_end)
{ /*完成矩阵一条斜线的整数填写*/
int i, j, sign = ( 1 ) ;
for (i = row_start, j = col_start; ( 2 ) ; i += sign,j += sign)
a[i][j] = k++;
}
makeArray (int n)
{ /* 完成矩阵每条斜线的整数填写*/
int d;
for (d = 1; d <= ( 3 ) ; d++)
if (d <= n)
if (d%2)
makeline ( ( 4 ) );
else
makeline( ( 5 ) );
·5·