资源描述
东 南 大 学 考 试 卷( B 卷)
学号 姓名
密
封
线
课程名称
程序设计与C++语言(上)
考试学期
07-08-2
得分
适用专业
07级非电类专业
考试形式
闭卷
考试时间长度
120分钟
说明:此卷满分为100分。
一、单选题 (每题2分,共20分)
1. 建立C++语言的可执行程序,需要经过编辑源程序、对源程序编译、对多个程序文件进行连接和生成可执行程序等步骤,其中建立或生成文件的顺序如以文件扩展名识别,正确的顺序为 。
A、.exe .cpp .obj B、.cpp .exe .obj
C、.obj .cpp .exe D、.cpp .obj .exe
2. 变量a, b, c,d均为double类型且已正确赋值,能够正确表示的表达式是___________。
A、 a+b/2*c-d B、(a+b)/2/(c-d)) C、(a+b)/2*(c-d) D、(a+b)/(2c-2d)
3. 若有如下程序段,其中s, x, y, z均为已定义的整型变量,且x, z均已赋值(z>0)
s = x; y=1;
while ( y<=z ) { s=s+1; y++; }
则与上述程序段功能等价的赋值语句是___________。
A、 s = x+y; B、s = s+z; C、s = x+z; D、s = y+z;
4. 以下程序段执行时的输出结果是___________。
int a=3, b=5, c=8, d;
cout<<(d=a<b?(a>c?a:c):b)<<endl;
A、3 B、5 C、8 D、不确定
5. 设有枚举类型定义:enum col{ left=6, right=1, up, down}; 则枚举量down的值为 。
A、 1 B、 3 C、 4 D、 9
6. 在以下程序段中,while语句的循环次数是 。
int i=2;
while(i<10)
{ if(i<1) continue;
if(i==6) break;
i++;
}
A、5 B、6 C、10 D、无穷循环,
自 觉 遵 守 考 场 纪 律 如 考 试 作 弊 此 答 卷 无 效
7. 在一个程序段中,设已声明int a, b;则与下边语句等价的是____ ___。
switch(a)
{ case 1:
case 2: b=a; break;
case 3:
case 4: b=2*a;
}
A、if((a==1) || (a==2)) b=a; else b=2*a;
B、if((a==1) || (a==2)) b=a; else if((a==3) || (a==4)) b=2*a;
C、if((a==1) && (a==2)) b=a; else if((a==3) && (a==4)) b=2*a;
D、if((a==1)||(a==2)||(a==3)||(a==4)) b=2*a;
8. 以下关于调用函数时,形、实参结合的通用规则不正确的描述为_______。
A、实参可以是变量,也可以是常数或者表达式。
B、实参的个数可以多于形参,也可以少于形参。
C、系统将为形参分配内存单元。
D、实参必须与对应的形参类型相兼容。
9.下列哪个不是重载函数在调用时选择的依据_________。
A、形参类型 B、形参个数
C、函数名 D、函数返回值类型
10.若已定义double使用语句area=Trgl_Area(3.5, 4, 6.2);调用求三角形面积函数,则下列式中 是正确的函数原型说明。
A、float Trgl_Area(float,int, float);
B、int Trgl_Area(x, y, z);
C、double Trgl_Area(double, double, double);
D、int Trgl_Area(float x, float y, float z);
二、概念填空题 (每空2分,共16分)
1. 变量的有效范围与其定义的位置有关,在函数外定义的变量其作用域在
(1) 中都有效。
2. 设有语句 int x; float y; 则计算表达式(x=7/2, y=x/2)后, x的值为
(2) ,y的值为 (3) 。
3. C++中的一些关键字可以代替逻辑运算符,如and代替&&,而not可以代
替 (4) 。
4. 若有宏定义:#defin A 2+radius
#defin B 2*A
#defin F(x)( (A+B) *x )
则执行语句:int radius=5; int S = 2*( B+F(A+2) ); 后,
S的值是 (5) 。
5. 一个试图从1到100求和的程序段:
int Sum;
for(int I = 1; I <= 100; I++)
Sum += I;
cout << Sum << endl;
执行后,屏幕输出的结果是-858988410,而不是5050,原因是:
(6)
6. 如果定义了如下两个函数:
int MoveValue(int A, int B = 3);
double MoveValue(double A, int B, int C=1);
那么,调用语句 double X = MoveValue( '2' ); 的错误之处是:
___(7)___ 。
而调用语句 double Y = MoveValue(3.2/ 5, 6 / 7); 则是正确的,它调用的函数
是___(8)_ __ 。
三、阅读理解程序,写出输出结果 (共31分)
1.写出以下程序执行时的输出结果 (6分)
#include <iostream.h>
void main() { 答:
int a=1, b=2, c, d;
cout<<a<<'\t'<<b<<endl;
d=a;
for(int i=1; i<3; i++){
c=2*(a+b); d+=c;
cout<<c<<'\t'<<d<<endl;
a=b; b=c;
}
}
2写出以下程序段执行时的输出结果 (5分)
#include <iostream.h>
int f(int n)
{
if(n==1)return 1;
else {
cout<<n<<endl; 答:
return 2*f(n-2);
}
}
void main()
{
cout<<f(9)<<endl;
}
3. 写出以下程序执行时的输出结果 (5分)
#include <iostream.h>
void main(){ 答:
int s=0;
for (int i=10; ; i--){
if (s>20) break;
if (i%2==0) s+=i;
}
cout <<"s="<< s<<endl;
for(i=2;i<=8;i++){
if(i%2) cout<<"M";
else continue;
cout<<"S";
}
cout<<"#\n";
}
4.写出以下程序执行时的输出结果 (5分)
#include <iostream.h>
int i=1;
int fac(int n)
{ static int f=1;
f=f*n;
cout<< f<<',';
return(f);
}
void main() 答:
{ int i, p=0;
for(i=1;i<=3;i++) p=fac(i);
cout<<"\np="<<p<<endl;
p=0;
for(i=1;i<=2;i++) p=fac(i)+::i++;
cout<<"\np="<<p<<endl;
p=0;
for(i=1;i<=3;i++) p=p+::i;
cout<<"p="<<p<<endl;
}
5.写出以下程序执行时的输出结果 (6分)
#include < iostream.h>
void print(int m){
cout<<m%10<<','<<m/10%10<<','<<m/100;
}
void print(int x, int y){ 答:
cout<<(x%10)*y<<endl;
cout<<x%10<<(x-x%y)/y;
}
void main(){
int a=135, b=8642 ;
print(a);
cout<<endl;
print(b, 1000);
cout<<endl;
}
6.阅读理解程序,回答问题 (4分)
#include <iostream.h>
int f(int a,int b)
{ if(a>6)
return a+b;
else
f( a*=2, b++ );
return f(a,b);
}
如果主函数中有语句 cout<<f(3,2)<<'\n'; 输出是:
如果主函数中有语句 cout<<f(1,3)<<'\n'; 输出是:
四、分析程序,填空完善程序 (共33分)
1. 验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。例如:4=2+2 6=3+3 8=3+5 … … 50=3+47
此题要求将4~50之间的所有偶数用两个素数之和表示。用函数实现判断整数n是否为素数,若n是素数就返回1,否则返回0。 (8分)
#include <iostream.h>
int prime(int n){
for(int m=2; m<=sqrt(n); m++)
if( (1) ){
return 0;
}
(2)
}
void main(){
for(int n=4; (3) ){
for(int a=2; a<=n/2 ; a++)
if( prime(a) && (4) )
cout<<n<<'='<<a<<'+'<<n-a<<endl;
}
}
2. 利用展开式y=1/1!-2/2!+3/3!-…..,求y的近似值。要求前后两次求出的近似值x1和x0之差的绝对值小于10-6。其中,利用函数fc(int n)计算n!。(7.5分)
#include<iostream.h>
#include<math.h>
int fc(int n)
{
int i,p=1;
for(i=1;i<=n;i++)
p*=i;
(5) ;
}
void main()
{
int i=1,j=1;
double x1=0,x0=1;
while( (6) )
{
(7) ;
x1=x0+ (8) ;
j= (9) ;
i++;
}
cout<<"y="<<x1<<endl;
}
3. 以下程序的功能是求出所有三位数中能被3整除,且至少有一位数字为5的所有整数,并要求输出的时候每行输出5个数。 (7.5分)
#include <iostream.h>
void main()
{ int i,a,b,c,j=1;
for (i=100; i<1000; i++)
if ( (10) )
{ a= i/100 ;
b= (11) ;
c= (12) ;
if ((a==5) (13) )
{ cout<<i<<'\t';
if ( j%5==0 ) cout<<endl;
(14) ;
}
}
}
4. 本题包括Count()和Backout()两个函数,请阅读理解题目,完善程序。
Count()函数的功能是:从键盘输入一段英文文本,同时统计文本的行数、单词数及字符数。方法是逐个读入文本中的字符,边读入边处理,直到遇输入结束符EOF为止(假定单词之间以空格或换行符间隔,且文本开始没有空行)。最后输出统计结果。程序中定义变量line、word、chnum分别代表行数、单词数、字符数。另设一个变量isword,读到字符时isword=1,读到间隔符时isword=0;如果读到一个间隔符而此时isword值为1,则说明刚读完一个单词;(如果读到一个字符而此时isword值为0,则说明刚开始读一个单词;)。 (10分)
#include<iostream.h>
void Count(){
char ch;
int line=0, word=0, chnum=0;
int isword=0;
do {
ch=cin.get(); //从键盘读入字符
if (chnum=='\n') (15)
if ( (16) ){ //读到非间隔符
if(isword==0) (17) ;//在单词的起始处给单词数+1
(18) ; //字符数加+1
isword=1;
}
else isword=0; //读到间隔符
} while(ch!= (19) );
cout<<"行数:"<<line<<endl;
cout<<"单词数:"<<word<<endl;
cout<<"字符数:"<<chnum<<endl;
}
Backout( )递归函数的功能是:从参数w表示的英文字母开始,倒序输出每个字母直至'Z'停止。
void Backout(char w){
if(w=='Z') (20) ;
Backout(w+1);
cout<< (21) <<',';
}
Main()函数的功能是:先调用Count()对一段文本作统计,再调用Backout()输出从Z至M的每一个字母。
void main( ) {
char ch;
Count();
(22) ='M';
cout<<"\n 从"<<ch<<"开始逆置输出:";
cout<< (23) <<',';
Backout(ch+1);
cout<< (24) <<endl;
}
共 9 页 第 9 页
展开阅读全文