C++面向对象程序设计-教程_第1页
C++面向对象程序设计-教程_第2页
C++面向对象程序设计-教程_第3页
C++面向对象程序设计-教程_第4页
C++面向对象程序设计-教程_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《C++面向对象程序设计》

自学指导书

浙江师范大学信息科学与工程学院

朱建新编

目录

第一章C++语言概述.............................................4

【学习要点】.................................................4

【例题分析】.................................................4

【思考题】...................................................5

第二章基本数据类型运算符及表达式..............................6

【学习要点】.................................................6

【例题分析】.................................................6

【思考题】...................................................8

第三章控制结构.................................................8

【学习要点】.................................................8

【例题分析】.................................................9

【思考题】..................................................17

第四章数组....................................................20

【学习要点】................................................20

【例题分析】................................................21

【思考题】..................................................24

第五章函数与编译预处理........................................33

【学习要点】................................................33

【例题分析】................................................33

【思考题】..................................................40

第六章指针....................................................49

【学习要点】................................................49

【例题分析】................................................50

【思考题】..................................................58

第七章结构体与共用体..........................................60

【学习要点】................................................60

【例题分析】................................................60

【思考题】..................................................67

第八章类与对象................................................70

【学习要点】................................................70

【例题分析】................................................71

【思考题】..................................................77

第九章继承与派生类............................................80

【学习要点】................................................80

【例题分析】................................................80

【思考题】..................................................84

第十章运算符重载与虚函数......................................89

【学习要点】................................................89

【例题分析】................................................89

【思考题】..................................................99

第十一章文件与流类库.........................................100

【学习要点】...............................................100

【例题分析】..............................................100

【思考题】................................................105

第一章C++语言概述

本章主要介绍C+十的起源、发展历史及其特点;C+十程序的基本结构;

VisualC++6.0集成开发环境及上机操作过程。

【学习要点】

1.了解C++语言的特点。

2.理解C+十语言源程序的结构、书写格式和main()函数的作用。

3.熟悉VisualC++6.0集成开发环境。熟练掌握利用VisualC++6.0集成开

发环境开发、调试C+十控制台程序的步骤和基本操作。

【例题分析】

一、选择题

例1-1以下叙述中正确的是

A.C+十程序由main()函数组成

B.C+十程序由函数组成

C.C+十程序的执行从第一个函数开始

D.在C+十程序中,注释只能位于一条语句之后

解:对于C++程序应明确:

(1)程序由函数组成。一个可运行的C+十源程序可由一个且仅能由一个main

()函数加上其他的函数组成,其他函数可有可无。

(2)不管main()函数出现在什么位置,程序总是从main()函数开始执

行。

(3)注释的两种方法:一是用/*和*/把注释信息括起来;二是用〃,它表示//

之后到本行结束为注释内容。可以在程序任何位置进行注释。

正确答案:Bo

二、填空题

例1-2在下列程序的每行之后加上注释。

#includc"iostrcam.h"

voidmain()

(

cout<<"Hello!\n";

cout<<"WelcometoC++!\n";

}

解:注释如下:

#include"iostream.h"〃指示编译器在此处将文件iostream.h上中的代码嵌入木程

序。

voidmain()〃主函数,void表示main()函数没有返回值。

coutVV"Hello!\n";〃输出字符串"Hello!”到显示器上。

cout<<WelcometoC++!\n";〃输出字符串WelcometoC+

+!\n”。

例1-3C+十中函数的函数体由符号_开始,用符号_结束。

解:C+十中函数的函数体由符号“{”开始,用符号“}”结束。

三、编程题

例1-4编写一个程序,运行时提示输入•个数字,再把这个数字显示出来。

解:程序如下:

#include"iostream.h"

voidmain()

inti;

cout<<"请输入一个数字:";

cin»i;

cout«"你输入的数字是"v<i«endl;

【思考题】

一、选择题

1.C+十语言规定:在一个源程序中,main()函数的位置」

A.必须在最开始

B.必须在系统调用的库函数的后面

C.可以任意

D.必须在最后

2.以下正确的叙述是

A.C+十程序的每行中只能写一个语句

B.C++语言本身无输入、输出语句

C.在对一个C+十源程序进行编译的过程中,可发现注释中的拼写错误

