高级语句程序设计(C)经典试题及答案讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高级语句程序设计(C++)经典试题
一、单项选择题
1、在一个C++程序中,main函数的位置()。
①必须在程序的开头②必须在程序的后面
③可以在程序的任何地方④必须在其它函数中间
2、一个C++程序的执行是从()。
A、本程序的main函数开始,到main函数结束
B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C、本程序的main函数开始,到本程序文件的最后一个函数结束
D、本程序文件的第一个函数开始,到本程序main函数结束
3、在计算机语言中,以下描述正确的是:
A、高级语言较低级语言更远离对硬件的直接操作。
B、高级语言较低级语言更接近对硬件的直接操作。
C、C++是世界上第一种计算机高级语言。
D、C语言是由美国的微软公司研制成功的。
4、C++源程序的实现一般要经过三个步骤,其中不包括:
A、编辑
B、维护
C、编译
D、运行
5、设i=1,j=2,则表达式i++ +j的值为()。
① 1 ② 2 ③ 3 ④
6、设i=1,j=2,则表达式++i+j的值为()。
① 1 ② 2 ③ 3 ④
7、执行下列语句后,x的值是()。
int x,y;
x=y=1; ++x||++y;
①不确定② 0 ③ 1 ④ 2
8、已知x=5,则执行语句x+=x-=x×x; 后,x的值为()。
① 25 ② 40 ③ -40 ④ 20
9、常量是在程序中:
A、经常被使用的量。
B、最高级的量。
C、按固定周期使用的量。
D、按固定值使用的量。
10、有如下程序段:
int a=14,b=15,x;
char c=’A’;
x=(a&&b)&&(c<’B’);
执行该程序段后,x的值为()。
① ture ② false ③ 0 ④ 1
11、下面程序的输出结果是()。
#include <iostream>
using namespace std;
int main( )
{ int a=6,b=6;
if(a>5)
a-=1;
b+=1;
else
a+=1;
b-=1;
cout<<”a=”<<a<<endl;
cout<<”b”<<b<<endl;
return 0; }
① 5 7 ② a=5 b=7 ③ a=5 b=6 ④编译时出错
12、下面程序的输出结果是()
#include <iostream>
using namespace std;
int main( )
{ int a=6,b=6;
if(a>5)
{a-=1;
b+=1;}
else
{a+=1;
b-=1;}
cout<<”a=”<<a<<endl;
cout<<”b=”<<b<<endl;
return 0; }
① 5 7 ② a=5 b=7 ③ a=5 b=6 ④ a=6 b=5
13、下面程序的输出结果是()
#include <iostream>
using namespace std;
int main( )
{ int x=6,y=8;
if(x++<6)
cout<<++y<<endl;
if(x>6)
cout<< --y<<endl;
else
cout<<y++<<endl;
return 0;}
① 8 ② 7 ③ 9 ④编译时出错
14、下面程序的输出结果是()
#include <iostream>
using namespace std;
int main( )
{ int x=6,y=8;
if(++x<6)
cout<<++y<<endl;
else
cout<<y++<<endl;
if(x>6)
cout<< --y<<endl;
return 0; }
① 8 8 ② 9 7 ③ 7 8 ④编译时出错
15、下面程序的输出结果是()
#include <iostream>
using namespace std;
f(int a)
{ int b=0;
static int c=3;
b++;c++;
return (a+b+c);
}
int main( )
{ int a=2,i;
for(i=0;i<3;i++)
cout<<f(a)<<endl;
return 0;
}
① 7 8 9 ② 7 7 7 ③ 7 10 13 ④ 7 9 11
16、下面程序的输出结果是()
#include <iostream>
using namespace std;
void fun(int x,int y,int z)
{ z=x×x+y×y; }
int main( )
{ int z=68;
fun(5,2,z);
cout<<z;
return 0; }
① 0 ② 29 ③ 68 ④无定值
17、下面程序的输出结果是()
#include <iostream>
using namespace std;
int fun(int a,int b)
{ return (++a×b++); }
int main( )
{ int x=3,y=4,z=5,r;
r=fun(fun(x,y),z);
cout<<r<<x<<y<<endl;
}
① 85 3 4 ② 60 3 4 ③ 126 4 5 ④ 85 4 5
18、下面的程序中,当输入4、2时,其输出结果是()
#include <iostream>
using namespace std;
long fib(int n)
{ if(n>2) return (fib(n-1)+fib(n-2));
else return (n); }
int main( )
{ int i;
cout<<”请输入一个整数:”;
cin>>i; cout<<endl;
cout<<fib(i)<<endl;
return 0; }
① 5 1 ② 4 2 ③ 5 2 ④ 6 2
19、下面程序的输出结果为()
#include <iostream>
using namespace std;
unsigned func(unsigned num)
{ unsigned d=1,k;
do {
k=num%10;
num/=10;
}while(num);
return (k); }
int main( )
{ unsigned n=26;
cout<<func (n);
return 0; }
① 2 ② 4 ③ 6 ④ 5
20、下面程序的输出结果为()
#include <iostream>
using namespace std;
func (int a,int b)
{ int c;
c=a×b;
return (c );
}
int main( )
{int x=6,y=7,z=8,r;
r=func((x--,y,x×y),z--);
cout<<r;
return 0; }
① 294 ② 245 ③ 280 ④ 416
21、执行语句int i=10,*p=&i;后,下面描述错误的是()。
① p的值为10② p指向整型变量i
③ *p表示变量i的值④ p的值是变量i的地址
22、执行语句int a=5,b=10,c; int *p1=&a,*p2=&b;后,下面语句中不正确的是()。
① *p2=b; ② p1=a; ③ p2=p1; ④ c=*p1×(*p2);
23、下面程序的输出结果为()
#include <iostream>
using namespace std;
int main( )
{ int a[3][3]={{1,2},{3,4},{5}}; int s=0;
for (int i=1;i<3;i++)
for(int j=0;j<=i;j++)
s+=a[i][j];
cout<<s<<endl;
return 0; }
① 12 ② 14 ③ 15 ④ 13
24、下面程序的输出结果是()
#include <iostream>
using namespace std;
int main( )
{ int a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
cout<<*--p;
return 0; }
①编译出错②a[4]的地址③ 5 ④ 3
二、填空题
1、常量与变量的区别是:常量在程序运行中值
不变,因此它的值在编译时便进行初始化;而变量的值是可以改变。
2、在对if语句中的条件表达式求解时,若表达式的值为非0,按“真”处理,若表达式的值为0 ,按“假”处理。
3、函数的形参在未被调用前不分配空间,函数的形参的类型、数量要和实参相同。
若类型不同,则按一般规则转换,若数量不同,则出错。
4、函数的递归分为间接递归,直接递归,递归由递归方式或递归体、递归终止条件两部分组成。
一般说,一个问题的解决要依靠另一问题的递归终止条件解决,而另一个问题的解决方法与上一问题的解决方法相同,则可用递归方法处理。
5、下面程序是计算1~10之间偶数之和,请填空:
#include <iostream>
using namespace std;
int main( )
{ int a,b,i;
a=0;b=0;
for(i=0; ①;i++)
{ a+=i;
②;
③
cout<<”偶数之和为:”<<a<<en dl;;
return 0; }
6、下面程序是输出100内能被3整除且个位数是6的所有整数,请填空:
#include <iostream>
using namespace std;
int main( )
{ int i,j;
for(i=0; ①;i++)
{ j=i×10+6;
if( ②)
continue;
③;
cout<<j<<endl;
④;
return 0; }
7、下面程序的功能是:求a的b次方,并输出,请填空。
#include <iostream>
using namespace std;
double fun (double a,int b)
{ int i;
double z;
for(i=1,z=1;i<=b;i++) ①;
②;
}
int main( )
{ double a; int b;
cout<<”请输入a的值:”;
③;
cout<<endl;
cout<<”请输入b的值:”;
④;
cout<<endl;
cout<< ⑤;
cout<<endl;
return 0; }
8、下面函数是检验输入的字符是大写还是小写或者不是26个字母,请填空。
#include <iostream>
using namespace std;
①;
fun (char ch)
{ int i;
if((ch>=’a’)&&(ch<=’z’)
i=1;
else { if( ②)
i=2;
else i=3; }
③;}
int main( )
{ int i;
cout<<”请输入一个字符:”;
cin>>ch;
i=fun(ch);
if (i==1)
cout<<”是小写字母:”<<ch<<endl;
else if ( ④)
cout<<”是大写字母:”<<ch<<endl;
else cout<<”是其它字符:”<<ch<<endl;
return 0; }
9、下面是字符串拷贝程序,请填空。
void ccopy( )
{ ch ar ch1[]=”good morning!”,ch2[20];
int i=0,j=0;
while( ①)
{ ch2[j]= ②;
③;
}
④;
}
10、下面函数是寻找二维数组中每一行的最大值,请填空。
#define N 5
#define M 5
void max (int a[N][M])
{ int i,j,p;
for (i=0;i<N;i++)
{ ①;
for (j=1;j<M;j++)
if (a[i][p]<a[i][j])
②;
cout<<i<<”:”<<p<<endl;
}
}
3.程序分析题
1、下面程序的输出结果是()
#include <iostream>
using namespace std;
int func(int a,int b)
{ static int m=0;int i=2;
i+=m+1;
m=i+a+b;
return (m);
}
int main( )
{ int k=4,m=1,p;
p=func(k,m);
cout<<p;
p=func(k,m);
cout<<p<<endl;
return 0; }
2、下面程序的输出结果是()
#include <iostream>
using namespace std;
int d=1;
fun (int p)
{ static int d=5;
d+=p;
cout<<d;
return (d);
}
int main( )
{ int a=3;
cout<<fun(a+fun(d))<<endl;
return 0; }
3、下列程序的输出结果是()
#include <iostream>
using namespace std;
int b=2;
int func(int a)
{ b+=a;
return (b); }
int main( )
{ int a=2,res=2;
res+=func(a);
cout<<res;
return 0; }
4、下面程序的输出结果是()
#include <iostream>
using namespace std;
int w=3;
int fun(int);
int main( )
{ int w=10;
cout<<fun(5)×w<<endl;
return 0; }
int fun(int k)
{ if(k==0) return w;
return (fun(k-1)×k); }
5、下面程序的输出结果是()
#include <iostream>
using namespace std;
int f(int);
int main( )
{ int a=2,j;
for(j=0;j<3;j++)
cout<<f(a)<<” “;
cout<<endl;;
return 0; }
int f(int a)
{ int b=0;
static int c=3;
b++;c++;
return (a+b+c); }
6、下面程序的输出结果是()#include <iostream>
using namespace std;
int main( )
{
char ch=’D’;
ch=(ch>=′A′ &&ch<=′Z′)?(ch+32):ch; cout<<ch<<endl;
return 0;
}
7、下面程序的执行结果是()
#include <iostream>
using namespace std;
char ch[]=”hello,boy!”;
void fun2(int i);
void fun1(int i)
{ cout<<ch[i];
if(i<3)
{ i+=2;
fun2(i); }
}
void fun2(int i)
{ cout<<ch[i];
if (i<3)
{ i+=2;
fun1(i); }
}
int main( )
{ int i=0;
fun1(i);
cout<<endl;
return 0;
}
8、下面程序的输出结果是()
#include <iostream>
using namespace std;
void func (int *a,int b[])
{ b[0]=*a+6; }
int main( )
{ int a,b[5];
a=0;b[0]=3;
func(&a,b);
cout<<b[0];
return 0; }
4.应用题
1.求一元二次方程式ax2+bx+c=0的根。
a,b,c的值由键盘输入。
2.求三角形的面积。
a,b,c为三角形的边,由键盘输入。
(令s=(a+b+c)/2;则面积= [s*(s-a)*(s-b)*(s-c)]1/2)
3.求1+2+3+…+100。
使用while或for语句。
4.输入5个整数,存到一个数组,然后将该数组中的值按逆序重新存放。
5.输入5个整数,存到一个数组,用起泡法对这10个数按由小到大顺序排序。
6.输入两个整数a,b,用函数交换a,b的值,要求用指针作函数参数。
一、单项选择题答案
1. (3)
2. (A)
3. (A)
4. (B)
5. (3)
6. (4)
7. (4)
8. (3)
9. (D) 10. (4)
11. (4) 12. 213. 214. (1) 15.(1) 16.(3) 17.(1) 18.(3) 19.(1) 20.(3)
21. (1) 22. (2) 23.(1) 24 .(3)
二、填空题答案
1、不变初始化改变的
2、条件非0 0
3.不类型及数量类型数量出错
4.直接递归间接递归递归方式或递归体递归终止条件递归方法
5.①i<=10或i<11 ②i ++ ③}
6.①i<=9或i<10②j%3!=0③else ④}
7.①z=z×a ②return (z) ③cin>>a ④cin>>b ⑤fun(a,b)
8.①char ch ②(ch>=’A’)&&(ch<=’Z’) ③return (i) ④i==2
9.①ch1[i]!=’\0’ ②ch1[i++] ③j++ ④ch2[j]=’\0’
10.①p=0 ②p=j
三、程序分析题答案
1.8 16
2. 6 15 15
3. 6
4. 3600
5. 7 8 9
6. d
7. hlo
8. 6
四、应用题答案
1、求一元二次方程式ax2+bx+c=0的根。
a,b,c的值由键盘输入。
#include <iostream>
#include <cmath>
using namespace std;
int main( )
{float a,b,c,x1,x2;
cout<<"请输入a,b,c:";
cin>>a>>b>>c;
if((b*b-4*a*c)>0)
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a); //sqrt: 求平方根
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
}
else cout<<"error: b*b-4*a*c <0 "<<endl;
return 0;
}
2、求三角形的面积。
a,b,c为三角形的边,由键盘输入。
令s=(a+b+c)/2;则面积= [s*(s-
a)*(s-b)*(s-c)]1/2
#include <iostream>
#include <cmath> //使用数学函数时要包含头文件cmath
using namespace std;
int main( )
{
double a,b,c;
cout<<"请输入三角形的三条边a,b,c:";
cin>>a>>b>>c;
if (a+b>c && b+c>a && c+a>b)
{ //复合语句开始
double s,area; //在复合语句内定义变量
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<"area="<<area<<endl; //在复合语句内输出局部变量的值
} //复合语句结束
else cout<<"error: it is not a trilateral!"<<endl;
return 0;
}
3、求1+2+3+…+100。
使用while或for语句。
1)使用while语句
#include <iostream>
using namespace std;
int main( )
{int i=1,sum=0;
while (i<=100)
{ sum=sum+i;
i++;
}
cout<<"sum="<<sum<<endl;
return 0;
}
2)使用for语句
#include <iostream>
using namespace std;
int main( )
{int i=1,sum=0;
for(i=1;i<=100;i++) sum=sum+i;
cout<<"sum="<<sum<<endl;
return 0;}
4、输入5个整数,存到一个数组,然后将该数组中的值按逆序重新存放。
#include <iostream>
using namespace std;
int main()
{ const int n=5;
int a[n],i,temp;
cout<<"请输入五个整数:";
cin>>a[n];
for (i=0;i<n;i++) cin>>a[i];
for (i=0;i<n/2;i++) //循环的作用是将对称的元素的值互换
{ temp=a[i];
a[i]=a[n-i-1];
a[n-i-1]=temp;
}
return 0;
}
5、输入5个整数,存到一个数组,用起泡法对这10个数按由小到大顺序排序。
#include <iostream>
using namespace std;
int main( )
{
int a[5];
int i,j,t;
cout<<"input 5 numbers :"<<endl;
for (i=0;i<5;i++) cin>>a[i];
for (i=0;i<4;i++)
for(j=0;j<5-i-1;j++)
if (a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
return 0;
}
6、输入两个整数a,b,用函数交换a,b的值,要求用指针作函数参数。
#include <iostream>
using namespace std;
int main( )
{ void swap(int *p1,int *p2); //函数以2个指针作为参数
int *pointer_1,*pointer_2,a,b;
cin>>a>>b;
pointer_1=&a; pointer_2=&b;
swap(pointer_1,pointer_2);
return 0;
}
void swap(int *p1,int *p2) //函数的作用是将*p1的值与*p2的值交换{ int temp; temp=*p1; *p1=*p2; *p2=temp;}。