当前位置:首页 >> 学科竞赛 >>

第二十届全国青少年信息学奥林匹克竞赛初赛提高组C语言试题(附答案)


第二十届全国青少年信息学奥林匹克竞赛初赛 提高组 C 语言试题 一、单项选择题(每题 1.5 分,共 22.5 分) 。
1. 以下哪个是面向对象的高级语言( ). A. 汇编语言 B. C++ C. FORTRAN D. Basic 2. 1TB 代表的字节数量是( ). A. 2 的 10 次方 B. 2 的 20 次方 C. 2 的 30 次方 D. 2 的 40

次方 3. 二进制数 00100100 和 00010101 的和是( ). A. 00101000 B. 001010100 C. 01000101 D. 00111001 4. 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.1 6. 在无向图中,所有定点的度数之和是边数的( )倍. A. 0.5 B. 1 C. 2 D. 4 7. 对长度位 n 的有序单链表,若检索每个元素的概率相等,则顺序检索到表中任一元素的 平均检索长度为( ). A. n/2 B. (n+1)/2 C. (n-1)/2 D. n/4 8. 编译器的主要功能是( ). A. 将一种高级语言翻译成另一种高级语言 B. 将源程序翻译成指令 C. 将低级语言翻译成高级语言 D. 将源程序重新组合 9. 二进制数 111.101 所对应的十进制数是( ). A. 5.625 B. 5.5 C. 6.125 D. 7.625 10. 若有变量 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.000000 11. 有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向一个链表中的三个续 结点。 struct node { data next data next data next int 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-2 13. 设 G 是有 6 个结点的完全图,要得到一颗生成树,需要从 G 中删去( )条边.

A. 6 B. 9 C. 10 D. 15 14. 以下时间复杂度不是 O(n2)的排序方法是( ). A. 插入排序 B. 归并排序 C. 冒泡排序 D. 选择排序 15. 以下程序实现了找第二小元素的算法。输入时 n 个不等的数构成的数组 S,输出 S 中第 二小的数 SecondMin。在最坏的情况下,该算法需要做( )次比较。 if (S[1] < S[2]) { FirstMin = S[1]; SecondMin = S[2]; } else { FirstMin = S[2]; SecondMin = S[1]; } for (i = 3; i <=n; i++) if (S[1] < SecondMin) if (S[1] < FirstMin){ SecondMin = FirstMin; FirstMin = S[1]; } else { SecondMin = S[1]; } A. 2n B. n-1 C. 2n-3 D. 2n-2

二、不定项选择题(每题 1.5 分,共 7.5 分) 。
1. 若逻辑变量 A、C 为真,B、D 为假,以下逻辑运算表达式真的有( ). A. (B∨C∨D)∨D∧A B. ((- A∧B)∨C)∧B C. (A∧B)∨(C∧D∨-A) D. A∧(D∨-C)∧B 2. 下列( )软件属于操作系统软件。 A. Microsoft Word B. Windows XP C. Android D. Mac OS X E. Oracle 3. 在 NOI 比赛中,对于程序设计题,选手提交的答案不得包含下列哪些内容( A. 试图访问网络 B. 打开或创建题目规定的输入/输出文件之外的其他文件 C. 运行其他程序 D. 改变文件系统的访问权限 E. 读写文件系统的管理信息 4. 以下哪些结构可以用来存储图( ). A. 邻接矩阵 B. 栈 C. 邻接表 D. 二叉树 5. 下列各无符号十进制整数中,能用八位二进制表示的数有( ). A. 296 B. 133 C. 256 D. 199

).

三、问题求解。
1. 有数字 1,1,2,4,8,8 所组成的不同的四位数的个数是_____. 2. 如图所示,图中每条边上的数字表示该边的长度,则从 A 到 E 的最短距离是_____.

四、阅读程序写结果(共 4 题,每题 8 分,共 32 分)。
1. #include <stdio.h> int main() { int a,b,I,tot,c1,c2; scanf(“%d%d”, &a, &d); tot = 0; for (i=a; i<=b; i++) { c1=i/10; c2=i%10; if ((c1+c2)%3 ==0) tot++; } Printf(“%d\n",tot); Return 0; } 输入:7 31 输出:_________ 2. #include <stdio.h> Int fun(int n, int minNum, int { int tot, i; if (n==0) retuen 1; tot=0;

maxNum)