D.在C+十程序中,main()函数必须位于程序的最前面

3.以下符号中能作为用户标识符的是

A._123B.voidC.structD.switch

4.C+十语言程序的基本单位是

A.程序行B.语句C.函数D.字符

二、填空题

5.一个可执行的C+十程序至少必须有--个—函数。

6.C+十源程序中注释的作用是

7.一个C++语句以—结束。_是C+十语句的组成部分。

8.在C+十语言中输入、输出操作是通过—来实现的。

9.在下列程序的每行之后力,上注释。

#include<iostream.h>

voidmain()

intnl,n2,sum;

cont<<"Emtertwonumbersnl,n2:";

cin>>nl>>n2;

suin=nl+n2;

cout<<"nl+nl="<<sum<<endl;

}

三、编程题

10.参照例题分析,编写一个C+十程序并上机运行,能输出以下信息:

Hello,C++!

11.编写一个C+十程序,输入任意三个数a,b,c,能输出其中的最大值。

第二章基本数据类型运算符及表达式

本章是C+十语言中需要熟记的内容最多的一章,对于数据类型、运算符、表

达式等内容既要熟记,更要灵活运用;特别要注意与自然语言明显不同的逗号运

算、自增自减等运算的特点。

【学习要点】

1.掌握常量与变量、整型数与实型数的概念。

2.掌握字符型数据与字符串型数据的概念以及二者的区别。

3.掌握各种类型的变量说明及其初始化。

4.掌握算术运算、逻辑运算、关系运算、赋值运算、逗号运算等概念。

5.掌握运算符的优先级、左结合和右结合规则以及目数的概念。

6.掌握表达式求值时类型的自动转换和强制类型转换。

7.掌握表达式的组成、表达式的优化。

8.掌握位运算和位运算符。

【例题分析】

・、选择题

例2—1下列不合法的变量名为一

A.studentB.-studentC._studentD.student()

解:根据变量命名要求,曾字母以英文字母或下划线开头。

正确答案:Bo

例2—2下列不合法的变量名为

A.t%udentB.astudentC.s_tudentD.studen()

解:根据变量命名要求,变量七组成只能由大小写字母、数字、下划线组成。

正确答案:Ao

例2—3下列不合法的变量名为—

A.lintB.D._lint

解:根据变量命名要求,系统关键字示能作为变量名。

正确答案:C«

例2—4当a=6,b=5时,逻辑表达式a<=7&&a+b>8的值为_

A.trueB.falseC.非0整型数D.0

解:根据题意和该逻辑表达式的运算结果。

正确答案:Co

例2-5设X,y,Z为整型数,下列各式中,运算结果与X=y=24的表达式相

同的是

A.x=(y=z=8,4X6)B.x=y=(z=8,4X6)

C.X=y=z=8.4X6D.x=(y=z=8),4X6

解:C++语言的赋值运算有别于其他高级语言,逗号运算又是其他高级语言所没有

的。

1.在赋值表达式中,可以有多个赋值运算符;计算顺序自右向左,运算优先

级低,仅高于远号运算符。

2.逗号既是分隔符,又是运算符,可以用一个逗号运算符或多个逗号运算得将

多个表达式连接成逗号表达式,计算顺序自左向右,并将最后一个表达式的值作为

整个逗号表达式的值,运算优先级最低;例:a=(2X2,4+6,20/4,6);结果

a=6»

正确答案:Bo

例2—6设i=6,k=0下列各式中,运算结果为k=7的表达式是

A.k=i+++kB.k=k+i++C.k=++i+kD.k=k+(十十i)

解:自增十十、自减一一运算符是C+十语言特有的。

1.运算符在变量的前面或后面,其运算结果是不同的。若十十或一一在变量前;则

