1、高级语言程序设计(C+I)题库一.单项选择题(每题2分,共20分)1.以下字符列中,合法的浮点型常量是:(A) 457(B) 6e5. 3(C) e7 (D) 123e62.字符串常量”wx42nx103y”的长度是:(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=all&a15(B)
2、 a=12|a=13|a=14(C) ! (a=15)(D) llasl;(B)char *sl, *s2=name;sl=s2;(C)char si 5=name;(D)char si 5=name;4 . 一个具有6个整型指针元素的一维数组的正确定义是:(A)int *p6(B)int *(p)6(C)int *p6(D)*(*(p)6)5 .执行语句x=l; while (x+7)cout*;后输出结果是:(A) *(B) *(C) *(D) *.假设用一维数组名作为调用函数时的实参,那么传递给形参的是:(A)数组首元素的地址(B)数组首元素的值(0数组元素的个数(D)数组中全部元素的值
3、二.简答题(每题2分,共20分).设整型变量X为任何一个整数,表达式-2X2的值是?1 .调用函数时,希望从提供的实参变量中得到函数的结果,那么对应的形 参应该是?2 .设有变量定义 char *s=“Beijing,Shanghai, Guangzhou”;执行 语句cout*(s+l)+l;输出是?3 .表述“变量x的值等于3”和“变量y的值等于5”其中有且只有一种 情况成立的表达式是?4 .设有变量定义int a4 3, *p=a2;表达式p+2指向的元素是?5 .将字符串str2拷贝到字符数组strl 口中,应调用函数?6 .说明语句char *w();的含义是?ttinclude v
4、oid printN(int n) if(n) printN(n-l);cout n ends ;)void print (int w) if( w ) print( w-1 );printN(w); cout =le-6t=t/n1.本程序按以下公式计算e的值, t 1116 = 1 H1FHF 1!2!nl#includevoid main () double e, t, n;e=0;t=n=(1);while (2) e+=t;(3);n=n+l. 0;)cout/e=/eendl;2.本程序由主函数输入一字符串,2.本程序由主函数输入一字符串,调用函数,把该字符串中的数字。9转换成小写
5、字母aj;所有小写字母转换成大写字符。然后在主函数输 出转换后的字符串。#include #includechar*)char*)(4)void change(char*,void main()char strl 20, str220;cinstrl;change(strl,str2);coutstr2= 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 nodeint
6、data; node * next;void create(node * &head)node *p;(8);p = new nodecinp-data;while(p-data!=0)if (head二二NULL) head=p; head-next=NULL; else(9)p-next = head;(10) head = p;)p=new node;cinp-data;五.程序设计(第1小题6分,第2、3小题各7分,共20分)4.编写函数输出以下形状的图形,其中构成图形的符号和输出的行数通 过参数传送。甘# # # #答案:#include #includevoid print_fig
7、ure(int row, char tag)行参数和符号参数int i;coutsetw(row-1) z/ ,ztagendl;输出第 1 行for (i=2; irow; i+)输出第2行到rowT行coutsetw(row-i)/z ,ztagsetw(2*(i-l)-l)/z ,ztagendl;for (i=l; i=2*row-l; i+)couttag;输出最后 1 行coutendl;)void main () print_figure (5, *) ;.编写一个程序,实现如下功能:(1)输入k (100)个整数到数组x100中;(2)计算k个数的平均值及大于平均值的元素个数。
8、答案:#includevoid main()int x100, k, i, n;double sum=0. 0, ave;coutk;for (i=0; ixi; sum+=xi;ave=sum/k;/求平均值n=0;for(i=0; iave) n+;cout,zaverage=/ave,/n,/;coutz/There areelements large than average. n;5 .编写一个程序,实现如下功能:(1)从键盘输入a op bo其中a, b为数值;op为字符,限制为+、-、*、 / 。(2)调用函数count (op, a, b),计算表达式a op b的值。由主函数
9、 输出结果。答案:#includedouble count (char, double, double);void main()double a, b; char op;coutb;if (op!=+ &op!二-&op!=* &op !二/) cout?/input error, please again: n/z;else break;while(l);coutaopb,/=,/count (op, a, b) endl;)double count (char op, double a, double b) switch(op) case + : return a+b;case - : r
10、eturn a-b;case * : return a*b;case / : return a/b;迈向未来的五种人受过专业训练的人 善于整合的人 有创造性的人 尊重别人的人有道德的人8 .表达式new int10的含义是?9 .设有函数调用语句Count (a , num, max, min, average);功能是由参max, min, average返回整型数组a前num个元素中的最大值,最小值和平均 值。对应的函数原型是?10 . 有说明 struct link int code; link *next; ; link *head, *p; head为单链表的头结点,在*head之后
11、插入*p结点操作的语句是?三.分析程序,写输出结果(每题5分,共20分)#include void main() int a10 = 2, 4, 0, -5, 10, 6, -8, 9, 6, 7);int i, s=0, count=0;for (i=0;i0) s+=ai, count+;else continue;couts=s count=,/countendl; )#includevoid fun(); void main() int i;for (i=l;i5;i+)fun();coutendl;void fun()static int a;int b=2;cout (a+=3,
12、a+b) t; )#include 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 () coutlcm(3, 7)? V lcm(4, 6)endl; 1. include 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
13、); 四.根据程序功能填空。(每空2分,共20分)1 .本程序按以下公式计算e的值,精度为le-6。1 111C -1FHF 1! 2!nl#includevoid main() double e, t, n;e=0;t =n二(1);while (2) e+=t;(3);n=n+l. 0;)cout/,e=z,eendl;2 .本程序由主函数输入一字符串,调用函数,把该字符串中的数字09 转换成小写字母aj;所有小写字母转换成大写字符。然后在主函数输出转换后的字符串。#include#include(4)void main()char strl20, str220;cinstrl;chang
14、e(strl,str2);coutstr2= O &*slp-data;while (p-data!=0)if(head二二NULL) head=p; head-next=NULL; else (9)(10)p=new node; cinp-data;五.程序设计(第1小题6分,第2、3小题各7分,共20分)1 .编写函数输出以下形状的图形,其中构成图形的符号和输出的行数通 过参数传送。# # # #2 .编写一个程序,实现如下功能:(1)输入k (100)个整数到数组x100中;(2)计算k个数的平均值及大于平均值的元素个数。3 .编写一个程序,实现如下功能:(1)从键盘输入a op bo其
15、中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.字符串常量”wx42nx103y”的长度是:(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.设变量
16、int a = 5;以下哪个表达式计算后,使得变量b的值不为2 ?(A) b=a/2(B) b=6- (a)(C) b=a%2(D)b=all&a15(B) a=12|a=13|a=14(C) ! (a=15)(D) lla=14对C+表达式na15的计算: lla 0 或 1(K15 1 或 K15 ” 1原因:C+的逻辑判断结果为整型值.以下C+代码中,不能正确对字符串si置串值的代码是:(A) char *sl=new char 20; cinsl;(B) char sl=name”; sl是字符变量,不能赋给串值(C) char si 5=,name;(D) char si = nam
17、e;. 一个具有6个整型指针元素的一维数组的正确定义是:(A) int *p6(B) int (*p) 6(C) int *p6(D) *(*(p)6)试比拟以下几种说明形式:int * p;/p是指向整型变量的指针(p是关联类型为整型的指针)int *pa10;/ pa是数组,元素类型是整型指针int (*pb) 10; / pb是指针,指向(关联类型)长度为10 的整型数组int * f();/ f是返回整型指针的函数名int (*f) () ;/ f是指针,指向(关联类型)是返回整型值的无参函数例:有声明int (*f) (int int) ; int max(int, int) ; i
18、nt 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) x7 x=x+l.假设用一维数组名作为调用函数时的实参,那么传递给形参的是:(A)数组首元素的地址(B)数组首元素的值(C)数组元素的个数(D)数组中全部元素的值二.简答题(每题2分,共20分)1 .设整型变量x为任何一个整数,表达式-2x2的值是?1.调用函数时,希望
19、从提供的实参变量中得到函数的结果,那么对应的形 参应该是?指针或引用类型参数注意使用方法:函数定义void funl (int xl);据值参数void fun2 (int * x2);参数,传地址值void fun3 (int & x3);参数,传名以上参数用于操作数据对象void fun4(int * &x4):引用参数,传名以上参数用于操作指针对象调用 intintintinta2;a3;funl(al);fun2(&a2);fun3(a3);*a4; fun3 (a4);/传数/指针/引用/指针s+1s+1 = &sl/s是二级指针情况成立的表达式是?x=3&y!=5|x!=3&y=5
20、.设有变量定义 char *s口=“Beijing, Shanghai, Guangzhou”;执行语句 cout*(s+l)+l;输出是? hanghais是字符指针数组*(s+l) = &sl 0*(s+l)+l = &sl 1 / 一级指针 输出字符指针是输出所指串值.表述“变量x的值等于3”和“变量y的值等于5”其中有且只有一种(x=3)!=(y=5)5.设有变量定义int a4 3, *p=a2;表达式p+2指向的元素是?a22将字符串7.str2拷贝到字符数组strl中,应调用函数?strcpy(strl, str2)说明语句char *w();的含义是?函数原型。w是函数名,返回
21、字符型指针8. 表达式new返回首地址int10的含义是?分配长度为10的整型数组堆内存,分配堆要用指针记录地址int *p=new int10, *q;*p = 10; pl = 20;对动态数组的两种访问方式*q=10; q0next=head-next; head-next=p;/p-next =(*p).nexthead*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
22、; while(q-next)coutcode; q=q-next;(4)删除一个结点*(q-next)如何操作?t = q-next; q -next = t-next; delete t;三.分析程序,写输出结果(每题5分,共20分)1 .求0的元素和;0的元素个数。#includevoid main () int a10 = 2, 4, 0, -5,10, 6, -8, 9, 6, 7;int i,s=0,count=0;for (i=0;i0) s+=ai, count+;else continue;cout/s=/s/, count=,/countendl; s=44 count=7
23、2 .测试静态变量和自动变量。静态变量第一次自动初始化为0,再调用 时不改变。#includevoid fun();void main()int i;for (i=l; i5; i+) fun(); coutendl;void fun()static int a; int b=2;cout (a+=3, a+b) t; 581114326862911921214.求最小公倍数#includeint 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() coutlcm(3, 7) J t,lcm(4, 6) endl;)2112.输出数字三角型,以递归方式建立程序。