C++程序设计(第2版)-习题解答C++程序设计(第2版普通高等教育“十一五”国家级规划教材习题答案作者邓振杰C++程序设计习题解答.pdf
C+程序设计习题解答第1章C+概述1.填空题(1)在面向对象程序设计中,对象是由、和 封装在一起构成的实体。(2)在面向对象程序设计中,类是具有 和 的对象的集合,它是对一类对象的抽象描述。(3)面 向 对 象 程 序 设 计 最 突 出 的 特 点 就 是、和.(4)C+语言包含头文件的格式有两种,即 和。(5)C+源 程 序 要 经 过、和 四个环节,才能布屏幕上显示结果。(6)每个C+程序都从 函数开始执行。(7)每个函数体都以 开始,以 结束。(8)C+程序中的每条语句以 结束。(9)C+程序的头文件和源程序的扩展名分别为 和,目标程序的扩展名为,可 执 行 程 序 的 扩 展 名 为(1 0)在 C+程 序 中 使 用 基 本 输 入/输 出 语 句 需 包 含 的 头 文 件 是,应放在程序的(11)在 C+程序中注释语句有 和 两种格式。(12)C+程序的续行符为 o(1 3)如果从键盘输入语句给变量X,则输入函数的形式为:如果再将变量 X 的值显示在屏幕上,其输出函数的形式为 o(14)C+程序中的“endl”在输出语句中起 作用。参考答案:(1)对象名,一组属性数据,一组操作(2)相同属性数据,操作(3)封装性,继承性,多态性(4)#include文件名.扩展名,include文件名.扩展名(5)编辑,编译,连接,运行(6)主函数、(8)分号;(9).h,.cpp,.obj,.exe(10)#include,开始部分(11)/*/,/(12)(13)cinX coutX(1 4)换行并清空流2.选择题(1)面向对象程序设计把数据和()封装在一起。A.数据隐藏 B.信息 C.数据抽象 D.对数据的操作(2)C+源程序的扩展名是()。A.c B.exe C.cpp D.pch(3)把高级语言程序转换为目标程序需使用()。A.编辑程序 B.编译程序 C.调试程序 D.运行程序(4)C+语言与C 语言相比最大的改进是()。A.安全性 B.复用性 C.面向对象 D.面向过程(5)以下叙述不正确的是()oA.C+程序的基本单位是函数B.-C+程序可由-个或多个函数组成C.一个C+程序有且只有一个主函数D.C H 程序的注释只能出现在语句的后面参考答案:(1)D(2)C(3)B(4)C(5)D3.简答题(1)试比较面向对象程序设计、结构化程序设计和模块化程序设计。(2)解释以下概念:类 对 象 封 装 数 据 抽 象 继 承 多 态(3)简述C+语言有哪些特点。参考答案:(1)结构化程序设计强调从程序结构和风格上研究程序设计。结构化程序设计的程序代码是按顺序执行的,有一套完整的控制结构,函数之间的参数按一定规则传递,不提倡使用全局变量,程序设计的首要问题是“设计过程”。模块化程序设计将软件划分成若干个可单独命名和编址的部分,称之为“模 块 模 块 化程序设计的设计思路是“自顶向下,逐步求精”,其程序结构是按功能划分成若干个基本模块,各模块之间的关系尽可能简单,在功能上相对独立。模块和模块之间隔离,不能访问模块内部信息,即这些信息对模块外部是不透明的,只能通过严格定义的接口对模块进行访问。模块化程序设计将数据结构和相应算法集中在一个模块中,提出了“数据结构+算法=程序设计”的程序设计思想。模块化能够有效地管理和维护软件研发,能够有效地分解和处理复杂问题。但它仍是 种面向过程的程序设计方法,程序员必须时刻考虑所要处理数据的格式,对不同格式的数据做相同处理或对相同数据格式做不同处理都要重新编程,代码可重用性不好。面向对象程序设计面对的是一个个对象,用 种操作调用一组数据。把数据和有关操作封装成一个对象。各个对象的操作完成了,总的任务也就完成了。他适用于编写大型程序。结构化程序设计和模块化程序设计适用于比较小的程序,他要求细致的描写程序设计的每个细节。(2)类:在面向对象程序设计中,类是具有相同属性数据和操作数据的函数的封装,它是对一类对象的抽象描述。对象:在面向对象程序设计中,对象是由对象名、-组属性数据和一组操作封装在一起构成的实体。其中属性数据是对象固有特征的描述,操作是对这些属性数据施加的动态行为,是一系列的实现步骤,通常称之为方法。封装:封装是一种数据隐藏技术,在面向对象程序设计中可以把数据和与数据有关的操作集中在一起形成类,将类的一部分属性和操作隐藏起来,不让用户访问,另一部分作为类的外部接口,用户可以访问。数据抽象:抽象的作用是表示同类事物的本质,C+中的数据类型就是对批具体的数的抽象。类是对象的抽象,对象是类的特例。继承:在面向对象程序设计中,继承是指新建的类从已有的类那里获得已有的属性和操作。多态:在面向对象程序设计中,多态性是指相同的函数名可以有多个不同的函数体,即一个函数名可以对应多个不同的实现部分。(3)面向对象程序设计最突出的特点就是封装性、继承性和多态性。封装性封装是一种数据隐藏技术,在面向对象程序设计中可以把数据和与数据有关的操作集中在一起形成类,将类的一部分属性和操作隐藏起来,不让用户访问,另一部分作为类的外部接口,用户可以访问。类通过接口与外部发生联系,用户只能通过类的外部接口使用类提供的服务,而内部的具体实现细节则被隐藏起来,对外是不可见的。继承性在面向对象程序设计中,继承是指新建的类从己有的类那里获得一有的属性和操作。己有的类称为基类或父类,继承基类而产生的新建类称为基类的子类或派生类。由父类产生子类的过程称为类的派生。通过继承,程序可以在现有类的基础上声明新类,即新类是从原有类的基础上派生出来的,新类将共享原有类的属性,并且还可以添加新的属性。继承有效地实现了软件代码的重用,增强了系统的可扩充性。多态性在面向对象程序设计中,多态性是指相同的函数名可以有多个不同的函数体,即一个函数名可以对应多个不同的实现部分。在调用同一函数时,由于环境的不同,可能引发不同的行为,导致不同的动作,这种功能称为多态。它使得类中具有相似功能的不同函数可以使用同一个函数名。多态既表达了人类的思维方式,又减少了程序中标识符的个数,方便了程序员编写程序。多态是面向对象程序设计的重要机制。4.编程题编写程序在屏幕上显示字符串“欢迎大家学习C+语言!”,并按照书中介绍练习C+语言的上机实现过程。参考答案:#includevoid main()coutw”欢迎大家学习C H 语言”wendl;第2章C+程序设计基础1.填空题(1)Visual C+中如果一个变量为int型,它所占的内存空间是 字节,位。(2)short int型变量占用的内存空间是 字节,long int型变量占用的内存空间是 字节,char型变量占用的内存空间是 字节.,float型变量占用的内存空间是 字节,double型变量占用的内存空间是 字节。(3)bool类型数据的值为非0 时 会 自 动 转 换 成,如果等于0 会自动转换成(4)C+程序 中 的 关 系 运 算 符 满 足 条 件 时 返 回,不 满 足 条 件 时 返 回。(5)表达式x&y=z是 类型的表达式;表达式x+y|z是 类型的表达式。(6)表达式13&57的值是,表达式!(58)|26的值是。(7)表达式a+bb?max=a:max=b_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _y=x*-y_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _(x-y)=(x-z)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _y=xA2 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _x*=y+l_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _(9)以下程序的功能是:从键盘输入一个字符,判断其是否是字母,并输出相应信息,请填空。#includevoid main()(char c;cinc;if=a c=W cv=Z)cout接收的是一个字母Wendi;elsec outw”接收的不是一个字母 wendl;(1 0)以下程序的输出结果是 o#includevoid main()int i=0j=0;while(i15)(j+;i+=+j;co u t i M j en d l;(1 1)以下程序的功能是:在屏幕上同一行显示19 的平方的值,请填空。#includevoid main()unsigned int i;for_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _cout i*i;cout endl;(1 2)以下程序的功能是:求一组(10个)正数中的最大数,当输入为负数时提前结束程序,请填空。#includevoid main()const int N=10;int x,max=0;cout Please input data:Mendl;for(int i=l;iv=N;i+)(cinx;if()max=x;continue;)else if()coutnmax=iTiax endl;(1 3)以下程序的输出结果是#includevoid main()|int i=0;while(+i)if(i=10)break;if(i%3!=l)continue;coutiendl;)(1 4)以下程序的输出结果是 o#includevoid main()(int x=5;do(switch(x%2)case 1 :x;break;case O:x-H-;break;)x;coutxendl;while(x0);参考答案:(1)4,32(2)2,4,1,4,8(3)true,false(4)1,0(5)逻辑,逻辑(6)1,1(7)+v=&(8)产xvb?max=a:max=b的含义:若 ab则将a 的值赋值给max,否则将b 的值赋值给max产x*-y的含义:现将负y 的值乘以x,再将结果值赋值给y(x-y)=(xz)的含义:比较x-y和 x-z是否相等尸x八 2 的含义:将 x 和 2 按位异或的值赋值给yx*=y+l的含义:将 x 乘 以(y+1),再将结果值赋值给x(9)&,|,&(10)20 8(11)i=l;iv=9;i+,”(12)x0&maxx,x0,break;(13)147(14)31-12.选择题(1)下列四组标识符中不属于Visual C+关键字的是()。A.witch B.break C.main D.continuefloatcharcmcase(2)下列四组变量命名,不符合Visual C+变量命名规则的是()。A.ccaverB.6xcharC.wlyear78D.ye_ 78wo(3)假设有两个变量2=65432和 5=2*2,在保证数据正确存储的前提下,以下变量类型定义错误的是()。A.int a;int b;C.unsigned short a;unsigned short b;(4)在 if语句中的表达式(A.只能是关系表达式C.只能是逻辑表达式(5)以下程序的输出结果为B.unsigned short a;signed int b;D.int a;signed int b;)oB.D.)o只能是关系表达式和逻辑表达式可以是任意表达式(A.tl=trueB.tl=8C.tl=falseD.tl=lt2=falset2=0t2=truet2=0t3=truet3=-lt3=falset3=l#includevoid inain()bool tl=8;bool t2=0;bool t3=-l;couttl=tl endl;coutt 1 =t2endl;couttl=t3endl;(6)以下程序的输出结果为(A.a=13b=4c=3d=6B.a=13b=8c=4d=6C.a=13b=4c=4d=6D.a=13b=8c=3d=6#includevoid main()int x=8,y=5;int a,b,c,d;a=x+y;b=x/y2;c=xy+;d=x%y*2;c o u t n a=a H b=M b;c o u t M c=c H d=d e nd l;)参考答案:(1)A (2)B (3)C (4)D (5)D (6)B3.简答题(1)字符常量和字符串常量有什么区别?(2)定义符号常量的方法有哪些?它们有什么区别?。(3)w h i l e 与 d o-w hil e 语句的主要区别是什么?参考答案:(1)在 C+语言中,字符串常量和字符常量是不同的。字符串常量是用一对双引号括起来的字符序列。例如,、“、”1 2 3”、“he l l o 等都是字符串常量。一般字符常量是用一对单引号括起来的一个字符,其值为A S C H 码值。例 如,弓、A,、$、5 等都是合法的字符常量。(2)C+语言提供了两种定义符号常量的方法:用 co n s t 语句定义符号常量这种方法是C+语言中广泛采用的定义符号常量的方法,其一般格式为:co n s t 数据类型符号常量=表达式;用#d e f in e 语句定义符号常量这是C语言中定义符号常量的方法,其中#d e f in e 是预处理指令。其缺点是不能显示声明常量的类型。其一般格式为:#d e f in e 常量名常量值(3)w hil e 把循环条件判断放在循环体执行前,而 d o-w hil e 循环条件判断放在循环体执行后,不管循环条件是否成立,它都至少执行次循环体。4.编 程题(1)求 1 0 0 以内的自然数中奇数之和。(2)求 1 0 0 以内能被1 3整除的最大自然数。(3)有一个函数如下所示:x (x l)y=x+5(l x 1 0)从键盘输入一个x,求出相应的y值。(4)输入3 个整型数,按由大到小的顺序输出显示。(5)根据从键盘输入的表示星期几的数字,输出它对应的英文名称。(6)从键盘输入一个整数,求其阶乘。(7)编写一个简易计算器程序,根据用户输入的运算符做两个数的加、减、乘或除运算。(8)编写程序在屏幕上打印如下图案。*参考答案:(1)#in cl u d e void main()int sum=0;fbr(int i=l;i=100;)(sum=sum+i;i=i+2;)coutvv”00 以内奇数之和为:nsum endl;)(2)#includevoid main()(int max=0;int i=13;while(i=100)if(i%13=0&maxi)max=i;i=i+13;continue;)coutn100以内能被13整除的最大自然数为:nm axendl;)(3)#includevoid main()float x,y;cinx;if(x=l&x=10)y=x+5;else y=x-5;coutyendl;)(4)#includevoid main()|int inta,intb,intc;cinintaintbintc;if(intaintb)if(intbintc)coutintc in tb n inta;else coutintbH M;if(intaintc)coutintc,inta;elsecoutintaM Mintc;else ifintaintc)coutintcH in ta H intb;else coutintaifl(intbintc)coutintcn intb;else coutintbH Mintc;)(5)#includevoid main()int data;coutnplease input the data(0-6):n;cindata;switch(data)(case 0:cout,Sundaynendl;break;case 1 :coutHMondayendl;break;case 2:coutnTuesdaynendl;break;case 3:coutMWednsdaynendl;break;case 4:cout,Thursday,endl;break;case 5:coutHFridaynendl;break;case 6:coutMSatudayMendl;break;default:coutnerrornendl;(6)#includevoid main()(int n,t=l;coutMPIease input a integer:endl;cinn;if(n0)cout,Error!,*endl;return;else if(n=0|n=l)t=l;elsefor(int i=l;i=n;i+)t=t*i;coutHn!=tendl;(7)#includevoid main()float x,y;char ch;COUtVV”请输入两个操作数:;cin x y;COUtVV”请输入运算符+-*/:cinch;switch(ch)case:coutx+yend 1;break;case,J:coutx-yendl;break;case,*,:coutx*yendl;break;case 7f:coutx/yendl;break;defhult:coutvv”输入有误,退出!(8)#includevoid main()for(int i=0;i 5;i+)fbr(int j=0;j2*i+1 ;j+)coutn*n n;coutendl;第 3 章 函 数1.填空题(1)在 C+中,个函数一般由两部分组成,分别是 和(2)在 C+中,若没有定义函数的返回类型,则系统默认为 型。(3)当一个函数没有返回值时,函 数 的 类 型 应 定 义 为。(4)在 C+中,函数的参数传递可有三种形式,即、和(5)在函数体外定义的变量是 变量;在函数体内定义的变量是变量。(6)在 C+的一个程序内可以定义多个同名的函数,称为。(7)在 一 个 函 数 的 定 义 或 声 明 前 加 上 关 键 字,该函数就声明为内联函数。(8)若在一个函数中又调用另一个函数,则称这样的调用过程为函数的 调用。(9)在调用一个函数的过程中出现直接或间接调用该函数本身,就称作函数的调用。(1 0)在程序中可以使用系统函数,但是要在程序的 说明函数所在的头文件名o(1 1)以下程序的输出结果为。#include#define N 8void fun(int);void main()(fbr(int i=l;iN;i+)fun(i);)void fun(int x)(int a=0,b=2;cout(a+=x+3,a+b)endl;(1 2)以下程序的输出结果为 o#include const int N=5;void fun();int a=0;void main()(fbr(int i=l;iN;i-H-)fun();void fun()int b=2;cout(a+=3,a+b)endl;)(1 3)以下程序的输出结果为。#include int m=3;void fiin(int m)(m=6;void main()(fun(m);coutn m=n m nn;)(1 4)以下程序的输出结果为 o#include int gcd(int,int);void main()(int a,b;a=16;b=24;cout 44GCD(tt a,b,)=,gcd(a,b)endl;)int gcd(int a,int b)(if(b=O)retum a;else return gcd(b,a%b);)参考答案:(1)函数头,函数体(2)int(3)void(4)传值调用,传址调用,引用调用(5)全局变量,局部变量(6)函数重载(7)inline(8)嵌套(9)递归(1 0)开始处(11)6789101112(12)581114(13)m=3(14)GCD=82.选择题(1)以下叙述不正确的是()。A.函数是构成C+程序的基本元素B.程序总是从第一个定义的函数开始执行C.主函数是C+程序中不可缺少的函数D.在函数调用之前,必须要进行函数的定义或声明(2)以下函数声明正确的是()。A.double fun(int x,int y)B.double fun(int x;int y)C.double fun(int x,int y);D.double fun(int x,y);(3)当一个函数无返回值时,函数的类型应为()。A.任意 B.void C.int D.char(4)下列关于函数声明说法不正确的是()。void fun(void);A.函数声明是一条独立的语句,必须以分号结尾B.函数声明通常放在程序的开始部分C.函数fun无参数传入D.函数fun返回一个值,其类型为void(5)下列关于return语句的说法错误的是()。A.在函数中通过return语句返回一个函数值B.return语句中表达式的类型决定函数返回的类型C.在无返回值的函数体中可以没有return语句D.当函数返回值的类型为void时,函数中不应出现return(表达式)(6)下列关于重载函数的说法正确的是()。A.重载函数必须具有不同的返回值类型B.重载函数形参个数必须不同C.重载函数必须具有不同的形参列表D,重载函数名可以不同(7)一个函数为 void Hint,float=a),另一个函数为 void f(in t),则 它 们()。A.不能在同一个程序中定义B.可以在同一个程序中定义并可重载C.可以在同一个程序中定义,但不可重载D.以上说法均不正确(8)下列函数定义中正确的是()。A.double fun(double x,y)B.double fun(double x,double y)double z;return x/y;z=x/y;return z;C.double fun(double x,y)D.double fun(double x,double y)z=x/y;z=x/y;return z;return x/y;(9)下列关于默认参数值函数说法错误的是()oA.C+中,允许设置参数的默认值B.必须从参数表最右边的参数开始,设置参数的默认值C.在函数声明和函数定义中,默认参数的值必须相同D.函数调用时,带默认值的参数无实参输入时,使用默认值(10)下列程序的输出结果为()oA.10,20,30 B,35,7,5#include C.35,20,10 D.10,20,35int fun(int a,int b,int c)a=5;b=a+2;c=a*b;return(c);void main()int a=10,b=20,c=30;c=fun(a,b,c);c o u t c M,n b n,a nM;)(I D 下列程序的输出结果为()oA.0 B.4 C.15#include int fun(int a,int b)int c;c=a*b;return(c);void main()(int a=3,b=5,c=4,x=0;x=fun(fun(a,b),c);coutxendl;D.60(12)下列函数的返回类型为(A.v o i df u n(v o i d)B.f l o a tC.i n tD.无法确定f l o a t x=3.0,y;y=x*x/2;r e t u r n (y);(13)卜 列程序的输出结果为(A.x=1 5B.x=1 7C.x=2 3D.x=2 5#i n c l u d e i n t x=5;i n t f i i n(i n t a)(i n t c;c=x*a;r e t u r n (c);)v o i d m a i n()(i n t x=3;i n t a=4;x=x+f u n(a);c o u t H x=,x e n d l;参考答案:(1)B (2)C(3)B (4)D(5)B (6)C(7)C(8)B(9)C(1 0)C(1 1)D(1 2)C(1 3)C3.简答题(1)在C+中,函数定义的格式是怎样的?(2)什么是函数的声明?函数声明和函数定义有什么区别?是否必须要进行函数的声(3)什么是内联函数?引入内联函数的目的是什么?(4)什么是函数重载?函数重载的原则是什么?(5)函数的嵌套调用应注意什么?(6)函数的递归调用的步骤是什么?(7)什么是局部变量?什么是全局变量?(8)在C+中,如何使用系统函数?参考答案:(1)类型函数名(形参表)语句序列(2)函数原型又称函数声明,用来告诉编译器函数的名称、函数的返回类型、函数要接收的参数个数、参数类型和参数顺序,编译器用函数原型验证函数调用。在定义函数之前常用函数原型加以说明。函数原型通常位于程序代码的开始处。在函数原型说明中也可以不给出参数名,只给出类型。如果函数调用在函数定义之前则必须声明。若在后则可以不用声明。(3)内联函数是在函数名第一次出现时在函数名之前冠以关键字inline。在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换。使用内联函数,加快了程序的执行速度,节省程序运行时的开销。(4)函数重载是指同一个函数名可以对应着多个不同函数的实现。原则:函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码。确定函数时,编译器是通过函数的参数个数、参数类型和参数顺序来区分的。也就是说,进行函数重载时,要求同名函数参数个数不同、参数类型不同或参数顺序不同。否则,将无法确定是哪一个函数体。(5)在使用函数的嵌套调用时要注意函数的返回地址,在函数体执行完毕后,一 定 要返回调用该函数的主调函数,不能出现越级返回的情况。(6)第 阶段:递推。将原问题不断分解为新的子问题,逐渐从未知向已知递推,最终达到己知的条件,即递归结束的条件,这时递推阶段结束。第二阶段:回归。从已知条件出发,按照递推的逆过程,逐一求值回归,最后达到递归的开始处,结束回归阶段,完成递归调用。(7)在函数或者类内说明的变量是局部变量。全局变量是在函数和类外部定义的变量。(8)C+将所提供的系统函数的说明分别放在不同的头文件中,即.h 文件,在程序中使用系统函数时,要在程序开始处说明函数所在的头文件名。4.编程题(1)从键盘输入10个浮点数,求其和及其平均值。要求写出其和及平均值的函数。n(2)编写函数fu n,函数首部为double fun(int n),其功能是计算S 二工的值,并通过函数值返回主调函数。I(3)输入一个年份,判断是否是闰年。(4)写出一个函数,使从键盘输入的一个字符串反序存放,并在主函数中输入、输出该字符串。(5)编写一个函数,其功能是:输入全班学生的成绩,以负数结束输入,统计学生人数,作为函数值返回主调函数,并计算平均分,通过函数ave返回主调函数。参考答案:(1)void sa()float x,sum=0,ave=0;coutw”请输入10个符点数:”vVendl;for(int i=0;i10;i+)(cinx;sum=sum4-x;ave=sum/10;coutM 10 个符点数的和为:wsumvv;平均值为:aveendl;(2)double fun(int n)int sum=0,fac=l;fbr(int i=l;i=n;i-H-)fac=fac*i;sum=sum+fac;)retum(sum);(3)void leap(int year)(int flag;if(year%4=0)if(year%100=0)ifyear%400=0)flag=l;else flag=O;else flag=l;else flag=0;if(flag)coutwyearv年是闰年 Wendi;else coutyearn不年是闰年endl;)(4)#includevoid inverts()char ch;cinch;if(ch=Or)return;else inverts();coutch;void main()cout请输入字符串,输入0 结束:“Wendi;invertsQ;coutendl;)(5)#includeint total(float&ave)float score;float sum=0;int n=0;coutvv”请输入全班学生成绩,以负数结束 vvendl;cinscore;do(n=n+l;sum=sum+score;cinscore;while(score0);ave=sum/n;return n;)float ave()(float average;coutw”人数为:“wtotal(average)v Vendl;return average;void main()coutw”平均值为:aveO endl;第4章数组1.填空题(1)若定义i n t a 8 ;则a数 组 元 素 下 标 的 下 限 是,上限是。(2)若定义f l o a t b 3 4 ;则b数组中含有 个 类型的数组元素。(3)在C+中二维数组的存放顺序为。(4)要使一个数组a 5 中全部元素的值为0,可以定义为。(5)以下程序段为数组a中所有元素输入数据,请填空。v o i d m a i n()i n t i,a 5 ;f o r(i=0;i 5;i+)cin;(6)以下程序按2行3列输出二维数组,请填空。#i n c l u d e v o i d i n a i n()i n t b 2 3=l,2,3,4,5,6 ,i j;f b r(i=O;i+)f o r(j=O;;j+)c o u t b i U )(7)下列函数的功能是:将数组a中n个元素逆序存放,请填空。v o i d i n v e r t(i n t a .i n t n)(i n t i=0,j=n-l;w hi le()(i n t t;t=a i ;a j =t;i+;(8)已知整数数组b 5 =7,15,2,8,20 ,12,25,3 7,16,28 ,求数组中所有元素的最大值,请填空。#i n c lu d e v o i d m a i n()i n t b 2 5 =:i n t i,j,c,d,k=O;f o r(i=0;i k)c=i;d=j;)c o u t b c d =k e n d l;参考答案:(DO,7(2)12,f lo a t(3)按行优先顺序存放(4)i n t a 5 =0,0,0,0,0;或 i n t a 5 =0 :或 s t a t i c i n t a 5 ;(5)a i(6)i 2,j 3,c o u t e n d l;(7)i=j,a i =a j ,j(8)7,15,2,8,20 ,12,25,3 7,16,28 ,j 5,k=b i j 2.选择题(1)C+中引用数组元素时,其数组卜标的数据类型允许是()oA.整型表达式 B.整型常量C.整型常量或整型表达式 D.任何类型的表达式(2)下列对一维整型数组a的正确说明是()。A.i n t a(l 0);B.i n t n=10,a n ;C.i n t n;D.#d e f i n e SIZ E 10;c i n n;i n t a SIZ E ;i n t a n ;(3)下列数组说明和初始化正确的是()。A.i n t a 5 =0;B.i n t b 3 =l,2,3,4 ;C.f lo a t c =1,2,3 ;D.f lo a t d=5,3,6.0 ;(4)下列数组说明和初始化错误的是()。A.i n t a 2 3 =l,2,3,4,5,6;B.i n t b 3 =2,3,4,5 ;C.i n t c 3 2=l,2,3 ;D.f lo a t d 3 =5.3,6.0,6.8;(5)若有以下定义,则对a数组元素错误的引用是()。i n t a 5 =1,2,3,4,5 ;A.a 0 B.a 2 C.a a 4 -2 D.a 5(6)若有以下定义,则数组元素a 3 的 值 是()。i n t a 5 =1,2,3 ;A.0 B.1 C.2 D.3(7)若有以下定义,则对a数组元素正确的引用是()。float a2 3=1,2,3,4,5,6;A.alB.a03C.a22D.all(8)若有以下定义,则数组元素b22的 值 是(intb3=l,2,3,4,5,6,7;)oA.0B.3C.5D.6(9)下列对字符数组s初始化错误的是()oA.chars5=nabcM);C.char s5=n;B.char s5=*a,V,*0,);D.char s5=abcde;(10)对两个数组a和b进行初始化:char a=abcde;charb=cJdJe;则下列叙述正确的是(A.a与b完全相同C.a与b中都存放字符)oB.a与b长度相同D.a数组比b数组长度长(11)若有以下定义,则对字符串的操作错误的是()ochar s10=,program,t=HtestA.strcpy(s,t)C.strcat(s,t)(1 2)下列程序的运行结果是(B.coutstrlen(s);D.cint;)oA.0B.6C.7D.8#include int fun(char s)int i=0;while(si)i+;return i;void main()coutfun(abcdefg)endl;(13)下列程序的运行结果是()oA.ABC123B.123abcC.123ABCD.123ABCde#include#includc void main()char si 10=abcde,s210=123,s3=ABC;coutstrcat(s2,strcpy(s l,s3)endl;参考答案:(1)C(2)D(3)C(4)D(5)D(6)A(9)D(10)D(11)C(12)C(13)C(7)D(8)D3.编程题(1)定义一个整型的一维数组,并将各数组元素都赋值为该数组下标值的2 倍。(2)定义一个整型的二维数组,每个数组元素的赋值规则为:行下标值加上列下标值。(3)定义一个整型的二维数组,要求使用二重循环将每个数组元素都赋值为2。(4)统计输入字符串中数字,字母和其它字符的个数。(5)从键盘上任意输入15个数,找出其中的最大数及其位置。(6)从键盘上任意输入15个数,按照从大到小的顺序输出(7)从键盘上任意输入15个小写字母,变成大写字母后按反序输出。(8)Erarosthenes法 求 100以内的所有素数,按从小到大依次排列。所 谓 Erarosthenes法:1 不是素数,除去它;2 是素数,则它的倍数不是素数,去掉它们;3 是素数,则它的倍数不是素数,去掉它们。依次类推,直到所给定的数。(9)打印如下图形。*参考答案:(1)#include void main()(int a5;fbr(int i=0;i5;i+)ai=2*i;)(2)#include void main()int a510;fbr(int i=0;i5;i+)(fbr(intj=0;j10;j+)(c o u t a ij ;coutendl;)(3)#includevoid main()int a510;for(int i=0;i5;i+)fbr(intj=0j10;j+)aiU=2;coutaijcoutendl;(4)#include#includevoid main()char s20;int i=0;int digit=0,letters=0,other=0;coutvv”请输入字符串似0 结束:;cins;while(si!=W)if(si=0,&si=,a&si=,A,&si=,Z,)letters-H-;elseother+;i+;)coutvv”数字个数为:“vvdigitvvendl;cout”字符个数为:vvlettersvvendl;cout其他字符:odier vendl;)(5)#includevoid main()int a15;coutvv”请输入数值(n 15)”vvendl;int i,k,max;fbr(i=0;i15;i+)cinai;max=a0;fbr(i=O;imax)max