先将变量的值加1(或减1后,再将变量的值参加运算;反之则先将变量的值参加

运算;再将变量的值加1(或减1)O

2.自增、自减运算符优先级高于算术运算符,A式i+++k,先计算i++,

再力。k,D式k=k+(++i),若去掉括号,则改变了运算顺序;变为k+十

后,

再十1。

正确答案;C和D。

二、填空题

例2—7表达式A+B+20的值为_

解:不同类型的数据混合运算时,系统可以自动进行类型转换,将表示范围小

的数据类型转换成另一操作数的相同类型后再参与运算,则转换为65+66+20=

15k

例2—8如果定义inte=8;doublef=6.4,g=8.例则表达式f+int(e/3*int

(f+g)/2)%4的值为

解:不同类型的数据混合运算时,可以使用强制类型转换符,强制将一种数据

类型转换成另一种数据类型后再参与运算,对于表达式,先求表达式的值,然后再

转换值的类型,本例的运算结果为9.4。若将式中e/3改为e/3.0

则运算结果为6.4,因为e/3的值是整型数,而e/3.0的值是实型数,改变了

括号内的运算结果,致使整个表达式的值发生变化。

例2—9若inti=65535,j=0xOOOx,k:k=i&j;,贝Ijk值为i值为

解:将10进制数65535和16进制数OOOaH在计算机内的二进制原型数值按位

与运算,结果为k=10,i为65535。

三、编程题

例2—10编写一个将华氏温度转换为摄氏温度的程序。转换公式为C=

(5.0/9)(F—32),要求输出华氏温度和摄氏温度的对应值。

解:程序如下:

#include<iostream.h>

voidmain()

doubleC,F;

cout<<”输入华氏温度值:“;

cin»F;

C=(5.0/9)*(F-32);

coutw哗氏温度为:“VVFVW对应的摄氏温度值是:“

<<C«endl«endl;

【思考题】

一、选择题

1.以下可作为正确变量名的是

A.classB.class1C.1classD.cl\ass

2以下可作为正确变量名的是。

A.caseB.-cdC.33D.33s

3.若a=15,b—3时,逻辑表达式a<=7&&a+b>8的值为

A.tureB.falseC.非0整型数D.0

4.若a和b为整型变量,语句b=(a=l+2aX3),a+5运行后,a

和b的结果为

A.9,8B.3,8C.3,9D.9,14

5.以下不正确的叙述是

A.在C+十程序中,PI和pi是不同的变量

B.在C+十程序中,逗号运算符的优先级最低

C.当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能

输入实型数值

D.若s、t为int数,设t=S>>2后,s的值不变

6.若inta;charb;floatc;doubled;则表达式a*b~~c+d值的数据类型为—。

A.intB.floatC.doubleD.char

7.已知字母A的ASCII码为十进制数65,D为字符型变量,则D='A'+'9'-'4'

的值—。

8.若a为16进制数,若想通过a&b运算使a的二进制数的高4位清零,低4位

不变;则b的16进制数是

9.编制程序,输入相应字母的ASCH码值,输出该字母。

10.用C+十描述下面命题:

(1)a小于b或大于c

(2)a和b中至少有—大于Co

(3)a和b中只有一个大于c。

(4)a和b中两个都大于Co

第三章控制结构

【学习要点】

1.掌握顺序结构的编程方法,这是程序设计的基础。

2.学会cin、cout实现输入/输出数据。

3.学会应用字符输入/输出函数。

4.掌握printf函数和scanf函数。

5.掌握条件语句的形式和使用.

6.掌握条件语句的嵌套。

7.掌握条件运算符的使用。

8.掌握switch语句的形式和使用。

9.掌握for,while,do一while三种循环语句。

10.掌握循环的嵌套。

11.掌握break,continue,goto语句.

【例题分析】

一、多项选择题

例3-1如有以下定义和输入语句,若要求aka2、cl>c2的值分别为

20、60、A、B,则下列数据输入方式中正确的是

intal,a2;charcl,c2;;

cin»al»cI»a2»c2;

A.20A1—160BB.20,A,60,BC.201—1A*—160B

D.20A60BE.20<CR>A<CR>60<CR>B

注:此处一为空格符,<CR>为回车键符,下文同。

解:C+十语言没有专门的输入/输出语句,其输入/输出可通过输入/输

出流来实现。cin不能将输入的空格赋给字符型变量,空格和回车键均作为输入

字符之间的分隔符;字符型变量只能容纳一个字符,整型数只能由数字组成;

逗号不能作为分隔符。

正确答案:A、C、D、Eo

例3-2设有语句floatPI=3.14;,若用科学表示法输出为3.140000e+000

则下列正确的表达式为_

A.cout<<PI<<endl;

B.cout.setf(ios::scientific,ios::floatfield);cout<PI<<n\nn;

C.printfC%12.10f\n”,PI);