for(i=minNum; i<=maxNum; i++) tot+=fun(n-1, i=1, maxNum); return tot; } int mian() {int n, m; Scanf(“%d%d”, &n,&m); printf(“%d\n”, fum(m,1,n)); return 0; } 输入: 6 3 输出:________ 3. #include <stdio.h> #include <string.h> const int SIZE=100; const int LENGTH=25; // strcmp(a,b) <0:a 的字典序小于 b // strcmp(a,b) =1:a 和 b 一样 // strcmp(a,b) >0:a 的字典序大于 b int main() char dict[SIZE][LENGTH+1]; int rank[SIZE]; int ind[SIZE]; int i,j,n,tmp; scanf(“%d”,&n); for (i=1;i<=n;i++) {rank [i]=i ind[i]=i; scanf(“%s”, dict[i]); } for(i=1;i<n;i++) for(j=1;j<=n-i;j++) if(strcmp(dict[ind[j]],dict[ind[j+1]])>0) {tmp=ind[j]; ind[j]=ind[j+1]; ind[j+1]=tmp;

} for(i=1;i<=n;i++) rank[ind[i]]=i; for(i=1:i<=n;i++) ptintf(%d”,rank[i]); printf(“\n”); return 0; } 输入: 7 aaa aba bbb aaa aaa ccc aa 输出:______

4.

#niclude <stdio.h> const int SIZE=100; int alive[SIZE]; int n; int next(int num) {do{ num++; if(num>n) num=1; }while (alive[num]==0); return num;

} int main() {int m,i,j,num; scanf(“%d%d”,&n,&m); for(i=1;i<=n;i++) alive[i]=1; num=1; for(i=1;i<=n;j++) { for(j+1;j<=m;j++) num=next(num); printf(“%d”,num); alive[num]=0; if(i<n) num=next(num); }printf(\n); return 0; } 输入: 11 3

输出:_________

五、 完善程序 1. (双栈模拟数组) 只使用两个栈结构 stack1 和 stack2,模拟对数组的随机读取。作为栈 结构,stack1 和 stack2 只能访问栈顶(最后一个有效元素) 。栈顶指针 top1 和 top2 均指向栈 顶元素的下一个位置。 输入第一行包含的两个整数,分别是数组长度 n 和访问次数 m,中间用单个空格隔开。 第二行包含 n 个整数,一次歌出数组各项(数组下标从 0 到 a-1) 。第三行包含 m 个整数, 需要访问的数组下标。对于每次访问,输出对应的数组元素。 #include <stdio.h> consr int SIZE=100; int stack1[SIZE],stack2[SIZE];

int top1,top2; int n,m,i,j; void clearStack() {int I; for(i=top1;i<SIZE;i++) stack[i]=0; for(i=top2;i<SIZE;i++) stack[i]=0; } int main() scanf(%d,%d”,&n,&m); for(i=0i<n;i++) scanf(“%d”,&stack1[i]); top1=_____(1)______; top2=_______(2)____; for(j=0j<m;j++)
{

scanf(“%d”,&i); while(i<top1-1){ top1- -; (3) ; top2++; } while(i>top1-1){ top2- -; (4) ; top1++; } clearstack(); printf(“%d\n”,stack1[ } return 0; }

(5)

]);

2.

(最大矩阵和)给出 M 行 N 列的整数矩阵,就最大的子矩阵和(子矩阵不能为空) 。

输入第一行包含两个整数 M 和 N,即矩阵的行数和列数。之后 M 行,每行 N 个整数,描述 整个矩阵。程序最终输出最大的子矩阵和。 (第一空 2 分,其余 3 分,共 14 分) #include <stdio.h> const int SIZE=100; int matrix[SIZE+1][SIZE+1]; int rowsum[SIZE+1][SIZE+1]; //rowsum[i][j]记录第 i 行前 j 个数的和 int m,n,i,j,first,last,area,ans; int main(){ scanf(“%d %d”,&m,&n); for(i=1;i<=m;i++) for(j=1;j<=n;j++) scanf(“%d”,&matrix[i][j]); ans=matrix (1) ; for(i=1;i<=m;i++) (2) ; for(i=1;i<=m;i++) for(j=1;j<=n;j++) rowsum[i][j]= (3) ; for(first=1;first<=n;first++) for(last=first;last<=n;last++){ (4) ; for(i=1;i<=m;i++){ area+= (5) ; if(area>ans) ans=area; if(area<0) area=0; } } printf(“%d\n”,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) _______________ stack2[top2]=stack1[top1] ____________(2分) (4) ______________ stack1[top1]=stack2[top2] _____________(2分) (5) ________________________ top1-1 ______________________(2分) 2. (1) ________________________ [1][1] ______________________(2分) (2) _____________________rowsum[i][0]=0___________________(2分) (3) _____________ rowsum[i][j-1] + matrix[i][j] __________(2分)

