C++习题集

更新时间:2024-01-28 11:13:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 C++语言概述

一、简答题

1. C++的单词包含那几种?

2. 一个标识符中的首字符必须是什么字符?其余位置上的字符必须是什

么字符?

3. 数值常量、字符常量、字符串常量和标识符在表示上各有什么区别? 4. C++语句分为哪几类?

5. #include命令的格式和功能各是什么?使用尖括号和双引号在含义

上有什么区别?

6. 你已经知道了那几个系统头文件?

7. cout和cin 标识符的含义是什么?他们后面分别使用什么运算符?

各运算符的作用是什么?

8. 上机运行一个程序需要经过那些阶段?

二、填空题

1. 程序中的预处理命令是指以______字符开头的命令。

2. 一条简单语句是以______字符作为结束符的,一条复合语句是分别

以______字符和______字符作为开始符和结束符的。

3. 空白符是______符、______符、和______符的统称。

4. 在#include命令中所包含的头文件,可以是______头文件,也可以

是______头文件。

5. 使用#include命令可以包含一个头文件,也可以包含一个______文

件。

6. 一个函数定义由______和______两部分组成。 7. 一个程序中必须有一个名为______的函数。

8. 函数头与______语句一样都能够提供出函数的参数和返回类型等信

息。

9. 若一个函数的定义处于调用它的函数之前,则在程序开始可以省去

该函数的______语句。

10. 一个函数的函数体就是一条______。

11. C++头文件和源程序文件的扩展名分别为______和______。 12. 程序文件的编译错误分为______和______两类。

13. 当使用______保留字作为函数类型时,该函数不返回任何值。 14. 当函数参数表用______保留字表示时,则表示该参数表为空。 15. 从一条函数原型语句”int fun1(void);”可知,该函数的返回类型

为______,该函数带有______个参数。

16. 当执行cout语句向C++显示输出屏幕输出一个数据项的值时,若该

值的显示宽度(即所占显示位置的字符数)为n,则显示该值后光标将从原位置后移______个字符显示位置。

17. 当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光

标从当前位置移动到______的开始位置。

18. 当执行cin语句时,从键盘上输入每个数据后必须输入一个______

符,然后才能接着输入下一个数据。

三、写出下列程序运行结果,此题又作为上机实验题

1. #include

void main() {

int x,y; x=5;y=6;

cout<<”x+y=”<

}

2. #include