D.printfC'%e\nn,PI);

解:C+十语言除用输出流输出数据外,还可用C语言的输入/输出函数,但需

包含stdio.h,其输出格式与C+十输出流格式不同:C+十中可用预定义的格式控制

函数定义输出格式,也可以用ios类的成员函数进行格式控制。若学用科学表示法输

出数据,必须用ios类成员函数setf设置状态标志。printf函数必须用e格式符才可

以输出科学表示法形式的数据。

正确答案:Do

二、填空题

例3・3以下程序的输出结果为

#include<iostream.h>

voidmain()

{

shorti;

i=-6;

cout<<noct="<<oct<<i<<"decH<<dec<i<<M,hex=n<<hex<

<i<endl:

解:i为short类型,占用2字节内存,而oct、dec、hex是C+十中预定义的格

式控制函数控制输入/输出数据的格式。答案为oct=177772,dec=-6,hex=

ffTao

例34以下程序的输出结果为

#include<iostream.h>

voidmain()

(

inti=66;

charc='A';

cout«ni=M«(char)i«H,c=M«dec«i«"\n\nn;

}

解:本程序采用了强制型转换符,将i转换为字符型数据输出,又用格式控制函数

将字符型数据转换成数值型数据输出。答案为i=B,C=66a

例3・5以下程序的输出结果为

#include<iostream.h>

voidmain()

{

inti=0,x=0,y=0;

do{

i++;

if(i%3!=0){x+=i;i-H-;}

y+=i++;

}while(i<5),

cout«Hx=n«x«ny=H«y«endl;

)

解:x=5y=7

例3-6以下程序的输出结果为

#include<iostream.h>

voidmain()

(

intx,y=10;

while(x=y-l){

y-=2;

if(y%3=0){

X-H-;continue;

}

elseif(y<4)break;

x-H-;

)

cout«nx=H«x«Hy=**«y«endl;

)

解:输出结果是:x=3y=2

例3-7以下程序的输出结果为

#include<iostream.h>

voidmain()

{inti,j,m;

fbr(i=l;i<4;i++)

{fbr(j=l;j<7;j4-+-)

{if(j==4)break;

m=i*j;

cout«i«M*"<<j«n="«m«"n;

}

cout«endl;

}

}

解:运行结果如下:

1X1=11X2=21X3=3

2X1=22X2=42X3=6

3X1=33X2=63X3=9

注意:当j的值为4时,结束的是内层循环,外层for循环继续执行。

例3・8以下程序的输出结果为

#include<iostream.h>

voidmain()

{int

for(i=

{ford=l;j<7;j++)

{ififj==4)continue;

m=i*j;

cout«i«"*"<<j«M=M«m«HM;

}

cout«endl;

}

)

解:运行结果如下:

1X1=11X2=21X3=31X5=51X6=6

2X1=22X2=42X3=62X5=102X6=12

3X1=33X2=63X3=93X5=153X6=18

注意:continue结束本次循环,即当j的值为4时,内层循环体的条件语句后面的部

分不执行,循环变量j自加,执行下•次内层循环。

例3—9输入一个自然数,输出其各因子的连乘形式。如输入12,输出12=12X2X

3的形式,请填空。

#include<iostream.h>

voidmain()

inti=2,n;

coutw”输入一个自然数:";

cin»n;

cout«n«"=ln;

do{

i/n%i==0){

coutw'*'vvi;

1:

elsei++;

}while(2);

}

解:①尸!!/i;②n!=l

三、编程题

例3—10编程实现如下所示的函数关系式。已知X,求y的值。

-X(x<1)

y=yx+5(1WxWlO)

展-5(x210)

解:该函数实质是一个分段函数,即根据x的不同取值范围,山相应的函数式求y

的值。

(1)使用缺省else的if语句形式

#inc1ude<iostream.h>

voidmain()

{

floatx,y;

cout«nEnteranumber:";

cin»x;

if(x<l)y=x;

iRx>=1&&x<10)y=x+5;

if(x>=10)y=x-5;

cout«ny="«y«endl;