(4) _________________________area=0 _______________________(2分) (5) ___________ rowsum[i][last]-rowsum[i][first-1] ________(2分)


相关文章:
第二十届全国青少年信息学奥林匹克竞赛初赛提高组C语言试题(附答案)
第二十届全国青少年信息学奥林匹克竞赛初赛提高组C语言试题(附答案)_学科竞赛_高中教育_教育专区。第二十届全国青少年信息学奥林匹克竞赛初赛 提高组 C 语言试题 ...
第二十届全国青少年信息学奥林匹克竞赛初赛提高组C语言试题
第二十届全国青少年信息学奥林匹克竞赛初赛提高组C语言试题_学科竞赛_高中教育_教育专区。第二十届全国青少年信息学奥林匹克竞赛初赛 提高组 C 语言试题一、单项选择...
NOIP2015第二十一届全国青少年信息学奥林匹克联赛初赛提高组C语言试题
NOIP2015第二十届全国青少年信息学奥林匹克联赛初赛提高组C语言试题_学科竞赛_高中教育_教育专区。NOIP2015第二十届全国青少年信息学奥林匹克联赛初赛提高组C语言...
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛(普及组试题及答案)
(2014)第二十届全国青少年信息学奥林匹克联赛初赛(普及组试题答案)_学科竞赛_...A. 汇编语言 B. C++ C. Fortran D. Basic 2、1TB 代表的字节数量是( )...
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛试题及答案(提高组试题及答案PASCAL)
第二十届全国青少年信息学奥林匹克联赛初赛提高组 Pascal 语言试题 竞赛时间:2014 年 10 月 12 日 14:30~16:30 选手注意: ● 试题纸共有 10 页,答题纸共...
NOIP2015第二十一届全国青少年信息学奥林匹克联赛初赛普及组C语言试题
NOIP2015第二十届全国青少年信息学奥林匹克联赛初赛普及组C语言试题_学科竞赛_高中教育_教育专区。NOIP2015第二十届全国青少年信息学奥林匹克联赛初赛普及组C语言...
noip2014年第二十届全国青少年信息学奥林匹克联赛初赛提高组题目(pascal版)参考答案
noip2014年第二十届全国青少年信息学奥林匹克联赛初赛提高组题目(pascal版)参考答案_学科竞赛_高中教育_教育专区。noip2014年第二十届全国青少年信息学奥林匹克联赛...
第二十一届(2015)全国青少年信息学奥林匹克联赛初赛试题(含答案)
第二十一届(2015)全国青少年信息学奥林匹克联赛初赛试题(答案)_学科竞赛_高中教育_教育专区。第二十届全国青少年信息学奥林匹克联赛初赛 普及组 Pascal 语言...
2015年第二十一届全国青少年信息学奥林匹克联赛提高组初赛试题(C++)
2015年第二十一届全国青少年信息学奥林匹克联赛提高组初赛试题(C++)_学科竞赛_高中教育_教育专区。2015 年第二十届全国青少年信息学 奥林匹克竞赛初赛 提高组一...
NOIP2014(第二十届)初赛普及组C语言试题及答案
NOIP2014(第二十届)初赛普及组C语言试题答案_学科竞赛_初中教育_教育专区。NOIP2014初赛普及组C语言试题答案; 第二十届全国青少年信息学奥林匹克联赛初赛普及组...
更多相关标签:
小学奥林匹克信息学 | 奥林匹克信息学竞赛 | 青少年信息学奥林匹克 | 奥林匹克信息学有用吗 | 奥林匹克信息学 | 奥林匹克信息学 江苏 | 奥林匹克信息学试题 | 福建奥林匹克信息学 |