C++若干复习要点.docx

上传人:b****7 文档编号:23557702 上传时间:2023-05-18 格式:DOCX 页数:14 大小:26.78KB
下载 相关 举报
C++若干复习要点.docx_第1页
第1页 / 共14页
C++若干复习要点.docx_第2页
第2页 / 共14页
C++若干复习要点.docx_第3页
第3页 / 共14页
C++若干复习要点.docx_第4页
第4页 / 共14页
C++若干复习要点.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C++若干复习要点.docx

《C++若干复习要点.docx》由会员分享,可在线阅读,更多相关《C++若干复习要点.docx(14页珍藏版)》请在冰豆网上搜索。

C++若干复习要点.docx

C++若干复习要点

C++语言的若干重要问题及其实例解释

朱从旭老师最后一节课的讲稿(2010年6月13日)

教学邮箱:

teacher601.z@/密码:

student

C++课考试范围:

第1-6章为主;第7-9章有12分左右;第10章文件部分(5分)

考试题型:

(见考试网站

单选题、填空题、程序阅读题、程序语句填空题、1道编程题。

考试时间、地点:

2010-06-26(17周星期六)中午1:

20~3:

00,综合实验楼404机房

(班号097162_015所有选课学生)。

●关于输出格式问题

cout.setf(ios:

:

fixed);等价于:

cout<

:

fixed);

――设置浮点数输出格式为定点方式。

cout.setf(ios:

:

scientific);等价于:

cout<

:

scientific);

――设置浮点数输出格式为科学计数法方式。

cout.precision(n);等价于:

cout<

――单独使用时是设置浮点数输出的有效数字位数为n。

cout.precision(n);/cout<

cout.setf(ios:

:

fixed);/cout<

:

fixed);

cout.setf(ios:

:

scientific);/cout<

:

scientific);

――precision(n)的含义是设置浮点数输出的小数点后数字位数为n。

例:

precision(n)单独使用,表示输出数据取n位有效数字.

doublex=123.12544;cout<<"x="<

//不使用格式控制,则按浮点数默认输出形式输出。

浮点数默认输出6位有效数字,故输出结果为:

123.125

cout.precision

(2);//设置输出数据保留2位有效数字

cout<

1.2e+002

cout.precision(5);//设置输出数据保留5位有效数字

cout<

123.13

cout.precision(7);//设置输出数据保留7位有效数字

cout<

123.1254

例:

precision(n)与格式控制符配合使用,表示输出数保留n位小数。

doublex=123.12544;

cout.setf(ios:

:

fixed);//设置以“定点方式”输出

cout.precision

(2);//输出数据保留2位小数

cout<

123.13

cout.precision(3);//输出数据保留3位小数

cout<

123.125

cout.precision(6);//输出数据保留6位小数

cout<

123.125440

doublex=123.12544;

cout.setf(ios:

:

scientific);//设置以“科学计数法”方式输出

cout.precision

(2);//输出数据保留2位小数

cout<

1.23e+002

cout.precision(3);//输出数据保留3位小数

cout<

1.231e+002

cout.precision(6);//输出数据保留6位小数

cout<

1.231254e+002

 

●关于x++,++x或x--,--x的表达式值和变量终值问题

(1)自增(自减)算符在变量后,表达式的值取变量的原值计算;自增(自减)算符在变量前,表达式的值取变量的终值(增减1后)计算。

(2)无论自增(自减)算符在变量前或在变量后,变量的终值一样。

例:

x++,++x;x--,--x的使用。

#include

voidmain(void)

