2023海淀区信息学竞赛校内预选赛真题试卷
剩余时间 --:--:--
单选题 共 10 题
1.
C++语言中,作为语句结束符的是(     )
2.

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

3.

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

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

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

5.

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

6.

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

7.

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

8.

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

9.

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

10.

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

填空题 共 20 题
1.

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

2.

数学上计算圆柱体体积是用底面积乘以高,具体的计算公式是π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;
}


3.

数学上把只含有一个未知数、未知数的最高次数为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;
}
4.

陶陶想要爬上一个有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;
}
5.

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

                        

6.

关于阳历闰年的产生:地球绕太阳运行周期为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;
}
7.

陶陶学会了素数的判断,现在他找到不超过 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;
}
8.

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

#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;
}
9.

现有一个程序要计算并输出所有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;
}
10.

有家包子店叫“王子包子王”,我们发现它从左往右念和从右往左念的结果是一样的。接下来,让我们看看数字有没有类似好玩的事情:一个三位数反转后与原数拼接是不是有类似的效果?现有一个程序,对于给定的一个三位数,要求你分离出它的百位,十位和个位,反转后输出。若反转后首位为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;
}
11.

对于下图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
12.

对于右图 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
13.

对于下图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
14.

对于右图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
15.

对于下图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
16.

对于右图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
17.

对于下图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
18.

对于上图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
19.

对于下图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
20.

对于上图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
C++ 编辑器
输入
输出