首頁
Loading
您所在的位置:首頁 > 學科競賽 > 信息學競賽 > 正文

第十二屆全國信息學奧賽初賽試題普及組(C語言)

作者: 來源: 日期:2017-11-3 16:17:50 人氣:542 加入收藏 評論:0 標簽:

第十二屆全國信息學奧賽初賽試題普及組(C語言)

一、單項選擇題(共20 題,每題1.5 分,共計30 分。每題有且僅有一個正確答案.)。 
1.
在下面各世界頂級的獎項中,為計算機科學與技術領域做出杰出貢獻的科學家設立的獎項是( )。 
A. 沃爾夫獎    B. 諾貝爾獎    C. 菲爾茲獎    D. 圖靈獎
 

2. 在下列各軟件中,不屬于NOIP 競賽(復賽)推薦使用的語言環境有( )。
 
A. gcc/g++     B. Turbo Pascal 
C. RHIDE       D. free pascal 

3. 以下斷電之后仍能保存數據的有( )。
 
A. 寄存器    B. ROM     C. RAM     D. 高速緩存
 

4.Linux 是一種( )。
 
A. 繪圖軟件    B. 程序設計語言    C. 操作系統    D. 網絡瀏覽器
 

5. CPU 是( )的簡稱。
 
A. 硬盤    B. 中央處理器    C. 高級程序語言    D. 核心寄存器
 

6. 在計算機中,防火墻的作用是( )。
 
A. 防止火災蔓延    B.防止網絡攻擊
 
C. 防止計算機死機    D. 防止使用者誤刪除數據
 

7. 在下列關于計算機語言的說法中,不正確的是( )。
 
A. Pascal和C都是編譯執行的高級語言
 
B. 高級語言程序比匯編語言程序更容易從一種計算機移植到另一種計算機上
 
C. C++是歷史上的第一個支持面向對象的計算機語言
 
D. 與匯編語言相比,高級語言程序更容易閱讀
 

8. 在下列關于計算機算法的說法中,不正確的是( )。
 
A. 一個正確的算法至少要有一個輸入
 
B. 算法的改進,在很大程度上推動了計算機科學與技術的進步
 
C. 判斷一個算法的好壞的主要標準是算法的時間復雜性與空間復雜性
 
D. 目前仍然存在許多涉及到國計民生的重大課題,還沒有找到能夠在計算機上實施的有效算法
 

9. 在下列各種排序算法中,不是以“比較”作為主要操作的算法是( )。
 
A. 選擇排序    B. 冒泡排序    C. 插入排序    D. 基數排序
 

10.在編程時(使用任一種高級語言,不一定是C),如果需要從磁盤文件中輸入一個很大的二維數組(例如1000*1000 的double 型數組),按行讀(即外層循環是關于行的)與按列讀(即外層循環是關于列的)相比,在輸入效率上()。
 
A. 沒有區別               B. 按行讀的方式要高一些
 
C. 按列讀的方式要高一些   D. 取決于數組的存儲方式。
 

11.在C 語言中,表達式21^2 的值是( )
 
A. 441    B. 42     C.23     D.24 

12.在C 語言中,判斷a 不等于0 且b 不等于0 的正確的條件表達式是()
 
A. !a==0 || !b==0     B. !((a==0)&&(b==0)) 
C. !(a==0&&b==0)      D. a && b 

13.某個車站呈狹長形,寬度只能容下一臺車,并且只有一個出入口。已知某時刻該車站狀態為空,從這一時刻開始的出入記錄為:“進,出,進,進,進,出,出,進,進,進,出,出”。假設車輛入站的順序為1,2,3,……,則車輛出站的順序為( )。
 
A. 1, 2, 3, 4, 5     B. 1, 2, 4, 5, 7 
C. 1, 4, 3, 7, 6     D. 1, 4, 3, 7, 2 

14.高度為n 的均衡的二叉樹是指:如果去掉葉結點及相應的樹枝,它應該是高度為n-1 的滿二叉樹。在這里,樹高等于葉結點的最大深度,根結點的深度為0,如果某個均衡的二叉樹共有2381 個結點, 則該樹的樹高為( )。

A. 10     B. 11     C. 12     D. 13 

15.
與十進制數1770 對應的八進制數是( )。 
A. 3350     B. 3351     C. 3352     D. 3540 

16.將5 個數的序列排序,不論原先的順序如何,最少都可以通過( )次比較,完成從小到大的排序。
 
A. 6     B. 7     C. 8     D. 9 

17. 設A=B=D=true,C=false,以下邏輯運算表達式值為真的有()。
 
A. ( A∧B)∨(C∧D)     B. ? ? ((A∨B∨D)∧
C) 
C. A∧(B∨C∨D)     D. (A∧B∧C)∨
? ? D 

18. (2010)16 + (32)8的結果是( )。
 
A. (8234)10     B. (202B)16 
C. (20056)8     D. (100000000110)2 

19. 設棧S的初始狀態為空,元素a, b, c, d, e 依次入棧,以下出棧序列不可能出現的有()。
 
A. a, b, c, e, d     B. b, c, a, e, d 
C. a, e, c, b, d     D. d, c, e, b, a 

20. 已知6 個結點的二叉樹的先根遍歷是1 2 3 4 5 6(數字為結點的編號,以下同),后根遍歷是3 2 5 6 4 1,則該二叉樹的可能的中根遍歷是()
 
A. 3 2 1 4 6 5      B. 3 2 1 5 4 6 
C. 2 1 3 5 4 6      D. 2 3 1 4 6 5 

二.問題求解(共2 題,每題5 分,共計10 分)
 
