資源簡介 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) 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