(2)用条件语句的嵌套形式实现

#inc1ude<iostream.h>

voidmain()

{

floatx,y;

cout«nEnteranumber:M;

cin»x;

if(x<l)y=x;

elseif(x<10)y=x+5;

elsey=x-5;

cout«”y="«y«endl;

}

例3—11根据输入的年月,求出该年该月的天数。

解:本题要根据月份来讨论天数,如是大月(1,3,5,7,8,10,12)则天数

是31,如是小月(4,6,9,11)则天数是30;如是2月;要看该年是否闰年,是

闰年则为29天,非闰年则为28天,显然本程序采用多分支选择结构。具体程序如

下:

#include<iostream.h>

#inc1ude<stdlib.h>

voidmain()

{

intyear,month,days;

cout«"Entertheyear:";

cin»year;

cout«nEnterthemonth:";

cin»month;

switch(inonth)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:days=31;break;

case4:

case6:

case9:

case11:days=30;break;

case2:if{(year%4=0&&year%100!=0)||year%400==0)days=29;

elsedays=28;break;

dcfault:cout«nInputerror!n«endl;exit(0);

}

cout«nyear:"«year«endl

«"month:n«month«endl

«ndays:M«days«endl;

}

例3-12求下列分数序列的前15项之和。

2/1,3/2,5/3,8/5,13/8,21/13,...

解:根据题意可采用累加方法,为此需定义一个存放累加结果的变量sum,累加

的过程自然是通过循环结构来实现,循环变量i的取值范围是1到15,且循环变量

表示当前的数列项数;在循环体内不仅要计算数列第i项的值,还要计算前i项的累

加和。数列的规律:从第2项开始;每一项的分母是前一项的分子,而分于是前一

项的分子分母之和,即第i—1项为a/b,则当i>l时,第i项为(a+b)/a。程序

如下:

(1)用while语句实现。

#include<iostream.h>

voidmain()

{floatsum,t,a,b;

inti;

a=2;b=l;i=2)t=a/b;sum=t;

while(i<=5)

{a=a+b;〃求第i项的分子

b=a-b;〃求第i项的分母

t=a/h;〃求第i项的值

sum+=t;〃求第i项的和

i++;

}

cout«nsum=M«sum«endl;

)

(2)用for语句实现.

#include<iostream.h>

voidmain()

{floatsum,t,a,b;

inti,

a=b=1.0,sum=0.0;

fbr(i=l;i<=15;i++)

{a=a+b;〃求第i项的分子

b=a-b,;〃求第i项的分母

t=a/b;//求第i项的值

sum+=t;〃求第i项的和

}

cout«"sum="«sum«endl;

)

(3)用do-while语句实现

#include<iostream.h>

voidmain()

{floatsum,t,a,b;

inti=l,

a=b=1.0;sum=0;

do

{a=a+b;//求第i项的分子

b=a-b;〃求第i项的分母

t=a/b;〃求第i项的值

sum+=t;//求第i项的和

}while(++i<=15);

cout«"sum="«sum«endl;

}

例3・13正整数n从键盘输人,计算5n的值。

解:计算5n可用循环语句实现,本例仅以while语句实现。

#include<iostream.h>

voidmain()

(

inti=l,n;

floatresuIt=1.0;

coutw”输入n:n;

cin»n;

if(n){

while(i<=n){

result*=5.0;

i++;

}

cout«"结果是:"«result«'\n';

)

}

例3-141-1/2+1/3-1/4H------Fl/99-1/100的值。

解:本题仅以fbr语句实现。

#include<iostreain.h>

voidmain()

floatsum=0.0,s=l.0;

fbr(inti=l;i<=100;i++){

sum+=s/i;

s=-s,

)

coutvv”结果是:^^«sum«^n^;

)

例3-15输入一行字符,将其中的两种字符和'+'显示出来,而对其他

字符不显示,同时统计出其他字符的个数。

解:#include<iostream.h>

#include<stdio.h>

voidmain()

{

charch;

inti=0;

while((ch=getchar())!){

if(ch!='C&&ch!='+'){

i++;

continue;

}

cout«ch;

)

coutvv”其他字符的个数为:“vvivw;

}

