1、诚信应考,考试作弊将带来严重后果! 期末考试 《高级语言程序设计I》试卷(A )□|p 倒考前须知:1.考前请将密封线内填写清楚; 题号 ■ 四 五 总分 得分 评卷人 2.所有答案写在答题纸上; 3.试卷和答题纸同时提交;4.考试形式:闭卷; 5.本试卷共五大题,总分值100分,考试时间120分钟。 一、单项选择题。(每题2分,共20分)1.以下选项中,合法的常量表示是()。 (A) program1 (B) 183AF(C) -618e3(D) 1.0e-5.32.执行以下语句后,i, j,k的值为()o
2、 int i=l, j=l,k=l; (i++, —j) && ++k; (A) 2,0, 1(B) 2, 0,2(C) 1, 1, 1(D) 1,0,23.以下有关C++的说法中,正确的陈述是( )o (A) const只能约束普通内存变量的的写操作,不能约束指针变量的写操作。 (B)静态变量和全局变量的作用域都是文件作用域。 (C) 一维数组定义中数组的长度表达式可以使用赋初值的变量。 (D) inline函数没有普通函数调用的时空开销。 4.有如下代码段,不正确的函数调用形式()。 • • •typedef int (*pType)(int, int); int max (i
3、nt a, int b){ return a>b?a, b; } *匚■E □|p 料 pType pf = max; (A) pf(l,2);(B) (*pf)(l,2);(C) max (1,2);(D) (&pf) (1,2);.以下程序段中,循环次数是() for(int i=10;i>0&&i%2;){ i=i-2; } (A) 0(B) 4(C) 5(D) 6.int iArray[2][2] = {0,l,2,3},以下表达式的值为2的是()。 (A) iArray[2] [1](B) iArray [1] [1] (C) *(*(iArray+l))(D) *
4、 (iArray)+1). 假设 char *a口={“fortran",“basic","c++”,“java”}; 那么语句cout〈〈a+3;的输出结果是()□ (A) c++java (B)一个地址值(C)c++(D) java.设有两个字符指针char *sl和char*s2分别指向两个字符串,判断字符串si和s2是 否相等的表达式是()。 (A) sl=s2 (B) sl=s2 (C) strcmp(sl, s2)=0(D) strcpy (si, s2)=0.以下运算符,优先级最高的是( )o (A)-(B) =(C)->(D) □
5、
using namespace std;
void main()
{ double x[5], t; int i, j, k;for(i=0; i<5; i++) cin»x[i];
for(i=0; i<4; i++){ k=i;
for( j=i+l 【1】 ;j〈5;j++)if(x[j] 6、
}2、以下函数的功能是:用递归法将一个整数m转换成字符串。例如:输入整数 1472,应输出字符串“1472”。m的位数不确定,可以是任意位数的整数。请填空。
void print( int m )
{if(m< 10)putchar(m+48) 【3】 〃递归出口else
{print(m/10)【41/递归体putchar(m% 10+48);
3、以下程序的功能是:执行该程序后运行结果如下:
5.1 3.2/请填空。
#include 7、
)
void main()
(double x=2.1, y=3.2;
dl(x, y);cout«x«n n«y«endl;
4、以下程序的功能是:定义一个结构体类型,内含学生学号和一门课的成绩,并开辟动态内存存放一个学生的数据:学号3001,成绩95。执行该程序后运行 结果如下:
3001,95/请填空。
#include 8、] 〃赋值
coutvvp->mvv- Jvvp-〉xv〈endl; 17 1 〃输出 delete p;
)5、以下函数的功能是:判断一个数是否为素数。请填空。
bool prime(int m)
(int i;
bool prime 1;prime l=true;
for(i=2; i<=sqrt(m); i++)if( m%i==018 1) prime l=false;
return prime 1;
}WIN7用户需要将PCSX2VU.exe设置成管理员权限启动才可以运行6、以下程序的功能是:输出二维数组各元素值。请填空。
#include 9、sing namespace std;
void main()
{ void output(int (*)⑵);intb[3][2]={6,5,4,3,2,l};
output( b[ 9 ]);
)
void output(int (*p)[2])
(inti, j;
for(i=0;i<3;i++)for(j=0;j<2;j++)
coutvv *(*(p+i)+j)【10】«M H; cout«endl;)
)三、阅读程序,写出运行结果。(每题3分,共24分)
答案栏:
1、3、
5、7、
2、4、
6、8、
1、
#include 10、stream>
using namespace std;
void main()
(int a—1, b;
if(a<2)if(a<-2)b=a+l;
else if(a>0)b=a+2;else b=a+4;
else b=a+5;a=-l,b=3
a=-l,b=3
cout«na=n«a«n,b=H«b;
)
#include 11、
97 8 0 3、
#include 12、while(m<5)
s witch(m++” m=4(
case 4: n—;n-=4;break;
case 3: n++;)
cout«n;
)
-2#include 13、urn 0;
}8 2 3 6
84 13#include 14、3]«endl«ch+3«endl; return 0;
)
PROGRAM
G
GRAM#include 15、字符构成?该字符串占用多少个字 节?假设用cout«Habc\\e\tfg\101\102H ;会看到的输出结果是什么? abc\e\101 \102abc\e fgAB
2 .假设有如下定义:
struct stype
{ float y;short int m;
char code[3];
);
stype sdat;
试画出变量sdat的内存构造图(示意图),并指出该变量占用内存的字节数。
ym
code[3].下面程序有错误:
#include 16、 i=0; i<7; i++) cout«*(b++)«n ”;//(I)
cout«endl;
}
int main()
{ int b[7]={ 10,20,30,40,50,60,70);for (int i=0; i<7; i++)
cout«*(b++)«n ”;// (2)cout«endl;
fun(b);return 0;
)源程序中(1)和(2)之处写法一样,但编译时(2)处出错而(1)处正确,试指出原因, 并将(2)处改正。
b在(1)处是变量而在(2)是常变量不能用于b++ int *a;a=b;
coutv<*(a++)<< “ ";五、程序设计题(每 17、题8分,共24分)
1 .设计程序输出数列{A"的前36个数,输出时要求每行输出6个数。数列有 以下规律:
A[=1.0, A2= 2.0, An+i
= 4+1
4(4-1+D
(〃>2)
#include 18、 double A(int i) {double m;
if (i==l) m=l;else if(i=2)
m=2;else
{m=(A(i-l)+l)/(A(i-l)*(A(i-2)+l));}
return m;}2.逆置是指将数组中的值按逆序重新存放。例如:数组原值是{4,7,3』,5,6},逆 置后数组变成{6,5』,3,7,4}。试设计一个将数组逆置的函数reverse,其形式参 数有2个:数组(该数组存放一组待逆置的数据)、数据个数。在主函数中输 入一组数据存放在数组中,然后调用函数reverse将数组逆置,最后在主函数 中显示出逆置后的数组。
#include 19、tream>using namespace std;
int main(){void reverse(double *a, int n);
int n, i;double *p;
cout<<〃请?输°?入-?个?数°y〃《endl;cin>>n;
cout<<〃请?输°?入-?各1A个?数。y值| lzz«endl;p=new double[n];
for (i=0;i 20、rse (double *a, int n) {int i;
float t;for(i=0;i 21、oat pi=3. 1415;struct cylinder
{float radius;
float height;
float volume;
void volumel () ;};
void cylinder::volumel()
{volume=pi*radius*radius*height;}int main ()
{cylinder cl,c2;cout* 〃输°?入•.?半元?径?, 6?高?度・・・・ 〃《endl;
cin>>cl. radius»cl. height;cin>>c2. radius»c2. height;
cl. volumel ();c2 22、 volumel ();
cout< 23、t< 24、0; return a+k++; }并有调用: int t=l;
t=function(t)+function(t)+function(t);有人说t的结果值等于3,对吗?为什么?6, k是静态变量
2 .设有语句:
int *ap=new int [10];请写出两个动态数组最后一个元素的表示形式。
3 .请解释以下说明语句中标识符www的含义。 double * www(double);ww是函数名,有一个double值参,返回值类型为double*
4 .设有语句:
char *s二〃South China University of Technology”;请写输出子串 ^ 25、University of Technologyn 的语句。cout< 26、的头结点,函数调用语句push在表头插入一个数据,请写出对应的函数 原型。 void push (link *&, int);
三、阅读程序写输出结果(共20分)1.〃循环
ttinclude 27、l;i<=5;i++) num[i-l]=i;
for(i=0; i<5; i++)
cou t «num [ i ] + (*p++) «,\t,;
cout< 28、iostream. h> void fun(int *x, int *y) { cout«/,*x=,/<<*x«'\t,;
cout<<,,*y=,/<<*y«'\t,;
*x = 3 ;
*y 二 4 ;)
void main(){ int x = 1, y = 2 ;
fun(&y, &x);
cout<<,/x=//< 29、下为E等。下面是输入一个分数,输出相应的五级制成绩的程序。
#include 30、e
10:
cout«z,A\nzz;
break;
case
8:
cout〈〈〃B\n〃;
break;
case
7:
cout〈〈〃C\n〃;
break;
case
6:
cout<<〃D\n〃;
break;
default:
(2)
•
)
(1)
// (2) cout<,E\n,/;
2.下面是显示如以下图案的程序。
2222222
33333
444
#include 31、5; i++ )
{ for( k = 1;(3)
cout< 32、s[j]=t; i++; j—; )
)
//int * s 或 int s[]
void main()
{ int a[10] = {1,2, 3, 4, 5, 6, 7,8, 9,10 };
fun( a , 0 , 3 );
fun( (7) );
for ( int i = 0; i<10; i++ ) cout « a[i] << ends;
// a, 4, 9
cout << endl;
4 .下面的程序运行时屏幕显示Please input 运行结果如图1所示:
i(rio):键盘输入3后,屏幕显示程序
K "G:\L\Debug\08-09( 1)08 33、级计埴空蔻.exe
lease input i < 1~10 > : 3DEFGHIJ
Press any key to continue图1程序运行结果
ttinclude 34、prints ( 〃ABCDEFGHIJ〃, i );五、编程题(20分)
1、设计程序,输入一个正整数i (〈256),求另一个正整数j,使i和j在用8位二进制表示 时互为逆序。例如,输入i=3 (00000011),应求得j=192 (11000000)o
#include 35、放。程序运行效果如图2所示。请编写函数RandAry和函数PutAry。
#include 36、out« endl;
PutAry(a,n);〃整理数组,奇数放在前,偶数在后〃输出整理后序列
〃输出整理后序列
for(i=0; i 37、y
to continue
储
_|
图2整理数据
void RandAry(int *a, int n, int m){ srand( time( 0 )); 〃调用种子函数
for( int i = 0; i 38、 list{ int data; list * next; };
list *head;head是有序单向链表的头指针。请编写函数:
void Count(list * head);计算并输出链表中数据相同值的结点及个数。例如,数据序列为:
233345566667899那么输出为:
datanumber
33
5 2
6 4
9 2
void Count(list * head)
{ list *p,*q;int n=l,t=O;//t表示是否发现了相同的值,n为相临结点具有相同值的结点的个数。
q=head; p=head->next;cout«"data\tn«nn 39、umber\nu;
while(p)
{ if(q->data==p->data)
{n++; t=l;} else t=0;{cout«q->data«,\t'«n«endl;
n=l;)
q=p; p=p->next;
)if(n>l)〃考虑最后一组相邻节点的情况 cout«q->data«,\t'«n«endl;
《C++程序设计》试卷单项选择题:(每题2分,共20分)
1 .以下表达中错误的选项是()oA)用户所定义的C++标识符允许使用关键字
B)用户所定义的C++标识符应尽量做到“见名知意”C)用户所定义的C++标识符必须以字符或下划线开头
D)用户所定义的C+ 40、标识符中,大、小写字符代表不同标识。
2 .用C++语言编制的源程序要变为目标程序必须经过()oA)解释B)汇编C)编辑D)编译
那么表达式x+a%3*(int) (x+y)%2/4的
3 .设有定义语句:int a=7; float x=2. 5, y=4. 7;
值是()oA) 2. 5B) 2. 75C) 3.5D) 0.0
4 .以下所列的C++语言常量中,错误的选项是()oD) '\72'
D) '\72'
A) OxFFB) 1.2e0.5 C) 2L5.设有:int a=7, b=5, c=3, d=l;
A) 7B) 5
5.设有:int a=7, 41、b=5, c=3, d=l;
A) 7B) 5
那么条件表达式a〈b?a:c>d?c:d的值为(
C) 3D) 1
)o
6 .以下程序的运行结果是()o
int main () { short b=一1; unsigned short a; a=b;cout< 42、述错误的选项是( )oA)字符数组可以存放字符串;
B)字符数组的字符串可以整体输入和输出;C)可以在赋值语句中通过赋值运算符“二”对字符数组整体赋值;
D)不可以用关系运算符对字符数组中的字符串进行比拟;
9 .以下带有默认参数的函数原型声明中,正确的选项是( )ovoid f(int a=5 , int b=5, int c);
A) void f (int a, int b, int c=5);void f (int a , int b=5 , int c );
B) float fun (int a=5 , int b, int c=5);;.设有以下定义语句:struct 43、node {int x; int y;} n[3] = {{1, 2}, {3, 4}, {5, 6}};值 等于4的正确表达式是( )o
A) n[l] [2] B) node [1] [2] C) n[l].y D) n[l]->y
答案栏:
1、A
2、_D 3、_A_4> _B_5、_C 6、_c_7、_D_8、_C_9. _B_ 10、二、程序填空题(每空2分,共20分)
• • • ,,, • • ,9
答案栏:
1、 2、3、 4、
5、6、7、 8、
9、 101、以下程序的功能是:用选择法对5个实数排序(按从小到大顺序)。请填空。
#include
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818