试卷 2023海淀区信息学竞赛校内预选赛真题试卷
2023海淀区信息学竞赛校内预选赛真题试卷
选择题
第 1 题    单选题
C++语言中,作为语句结束符的是(     )
A.

回车符

B.

冒号

C.

逗号

D.

分号

第 2 题    单选题

在C++中,下列数据类型占用内存最大的是:(     )

A.

char

B.

bool

C.

double

D.

short

第 3 题    单选题

下列代码片段正确的输出是什么?(     )

int a=10;
double b=3.14;
printf(“%d-%lf”,a,b);
A.

6.86

B.

10 3

C.

10 3.14

D.

10-3.140000

第 4 题    单选题

若变量已正确定义,要将 a 和 b 中的数据进行交换,则下列正确的是(     )

A.

a=a+b;b=a-b;a=a-b;

B.

t=a;a=b;b=t;

C.

a=t;t=b;b=a;

D.

t=b;b=a;b=t;

第 5 题    单选题

在C++语言中,表示逻辑值"真"的是(     )

A.

1

B.

非0的数

C.

非1的数

D.

大于0的数

第 6 题    单选题

在C++中,下列运算符优先级最低的是:(     )

A.

+

B.

%

C.

*

D.

/

第 7 题    单选题

在C++程序中,下列变量名合法的是(     )

A.

_123abc

B.

123abc

C.

123#abc

D.

abc&123

第 8 题    单选题

在C++程序中表达式 x%=y 与下列哪个表达式是等价的?(     )

A.

x%y

B.

x/=y

C.

y=x%y

D.

x=x%y

第 9 题    单选题

在C++中,正确的数组定义方法是:(     )

A.

int n;int a[n];

B.

int n; n=100; int a[n];

C.

int [a]={1,2,3,4,5,6,7};

D.

int[100] a;

第 10 题    单选题

下列对语句“freopen(“A.in”,“r”,stdin);”的分析中,正确的是 (     )

A.

freopen 是文件名

B.

A.in 是重定向函数名

C.

r代表重定向为“写”方式

D.

语句将cin重定向到文件A.in

完善程序
第 11 题    填空题

我们知道C语言程序和 C++语言程序中的输出都必须添加相应的头文件,这个关键头文件是     ①    。(写C语言或者C++语言中适用的头文件都可以,填写万能头文件不得分)。

第 12 题    填空题

数学上计算圆柱体体积是用底面积乘以高,具体的计算公式是πr2h ,如果给定圆柱体底面的半径 r 和圆柱体的高 h,就可以计算出圆柱体的体积。用编程的方法实现这个任务,下面给定的代码中,空缺 ② 处应填写             (取3.14 ) 。

#include<bits/stdc++.h>
using namespace std;
int main()
{
         double r,h,v;
         cin>>r>>h;
              ②      ;
         cout<<v;
         return 0;
}


第 13 题    填空题

数学上把只含有一个未知数、未知数的最高次数为1且两边都为整式的等式叫做一元一次方程。一元一次方程中未知数的值叫做这个一元一次方程的解,或者叫做这个一元一次方程的根,一元一次方程只有一个根。 对于一个一元一次方程ax+b=0,其中a和b是给定的数,x是未知数,下面是解一元一次方程的程序代码,即从键盘上输入a和b,输出方程的解。用编程的方法实现这个任务,下面给定的代码中,空缺 ③ 处应该填写           。

#include<bits/stdc++.h>
using namespace std;
int main()
{
         double a, b;
         cin>>a>>b;
             ③   ;
         return 0;
}
第 14 题    填空题

陶陶想要爬上一个有n 级台阶的楼梯,每一步能爬一到两级台阶。他希望移动的次数是整数m 的整数倍,用程序计算满足条件爬到楼梯顶端的最小移动次数,若无解输出 -1。下图程序代码在空缺 ⑨ 处应填写         

#include<bits/stdc++.h>
using namespace std;
int main()
{
       int n,m,ans=-1;
       cin>>n>>m;
       for(     ⑨     ;i<=n;i++)
              if(i%m==0)
              {
                     ans=i;
                     break;
              }
       cout<<ans;
       return 0;
}
第 15 题    填空题

