资源描述
《高级语言程序设计(C++I)》题库一.单项选择题(每题2分,共20分)
1.以下字符列中,合法的浮点型常量是:
(A) 457(B) 6e5. 3(C) e7 (D) 123e62.字符串常量”w\x42\\\nx\103y”的长度是:
(A) 7(B) 11(C) 15(D) 16.以下运算符中,自右向左结合的运算符是:
(A) 口(B) <=(0 *=(D) «.表达式4/8*100/2.0的值是:
(A) 25 (B) 25.0(C) 0(D) 0.0.设变量int a = 5;以下哪个表达式计算后,使得变量b的值不为2 ?
(A) b=a/2(B) b=6- (—a)(C) b=a%2(D) b=a<3?3:2.设a是整型变量,不能表达数学关系式n〈a〈15的C++表达式是:
(A) a>ll&&a<15(B) a==12||a==13||a==14(C) ! (a<=ll)&&! (a>=15)(D) ll<a<=14
3 .以下C++代码中,不能正确对字符串si置串值的代码是:
(A)char *sl; cin>>sl;(B)char *sl, *s2="name";sl=s2;(C)char si [5]="name";(D)char si [5]=『name"};
4 . 一个具有6个整型指针元素的一维数组的正确定义是:
(A)int **p[6](B)int *(p)[6](C)int *p[6](D)*(*(p)[6])
5 .执行语句x=l; while (x++<7)cout〈〈'*';后输出结果是:
(A) **(B) ****(C) ******(D) *******.假设用一维数组名作为调用函数时的实参,那么传递给形参的是:
(A)数组首元素的地址(B)数组首元素的值(0数组元素的个数(D)数组中全部元素的值
二.简答题(每题2分,共20分).设整型变量X为任何一个整数,表达式-2〈X<2的值是?
1 .调用函数时,希望从提供的实参变量中得到函数的结果,那么对应的形 参应该是?
2 .设有变量定义 char *s□={“Beijing","Shanghai", "Guangzhou”};执行 语句cout«*(s+l)+l;输出是?
3 .表述“变量x的值等于3”和“变量y的值等于5”其中有且只有一种 情况成立的表达式是?
4 .设有变量定义int a[4] [3], *p=a[2];表达式p+2指向的元素是?
5 .将字符串str2拷贝到字符数组strl 口中,应调用函数?
6 .说明语句char *w();的含义是?
ttinclude <iostream. h>
void printN(int n){ if(n)
{ printN(n-l);cout << n << ends ;
})
void print (int w){ if( w )
{ print( w-1 );printN(w); cout << endl;
))
void main (){ print ( 5 ); }
1
1 2
1 2 3
12 3 4
1 2 3 4 5四.根据程序功能填空。(每空2分,共20分)
精度为le-6。
1.0
t>=le-6
t=t/n
1.本程序按以下公式计算e的值, t 111
6 = 1 H1F・・・HF …1!2!nl
#include<iostrearn. h>void main ()
{ double e, t, n;e=0;
t=n=(1);while ((2))
{ e+=t;(3);
n=n+l. 0;)
cout<<//e=//<<e<<endl;2.本程序由主函数输入一字符串,
2.本程序由主函数输入一字符串,
调用函数,把该字符串中的数字。〜9
转换成小写字母a〜j;所有小写字母转换成大写字符。然后在主函数输 出转换后的字符串。
#include<iostrearn. h> #include<ctype.h>char*)
char*)
(4)void change(char*,void main()
{char strl [20], str2[20];cin>>strl;
change(strl,str2);cout<<str2<<endl;
)*s2)
*sl
*sl + 'a'-'O'
sl++ ; s2++;
*s2)
*sl
*sl + 'a'-'O'
sl++ ; s2++;
void change (char *sl, char{ while((5))
{if (*sl>=' O' &&*sl〈二'9')*s2=(6);
else *s2=toupper(*sl);(7)
3.函数create从键盘输入整数序列,以输入0为结束。按输入逆序建立 一个以head为表头的单向链表。例如,输入序列为1 2 3 4 5 0,建立 的链表是5 4 3 2 lostruct node{int data; node * next;};
void create(node * &head){node *p;
(8);p = new nodecin>>p->data;
while(p->data!=0){if (head二二NULL)
{ head=p; head->next=NULL; } else{(9)p->next = head;
(10) head = p;)
p=new node;cin>>p->data;
五.程序设计(第1小题6分,第2、3小题各7分,共20分)4.编写函数输出以下形状的图形,其中构成图形的符号和输出的行数通 过参数传送。
甘# #
# #
# ##########
答案:
#include<iostream. h> #include<iomanip. h>void print_figure(int row, char tag)〃行参数和符号参数
{int i;
cout<<setw(row-1) <<z/ ,z<<tag<<endl;〃输出第 1 行
for (i=2; i<row; i++)〃输出第2行到rowT行
cout<<setw(row-i)<</z ,z<<tag<<setw(2*(i-l)-l)<</z ,z<<tag<<endl;
for (i=l; i<=2*row-l; i++)cout<<tag;〃输出最后 1 行
cout<<endl;)
void main () { print_figure (5, ' *') ;}.编写一个程序,实现如下功能:
(1)输入k (<100)个整数到数组x[100]中;
(2)计算k个数的平均值及大于平均值的元素个数。
答案:
#include<iostream. h>void main()
{int x[100], k, i, n;
double sum=0. 0, ave;
cout<<,zHow many Data ?\n〃;
cin>>k;
for (i=0; i<k; i++)〃求和
{ cin>>x[i]; sum+=x[i];}
ave=sum/k;//求平均值
n=0;
for(i=0; i<k; i++)〃求大于平均值的元素个数
if(x[i]>ave) n++;
cout<<,zaverage=//<<ave<<,/\n,/;
cout<<z/There areelements large than average. \n〃;}
5 .编写一个程序,实现如下功能:
(1)从键盘输入a op bo其中a, b为数值;op为字符,限制为+、
-、*、 / 。
(2)调用函数count (op, a, b),计算表达式a op b的值。由主函数 输出结果。
答案:
#include<iostream. h>double count (char, double, double);
void main(){double a, b; char op;
cout<</zBegin count :\n〃; do
{ cin»a»op>>b;if (op!='+' &&op!二'-'&&op!='*' &&op !二'/') cout<<?/input error, please again: \n/z;
else break;
}while(l);
cout<<a<<op<<b<<,/=,/<<count (op, a, b) <<endl;)
double count (char op, double a, double b){ switch(op)
{ case '+' : return a+b;
case '-' : return a-b;
case ' *' : return a*b;
case ' /' : return a/b;迈向未来的五种人
受过专业训练的人 善于整合的人 有创造性的人 尊重别人的人有道德的人
8 .表达式new int[10]的含义是?
9 .设有函数调用语句Count (a , num, max, min, average);功能是由参max, min, average返回整型数组a前num个元素中的最大值,最小值和平均 值。对应的函数原型是?
10 . 有说明 struct link{ int code; link *next; }; link *head, *p; head为单链表的头结点,在*head之后插入*p结点操作的语句是?
三.分析程序,写输出结果(每题5分,共20分)#include<iostream. h> void main()
{ int a[10] = {2, 4, 0, -5, 10, 6, -8, 9, 6, 7);int i, s=0, count=0;
for (i=0;i<10;i++)if (a[i]>0) s+=a[i], count++;
else continue;
cout<<〃s=〃<<s<〈〃 count=,/<<count<<endl; )#include<iostream. h>
void fun(); void main() {int i;for (i=l;i<5;i++)
fun();cout<<endl;
}void fun()
{static int a;int b=2;
cout<< (a+=3, a+b) <<' \t'; )#include<iostream. h> int lcm(int m, int n) { int r, a, b;
a=m; b=n; r=m; do {m=n; n=r; r=m%n;
}while (r);return a*b/n;
void main (){ cout<<lcm(3, 7)<<? \V <<lcm(4, 6)<<endl; }
1. ^include <iostream. h> void printN(int n) { if(n){ printN (n-l); cout << n << ends ;
})
void print(int w){ if( w )
{ print( w-l ); printN(w); cout << endl;}
}void main()
{ print( 5 ); }四.根据程序功能填空。(每空2分,共20分)
1 .本程序按以下公式计算e的值,精度为le-6。
1 111C -1F・・・HF …
1! 2!nl#include<iostream. h>
void main(){ double e, t, n;
e=0;t =n二(1);
while ((2)){ e+=t;
(3);n=n+l. 0;
)cout<</,e=z,<<e<<endl;
2 .本程序由主函数输入一字符串,调用函数,把该字符串中的数字0〜9 转换成小写字母a〜j;所有小写字母转换成大写字符。然后在主函数输出转换后的字符串。
#include<iostream. h>#include<ctype.h>
(4)void main()
{char strl[20], str2[20];cin>>strl;
change(strl,str2);cout<<str2<<endl;
}void change (char *sl, char *s2)
{ while((5)){if (*sl>=' O' &&*sl<=,9')
*s2 =(6);else *s2=toupper(*sl);
(7)*s2='\0';
)3.函数create从键盘输入整数序列,以输入0为结束。按输入逆序建立 一个以head为表头的单向链表。例如,输入序列为1 2 3 4 5 0,建立 的链表是5 4 3 2 lo
struct node{int data; node * next;};void create(node * &head)
{node *p;(8);
cin>>p->data;while (p->data!=0)
{if(head二二NULL)
{ head=p; head->next=NULL; } else{ (9)
(10)
p=new node; cin>>p->data;五.程序设计(第1小题6分,第2、3小题各7分,共20分)
1 .编写函数输出以下形状的图形,其中构成图形的符号和输出的行数通 过参数传送。
# #
# #
# ##########
2 .编写一个程序,实现如下功能:
(1)输入k (<100)个整数到数组x[100]中;
(2)计算k个数的平均值及大于平均值的元素个数。
3 .编写一个程序,实现如下功能:
(1)从键盘输入a op bo其中a, b为数值;op为字符,限制为+、 -、*、/。
(2)调用函数count (op, a, b),计算表达式a op b的值。由主函数 输出结果。
《高级语言程序设计(C++I)》练习题参考答案一.单项选择题(每题2分,共20分)
1 .以下字符列中,合法的浮点型常量是:
(A) 457(B) 6e5.3(C) e7(D)123e6 2.字符串常量”w\x42\\\nx\103y”的长度是:
(A) 7(B) 11(C) 15(D) 16.以下运算符中,自右向左结合的运算符是:
(A) 口(B) <=(C) *=(D) «.表达式4/8*100/2.0的值是:
(A) 25(B) 25.0(C) 0(D) 0.0.设变量int a = 5;以下哪个表达式计算后,使得变量b的值不为2 ?
(A) b=a/2(B) b=6- (—a)(C) b=a%2(D)b=a<3?3:2
6.设a是整型变量,不能表达数学关系式的C++表达式是:
(A) a>ll&&a<15(B) a==12||a==13||a==14
(C) ! (a<=ll)&&!(a>=15)(D) ll<a<=14
对C++表达式n〈a<15的计算:
① ll〈a » 0 或 1②(K15 » 1 或 K15 ” 1
原因:C++的逻辑判断结果为整型值.以下C++代码中,不能正确对字符串si置串值的代码是:
(A) char *sl=new char [20]; cin»sl;
(B) char sl="name”; 〃sl是字符变量,不能赋给串值
(C) char si [5]=",name";(D) char si [] = {"name"};. 一个具有6个整型指针元素的一维数组的正确定义是:
(A) int **p[6](B) int (*p) [6]
(C) int *p[6](D) *(*(p)[6])
试比拟以下几种说明形式:
int * p;//p是指向整型变量的指针(p是关联类型为
整型的指针)int *pa[10];// pa是数组,元素类型是整型指针
int (*pb) [10]; // pb是指针,指向(关联类型)长度为10 的整型数组int * f();// f是返回整型指针的函数名
int (*f) () ;// f是指针,指向(关联类型)是返回整型
值的无参函数例:有声明
int (*f) (int int) ; int max(int, int) ; int min(int, int);贝(J:f=max;f (a, b) ;// 等价 于(*f)(a, b);
max (a, b);f=min;f (a, b);〃等价于(*f) (a, b);
min (a, b);.执行语句x=l; while(x++<7)cout<<'*';后输出结果是:
(A) **(B) ****(C) ******(D) *******
(x++<7)① x<7② x=x+l.假设用一维数组名作为调用函数时的实参,那么传递给形参的是:
(A)数组首元素的地址(B)数组首元素的值
(C)数组元素的个数(D)数组中全部元素的值二.简答题(每题2分,共20分)
1 .设整型变量x为任何一个整数,表达式-2〈x<2的值是?1.调用函数时,希望从提供的实参变量中得到函数的结果,那么对应的形 参应该是?
指针或引用类型参数
注意使用方法:
函数定义void funl (int xl);
据值参数void fun2 (int * x2);
参数,传地址值void fun3 (int & x3);
参数,传名以上参数用于操作数据对象
void fun4(int * &x4):
引用参数,传名以上参数用于操作指针对象
调用 intint
intint
a2;a3;
funl(al);fun2(&a2);
fun3(a3);*a4; fun3 (a4);
//传数
//指针
//引用
//指针
s+1
s+1 == &s[l]
//s是二级指针
情况成立的表达式是?
x==3&&y!=5||x!=3&&y==5
.设有变量定义 char *s口={“Beijing", "Shanghai", "Guangzhou”};执行
语句 cout<<*(s+l)+l;输出是? hanghai
s是字符指针数组
*(s+l) == &s[l] [0]
*(s+l)+l == &s[l] [1] // 一级指针 输出字符指针是输出所指串值.表述“变量x的值等于3”和“变量y的值等于5”其中有且只有一种
(x==3)!=(y==5)
5.
设有变量定义int a[4] [3], *p=a[2];表达式p+2指向的元素是?
a[2][2]
将字符串7.
str2拷贝到字符数组strl□中,应调用函数?
strcpy(strl, str2)说明语句char *w();的含义是?
函数原型。w是函数名,返回字符型指针
8. 表达式new返回首地址
int[10]的含义是?分配长度为10的整型数组堆内存,
分配堆要用指针记录地址
int *p=new int[10], *q;
*p = 10; p[l] = 20;〃对动态数组的两种访问方式
*q=10; q[0]<2;〃错误,指针没有关联对象.设有函数调用语句Count (a , num, max, min, average);功能是由参数 max, min, average返回整型数组a前num个元素中的最大值,最小值和 平均值。对应的函数原型是?
void Count (int [], int, int &, int &, double &);假设调用语句为 Count (a , num, &max, &min, &average);
那么函数原型为 void Count (int [], int , int* , int* , double * );. 有说明 struct link{ int code; link *next; } ; link *head, *p; head为单链表的头结点,在*head之后插入*p结点操作的语句是?
p->next=head->next; head->next=p;//p->next ==(*p).next
head*headq \y
思考:
(1) 结点插在表头如何操作?p->next=head; head=p;
(2) 结点插在表尾如何操作?
q=head; while(q->next)q=q->next; q->next=p; p-〉next=NULL;
(3) 遍历链表,输出结点值:
q=head; while(q->next){cout<<q->code; q=q->next;}
(4)删除一个结点*(q->next)如何操作?
t = q->next; q ->next = t->next; delete t;
三.分析程序,写输出结果(每题5分,共20分)
1 .求>0的元素和;>0的元素个数。
#include<iostream. h>void main ()
{ int a[10] = {2, 4, 0, -5,10, 6, -8, 9, 6, 7};int i,s=0,count=0;
for (i=0;i<10;i++)if(a[i]>0) s+=a[i], count++;
else continue;cout<<//s=//<<s<</, count=,/<<count<<endl;
} s=44 count=7
2 .测试静态变量和自动变量。静态变量第一次自动初始化为0,再调用 时不改变。
#include<iostream. h>
void fun();
void main()
{int i;
for (i=l; i<5; i++) fun(); cout<<endl;
}
void fun()
{static int a; int b=2;
cout<< (a+=3, a+b) <<' \t';
} 581114
②32
68
③62
911
@92
1214
.求最小公倍数
#include<iostream. h>int lcm(int m, int n)
{ int r, a, b;a=m; b=n; r=m;
do〃辗转相除法,求最大公约数{ m=n; n=r; r=m%n;
} while(r);return a*b/n;〃求最小公倍数
}void main()
{ cout<<lcm(3, 7) <<J \t,«lcm(4, 6) <<endl;)
2112.输出数字三角型,以递归方式建立程序。
展开阅读全文