第二十届全国青少年信息学奥林匹克竞赛初赛提高组C语言试题-(附答案~).doc
|第二十届全国青少年信息学奥林匹克竞赛初赛提高组 C 语言试题一、单项选择题(每题 1.5 分,共 22.5 分) 。1. 以下哪个是面向对象的高级语言( ).A. 汇编语言 B. C+ C. FORTRAN D. Basic2. 1TB 代表的字节数量是( ).A. 2 的 10 次方 B. 2 的 20 次方 C. 2 的 30 次方 D. 2 的 40 次方3. 二进制数 00100100 和 00010101 的和是( ).A. 00101000 B. 001010100 C. 01000101 D. 001110014. TCP 协议属于哪一层协议( ).A. 应用层 B. 传输层 C. 网络层 D. 数据链路层5. 下列几个 32 位 IP 地址中,书写错误的是( ).A. 162.105.128.27 B. 192.168.0.1 C. 256.256.129.1 D. 10.0.0.16. 在无向图中,所有定点的度数之和是边数的( )倍.A. 0.5 B. 1 C. 2 D. 47. 对长度位 n 的有序单链表,若检索每个元素的概率相等,则顺序检索到表中任一元素的平均检索长度为( ).A. n/2 B. (n+1)/2 C. (n-1)/2 D. n/48. 编译器的主要功能是( ).A. 将一种高级语言翻译成另一种高级语言B. 将源程序翻译成指令C. 将低级语言翻译成高级语言D. 将源程序重新组合9. 二进制数 111.101 所对应的十进制数是( ).A. 5.625 B. 5.5 C. 6.125 D. 7.62510. 若有变量 int a, float x, y, 且 a=7, x=2.5, y=4.7, 则表达式 x+a%3*(int)(x+y)%2/4 的值大约是( ).A. 2.500000 B. 2.750000 C. 3.500000 D. 0.00000011. 有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向一个链表中的三个续结点。struct node data next data next data nextint data;struct node *next; p q r *p,*q,*r;现要将 q 和 r 所指结点的先后位置交换,同时要保持链表的连续,以下程序段中错误的是( ).A. q->next = r->next; p-> next = r; r->next = q;B. p->next = r; q->next = r->next; r->next = q;C. q->next = r->next; r->next = q; p->next = r;D. r->next = q; q->next = r->next; p->next = r;12. 同时查找 2n 个数中的最大值和最小值,最少比较次数为( ).A. 3(n-2)/2 B. 4n-2 C. 3n-2 D. 2n-213. 设 G 是有 6 个结点的完全图,要得到一颗生成树,需要从 G 中删去( )条边.|A. 6 B. 9 C. 10 D. 1514. 以下时间复杂度不是 O(n2)的排序方法是( ).A. 插入排序 B. 归并排序 C. 冒泡排序 D. 选择排序15. 以下程序实现了找第二小元素的算法。输入时 n 个不等的数构成的数组 S,输出 S 中第二小的数 SecondMin。在最坏的情况下,该算法需要做( )次比较。if (S1 int main() int a,b,I,tot,c1,c2;scanf(“%d%d”, tot = 0;for (i=a; iInt fun(int n, int minNum, int maxNum) int tot, i;if (n=0)retuen 1;tot=0;|for(i=minNum; i#include const int SIZE=100;const int LENGTH=25;/ strcmp(a,b) 0:a 的字典序大于 bint main()char dictSIZELENGTH+1;int rankSIZE;int indSIZE;int i,j,n,tmp;scanf(“%d”,for (i=1;i0)tmp=indj;indj=indj+1;indj+1=tmp;|for(i=1;iconst int SIZE=100;int aliveSIZE;int n;int next(int num)donum+;if(num>n)num=1;while (alivenum=0);return num;|int main()int m,i,j,num;scanf(“%d%d”,for(i=1;iconsr int SIZE=100;int stack1SIZE,stack2SIZE;|int top1,top2;int n,m,i,j;void clearStack()int I;for(i=top1;itop1-1)top2- -;(4) ;top1+;clearstack();printf(“%dn”,stack1 (5) );return 0;2. (最大矩阵和)给出 M 行 N 列的整数矩阵,就最大的子矩阵和(子矩阵不能为空) 。|输入第一行包含两个整数 M 和 N,即矩阵的行数和列数。之后 M 行,每行 N 个整数,描述整个矩阵。程序最终输出最大的子矩阵和。 (第一空 2 分,其余 3 分,共 14 分)#include const int SIZE=100;int matrixSIZE+1SIZE+1;int rowsumSIZE+1SIZE+1; /rowsumij记录第 i 行前 j 个数的和int m,n,i,j,first,last,area,ans;int main()scanf(“%d %d”,for(i=1;ians)ans=area;if(area<0)area=0;printf(“%dn”,ans);return 0;二、问题求解(共 2题,每题 4分,共计 8分;每题全部答对得 4分)1. _ 102 _ 2. _ 15 _三、阅读程序写结果(共 4题,每题 8分,共计 32分)1. _ 8 _ 2. _ 20 _|3. _ 2 5 6 3 4 7 1 _ 4. _ 3 6 9 1 5 10 4 11 8 2 7 _四、完善程序(共 2题,每题 10分,共计 20分)1. (1) _ n _(2分)(2) _ 0_(2分)(3) _ stack2top2=stack1top1 _(2分)(4) _ stack1top1=stack2top2 _(2分)(5) _ top1-1 _(2分)2. (1) _ 11 _(2分)(2) _rowsumi0=0_(2分)(3) _ rowsumij-1 + matrixij _(2分)(4) _area=0 _(2分)(5) _ rowsumilast-rowsumifirst-1 _(2分)