欢迎来到天天文库
浏览记录
ID:6576964
大小:195.00 KB
页数:13页
时间:2018-01-18
《08年下半年程序员下午试卷》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2008年下半年程序员下午试卷试题一(共15分) 阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。 [说明] 下面流程图的功能是:在已知字符串A中查找特定字符串B,如果存在,则输出B串首字符在A串中的位置,否则输出-1。设串A由n个字符A(0)、A(1)、…、A(n-1)组成,串B由m个字符B(0)、B(1)、…、B(m-1)组成,其中n≥m>0。在串A中查找串B的基本算法如下:从串A的首字符A(0)开始,取子串A(0)A(1)…A(m-1)与串B比较;若不同,则再取子串A(1)A(2)…A(m)与串B比较,
2、依次类推。 例如,字符串“CABBRFFD”中存在字符子串“BRF”(输出3),不存在字符子串“RFD”(输出-1)。 在流程图中,i用于访问串A中的字符(i=0,1,…,n-1),j用于访问串B中的字符(j=0,1,…,m-1)。在比较A(i)A(i+1)…A(i+m-1)与B(0)B(1)…B(m-1)时,需要对A(i)与B(0)、A(i+1)与B(1)、…、A(i+j)与B(j)、…逐对字符进行比较。若发现不同,则需要取下一个子串进行比较,依此类推。[流程图](1)j+1(2)i+1(3)0(4)I(5)-1试题二(共15分) 阅读以下说
3、明和C程序代码,将应填入(n)处的字句写在答题纸的对应栏内。 [说明] 下面C程序代码的功能是:对于输入的一个正整数n(100≤n<1000),先判断其是否是回文数(正读反读都一样的数)。若不是,则将n与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278不是回文数,其反序数为872,相加后得到的1150还不是回文数,再将1150与其反序数511相加,得到的1661是回文数。 函数intisPalm(longm)的功能是:将正整数m的各位数字取出存入数组中,然后
4、判断其是否为回文数。若m是回文数则返回1,否则返回0。 [C程序代码] #include #include intisPalm(longm) {/*判断m是否为回文数*/ inti=0,k=0; charstr[32]; while(m>0){/*从个位数开始逐个取出m的各位数字并存入字符数组str*/ str[k++]=(1)m%10+'0'; m=m/10; } for(i=0;i5、turn1; } intmain() { longn,a,t; printf("inputapositiveinteger:");scanf("%ld",&n); if(n<1006、7、n>=1000)return-1; while((3)ispalm(n)==0){/*n不是回文数时执行循环*/ printf("%ld->",n); for(a=0,t=n;t>0;){/*计算n的反序数并存入a*/ a=(4)a*10+t%10;t=t/10; }/*endoffor*/ n=(5)a+n;/*与反序数求和*/ }/*end8、ofwhile*/ printf("%ld",n); system("pause");return0; }试题三(共15分) 阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。 [说明] 已知某二叉树的非叶子结点都有两个孩子结点,现将该二叉树存储在结构数组Ht中。结点结构及数组Ht的定义如下: #defineMAXLEAFNUM30 structnode{ charch;/*当前结点表示的字符,对于非叶子结点,此域不用*/ char*pstr;/*当前结点的编码指针,非叶子结点不用*/ intparent;/9、*当前结点的父结点,为0时表示无父结点*/ intlchild,rchild; /*当前结点的左、右孩子结点,为0时表示无对应的孩子结点*/ }; structnodeHt[2*MAXLEAFNUM];/*数组元素Ht[0]不用*/ 该二叉树的n个叶子结点存储在下标为1~n的Ht数组元素中。例如,某二叉树如图3-1所示,其存储结构如图3-2所示,其中,与叶子结点a对应的数组元素下标为1,a的父结点存储在Ht[5],表示为Ht[1].parent=5。Ht[7].parent=0表示7号结点是树根,Ht[7].lchild=3、Ht[7].r10、child=6分别表示7号结点的左孩子是3号结点、右孩子是6号结点。 如果用“0”或“1”分别标识二叉树的
5、turn1; } intmain() { longn,a,t; printf("inputapositiveinteger:");scanf("%ld",&n); if(n<100
6、
7、n>=1000)return-1; while((3)ispalm(n)==0){/*n不是回文数时执行循环*/ printf("%ld->",n); for(a=0,t=n;t>0;){/*计算n的反序数并存入a*/ a=(4)a*10+t%10;t=t/10; }/*endoffor*/ n=(5)a+n;/*与反序数求和*/ }/*end
8、ofwhile*/ printf("%ld",n); system("pause");return0; }试题三(共15分) 阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。 [说明] 已知某二叉树的非叶子结点都有两个孩子结点,现将该二叉树存储在结构数组Ht中。结点结构及数组Ht的定义如下: #defineMAXLEAFNUM30 structnode{ charch;/*当前结点表示的字符,对于非叶子结点,此域不用*/ char*pstr;/*当前结点的编码指针,非叶子结点不用*/ intparent;/
9、*当前结点的父结点,为0时表示无父结点*/ intlchild,rchild; /*当前结点的左、右孩子结点,为0时表示无对应的孩子结点*/ }; structnodeHt[2*MAXLEAFNUM];/*数组元素Ht[0]不用*/ 该二叉树的n个叶子结点存储在下标为1~n的Ht数组元素中。例如,某二叉树如图3-1所示,其存储结构如图3-2所示,其中,与叶子结点a对应的数组元素下标为1,a的父结点存储在Ht[5],表示为Ht[1].parent=5。Ht[7].parent=0表示7号结点是树根,Ht[7].lchild=3、Ht[7].r
10、child=6分别表示7号结点的左孩子是3号结点、右孩子是6号结点。 如果用“0”或“1”分别标识二叉树的
此文档下载收益归作者所有