1.(尋找假幣) 現有80 枚硬幣,其中有一枚是假幣,其重量稍輕,所有真幣的重量都相同,如果使用不帶砝碼的天平稱重,最少需要稱幾次,就可以找出假幣?你還要指出第1 次的稱重方法。請寫出你的結果:_________________________________________________。 

2.(取石子游戲) 現有5 堆石子,石子數依次為3,5,7,19,50,甲乙兩人輪流從任一堆中任?。看沃荒苋∽砸欢?,不能不?。? 取最后一顆石子的一方獲勝。甲先取,問甲有沒有獲勝策略(即無論乙怎樣取,甲只要不失誤,都能獲勝)?如果有,甲第一步應該在哪一堆里取多少?請寫出你的結果:
 
_________________________________________________。
 

三.閱讀程序寫結果(共4 題,每題8 分,共計32 分)
 
1. #include <stdio.h> 
int main() 
{int i,u[4],a,b,x,y=10; 
for(i=0;i<=3;i++) 
scanf(%d, &u[i]); 
a=(u[0]+u[1]+u[2]+u[3])/7; 
b=u[0]/((u[1]-u[2])/u[3]); 
x=(u[0]+a+2)-u[(u[3]+3)%4]; 
if(x>10) 
y+= (b*100-u[3])/(u[u[0]%3]*5); 
else 
y+=20+(b*100-u[3])/(u[u[0]%3]*5); 
printf(%d,%d\n, x,y); 
return 0; 
} /*注:本例中,給定的輸入數據可以避免分母為0 或下標越界。
*/ 
輸入:
9 3 9 4 
輸出:
_______________ 

2.
#include <stdio.h> 
main() 
{int i,j,m[]={2,3,5,7,13}; 
long t; 
for (i=0;i<=4;i++) 
{t=1; 
for(j=1;j<m[i];j++) t*=2; 
printf(%ld ,(t*2-1)*t); 

printf(\n); 

輸出
:____________________ 

3.
#include stdio.h 
#define N 7 
int fun(char s[],char a,int n) 
{int j; 
j=n; 
while(a<s[j] && j>0) j--; 
return j; 

int main() 
{char s[N+1]; 
int k,p; 
for(k=1;k<=N;k++) 
s[k]=‘‘A‘‘
+2*k+1; 
printf(%d\n,fun(s,‘‘M‘‘
,N)); 

輸出:
_____________ 

4.#include <stdio.h> 
void digit(long n,long m) 
{if(m>0) 
printf(%2ld,n%10); 
if(m>1) 
digit(n/10,m/10); 
printf(%2ld,n%10); 

main() 
{long x,x2; 
printf(Input a number:\n); scanf(%ld,&x); 
x2=1; 
while(x2<x) x2*=10; 
x2/=10; 
digit(x,x2); 
printf(\n); 

輸入:
9734526 
輸出:
______________________________ 

四.完善程序(前4 空,每空2.5 分,后6 空,每空3 分,共28 分)
 
1.(全排列)下面程序的功能是利用遞歸方法生成從1 到n(n<10)的n 個數的全部可能的排列(不一定按升序輸出)。例如,輸入3,則應該輸出(每行輸出5 個排列): 
123 132 213 231 321 
312 
程序:
 
#include<stdio.h> 
int n,a[10]; /* a[1],a[2],…,a[n]構成n 個數的一個排列
*/ 
long count=0; /*變量count 記錄不同排列的個數,這里用于控制換行
*/ 
void perm(int k) 
{int j,p,t; 
if( ①

{count++; 
for(p=1;p<=n;p++) printf(%1d,a[p]); /* %1d中是數字1,不是字母
l */ 
printf( ); 
if( ②
) printf(\n); 
return; 


for(j=k;j<=n;j++) 
{t=a[k];a[k]=a[j];a[j]=t; 

t=a[k]; ④



main() 
{int i; 
printf(Entry n:\n); scanf(%d,&n); 
for(i=1;i<=n;i++) a[i]=i; 



2. 由鍵盤輸入一個奇數P (P<100,000,000),其個位數字不是5,求一個整數S,使P×S = 1111...1 ( 在給定的條件下,解S 必存在)。要求在屏幕上依次輸出以下結果

(1)S 的全部數字。除最后一行外,每行輸出50 位數字。(2) 乘積的數字位數。
 
例1:輸入p=13,由于13*8547=111111,則應輸出(1)8547,(2)

例2:輸入p=147,則輸出結果應為(1)
755857898715041572184429327286470143613 
(2)42,即等式的右端有42 個1。
 
程序:
 
#include <stdio.h> 
main() 
{long p,a,b,c,t,n; 
int bl; 
while (1) 
{ printf(輸入p, 最后一位為1 或3 或7 或
9:\n); 
scanf(%ld,&p); 
if ((p%2!=0)&&(p%5!=0)) /*如果輸入的數符合要求,結束循環
*/ 


a=0; n=0; 
while (a<p) 
{a=a*10+1; n++; /* 變量a 存放部分右端項,n 為右端項的位數
*/ 

t=0; 
do 

{b=a/p; 
printf(%1ld,b); 
t++; 
if ( ⑦

printf(\n); 
c= ⑧ ; a= ⑨
; n++; 
} while (c>0); 
printf(\nn=%ld\n, ⑩
); 

    本文網址:http://www.vanessaandtheos.com/show.asp?id=588
    讀完這篇文章后,您心情如何?
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    更多>>網友評論
    發表評論
    A片在线观看_色偷偷亚洲女人的天堂_日本真人无遮挡啪啪免费