{intn=0,m;

charc='A',d;

doublex=4.25,y;

m=n++;d=++c;y=x--;

cout<<"m="<

cout<<"d="<

cout<<"y="<

cout<<"n="<

cout<<"c="<

cout<<"x="<

若开始n=3;则表达式(n++)+(n++)+(n++)的值是9,表达式执行后n的终值为6.

●关于表达式求值、数据类型的问题(算符优先级、结合方向)

例:

表达式18/4*sqrt(4.0)/8值的数据类型是(double),其值是(1.0)。

解:

(1)因为表达式中精度最高的参数是4.0(为浮点数),而表达式的结果是取精度最高的参数的类型;另外,当结果是浮点数时,C++自动将浮点数转化为double类型(双精度实数类型)。

(2)因18/4参与运算的两数均为整数型,故结果也为整数(即18/4的结果为4,并非4.5);sqrt(4.0)为4.0开平方,即为2.0;于是18/4*sqrt(4.0)的值为4×2.0==8.0;故18/4*sqrt(4.0)/8的值为8.0/8==1.0。

例:

若有定义“inta=7;floatx=2.5,y=4.7;”,则表达式x+a%3*(int)(x+y)%2/4的值是(2.5或2.500000)。

解:

本题涉及的算符优先级如下(从先到后):

()(int)*、/、%同为2级(见主教材p27表)+。

优先级属同一级的运算按自左到右顺序运算即可。

所以:

x+a%3*(int)(x+y)%2/4x+a%3*(int)(7.2)%2/4x+a%3*7%2/4x+1*7%2/4x+7%2/4x+1/4x+0x2.5。

即结果绝对值是2.5(直接输出是2.5);如果按定点格式(fixed)输出,浮点数的输出默认保留6位小数,则为2.500000。

例:

若有定义“intm=5,y=2;”,则执行表达式y+=y-=m*=y后的y值是(-16)。

解:

本题涉及复合赋值运算符(+=,-=,*=),它们和赋值运算符的结合性一样,都是右结合性(自右往左)计算。

计算步骤阐述如下(每步应该先计算的那部分加了下划线突出):

y+=y-=m*=y(m*=y即为m=m*y,此部分执行后,m为10)

y+=y-=10(y-=10即为y=y-10,此部分执行后,y为-8)

y+=-8即y=y+(-8)(注意此时的老y即右边的y已经是-8,故得到新y即左边的y为-16)

y=-16

●关于if语句和循环语句的条件表达、循环次数的确定

if(条件)语句;

for(表达式1;条件;表达式3)语句;

下列意思等价:

“条件”成立,“条件”为真,“条件”为非0值。

例:

下面for语句的循环次数是( 6)次:

  for(inti=0,x=0;!

x&&i<=5;i++);

解:

循环条件为“!

x&&i<=5”的值,当它为“真”(非0数)时执行循环体语句。

按照关系运算符、逻辑运算符的优先级,该表达式相当于“(!

x)&&(i<=5)”。

即要求(!

x)为非0(即x为0,这部分始终成立),同时要求“i<=5”成立,才执行循环体语句(本题的循环体语句为空语句:

;)。

当执行6次循环后,i值将变为6,这时才使得条件“i<=5”首次不成立(终止循环);故循环次数为6。

 

●一个指向任何数据类型的指针变量占4字节存储空间

例:

写出下面程序输出结果:

#include

#include

voidmain(void)

{charc[8],*p[8];//1个字符类型数据占1字节,数组c有8个元素

char*p1;int*p2;

float*p3;double*p4;

cout<

cout<

}

答:

8,32(p是指针数组,有8个元素,相当于有8个指向字符型的指针变量)

4,4,4,4

●字符串的长度等于其有效字符个数,字符串存储时所占字节数等于“字符串的长度+1”。

注意转义字符的表示。

转义字符是一个特殊字符,用‘\’开头,有:

‘\n’、‘\t’、‘\v’、‘\b’、‘\r’、‘\f’:

换行、横向跳格、纵向跳格、退格、回车、换页。

‘\\’:

反斜杠字符本身。

‘\’’:

单引号字符本身。

‘\ddd’:

以1~3位8进制数ddd为ASCII码的对应字符。

‘\xhh’:

以1~2位16进制数hh为ASCII码的对应字符。

例如:

已知字符’A’的ASCII码是十进制值65,则

‘\101’即表示字符’A’(因为八进制数101等于十进制数65);

同理:

‘\x41’也表示字符’A’(因为十六进制数41等于十进制数65)。

又如:

字符串“LineOne\x0aLineTwo\12”的长度为(16)。

解释:

因为‘\x0a’、‘\12’各代表1个转义字符,故本字符串中共有2个转义字符,以及14个普通字符,故共有16个字符。

●程序阅读题举例

例:

下列程序运行后输出的结果是(36)。

#include

usingnamespacestd;

floatcacl(float,float);

voidmain()

{floatx;floaty;

x=4;y=3;

y=cacl(y,x);//相当于y=cacl(3,4);

cout<

}

floatcacl(floatx,floaty)//形参x得到3,形参y得到4

{return(2*x+3*y)*2;}

例:

写出下列程序的运行结果。

#include

#include

usingnamespacestd;

chara='A';intb='B';

答案为:

A,X

B,X

AAAaa

voidsub()

{charb='X';

cout<

a++;b++;

}

voidmain()

{intk;

for(k=1;k<=2;k++)sub();}

●程序语句填空题举例

这种题目一般先会给出一段文字描述程序的主要功能是什么,要充分利用这段描述文字来帮助你整体理解程序;然后理解程序的算法,再结合空白地方上下文的意思推出该处的语句。

必须理解程序算法才能判断所缺语句应该承担的功能(类似英语的完型填空)。

例:

本程序打印下列图案所示的数字金字塔到计算机屏幕:

设最下面一行左端无空格输出,金字塔的行数由参数n决定。

1

121

12321

1234321

123454321

#include

usingnamespacestd;

voidgold_tawer(intn)

{

inti,j;

for(i=1;i<=①;i++)//①n,打印n行

{

for(j=1;j<=n-i;j++)cout<<'';//打印每行开头的空格

for(j=1;j<=②;j++)cout<

for(j=i-1;j>③;j--)cout<

cout<<'\n';//光标换行

}

}

voidmain()

{intn;

cout<<"pleaseinputn:

\n";

cin>>n;

gold_tawer(n);

}

解释:

外循环(对i的循环)表示对行的循环,题目说打印的行数由形式参数n决定,故第①空白处应该填n。

外循环中嵌套的三个内循环(并列的三个对j的循环)分别打印同一个第i行的开头空格、中位数以左的数(含中位数)、中位数后面的数。

据题意说最下面一行左端无空格输出,故第i行的开头空格数应该是n-i个,这是第1个内循环的次数(已给出);第i行中位数及其左边的数应该依次是1,2,..,i共i个,这是第2个内循环的次数(所以空白②处应该填i);第i行中位数后面的数应该依次是i-1,i-2,..,1循环变量j从初值i-1开始,逐步递减,只要j>0就要执行它的循环体语句cout<

 

例:

给二维数组a赋值为下列结果,程序关键代码语句填空。

答案:

①i==j||j==0

②j-i+1

③a[i-1][j]+a[i-1][j-1]

123456

112345

121234

133123

146412

15101051

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

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

{if(①)a[i][j]=1;//注意i==j不能写成i=j,

//①对角线上的元素满足条件i==j,最开头那一列元素满足j==0

elseif(i

elsea[i][j]=③;//对角线下方元素i>j

cout<

}

cout<

}

●编程题:

熟悉常用算法(限定为下列9类算法)

(1)累加

例:

求指定区间[N,M]之间偶数之和,写函数(N,M为形参)。

解:

longf(IntN,IntM)

{inti;//i表示区间所有整数,做循环变量

longs;//s存结果,与函数值同类型long

s=0;//存放累加和的变量应初始化为0

for(i=N;i<=M;i++)

if(i%2==0)s=s+i;

returns;

}

(2)计数(类似于累加)

例:

求指定区间[N,M]之间有多少自然数满足条件:

能被5整除但不能被7整除,写函数(N,M为形参),结果由函数值返回。

解:

longf(intN,intM)

{inti;//i表示区间所有整数,做循环变量

longn;//n存结果,与函数值同类型long

n=0;//存放计数的变量应初始化为0

for(i=N;i<=M;i++)

if(i%5==0&&i%7!

=0)n=n+1;//n=n+1亦可n++

returnn;

}

(3)连乘

例:

求具有N个元素的数组a中偶数下标元素的乘积,写函数(N,a[]为形参),结果由函数值返回。

解:

longf(intN,inta[])

{inti;//i表示所有元素下标,做循环变量

longs;//s存结果,与函数值同类型long

s=1;//存放连乘的变量应初始化为1

for(i=0;i

if(i%2==0)s=s*a[i];

returnn;

}

(4)最大、最小值问题

例:

对给定的一维数组a及其元素个数n两个参数,找出数组中的最小元素及其下标,最小值由全局变量minnum存储,对应元素下标由函数值返回。

如果a中有多个并列最小的元素,以第一次出现的元素为准。

longminnum;//全局变量minnum定义在函数外

intf(longa[],intn)

{inti,minI;

minnum=a[0];

for(i=1;i

if(a[i]

returnminI;}

(5)判断指定数N是否为素数或某种特殊数

例:

对给定的n位正整数N(假定数的位数n不超过5位),判断N是否为“回文数”,回文数是指正读和反读都一样的正整数,如34143就是一个4位的回文数。

如果N是回文数,则函数返回值为1;否则,函数返回值为0。

intf(intn,intN)

{inti,M,a[5];

M=N;

for(i=0;i

{a[i]=M%10;//第i位数字存于a[i]中,最低位i=0

M=M/10;//老M去掉第i位数字后,剩余数位构成新M

}

//以下循环求出N的反序数,结果存放在M中

M=0;

for(i=0;i

M=M*10+a[i];

//以下判断N的反序数M是否与N相等

if(M==N)return1;

elsereturn0;

}

(6)查找问题

例:

给定一维数组a及某个指定数x,找出数组a中元素值等于x的元素个数,以及值为x且下标最小的那个元素的下标。

下标最小的那个元素的下标在函数中输出;而元素值等于x的元素个数作为函数值返回。

intf(longa[],intn,longx)//n是数组a的元素个数

{inti,minI,s;

s=0;//s计数(等级找到等于x数的个数)

minI=-1;//minI存放找到的最小下标

for(i=1;i

if(a[i]==x)

s++;

for(i=1;i

if(a[i]==x&&minI<0)

minI=i;

cout<<"minI="<

returns;

}

(7)求二元一次方程整数解问题(如鸡兔共笼)

例:

本题自定义函数f()的功能是:

求满足下列二元一次方程组的正整数解并输出所有的正整数解。

x+y=M,1.5x+5.5y=N。

其中,M和N是将给定的两个确定参数。

voidf(intM,intN)

{intx,y;

for(x=1;x<=M-1;x++)

{y=M-x;

if(1.5*x+5.5*y==N)cout<

}

}

(8)给定数组a及其元素个数,将a的元素反序存放

例:

给定数组x及其元素个数n,将数组x的元素反序存放。

反序的操作是将第1个位置的元素与倒数第1个位置的元素交换,将第2个位置的元素与倒数第2个位置的元素交换,…按这个规律做下去,交换的元素组数与元素总数n有关。

voidf(intx[],intn)

{inti,j,t;

for(i=0,j=n-1;i<=n/2-1;i++,j--)

{t=x[i];

x[i]=x[j];

x[j]=t;

}

}

(9)打印某种有规律的简单图案

例:

编写一个自定义函数f(),其功能是:

对给定的正整数N(N<10),生成一个N行的字符图案。

如当N=5时,图案如本题图所示。

#include

usingnamespacestd;

voidf(longN)

{inti,j;

for(i=0;i

{for(j=0;j

for(j=0;j<2*i+1;j++)cout<<'k';

cout<

}

return;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1