例3-16从键盘输入某班若干名学生一门课程的成绩,编程找出最高分和最低分,

并统计全班平均成绩。

解:要求程序具有灵活性,程序中参加统计的学生人数应随具体情况而定,不应

固定,若以输入负数作为统计结束条件,则程序如下:

#include<iostream.h>

voidmain()

(

floatscore;max;min;sum=0.0;

intnum=0;

coutw”输入一个成绩及

cin»score;

max=min=score;

while(score>=0){

iftscore>max)max=score;

if(score<min)min=score;

sum+=score;

num++;

coutw”输入一个成绩!

cin»score;

}

ififnum){

coutvv"共统计"vvnumvv"人"vvendl;

coutvv”最高分是“vvmaxvvendl;

coutw"最低分是"wminvVendl;

coutvv"平均成绩是"V<sum/num«endl;

}

elsecout<<"无输入!"《endl;

}

例3—17从键盘不断读入字母,如字母为元音字母,则输出其相应的大写字母,否

则结束程序

解:#include<iostream.h>

voidmain()

|

charch;

intquit=O;

do{

cout«H\n输入一个字母:";

cin»ch;

switch(ch){

caseR:coutvvA;break;

case'e':coutvv'E';break;

caseT:cout«T;break;

case'o':coutvv'O';break;

case'u':coutwU;break;

default:quit=l;break;

)

}while(iquit);

}

例3—18模拟计算器进行加、减、乘、除数学运算。要求当输入两个操作数和

运算符后,输出运算结果。一次运算结束后询问用户是否继续,用户根据需要可继

续进行运算。

解:

#include<iostream.h>

voidmain()

(

charop;

charquit=y;

floatdl;d2;

while(quit==y||quit=='Y'){

coutw”输入:第一个操作数;运算符和第二个操作数"vvendl;

cin»d1»op»d2;

switch(op){

casecout«dl«,+'«d2«'=,«(dl+d2)«endl;

break;

casecout«dl«'-1«d2«"="«(dl-d2)«endl;

break;

casecout«dl«***«d2«'=<«(dl*d2)«endl;

break;

case71:if(d2==0.0){

coutw”输入错误!"vvendl;

quit=0;

else

cout«d1«'/'«d2«,=,«(dl/d2)<rend1;

break;

defhuit:cout〈v”运算符错误"wendl;

break;

}

coutvv”是否继续(y)?”;

cin»quit;

【思考题】

一.选择题

1.以下程序的输出结果是

#include<iostream.h>

voidmain()

{

intw=4,x=3,y=2,z=1,result;

result=w<x?w:z<y?z:x;

cout«result«endl;

)

A.1B.2.C3.D.4

2.若所以变量均已正确说明,下列程序运行后X的值是

a=b=c=0;x=35;

i氏!a)x-;

elseif(b)x=2;

if(c)x=3;

elsex=4;

cout«x«endl;

A.34B.4C.35D.3

3.若已有说明语句intx,y;则不能实现以下函数关系的程序段是

「-1(x<0)

y=y0(x=0)

.1(x>l)

A.if(x<0)y=-l;B.y=-l;

elseif(x==0)y=0;if(x!=0)

elsey=l;if(x>O)y=l;

elsey=0;

C.y=0;D.if(x>=0)

if(x>=0)if(x>0)y=l;

{if(x>0)y=l;}elsey=0;

elsey=-l;elsey="l;

4.设有说明语句inta=l,b=0;则执行以下语句后输出为

switch(a)

case1:

switch(b)

{

case0:cout«H**O**n;break;

case1:cout«:**1**;break;

}

case2:

cout«n**2**n;break;

}

A**o**B**o****2**c**o****]****2**D有语法错误

5.设有以下程序段,则

intx=O;s=O;

while(!x!=0)s+=++x;

cout«s;

A.运行程序段后输出0子B.运行程序段后输出1

C.程序段中的控制表达式是非法D.程序段执行无限次

6.以下程序段中,能正确计算10!的是

A.do{i=l;s=l;B.do(i=l;s=0;

s=s*i;s=s*i;

i++;i++;

}while(i<=10);}while(i<=10);

C.i=l;s=l;D.i=l;s=0;

do{s=s*i;do{s=s*i;

i++;i++;

}while(i<=10);}while(i<=10);

