C++编程阶段性测验
- 选择题
1、C++的合法注释是( )
A /*This is a C program/* B // This is a C program
C “This is a C program” D // This is a C program//
答案:B
2、下面标识符中正确的是( )
A _abc B 3ab C int D +ab
答案:A
3、C++语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( )。
A 必须为字母 B 必须为下划线
C 必须为字母或下划线 D 可以是字母、数字和下划线中任一字符
答案:C
4、已知x=43, ch=’A’, y=0;则表达式(x>=y&&ch<’B’&&!y)的值是( )
A 0 B 语法错 C 1 D ‘假’
答案:C
5、下列数据类型不是C++语言基本数据类型是( )
A 字符型 B 整型 C 布尔型 D 数组
答案:D
6、下列数组定义语句中,不合法的是( )
A int a[3]={0,1,2,3} B int a[]={0,1,2}
C int a[3]={0,1,2} D int a[3]={0}
答案:A
7、假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值( )
A 0 B 4 C 8 D 6
答案:A
8、在下列关于C++函数的叙述中,正确的是( )
A 每个函数至少要有一个参数 B 每个函数都必须返回一个值
C 函数在被调用之前必须先声明 D 函数不能自己调用自己
答案:C
9、判断char型变量n是否为小写字母的正确表达式为( )
A. ‘a’<=n<=’z’ B. (n>=a)&&(n<=z) C. (‘a’>=n||’z’<=n) D.(n>=’a’)&&(n<=’z’)
答案:D
10、对while、do...while循环结构,下面说法正确的是( )
A.只是表达形式不同 B.do...while结构中的语句至少执行一次
C.while结构中的语句至少执行一次 D.条件成立时,它们有可能一次也不执行
答案:B
11、设a为5,执行下列代码后,b的值不为2的是( )
A b=a/2 B b=6-(--a) C b=a%2 D b=a<3?3:2
答案:C
12、下面循环体的执行次数为( )
int main(){
int a,b;
for(a=0,b=5;a<=b+1;a+=2,b--)
cout<<a<<endl;
}
A.3 B.2 C.1 D.0
答案:A
13、结构化程序设计的三种基本控制结构是( )。
A 输入、处理、输出 B 树形、网形、环形
C 顺序、选择、循环 D 主程序、子程序、函数
答案:C
- 填空题
1、 void max_out( int val1, int val2 )
{
cout << ( val1 > val2 ) ? val1 : val2;
}
int main()
{
int ix = 10, jx = 20;
cout << "The larger of " << ix;
cout << ", " << jx << " is ";
max_out( ix, jx );
cout << endl;
}
程序的输出结果是:
The larger of 10, 20 is 20
2、#include <bits/stdc++.h>
using namespace std;
int ack(int m,int n){
if(m==0) {
return n+1;
}
else if(n==0) {
return ack(m-1,1);}
else {
return ack(m-1,ack(m,n-1));
}
}
int main(){
printf("%d\n",ack(3,4));
putchar('\n');
return 0;
}
程序的输出结果是:
125
- 编程题
- 编程计算:1+2+3+4+5+…+99+100
#include <bits/stdc++.h>
using namespace std;
int main(){
int sum=0;
for(int i=1;i<=100;i++){
sum=sum+i;
}
cout<<sum;
}
- 编程计算:如果一个自然数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。试求出所有二位绝对素数。
#include <bits/stdc++.h>
using namespace std;
//判断是不是素数
bool fun1(int n){
int i = 2;
while (i <= sqrt(n))
{
if (0 == n % i)return 0;
i++;
}
return 1;
}
int fun2(int n)
{
int a = fun1(n);
int b = fun1(n % 10 * 10 + n / 10);
if (1 == a && 1 == b)return 1;
else return 0;
}
int main(){
int i;
for (i = 10; i <= 99; i++)
{
if (fun2(i))
{
cout<<i<<endl;
}
}
}
- 编程计算:输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。
#include <bits/stdc++.h>
using namespace std;
int a[100];
int main() {
int x, n = 0;
while(scanf("%d", &x) == 1) {
a[n] = x;
++n;
if(getchar() == '\n' )
break;
}
for(int i = n - 1; i >= 0; --i) {
printf("%d ", a[i]);
}
return 0;
}
- 简单排序:第一行n为数字个数,接下来的n行为任意输入的n个整数,将这n个整数按从小到大的顺序输出。(答案考虑去重,可依据学生情况)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j;
scanf("%d",&n);
int a[100];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
int m=0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[i]<a[j]){
m=a[i];
a[i]=a[j];
a[j]=m;
}
}
}
int b;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(a[i]==a[j]){
for(b=j;b<n;b++){
a[b]=a[b+1];
}
j--;
n--;
}
}
}
printf("%d\n",n);
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}