int cube(int); void main(void) {

cout<<”cube(3)=”<

cout<<”cube(8)=”<

int cube(int x) {

return x*x*x; }

3. #include

#include”abc.h” void main() {

double a,b,c; double averageValue; a=2;b=3;c=4;

averageValue=AVE(a,b,c);

cout<<”averageValue;”<

cout<<”averageValue:”<

其中abc.h文件的内容如下:

double AVE(double x,double y,double z) {

return (x+y+z)/3; }

4. #include

#include”example.h” void main() {

int a,b,c;

cout<<”请输入3个整数:”

cin>>a>>b>>c;

cout<<”最大值:”<

其中example.h文件的内容如下: int max_value(int a,int b,int c); int min_value(int a,int b,int c);

这两个函数的定义(又称为函数的实现或具体实现)被保存在另一个程序文件中,它将被编译后连接到主文件中产生出可执行文件。该程序文件的内容如下:

int max_value(int a,int b,int c) {

if(a

int min_value(int a,int b,int c) {

if(a>b) a=b;// 若a大于b则将b的值赋给a if(a>c) a=c;// 若a大于c则将c的值赋给a return a; }

请读者自行假定用于输入的3个整数。

第二章 数据类型和表达式

一、简答题

1. C++数据分为哪四种大的类型?在大的整数类型中又分为哪四种类

型?

2. 整数类型分为哪三种类型,每种类型的长度各是多少? 3. 实数类型分为哪三种类型,它们的类型长度各是多少? 4. 单精度和双精度分别表示多少位有效数字? 5. 每一种C++具体类型的关键字是什么?

6. 哪四种保留字能够用来修饰int 保留字成为类型关键字?哪两种保

留字能够用来修饰char保留字成为类型关键字?

7. 整型常数具有哪三种不同进制的表示?如何区分它们? 8. 一个整数后缀L或U分别具有什么含义? 9. 转义字符序列中的首字符是什么字符?

10. 实数具有哪两种表示方法?一个浮点数具有那些成分?什么叫规格

化浮点数?

11. 定义符号常量和变量的语句有什么异同? 12. #define命令的作用是什么? 13. 一个C++运算符具有哪三种属性? 14. 左值和非左值(又称右值)有什么区别?

15. 在程序文件中使用系统数学函数或随机函数时,各需要通过#include

命令引入哪个头文件?

16. 一个表达式是否必须有一个值,在什么情况下它没有值? 17. 执行一个函数调用的大致过程是什么?函数运算的优先级如何?

二、填空题

1. 数据类型int,char,bool,float,double的类型长度分别为______、

______、______、______和______。

2. 短整型、整型和长整型的最简关键字分别为______、______和

______。

3. 常数-4.205,1200和6.7E-9分别具有______、______和______位

有效数字。

4. 数值常量46、0173和0x62对应十进制值分别为______、______

和______。

5. 字符常量 ’k’,’\\n’,’\\\\’,’/052’和’\\xA2’对应的数值

分别为______、______、______、______和______。

6. 字符串”It \\’s\\40an\\40apple.\\n”中包含有______个字符。 7. 枚举类型中的每个枚举值都是一个______,它的值是一个______,

值的类型为______。

8. 实数340.0和0.027E8对应的规格化浮点数分别为______和______。 9. 常数100,-25,3.62,1E5和-4.73f的数据类型分别为______、

______、______、______和______。

10. 若x的值为10,则x+=5的值和运算后的______的值相同,等于

______。

11. 若x=5,y=10,则计算y*=++x表达式后,x和y的值分别为______

和______。

12. 若x=25,则计算y=x++表达式后,x和y的值分别为______和______。 13. 假定x和ch分别为int 型和char型,则sizeof(x)和sizeof(ch)

的值分别为______和______。

14. 假定x=64,y=88,则x<<2和y>>2的值分别为______和______。 15. 假定x是一个逻辑量,则x&&true的值与______的值相同,x||false

的值也与______的值相同。

16. 假定x是一个逻辑量,则x&&!x的值分别为______和______。 17. 假定x=10,则表达式x<=10?20:30的值为______。

18. 假定x=10.5,y=-4.6,则表达式floor(fabs(x+y))的值为______。 19. 表达式sqrt(81)和pow(6,3)的值分别为______和______。 20. 随机函数rand() 的值在______至______区间内。

bx+121. 数学算式(1+x)sin48°和axe对应的算术表达式分别为______和

______。

三、试指出下列各表达式值的类型

假定a为int型,x为double型, 1. 327 2. -1.5e6 3. 42.0f 4. 48L 5. 0372 6. 0xabc 7. 1/3 8. 1%3 9. 1.0%3 10. a*3/x 11. a*(a+x) 12. 1+a*a 13. a+=3 14. x*=2 15. ‘x’ 16. ‘x’+20 17. true 18. ++a 19. short(a) 20. bool(x)

21. (unsigned int)(0256) 22. x=a++ 23. sizeof(bool) 24. char(a+10) 25. abs(x) 26. fabs(a) 27. floor(x) 28. ceil(a) 29. exp(4)+2 30. rand() 31. rand()/100 32. floor(log(x)) 33. pow(a,4) 34. a>10?x:sqrt(x) 35. a>100 36. x!=10 37. a&&x 38. a<1||a>10 39. !x 40. !(a==0)

四、试求出下列每个表达式的值(各表达式互不影响)

已知a=20,x=4.7,r=’a’, 1. a++ 2. ++r 3. a%5 4. a/5 5. r

6. 1+a/3%4 7. a/8.0 8. r+=4 9. x=2*(x+5)-1 10. char(a+30)

11. 10*sizeof(int) 12. (a<<3)+5 13. a>0 14. a==1

15. a++&&r!=’a’ 16. ++a&&r==’a’ 17. a||x<=10

18. a==r||a==floor(x) 19. a=(r>’A’?a+10:a-10) 20. a=(r<’A’?a+10:a-10) 21. x=(a++,r++) 22. x=(a++,r++,50) 23. x=pow(3,5) 24. x=fabs(-26.5)+4 25. a=abs(a)%8-10 26. floor(x+0.5) 27. ceil(x-0.5) 28. ceil((x-=0.5)-0.5)

五、把下列数学算式或不等式表示成C++表达式

1. 2x(1+x2/3) 2. (1+ex)/(1-ex) 3. (-b+(b2-4ac)1/2)/2a 4. 1/(3xln(2x+k))

5. sin3(x+π/4)/(3+cos3(x-π/4)) 6. 1/7(1+ex+1) n 7. 0<=x<=20 8. ax-by!=c 9. 4x+7y-2=3ab

10. |2x2+1|/|3x+2|<-5同时3x+2!=0 11. age>=55或者pay>=820

12. place=”江苏”同时sex=”女”

13. ‘a’<=ch<=’z’或者’A’<=ch<=’Z’

14. s[0]=’0’同时(s[1]=’x’或者s[1]=’X’)

六、写出下列每个程序运行后的输出结果并自行上机验证

1. #include

enum race{Black,White,Yellow}; void main() {

race ra;

ra=Black;cout<

2. #include

#define PI 3.14159 const int R=10

void main() {

double p,s;

p=2*R*PI;

cout<<”p=”<

3. #include

void main() {

int i=0,j=1,k;

k=i+=j;

cout<

cout<

cout<

4. #include

void main() {

cout<

cout<

5. #include

const int w=30; void main()

’;

{

int x,y;

x=w<<2;y=w>>2;

cout<

cout<

cout<

6. #include

void main() {

int x=10,y=-1;

cout<<((x>y)&&(y<0))<<’ ’; cout<<((x>y)||(y<0))<<’ ’; cout<<((x<=y)&&(y>=0))<<’ ’; cout<<((x<=y)||(y>=0))<<’ ’; cout<<((x==y)&&y)<<’ ’; cout<<((x==y)||y)<<’ ’; }

7. #include

void main() {

int x=5,y=10,k;

(k=x)+=y;cout<

cout<

}

8. #include

#include void main() {

double x=15.72;

double y,z;

y=ceil(x);z=floor(x);

cout<

七、编写下列程序

1. 已知一个三角形中三条边的长度分别为a,b和c,利用计算公式(s(s-a)(s-b)(s-c))1/2 求出三角形的面积,其中s=(a+b+c)/2,假定a,b和c的值由键盘输入,并确保任何两边的长度大于第三条边。

2. 假定一所大学2001年招生人数为3000人,若以后每年平均比上一年计划扩招10%,则2006年将计划招生多少人?

3. 已知有4个整数为a,b,c,d,试计算出它们的算术平均值和几何平均值。 4. 已知x=2a/2(a+b)sina,y=2b/3(a+b)cosb,试根据从键盘上输入的a和b的值分别计算出x和y的值。

八、上机实验题

1. 让计算机随机出10道两位整数加法题供用户计算,每道题10分,计算完成后打印出得分。 #include

#include #include

const N=10; void main() {

srand(time(0)); int x,y,z,c=0; for(int I=1;I<=N;I++) {

x=rand()?+10; y=rand()?+10;

cout<>z; if(x+y==z)c++; }

cout<<”得分:”<

2. 打印出0°-90°之间每隔5°的正弦值和余弦值。

#include #include

const double RAD=3.14159/180; void main() {

int I=0; while(I<=90) {

cout<

; ’ }

3. 把从键盘上输入的一个正整数按数字位的相反次序输出。

#include void main() {

int num,rem;

cout>>num; do{

rem=num; num/=10; cout<0); cout<

4. 打印出a-f中每个大小写字母所对应的ASCII码。 #include

void main() {

char c1=’A’,c2=’a’; for(int I=1;I<=6;I++) {

cout<

5. 从键盘上输入两个整数,由用户回答他们的和、差、乘和取余运算的结果,并统计出正确答案的个数。 #include

void main()

{

int x,y,z,c=0;

cout<<”输入两个整数:”; cin>>x>>y;

cout<>z;if(x+y==z) c++; cout<>z;if(x-y==z) c++; cout<>z;if(x*y==z) c++; cout<>z;if(x/y==z) c++; cout<>z;if(x%y==z) c++;

cout<<”答对”<

第三章 流程控制语句

一、填空题

1. 流程控制类语句包括______、______和______三类语句。 2. 跳转类语句包括______、______、______和______四种。 3. 选择类和循环类中的每一种语句都属于______语句。

4. 在switch语句中,每个语句标号所含关键字case后面的表达式必须是

______。

5. 在嵌套的if语句中,每个else关键字与它前面最接近的______关键字

相配套。

6. 作为语句标号使用的C++保留字case和default只能用于______语句

中。

7. 执行switch语句时,在进行作为条件的表达式求值后,将从某个标号

位置起向下执行,当碰到下一个标号位置时(停止/不停止)______执行。 8. 任何______语句都可以改写位具有同样功能的if 语句来实现。 9. 在for 语句中,假定循环体被执行次数为n,则<表达式1>共被计算

______次,<表达式2>共被计算______次,<表达式3>共被计算______次。

10.执行for 和while循环时,每次是先进行______的判断,然后再执行______,

执行do循环时则相反。

11.continue语句只能使用在______类语句中,break语句中既可以使用在

______类语句中,也可以使用在______语句中。

12.for语句中<表达式2>是在每次执行______之前被计算,而<表达式3>是在

每次执行______之后被计算。

13.在所有结构性语句中,只有____________语句的最后必定是以分号结束的,

而其余语句的最后一个字符可能是分号,也可能是______。

14._____语句的循环体至少被执行一次,______和______语句的循环体可能不

会被执行。

15. 若for循环的”头”为 “for(int i=0;i<10;i++)”,并且在循环体

中不会修改i的值,则循环体将被重复执行______次后正常结束。

16. 若while循环的”头”为”while(i++<=10)”,并且i的初值为0,

同时在循环体中不会修改i的值,则循环体将被重复执行______次后正常结束。

17. 当do循环的”尾”为”while(i++<=10)”,并且i的初值为0,同时

在循环体中不会修改i的值,则循环体将被重复执行______次后正常结束。

18. 当在程序中执行到______语句时,将结束本层循环类语句或switch

语句的执行。

19. 当在程序中执行到______语句时,将结束所在循环语句中循环体的

一次执行。

20. 在程序中执行到______语句时,将结束所在函数的执行过程,返回

到调用该函数的位置。

二、写出下列每个程序运行后的输出结果并上机验证

1. #include

void main() {

int a=2,b=5,c=4;

if(a+b>10)c=a*b;else c=3*a+b;

if(c<=20) cout<

a=a+b;b=a+b;c=a+b+c;

cout<<”a,b,c=”<

2. #include

void main() {

int x=5;

switch(2*x-3)

{

case 4: cout<

cout<<”switch end.”<

3. #include

#include void main() {

int I,x,y;

for(i=0;i<6;i++) {

cin>>x; if(x<0)y=1;

else if(x<10) y=x*x+3; else if(x<60) y=4*x-5; else y=int(sqrt(x));

cout<

假定从键盘上输入的6个常数为:36,-5,73,192,6,44。 4. #include

void main() {

int s0,s1,s2,x;

s0=s1=s2=0;

for(int i=0;i<12;i++)

{

cin>>x; switch(x%3){

case 0: s0+=x;break; case 1: s1+=x;break; case 2: s2+=x;break; } }

cout<

为:36,25,20,43,12,70,66,34,28,15,32,55 5. #include

const int N=5; void main() {

int I,p=1,s=0;

for(i=1;i

p=p*I; s=s+p;

cout<

6. #include

const int M=20; void main() {

int c2,c3,c5;

‘<

c2=c3=c5=0;

for(int i=1;i<=M;i++)

{

if(i%2==0) c2++; if(i%3==0) c3++; if(i%5==0) c5++; }

cout<

7. #include

void main() {

int I,j;

for(i=0;i<5;i++) {

for(j=I;j<5;j++) cout<<’*’; cout<

8. #include

void main() {

for(int i=1,s=0;i<30;i++)

{

if(i%2==0||i%3==0)continue; cout<

cout<

9. #include

const int T=6; void main() {

int I,j,k=0;

for(i=1;i<=%;i+=2)

for(j=2;j<=T;j++)

if(i+j==T) cout<<’+’; else if(i*j==T) cout<<’*’ else k++;

cout<

}

10. #include

void main() {

int a,b,c=0;

for(a=1;a<6;a++) for(b=6;b>1;b--) {

if((a+b)%3==2){c+=a+b;cout<20) break; }

cout<<”c=”<

11. #include

const int B=2; void main() {

int p=1,s=1;

while(s<50)

‘<

p*=B; s+=p; }

cout<<”s=”<

}

12. #include

void main() {

int x,y;

int i=2,p=1;

cout<<”请输入两个整数x和y:”; cin>>x>>y; do{

while(x%i==0&&y%i==0) { p*=I; x/=I; y/=I; } i++;

}while(x>=i&&y>=i);

cout<<”x和y的最小公倍数:”<

假定从键盘上输入的两个整数为24和88。

三、指出下列每个程序的功能并上机验证

1. #include

double f1(int n) {

double sign=1,s=1; for(int i=2;i<=n;i++)

{

s+=sign/(i*i); sign*=-1; }

return s; }

void main() {

int a; cin>>a;

cout<

2. #include

void main() {

double a,x,y; cin>>a; do{

cin>>x; if(x==-1)break;

if(x<0)y=a*x+5;

else if(x<=20) y=3*x*x-2*a+1; else y=a*a+x*x;

cout<

3. #include

#include

double f1(double a,double b,char op) {

switch(op){

case ‘+’: return a+b; case ‘-’: return a-b; case ‘*’: return a*b; case ‘/’: if(b==0)

{ cout<<”divided by 0!”<

else return a/b;

default : cout<<”operator error!”<

exit(1); } }

void main()

{

double x,y; char op;

cout<<”请输入两个实数和一个运算符:”; cin>>x>>y>>op;

cout<

4. #include

#include void main() {

int x1,x2;

cin>>x1;

x2=int(sqrt(x1));

for(int i=1;i<=x2;i++)

if(x1%i==0) cout<

5. #include

void main() {

int I,p=1,s=0;

int N;

cout<<”输入一个正整数:”; cin>>N;

for(i=1;i<=N;i++) {

p*=I; s+=p; }

cout<

6. #include

double f1(double x,int n) {

double p1,p2,p3,s;

p1=s=x;p2=p3=1; if(n==0) return s; for(int i=1;i<=n;i++) {

p1*=x*x;

p2*=2*i*(2*i+1); p3*=-1; s+=p3*p1/p2; }

return s; }

void main() {

double x,y; int n;

cout<<”输入一个实数:”; cin>>x;

cout<<”输入一个正整数:”; cin>>n; y=f1(x,n);

cout<<”y=”<

7. #include

void main() {

int I,j;

for(i=1;i<=5;i++) {

for(j=1;j<=9;j++)

if(j<=5-i||j>=5+i) cout<<’ else cout<<’*’; cout<

8. #include

int f1(int a,int b) {

int r;

while(b!=0)

; ’ {

r=a%b; a=b;b=r; }

return a; }

int f2(int a,int b) {

int i=2,p=1; do{

while(a%i==0&&b%i==0)

{

p*=i;a/=I;b/=i; } i++;

}while(a>=i&&b>=i); return p*a*b; }

void main() {

int a,b;

cout<<”输入两个正整数:”; cin>>a>>b;

cout<

9. #include

#incldue #include const N=10; int ff(int x,int y)

{

int z;

cout<>z;

if(x+y==z) return 1;else return 0;

}

void main() {

int a,b,c=0;

srand(time(0)); for(int i=0;i

a=rand() +1; b=rand() +1; c+=ff(a,b) }

cout<<”得分:”<

10. #include

#include #include void main() {

double a,b,c;

cout<<”输入一元二次方程的二次项系数、一次项系数和常数

项:”<

cin>>a>>b>>c; double d=b*b-4*a*c; if(d<0.0)

{

cout<<”此方程没有实根!”<

double x1,x2; if(d==0.0)

x1=x2=-b/(2*a); else {

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a); }

cout<<”此方程的两个根为:”<

四、编写下列程序

1. 某城市为鼓励节约用水,对居民用水量作如下规定:若每人每月用水量

不超过2吨,则按0.3元收费;若大于2吨但不超过4吨,则其中2吨按0.3元收费,剩余部分按每吨0.6元收费;若超过4吨,则其中2吨按0.3元收费,再有2吨按0.6元收费,剩余部分按每吨1.2元收费。试根据一户居民的用水量和该户人口数计算出应交纳的水费。

2. 某班级学生进行百米跑测试,规定成绩在12秒以内(含12秒)为优秀,

在12秒以上至15秒为达标,在15秒以上为不达标,编一程序,从键盘上输入每个人的成绩,分别统计出成绩为优秀、达标和不达标各多少人?各占学生总数的百分比是多少? 3. 计算1+3+32+... +310的值。

4. 求满足不等式22+42+? +n2<1000的最大n值。 5. 求出从键盘上输入的10个整数中的最大值。

6. 已知6<=a<=30,15<=b<=36,求满足不定方程2n+5b=126的全部整数组

解。如(13,20)就是一个整数组解。

7. 假定有100名中小学生参加义务植树活动,共植树100棵,其中高中生

每人值3棵,初中生每人植两棵,小学生每两人植1棵。并且已知参加植树的高中、初中和小学生的人数均不小于10人,问他们各为多少人? 8. 已知y=1+(1/2)x+(1/3)x2+?+(1/10)x9,求每取一个值时所对应的y

值,其中x的每个值由键盘输入,直到输入终止标准-100为止。 9. 在输出窗口中显示出如下图形:

*********** ********* ****** *** *

第三章 函数

一、填空题

1. 一个函数调用表达式能够作为左值的条件是:函数的返回值必须是______

类型。

2. 假定一个函数的数组参数说明为char a[],则等价的指针参数说明为

______。

3. 假定一个函数的二维数组参数说明为int w[][N],则等价的指针参数说明为

______。

4. 假定一个参数说明为const int a,则在函数体中______(能够/不能够)改

变a的值。

5. 假定一个参数说明为const char *p,则在函数体中______(能够/不能够)

改变p所指向的存储空间的内容,但______改变p指针的内容。

6. 假定一个参数说明为int &x,则进行函数调用时,它是对应______的别名。 7. 一个函数带有函数声明时,则参数的默认值应该在______(函数定义/函数

声明)中给出。

8. 在进行函数调用时,将把______传送给非引用参数,把实参的______传送

给引用参数。

9. 函数执行中对引用参数的访问实际上就是对相应______的访问。

10. 当函数的返回类型为void 时,在函数体中可以使用______语句,否则必须

使用______语句返回一个值。

11. 当实参为一个数组名时,对应的形参必须是______类型或______类型。 12. 变量的四种作用域分别为______、______、______和______。 13. 不同作用域范围内的变量______(能够/不能够)同名。

14. 当一个函数的非引用参数为a,假定它对应的实参也为a,则在函数体中对a

的访问与对应的实参a______(有关/无关)。

15. 当一个函数的引用参数为a,假定它对应的实参也为a,则在函数体中对a

的访问与对应的实参a______(有关/无关)。这两个变量的作用域______

(相同/不同)。

16. 当一个函数的引用参数为a,假定它对应的实参为b,则它们对应的作用域

______(相同/不同),访问它们的存储空间______(相同/不同)。 17. 在函数定义的第一层复合语句内______(能够/不能够)定义与形参同名的

变量,因为它们作用域______(相同/不同)。

18. 函数的形参和函数体内的变量______(可以/不可以)与全局域或文件域的

对象同名。

19. 在两个嵌套的不同作用域内若分别定义有同名对象,当在内层作用域访问

这个对象时,将访问的是在______(内层/外层)定义的对象,除此之外将访问的是在______(内层/外层)定义的对象。

20. 在一个程序文件中定义的函数,若要在另一个程序文件中访问,则必须在

该文件开始给出一条该函数的______对其进行说明。

21. 在一个函数体中可以使用函数调用表达式调用其他函数,也可以调用

______。

22. 在函数体中又调用自身函数称为______调用,该函数称为______函数。 23. 当两个函数的函数名______,但参数的个数或对应参数的类型______时,

则称为重载函数。

24. 当一个函数为void f(int ,char=’a’),另一个函数为void f(int),则它

们______(是/不是)重载函数,在一个程序中______(可以/不可以)同时定义这两个函数。

25. 一个函数模板中的类型参数所对应的具体类型由调用该函数模板的______

决定。

26. 当在同一个程序中存在一个普通函数是一个函数模板的重载函数时,则与

函数调用表达式相符合的______将被优先调用执行。

27. 当一个函数调用表达式只能与一个函数模板相符合时,将首先根据函数模

板生成一个______,然后再调用它执行。

28. 在函数定义的参数表中,也可以使用函数参数,假定一个函数参数说明为

int &ff(int[],int),则等价的函数指针说明为______。

二、给出下列程序运行后的输出结果并上机验证

1. #include

void main() {

int a=10,b=20;

cout<

cout<

cout<

2. #include

int a=5; void main() {

int a=10,b=20;

cout<

{ a+=i;b+=a; }

cout<

cout<

3. #include

int f1(int x,int y) {

x=x+y;y=x+y;

cout<<”x=”<

void main() {

int x=5,y=8; int z=f1(x,y);

cout<<”x=”<

4. #include

void f2(int&x,int&y) {

int z=x;x=y;y=z; }

void f3(int *x,int *y) {

int z=*x;*x=*y;*y=z; }

void main() {

int x,y;

x=10;y=26;

cout<<”x,y=”<

cout<<”x,y=”<

cout<<”x,y=”<

cout<<”x,y=”<

5. #include

void f4(int a[],int n,int &s) { s=0;

for(int i=0;i

void main() {

int a[5]={2,7,5,4,9};

int b[10]={4,8,6,9,2,10,7,12,6,15}; int x; f4(a,5,x); int y=x; f4(b,8,x); y+=x; f4(b+3,5,x); cout<

6. #include

int x=5; void f5(int a); int f6(int x); void main() {

int x=3; f5(x); f5(x+4);

cout<

void f5(int a) {

a+=x;

cout<

int f6(int x) {

x*=3; return x+1; }

7. #include

#include char *f7(char *&a,int n) {

a=new char[n]; strcpy(a,”motion”); char *b=new char[n]; strcpy(b,”telephone”); return b; }

void main() {

char *p1;

char *p2=f7(p1,12); cout<

8. #include

const N=15;

int f8(char a[][N],int m) {

int c=0;

for(int i=0;i

{

int j=0; while (a[i][j])

{

if(a[i][j]>=’0’&&a[i][j]<=’9’) c++; j++; } } return c; }

void main() {

char b[4][N]={“12ab3”,”70542”,”abc25”,”x+y=26”}; int c1=f8(b,4); int c2=f8(b+2,2);

cout<

9. #include

int f9(int x) {

cout<

if(x<=0){cout<

void main() {

int x=f9(6); cout<

10. #include

const N1=8,N2=6;

int average(int a[],int n) {

int s=0;

for(int i=0;i

double average(double a[],int n) {

double s=0;

for(int i=0;i

void main() {

int a[N1]={3,6,5,10,8,2};

double b[N2]={3.2,5,6.2,5.6,4.9,8.4}; int v1;double v2; v1=average(a,N1); v2=average(b,N2); cout<<”v1=”<

11. #include

const N=10;

template

bool insert(DataType a[],int &n,DataType x); template

void print(DataType a[],int &n);

void main() {

int a1[N]={25,48,50,82,66,43}; char a2[N]=”student”;

char *a3[N]={“File”,”Edit”,”Insert”,”Project”}; int b1=6,b2=7,b3=4;

int n=75;char ch=’w’;char *p=”Build”; insert(a1,b1,n); insert(a2,b2,ch); insert(a3,b3,p); print(a1,b1); print(a2,b2); print(a3,b3); }

template

bool insert(DataType a[],int&n,DataType x) {

if(n<0){cout<<”操作失败!”<

cout<<”操作成功!”<

template void print(DataType a[],int &n) {

for(int i=0;i

{

cout< if(i%4) cout<

12. #include

void fun10(int *a[],int m,int n) {

int i,j; for(i=0;i

a[i][j]=(i+1)*(j+1); }

void main() {

int m1,n1;

cout<<”输入矩阵的行数和列数:”; cin>>m1>>n1;

int **b=new int *[m1]; fun10(b,m1,n1); for(int i=0;i

for(int j=0;j

二、指出下列每个函数的功能

1. int fun1(int n)

{

int p=1,s=0;

for(int i=1;i<=n;i++) {

p*=i;s+=p; } return s; }

2. #include

#include #include

double fun2(doble x,double y,char op) {

switch(op) {

case ‘+’: return x+y; case ‘-’: return x-y; case ‘*’: return x*y; case ‘/’:

if(fabs(y)<1.0E-6)

{

cout<<”除数为0,退出运行!”<

return x/y; default:

cout<<”运算符非法!”<

3. void fun3(int a[],int n)

{

int i,j,x; for(i=1;i

{

x=a[i];

for(j=i-1;j>=0;j--) if(x

4. void fun4(double&x,doble&w,int n)

{

cout<<”输入一个实数:”; cin>>x; double y=1; w=0;

for(int i=1;i<=n;i++) {

y*=x;w+=y/i; } }

5. void fun5(char *a,const char *b)

{

while(*b) *a++=*b++; *a=0; }

6. int fun6(int n)

{

if (n==0)return 1; else return 2*fun6(n-1);

}

7. template

int fun7(DT&x,DT&y) {

if(x>y) return 1; else if(x==y) return 0; else return -1; }

8. template

bool fun8(T a[],int n,T key) {

for(int i=0;i

if(a[i]==key) return true; return false; }

9. #include

#include

void fun10(int *&a,int n) {

srand (time(0)); int i; a=new int[n]; for(i=0;i

10. void fun10(int **&a,int m,int n)

{

int I,j;

a=new int *[m]; for(i=0;i

cout<<”输入”<>a[i][j]; }

三、编写下列程序

1. 编写一个函数,求出一维整形数组a[n]中所有元素的平方之和。

int fun1(int a[],int n);

2. 编写一个函数,分别求出一维整型数组a[n]中所有奇数元素的个数和

所有偶数元素的个数。

void fun2(int a[],int n,int&c1,int&c2);

3. 编写一个函数,从一个二维整型数中查找具有最大值的元素,由引用参

数row和col带回该元素的行号和列号。

void fun3(int a[][N],int m,int&row,int&col);//N为常量

4. 编写一个函数,求出由指针a所指向的字符串中包含的每种十进制数字

出现的次数,把统计结果保存在由指针b所指向的整型数组中。 void fun4(char *a,int *b);

5. 编写一个递归函数过程,求出两个自然数m和n的最大公约数。

int fun5(int m,int n);

6. 编写一个递归函数过程,求出两个自然数m和n的最小公倍数。

int fun6(int m,int n,int b=2);

7. 编写一个程序,求出二元一次方程组{a11x+a12y=a13;a21x+a22y=a23}

的解,其中方程组的系数用一个实数二维数组保存。要求编写出一个主函数和两个普通函数,一个普通函数用于从键盘上向数组输入数据,另一个普通函数用于救出以该数组为系数矩阵的对应方程组的解,并由引

用参数x和y返回所求的两个根,还有当方程组有惟一解时返回真,否则返回假。程序中的主函数用来定义一个二维实型数组,依次调用这两个普通函数,并且输出所求得的解。 提示:方程的两个根x0和y0分别为: x0=(a13a22-a12a23)/(a11a22-a12a21) y0=(a11a23-a13a21)/(a11a22-a12a21) 当a11a22-a12a21!=0时有惟一解。

本文来源:https://www.bwwdw.com/article/ydlw.html

Top