陶陶刚刚学会在C++程序中实现读写文件,她要从文件“A01.txt”中读取数据,进行相关运算后,将题目要求的答案存储在“A02.txt”中,她除了在程序中要加入关于文件读写的头文件外,她还需要写哪些关于文件读写的关键语句?  

                        

第 16 题    填空题

关于阳历闰年的产生:地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年。公历的平年只有365日,比回归年短约0.2422 日,所余下的时间约为四年累计一天,故每过四年于2月加1天,使当年的历年长度为366日,这一年就为闰年。现行公历中每400年有97个闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的,虽然是4的倍数,也是平年,这就是通常所说的:四年一闰,百年不闰,四百年再闰。例如,2000年是闰年,1900年则是平年。现在给定一个年份,请你判断它是否为闰年。用编程的方法实现这个任务,下面给定的代码中,空缺 ⑤ 处应该填写            

#include<bits/stdc++.h>
using namespace std;
int main()
{
         int n;
         cin>>n;
         if(    ⑤     ||(n%4==0&& n%100!=0)) 
         cout<<"是闰年";
         else cout<<"不是年";
         return 0;
}
第 17 题    填空题

陶陶学会了素数的判断,现在他找到不超过 n 的素数中,第 m 小的那一个,如果不存在就输出 -1 。下图程序代码在空缺 ⑩ 处应填写               

#include<bits/stdc++.h>
using namespace std;
int main()
{
       int n,m,j,cnt=0,ans=-1;
       cin>>n>>m;
       for(int i=2;i<=n;i++)
       {
              int k=int(sqrt(i));
              for(j=2;j<=k;j++)
                     if(i%j==0) break;
                 ⑩    ;
              if(cnt==m){ans=i;break;}
       }
       cout<<ans;
       return 0;
}
第 18 题    填空题

陶陶刚刚学会求一个正整数的质因数,他想把给定的一个正整数的全部质因数都输出,那么右边的程序代码在空缺 ⑧ 处填写一个表达式应该是                   。

#include<bits/stdc++.h>
using namespace std;
int main()
{
       int n,m=2;
       cin>>n;
       while(n>1)
       {
              if(n%m==0)
              {
                     cout<<m<<"";
                          ⑧     ;
              }
              else m++;
       }
       return 0;
}
第 19 题    填空题

现有一个程序要计算并输出所有1到n的正整数的总和,那么下面的程序代码中在空缺⑥处填写一个表达式应该是:           

#include<bits/stdc++.h>
using namespace std;
int main()
{
       int n,s=0;
       cin>>n;
       for(int i=1;i<=n;i++)
       {
                     ⑥     ;
       }
      cout<<s;
      return 0;
}
第 20 题    填空题

有家包子店叫“王子包子王”,我们发现它从左往右念和从右往左念的结果是一样的。接下来,让我们看看数字有没有类似好玩的事情:一个三位数反转后与原数拼接是不是有类似的效果?现有一个程序,对于给定的一个三位数,要求你分离出它的百位,十位和个位,反转后输出。若反转后首位为0,仍输出以0开头的数,如给定 123 反转后为321,140反转后的为 041。用编程的方法实现这个任务,下面给定的代码中,空缺 ④ 处应该填写         

#include<bits/stdc++.h>
using namespace std;
int main()
{
         int n,ab,c;
         cin>>n;
              ④     ;
         b=(n/10)%10;
         c=n/100;
         cout<<a<<b<<c;
         return 0;
}
阅读程序写结果
第 21 题    填空题

对于下图3-01中的程序,如果输入23和87, 则输出的结果为              。

#include<bits/stdc++.h>
using namespace std;
int main()
{
       int a,b;
       cin>>a>>b;
       a=a+b;
       b=a-b;
       a=a-b;
       cout<<a+b;
       return 0;
}// 图3-01
第 22 题    填空题

对于右图 3-02中的程序,如果输入-4,则输出的结果为             

