NOC创意编程项c++初中组模拟题
-
单选题(共10小题,每题2分,共20分)
3. 下面标识符中正确的是()
A:_abc B:3ab C:int D:+ab
4. 下列数据类型不是C++语言基本数据类型的是()
A:字符型 B:整型 C:实型 D:数组
5. 下列字符列中,可以作为"字符串常量"的是()
A:ABC B:"xyz" C:'uvw' D:'a'
6. 设变量m,n,a,b,c,d均为0,执行(m = a==b)||(n=c==d)后,m,n的值是()
A:0,0 B:0,1 C:1,0 D:1,1
7. 设a为5,执行下列代码后,b的值不为2的是()
A:b = a/2 B:b = 6-(--a) C:b = a%2 D:b = a < 3 ? 3: 2
8. 判断char型变量n是否为小写字母的正确表达式为()
A:’a’<= n <=’z’ B:(n>=a)&&(n<=z)
C:(’a’>=n)| |(’z’<=n) D:(n>=’a’)&&(n<=’z’)
9. 计算机的存储器中,组成一个字节(Byte)的二进制位(bit)个数是()
A:4 B:8 C:16 D:32
10. 下面程序的输出结果是()
(图已丢失,参考类似题型)
A:5 7 B:a=5 b=7 C:a=5 b=6 D:编译时出错
11. 对while、do…while循环结构,下面说法正确的是()
A:只是表达形式不同
B:do…while结构中的语句至少执行一次
C:while结构中的语句至少执行一次
D:条件成立时,它们有可能一次也不执行
12. 下列函数的功能是()
A:把a中的大写字母变成小写字母
B:把a中的小写字母变成大写字母
C:把a中的所有字母变成小写字母
D:把a中的字母变成它前面i个的
-
判断题(共5小题,每题2分,共10分)
13. const char* p说明p是指向字符串的常量指针()
对 错
14. 在说明一个结构变量后,不能整体引用结构体变量,需要逐一引用()
对 错
15. 设int a[][4]={1,2,3,4,5,6,7,8,9};则数组a的第一维的大小是4 ()
对 错
16. 字符数组中每一个元素可存放一个字符,而字符指针变量存放字符串首地址()
对 错
17. break语句也可以用于if中,退出if语句()
对 错
-
阅读程序写结果(共3小题,每题5分钟,共15分)
1、
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
int r = a%b;
while( r )
{
a = b;
b = r;
r = a%b;
}
return b;
}
int main()
{
int a,b;
cin >> a >> b;
cout << gcd(a,b) << endl;
return 0;
}
18. 输入:16 24
输出:_____
2、
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
while( a!=b )
{
if( a > b )
{
a = a-b;
}
else
{
b = b-a;
}
}
cout << a << endl;
return 0;
}
19. 输入:18 63
输出:_____
3、
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[32] = {0};
cin >> str;
int len = strlen(str);
for(int i = 0 ; i < len; i++)
{
if( str[i] >= 'A' && str[i] <= 'Z')
{
str[i] += 32;
}
if( str[i] >= 'a' && str[i] <= 'z')
{
str[i] -= 32;
}
}
cout << str << endl;
return 0;
}
-
输入:AbCdefGg
输出:__________
-
完善程序题(共3小题,每题10分,共30分)
1、如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”。例如,12321 就是一个回文数,而 77778 就不是。当然,回文数的首和尾都应是非零的,因此 0220 就不是回文数。事实上,有一些数(如 33 ),在十进制时是回文数,在二进制时( 100001 )时也是回文数,我们姑且将这样的数叫做双重回文数,请你找出两个整数之间的所有双重回文数,如果没有,输出-1
输入一个数,请按上述要求完善以下程序:
#include <iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
bool flag1=true;
for(int i=a;i<=b;i++){
int t=i,tmp=0;
while(t){
tmp=______①________;
t/=10;
}
if(tmp==i){
int arr[100],k=0,t=i;
while(t){
_______②________
t/=2;
}
_____③______
bool flag=true;
for(;p<q;p++,q--){
if(_____④_____){
flag=false;
break;
}
}
if(flag){
flag1=false;
cout<<i<<endl;
}
}
}
if(flag1){
cout<<"-1";
}
return 0;
}21. ①处应填()
A: tmp*10+t%10 B :t*10+tmp%10
C: tmp%10+t/10 D :tmp*10+t/10
22. ②处应填()
A: arr[k]=t/2; B:arr[k]=t%2;
C:arr[k++]=t%2; D:arr[k++]=t/2;
23. ③处应填()
A: int q=0,p=k-1;
B: int p=0,q=k-1;
C: int p=0,q=k;
D: int q=0,p=k;
24. ④处应填()
A: arr[p]==arr[q]; B: arr[p]!=arr[q];
C: arr[p]>arr[q]; D:arr[p]<arr[q];
2.给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1。
#include <iostream>
using namespace std;
int BinarySearch(int A[],int n,int target){
if(n <= 0){
return -1;
}
int start = 0,end = n-1;
while(start < end){
int mid = _①_;
if(A[mid] < target){
start = __②__;
}
else{
_③___;
}
}
if(__④__){
return -1;
}
else{
return start;
}
}
int main(){
int target;
cin>>target;
int A[] = {2,3,4,4,4,4,4,5,6,7,8};
cout<<BinarySearch(___⑤___)<<endl;
return 0;
}25. ①处应填()
A: (start+end)/2; B :start
C: end D:start+end
26. ②处应填()
A: mid; B:mid+1;
C:mid-1; D:end;
27. ③处应填()
A:end=mid B:end=mid+1
C:end=mid-1 D:end=start
28. ④处应填()
A:A[start] === target B:A[start] != target
C:A[end] != target D:A[edn] == target;
29. ⑤处应填()
A: A,10,target
B: A,target,10
C: A,target,11
D:A,11,target
3.编一程序实现两种不同进制之间的数据转换。输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
char c[32];
char t[32];
void change(int n,int base)
{
int index = 0;
while(n>0){
if( n%base >= 10)
t[index++] = __①__;
else
t[index++] = __②__;
__③___;
}
}
int main()
{
int base,taget;
cin >> base >> c >> taget;
int len = strlen(c);
int value = 0;
for( int i = 0; i < len; i++)
{
if( c[i] < 'A' )
value += (__④__)*pow(base,len-1-i);
else
value += (__⑤__)*pow(base,len-1-i);
}
change(value,taget);
int t_len = strlen(t);
for(int i = t_len-1; i>= 0;i--)
{
cout << t[i];
}
cout << endl;
return 0;
}30. ①处应填()
A:n%base +’A’-10
B :n%base
C: n%base +’A’
D:n%base +’0’
31. ②处应填()
A:n%base B :n%base +’0’
C:n/base D :n%base -’0’
32. ③处应填()
A:n%=base; B :n%=10;
C:n/=10; D :n/=base;
33. ④处应填()
A:str[i] B :str[i]+'0'
C:str[i]-'0' D :str[i]-'1'
34. ⑤处应填()
A:str[i]-'A'+10 B :str[i]-'A'
C:str[i]+'A'+10 D :str[i]+'A'
五、编程题(共5小题,每题5分,共25分)35. 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 436. 题目描述
找出下列数字的规律,根据输入的项数n,求出数列的前n项内容
1 4 9 61 52 63......
输入格式:
一个正整数n
输出格式:
一行n个正整数
输入输出样例
输入:3
输出:1 4 937. 小码君和小码酱想要一起下围棋,但是围棋的棋盘找不到了,于是他们决定用C++完成一个简单的围棋程序,x表示小码君的黑子,o表示小码酱的白子,-表示没有下棋的位置,在围棋中这种位置称作是气,如果落子之后,能够导致对方连续的任意颗棋子所有相邻位置都没有气,则全部吃掉。可是如何利用程序实现判断小码君落子后围棋能能否吃子呢?
输入格式:
第一行一个整数n,表示围棋的棋盘为n行n列;
接下来n行,每行n个字符表示当前棋盘所有格子的棋子情况;
最后一行两个整数x, y,用空格隔开,分别表示小码君在x行y列落子;
输出格式:
如果可以吃子,输出true;
如果不能,输出false。
约定:
3<=n<=100;
落子之前的棋盘一定是符合规则的且小码君的落子一定符合规则。
输入样例1:
5
-----
-xo--
xox--
xoxo-
--ox-
5 2
输出样例1:
true
输入样例2:
5
-----
-xo--
xox--
xoxo-
--ox-
3 4
输出样例2:
False
38. 题目描述:
找出正整数M和N之间(N不小于M)的所有真素数。
真素数的定义:如果一个正整数P为素数,且其反序也为素数,那么P就为真素数。
例如,11,13均为真素数,因为11的反序还是为11,13的反序为31也为素数。
输入格式:
输入两个数M和N,空格间隔,1<=M<=N<=100000。
输出格式:
按从小到大输出M和N之间(包括M和N)的真素数,逗号间隔。如果之间没有真素数,则输出No。
样例数据:
输入1:
10 35
输出1:
11,13,17,3139. 题目描述:第19届亚洲运动会将于2022年9月10日在杭州举行,在运动会体操项目中,现场会有10名评委对运动员的表现进行打分,采用去除一个最高分和一个最低分,余下取平均分最为运动员的最后得分,请你来帮助奥组员编写一个C++程序,实现这样的效果的,10个裁判一次输入得分,自动生成运动员最终得分。
输入格式:
10个数字,每个数字一行
输出格式:
1个保留两位小数的数字
输入样例:
10
9
9
8
7
8
8
6
9
9
输出样例:
8.38