7.下面程序的功能是计算正整数2345的各位数字的平方和。请选择填空。

#include<iostream.h>

voidmain()

{intn,sum=0;

n=2345;

do

{sum=sum+______1______;

n=2;

}while(n);

cout«"sum="«sum«endl;

}

①A.n%10B.(n%10)*(n%10)C.n/10D.(n/10)*(n/10)

②A.n/1000B.n/100C.n/10D.n%10

8.等比数例的第1项a=l,公比q=2F面程序的功能是求满足前n项和小于100时

的最大n,请选择填空。

#includeniostream.hM

voidmain()

{inta,q,n,sum;

a=l;q=2;n=sum=0;

do

______1______

++n;a=a*q;

}while(sum<100);

―2;

cout«n;

}

①A

sum++B.sum+=aC.sum*=aD.a+=sum

②A

n=n-2B.n=nC.n++D.n-=l

二、填空题

9.下面程序的功能是计算100至1000之间有多少个数,其各位数字之和是5。

#include<iostream.h>

voidmain()

{inti,s,k,count=0,

fbr(i=IOO;i<=lOOO;i++)

{s=0,k=i,

while()

{s=s+;

______________________9

ififs!=5);

else

count-H-;

}

cout«count;

}

10.计算两个整数的最大公因子。

#include<iostream.h>

voidmain()

{inttemp,num,den,a,b;

cin»a»b,

num=a;den=b,

while(den)

{temp=;

num=den;

den=temp;

}

cout««endl;

}

11.阅读理解指出下面程序的功能。

#include<iostream.h>

voidmain()

(

constintmagic=17;

intguess;

cout«nguessthemagicnumber:";

cin»guess;

if(guess==magic)

cout«"Right!"«endl;

cout«"Themagicnumberis:"«magic;

}

else

(

cout«"Wrong!"«endl;

if(guess>magic)cout«"Toohigh"«endl;

elsecout«"Toolow"«endl;

}

)

三、编程题

12.修改例3-11根据所输入的年份,求出该年天数。

13.试编程序输入三角形三边a,b,c,判断是否能构成一个三角形若能,则求该三

角形面积。

14.每个苹果0.8元第一天买2个苹果从第二天开始,每天买前•天的2倍直至

购买的苹果个数不超过100的最大值、编写程序,求每天花多少钱?

15.找出1—99之间的全部同构数。同构数是这样一组数:它出现在其平方数的右

边。如5是25右边的数,25是625右边的数,故5和25都是同构数。

16.求一个整数任意次方的最后三位数。即求x丫的最后三位数要求x,y从键盘输

入。

17.将数列1、2、5、10、21、42、85、170、341、682、...延长到第50项

18.计算l!+2!+3!+...+n!前10项之和。

19.输入一行由英文字母、数字、符号等组成的字符,将其中的大写和小写字母的

个数分别统计出来。

20.买现摄氏温度与华氏温度的转换,并按L0间隔输出对照表,格式如下:

摄氏温度华氏温度

0.032.0

1.033.8

21.求整数100-200间能被3或13整除的所有整数。

22.读入10个学生的个人信息的学号和成绩,输出所有学生的学号、成绩,同时并根

据分数与等级的对应关系,输出每一个学生相应的成绩等级。

成绩:100〜9089〜8079〜7069-6059-0

等级:优良中及格差

第四章数组

【学习要点】

1.掌握一维和二维数组的定义和数组元素的引用方法,了解其存储结构。

2.掌握一维和二维数组初始化方法。

3.掌握有关一维和二维数组的基本算法。

4.掌握字符数组的定义、其元素的引用方法和字符数组的初始化方法。

5.掌握C++提供的对字符串进行处理的基本函数.

【例题分析】

一、选择题

例4-1以下合法的数组定义是。

A.inta[]={"A","B","C"};

B.inia[5]={0,l,2,3,4,5};

C.nta={'A','B','C'};

D.inta[]={0,1,2,3,4,5};

解:根据数组定义和初始化情况,数组类型与所赋数据的类型应一致,指定的

数组长度应大于或等于花括弧中的数据个数,对数组长度可省略。

正确答案:Do

例4—2设有定义语句inta[2][4]]:则以下叙述不正确的是