#include<bits/stdc++.h>
using namespace std;
int main()
{
       int a;
       double b;
       cin>>a;
       if(a<0)
       {
              if(a<-2)  b=a*a;
              else b=abs(a);
       }
       else
       {
              if(a<10)  b=a+1;
              else b=sqrt(a);
       }
       cout<<b;
       return 0;
}// 图3-02
第 23 题    填空题

对于下图3-03中的程序,如果输入8,则输出的结果为          

#include<bits/stdc++.h>
using namespace std;
int main()
{     
       int n,s=0,a=1;
       cin>>n;
       for(int i=1;i<=n;i++)
       {
              s=s+a;
              a=a+2;
       }
       cout<<s;
       return 0;
}// 图3-03
第 24 题    填空题

对于右图3-04中的程序,输入 10,则输出的结果为            。

#include<bits/stdc++.h>
using namespace std;
int main()
{     
        int n,a=1,b=1,tmp;
       cin>>n;
       if(n==1 || n==2)
       {
              cout<<1;
              return 0; 
       }
       for(int i=3;i<=n;i++)
       {
              tmp=a;
              a=b;
              b=tmp+b;
       }
       cout<<b;
       return 0;
}// 图3-04
第 25 题    填空题

对于下图3-05中的程序,如果输入385和65,则输出的结果为              

#include<bits/stdc++.h>
using namespace std;
int main()
{     
       int n,m,ans=0;
       cin>>n>>m;
       for(int i=2;i<=n;i++)
       {
              if(n%i==0 && m%i==0)
              {
                     ans=i;
                     break;
              }
       }
       cout<<ans;
       return 0;
}// 图3-05
第 26 题    填空题

对于右图3-06中的程序,如果输入 24,则输出的结果为        。

#include<bits/stdc++.h>
using namespace std;
int main()
{     
       int n,t,sum=0;
       cin>>n;
       for(int i=1;i<=n;i++)
       {           
              t=i;
              while(t!=0)
              {
                     if(t%10==1) sum++;
                     t=t/10;
              }
       }
       cout<<sum;
       return 0;
}// 图3-06
第 27 题    填空题

对于下图3-07中的程序,如果输入 96 ,则输出的结果为          

#include<bits/stdc++.h>
using namespace std;
int main()
{     
       int n,ans=0;
       cin>>n;
       for(int i=1;i<n;i++)
       {           
              if(n%i==0)  ans++;
       }
       cout<<ans;
       return 0;
}// 图3-07
第 28 题    填空题

对于上图3-08中的程序,如果输入560,则输出的结果为        

#include<bits/stdc++.h>
using namespace std;
int main()
{     
       int n,ans=0;
       cin>>n;
       for(int i=2;i<=n;i++)
       {           
              if(n%i==0)   ans++;
              else continue;
              while(n%i==0)  n=n/i;
       }
       cout<<ans;
       return 0;
}// 图3-08
第 29 题    填空题

对于下图3-09中的程序,如果依次输入2 1 2 1 10,则输出的结果为           

#include<bits/stdc++.h>
using namespace std;
int a[105];
int main()
{        
       int n,d,ans=0,m;
       cin>>n>>d;
       for(int i=0;i<n;i++)  cin>>a[i];
       sort(a,a+n);
       cin>>m;
       for(int i=0;i<m;i++)
       {           
                if(i>=n)  ans-=d;
                else ans+=a[i];
       }
       cout<<ans;
       return 0;
}// 图3-09
第 30 题    填空题

对于上图3-10中的程序,如果输入 6 3 ,则输出的结果为            

#include<bits/stdc++.h>
using namespace std;
int main()
{          
       int a,b,ans;
       cin>>a>>b;
       ans=a;
       while(a/b!=0)
       {           
               ans+=a/b;
               a=a/b+a%b;
       }
       cout<<ans;
       return 0;
}// 图3-10
答题卡
选择题
1 2 3 4 5 6 7 8 9 10
完善程序
阅读程序写结果
题目总数:30
总分数:100
时间:60分钟