资源简介 2023年汕尾市普通高中学科竞赛(高二)信息学试题本试题共9页,考试时间120分钟,满分100分注意事项:1.答题前,考生先将自己的信息填写清楚、准确,将条形码准确粘贴在条形码粘贴处。2.请按照题号顺序在答题卡各题目的答题区域内作答,超出答题区域书写的答案无效。3.答题时请按要求用笔,保持卡面清洁,不要折叠,不要弄破、弄皱,不得使用涂改液、修正带、刮纸刀。考试结束后,请将本试题及答题卡交回。4.不得使用任何电子设备(如计算器、手机、电子词典、电脑等)。一、单项选择题:共15小题,每小题2分,共计30分。每题有且仅有一个正确选项。1.在以下各项中,( )不是CPU的组成部分。A.控制器 B.运算器 C.寄存器 D.主板2.在关系数据库中,存放在数据库中的数据的逻辑结构以( )为主。A.二叉树 B.多叉树 C.哈希表 D.二维表3.在下列各项中,只有( )不是计算机存储容量的常用单位。A. Byte B. KB C. UB D. TB4.AsCⅡ码的含义是( )。A.二-十进制转换码 B.美国信息交换标准代码C.数字的二进制编码 D.计算机可处理字符的唯一编码5.一个完整的计算机系统应包括( )。A.系统硬件和系统软件 B.硬件系统和软件系统C.主机和外部设备 D.主机、键盘、显示器和辅助存储器6.IT的含义是( )。A.通信技术 B.信息技术 C.网络技术 D.信息学7.LAN的含义是( )。A.因特网 B.局域网 C.广域网 D.城域网8.冗余数据是指可以由其他数据导出的数据,例如,数据库中已存放了学生的数学、语文和英语的三科成绩,如果还存放三科成绩的总分,则总分就可以看作冗余数据。冗余数据往往会造成数据的不一致,例如,上面4个数据如果都是输入的,由于操作错误使总分不等于三科成绩之和,就会产生矛盾。下面关于冗余数据的说法中,正确的是( )。A.应该在数据库中消除一切冗余数据B.用高级语言编写的数据处理系统,通常比用关系数据库编写的系统更容易消除冗余数据C.为了提高查询效率,在数据库中可以适当保留一些冗余数据,但更新时要做相容性检验D.做相容性检验会降低效率,可以不理睬数据库中的冗余数据9.在下列各软件中,不属于NOIP竞赛(复赛)推荐使用的语言环境有( )。A. Gcc B. g++ C. Turbo C D. free pascal10.以下断电之后仍能保存数据的有( )。A.硬盘 B.高速缓存 C.显存 D.RAM11.在下列关于计算机语言的说法中,正确的有( )。A.高级语言比汇编语言更高级,是因为它的程序的运行效率更高B.随着Pascal、C等高级语言的出现,机器语言和汇编语言已经退出了历史舞台C.高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上D.C是一种面向对象的高级计算机语言12.下列关于递归算法的说法中,正确的是( )。A.在1977年前后形成标准的计算机高级语言“F0RTRAN77”禁止在程序使用递归,原因之一是该方法可能会占用更多的内存空间B.和非递归算法相比,解决同一个问题,递归算法一般运行得更快一些C.对于较复杂的问题,用递归方式编程一般比非递归方式更难一些D.对于已经定义好的标准数学函数sin(x),应用程序中的语句“y=sin(sin(x));”就是一种递归调用13.下面关于死循环的说法中,只有( )是正确的。A.不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环,因而,任何编译系统都不做死循环检验B.有些编译系统可以检测出死循环C.死循环属于语法错误,既然编译系统能检查各种语法错误,当然也应该能检查出死循环D.死循环与多进程中出现的“死锁”差不多,而死锁是可以检测的,因而,死循环也可以检测的14.在C语言中,表达式23|2^5的值是( )。A.23 B.1 C.32 D.1815.在C语言中,判断a等于0或b等于0或c等于0的正确的条件表达式是( )。A.!((a!=θ)||(b!=θ)||(c!=θ))B.!((a!=θ)&&(b!=θ)&&(c!=θ))C.!(a= =θ&&b==θ)||(c!=θ)D.(a=θ)&&(b=θ)&&(c=θ)二、阅读程序:程序输入不超过数组或字符串定义的范围。判断题正确填√,错误填×。除特殊说明外,判断题1.5分,选择题3分,共计40分。(一)请根据第一段程序回答16~21题。1. #include < iostream >2. using namespace std;3. #define MAXN 2θ4. int gu[MAXN] [MAXN];5. int 1(int n, int m) {6. if(n<=1||m<2)7. return 1; 8. if (gu[n][m] ! = -1)9. return gu[n][m];10. int ans =θ;11. for(int i=θ; i12. ans+=1(n-1,i);13. gu[n][m] = ans;14. return ans;15. }16. int main() {17. int n, m;18. cin>>n>>m;19. for (int i=θ; i20. for(int j=θ; j21. gu[i][j] = -1;22. cout<< 1(n, m);23. return θ;24. }·判断题16.l函数中,m的值不可能是奇数。( )17.若将第11行的<改为<=,程序的输出结果可能会改变。( )18.若将第8,9,13行删除,程序的运行的结果不变。( )19.在添加合适的头文件后,将第19到21行替换为memset(gu,255,sizeof(gu));可以起到相同的作用。( )·单选题20.若输入数据为48,则输出为( )。A.7 B.8 C.15 D.1621.若输入数据为57,则输出为( )。A.4 B.6 C.8 D.12(二)请根据第二段程序回答22~27题。1. #include < bits/stdc ++ . h >2. using namespace std;3. int main() {4. int a[1θθ1], i, j, t, n;5. for(i=θ; i<=1θθθ; i++)6. a[i] =θ;7. scanf( "%d", &n);8. for(i=1; i<=n; i++){9. scanf("%d", &t);10. a[t] ++ ;11. }12. for (i=1θθθ; i>=θ; i--)13. for (j=1; j<=a[i]; j++)14. printf("%d ", i);15. return θ;16.}·判断题22.输入10个数字,输出结果是从小到大。( )23.输入的数字中有2个1,则输出时出来第一个1是第一个输入的。( )24.第13行的<=改为<号,且输入数据为10 2 12 33 34 1 2 87 22 9 0,则输出2。( )25.(3分)第12行改为for(inti=0;i<=1000;i~~)则程序运行结果不变。( )·选择题26.第12行改为for(int i=1000;i>1;i--),第13行改为for(int j=a[i];j>1;j--),则输入的数据为5 2 12 33 34 44,则运行结果为( )。A.不变 B.输出2 12 33 34 44C.无输出 D.输出44 34 33 12 227.第10行改为++a[t]和a[t++],则输入5 1 2 3 4 5,输出的结果分别为( )。A.1 2 3 4 5和5 4 3 2 1 B. 1 2 3 4 5和无输出C. 5 4 3 2 1和5 4 3 2 1 D. 5 4 3 2 1和无输出(三)请根据第三段程序回答28~33题。1. #include < bits/stdc ++ . h >2. using namespace std;3. const int maxn= 5θθθθθ, INF =θx3f3f3f3f;4.int L[maxn /2+2], R[maxn /2+2];5. void unknown(int a[], int n, int left, int mid, int right) {6. int n1=mid-left, n2=right-mid;7. for(int i=θ; i8. L[i] = a[left + i];9. for (int i=θ; i10. R[i] = a[mid + i];11. L[n1] = R[n2] = INF;12. int i=θ, j=θ;13. for (int k=left; k14. if (L[i] <= R[j])15. a[k] = L[i ++];16. else17. a[k] = R[j ++];18. }19. }20. void unknownsort (int a[], int n, int left, int right) {21. if (1eft+122. int mid = (1eft + right) / 2;23. unknownsort (a, n, 1eft, mid);24. unknownsort (a, n, mid, right);25. unknown(a, n, left, mid, right);26. }27. }28. int main() {29. int a[maxn], n;30. cin >> n;31. for (int i=θ; i32. cin >> a[i];33. unknownsort (a, n, θ, n);34. for (int i=θ; i35. if (i) cout<<" ";36. cout << a[i];37. }38. cout << end1;39. return θ;40. }·判断题28.第13行的<改为<=将不会影响运行结果。( )29.第21行的<改为<=将不会影响运行结果。( )30.此类排序是高效的但是是不稳定的。( )31.(3分)第11行的代码去掉将影响运行结果。( )·选择题32.此题选择的是哪种排序( )。A.选择排序 B.桶排序 C.归并排序 D.堆排序33.(3分)此题用到了( )思想。A.动态规划 B.分治 C.冒泡 D.贪心三、完善程序:单选题,每小题3分,共计30分。(一)下面的程序的功能是输入若干行字符串,每输入一行,就按逆序输出该行,最后键入CTRL+Z终止程序(程序中EOF为输入终止的标记,相应的按键为CTRL+Z,机内码为-1)。1. #include < stdio. h >2. #include < string. h >3. int maxline = 1θθ;4. int getline (char s[], int lim) {5. int c, i;6. for (i=θ; i7. s[i] = ① ;8. if (c == '\n') {9. s[i] = c;10. ++ i;11. }12. s[i] = ' \θ';13. return ② ;14. }15. int reverse(char s[]) {16. int i, j, t;17. for (i=θ, j=strlen(s)-2; i18. t = s[i];19. ④20. s[j] = t;21. }22. return θ;23. }24. int main() {25. char line[1θθ];26. /* s[strlen(s) - 1]为换行符* /27. while ((getline(line, maxline)) > 0) {28. printf("%s", line);29. ⑤ ;30. printf("%s", line);31. }32. }34.①处应填( )。A. c B. i C. EOF D. lim35.②处应填( )。A. θ B.1 C. i D.c36.③处应填( )。A. i++,j++ B. i++,j-- C. i--,j++ D. i--,j--37.④处应填( )。A.s[i]=s[j] B.s[j]=s[i] C. reverse(s) D.t=s[j]38.⑤处应填( )。A. reverse(line) B. sort(line) C. unique(line) D. printf("%s",line)(二)在一个2k×2k个方格组成的棋盘中恰有一个方格与其他方格不同(图中标记为-1的方格),称之为特殊方格。现用L型(占3个小格)纸片覆盖棋盘上除特殊方格的所有部分,各纸片不得重叠,在下表给出的一个覆盖方案中,k=2,相同的3个数字构成一个纸片。下面给出的程序是用分治法设计的,将棋盘一分为四,依次处理左上角、右上角、左下角、右下角,递归进行。2 2 3 32 -1 1 34 1 1 54 4 5 51. #include < stdio. h >2. int board[65][65], tile; /* tile 为纸片编号* /3. void chessboard (int tr, int tc, int dr, int dc, int size) {4. /* dr, dc依次为特殊方格的行,列号* /5. int t, s;6. if (size == 1)7. ①8. t=tile++;9. s=size/2;10. if ( ② )11. chessboard (tr, tc, dr, dc, s);12. else {13. board[tr+s-1][tc+s-1]=t;14. ③ ;15. }16. if (dr < tr + s && dc > = tc + s)17. chessboard (tr, tc + s, dr, dc, s);18. else {19. board[tr+s-1][tc+s]=t;20. ④ ;21. }22. if(dr > = tr + s && dc < tc + s)23. chessboard(tr + s, tc, dr, dc, s);24. else {25. board[tr + s][tc+s-1]=t;26. ⑤ ;27. }28. if (dr > = tr + s && dc>=tc+s)29. chessboard(tr + s, tc + s, dr, dc, s);30. else {31. board[tr + s][tc + s] = t;32. chessboard(tr + S, tc + s, tr+ s, tc + s, s);33. }34. }35. void prt1(int b[][65], int n) {36. int i, j;37. for (i=1; <=n; i++){38. for(j=1; j<=n; j++)39. printf("%3d", b[i][j]);40. printf("\ n");41. }42. }43. int main() {44. int size, dr, dc;45. printf("input size(4/8/16/64): \n");46. scanf ("%d", &size);47. printf ("input the position of special block(x, y): \ n");48. scanf ("%d%d", &dr, &dc);49. board[dr][dc] = - 1;50. tile ++ ;51. chessboard(1, 1, dr, dc, size);52. prt1 (board, size);53. }39.①处应填( )。A. return B. continue C. break D. tile++40.②处应填( )。A. dr C.dr41.③处应填( )。A. chessboard(tr,tc,tr-s-1,tc+s-l,s) B. chessboard(tr,tc,tr+s+l,tc+s-l,s)C. chessboard(tr,tc,tr+s-l,tc+s-l,s) D. chessboard(tr,tc,tr-s-l,tc-s-l,s)42.④处应填( )。A. chessboard(tr,tc+s+l,tr+s-l,tc+s,s) B. chessboard(tr,tc+s,tr+s-l,tc+s,s)C. chessboard(tr,tc+s,tr+s-l,tc+s+l,s) D. chessboard(tr,tc,tr-s+l,tc-s-l,s)43.⑤处应填( )。A. chessboard(tr+s,tc,tr+s,tc+s-l,s)B. chessboard(tr+s,tc,tr+s+l,tc+s,s)C. chessboard(tr,tc+s,tr+s-l,tc+s+l,s)D. chessboard(tr+s,tc,tr+s,tc+s,s) 展开更多...... 收起↑ 资源预览