A.a数组可以看成是由a[0],a[l]两个元素组成的一维数组

B.a[0]代表一个地址常量

C.元素a[0]是由4个整型元素组成的一维数组

D.可用a[0]=5;的形式给数组元素赋值

解:C++对二维数组的处理是将其看作•个特殊的•维数组,即这个数组中每

个元素又是一个一线数组。所以二维数组a可认为是由两个元素a[0]oa[l]组成

的,维数组,而数组元素a[0]和a[l]又是由4个int型元素组成的一维数组。

C+十规定了数组名代表地址常量,其值是不可改变的,故赋值语句a[0]=5:是

非法的。

正确答案:Do

例4—3若有说明4ta[3][4];,则对a数组元素的非法引用是_。

A.a[0][2*l]B.a[0][4]C.a[4-2][0]D.a[l][3]

解:引用二维数组元素的格式为:数组名[下标表达式1][下标表达式2],而下

标表达式可以是常量、变量,但其值必须是确定的整数同在该数组的定义范围之

内。

正确答案;B»

例4-4若有以下定义和语句,则输出结果是

chara,s[10],s="abcd";a=s;cout«s;

A.abedB.aC.abed———7L_JD.编译出错

解:字符数组的赋值,不能通过赋值语句实现,而是通过初始化或Strepy函数

来实现。

正确答案:D,

例4-5能判断字符串si是否大于字符串s2的是

A.if(sl>s2)B.if(strcmp(sl,s2))

C.if(strcmp(sl,s2)>0)D.sl>s2

解:两个字符串比较必须使用字符串比较函数stremP(字符串1,字符串

2)。比较的结果:相等时返回以0;大于时返回正整数;小于时返回负整数。

正确答案:C。

二、填空题

例4-6若有定义inta[3][4]={{1,2},{0},{4,6,8,10}),,则初始化后a[1]

[2]得到的初值是对⑵⑴得到的初值是

解:在定义的同时对数组元素进行初始化,可以对所有元素赋初值,也可只对

部分元素赋初值;其余元素为0。根据数组中元素排列的顺序以行为单位进行存放,

定义式右边的数据是以{}作为行元素进行组织的。故a[1][2]得到的初值是

0,a[2][1]得到的初值是6。

例4-7语句coutvvstrlen("\t\\\n\、065\08AW")v<'\n,;的输出结果_。

解:按照C+十中转义字符的规定,在字符串"\t\\\n\,\065\08AW"中,含有\t、\\、

\n、\\\065转义字符,分别表示单个字符;\0也是转义字符,是宇符串结束标志,

系统认为字符串到此结束,不计其后的8、A、Wo

正确答案:5。

注意:若将8改为7,而\07却是一个字符,加上A、W,此字符串的长度是

8。

例4—8以下程序的输出结果是

#include"iostream.h"

#include"string.h"

voidmain()

(

charstr[50]="xyz\pl[20]="abcdn,p2[]="ABCDM;

strcpy(str+2,strcat(pl+2,p2+l));

cout«str«^';

)

解:由于字符数组名str、pl、pZ表示地址,同理表达式str+2、pl+2、p2+l

的值也是地址,str+2表示字符串“xyz”中字符z的地址,pl+2表示字符串

“abed”中c的地址,p2+I表示字符串"ABCD"中字符B的地址,分别代表的字符

串为“z"、"cd"、"BCD”。调用函数strcat(pl+2,p2+l)得到字符串

“cdBCD",调用strcpy()后,将刚才“cdBCD”拷贝到str中以'z'为起始地址

的存储单元中,因此覆盖了str中从N开始的存储单元中的数

据,

正确答案:xycdBCDo

三、编程题

例4-9先定义一个含有30个整型元素的数组,依次赋予从2开始的偶数,

然后将按顺序每五个数的平均值放在另一个数组中,并要求按每行3个数输出结

果。

解:根据题意,可定义一维整型数组a[30]用于存放初始数据和数组b[6]用于

存放平均值,临时变量sum用来存放5个元素之和。以i(初值为0,终值为29)作

为循环变量,用for循环通过aLi]=2*i+2给数组a赋值;以i作为循环变量,表

达式i%5==0将a的30个元素

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论