信息学奥赛校本教材_第1页
信息学奥赛校本教材_第2页
信息学奥赛校本教材_第3页
信息学奥赛校本教材_第4页
信息学奥赛校本教材_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

校本课程

算法与编程C++

目录

C++语言入门(平台安装介绍基本功能)................3

C++语言简介.........................................4

C++语言程序结构....................................6

赋值语句............................................8

运算符和表达式.....................................10

常量和变量.........................................12

标准数据类型........................................14

数据输入输出........................................16

顺序结构实例........................................18

概述...............................................20

if选择结构.........................................22

switch语句.........................................24

程序的控制结构练习与总结...........................26

循环的控制结构.....................................28

for语句............................................30

while语句..........................................32

do-while语句.......................................36

C++小结试题........................................38

《算法与编程》校本课程纲要

学科:算法与编程

课程总课

《算法与编程》

名称时数

课程授课

课程辅导类初中学生学分

类型对象

课以《课程标准》为指导,结合我校实际,充分挖掘学生的个性潜能,

程促进学生个性全面、和谐地发展,为学生的终身发展奠定基础。学

目会交流,在合作中学习;学会探究,培养学生的创新意识;培养学

标生良好的生活习惯,懂得生活,成为生活的主人<

课信息学奥林匹克竞赛(NOI)是中学阶段最重要的五大学科竞赛之一,每年11

月是省级联赛(NOIP),并不是在五大学科里只有信息学竞赛最好。比较而言,

程信息学奥赛有自己的特点。首先,信息学竞赛学习的内容是计算机编程,和文

化课关联不大,所以可以随时开始学习,并不要求其他学科一定要学到什么程

内度。所以,小学开始学习的有,初中开始的有,高中开始的也有。有的学生初

中就拿了高中组的一等奖,小学就拿了初中组的一等奖。其他学科就不行了,

高中竞赛必须学完高中本学科的必修课程才能开始学习竞赛,所以一般来说,

简其他学科竞赛的首次参赛一般在高二。其次,竞争压力略小于其他学科。比如

数学,作为考试科目和竞赛科目,参加的人数非常多,高手云集。而信息学竞

介赛因为是非考试科目,参加学习和参赛的人数比较少,较容易脱颖而出。当然

并不是说这个学科内容肤浅,其实内容也很深。总结一下:参加信息学竞赛学

习开始早,首次参赛早,可参赛次数多,竞争压力略小,这是它的优势。

首先,信息学竞赛对学生来说是一个新的领域,每一个知识都是新的。所以,

课程实

施建议竞赛学习要持之以恒,不能断断续续。三天打鱼两天晒网,就需要不断复习旧的

(学习方

式或教内容,进度会比较缓慢。所以,持续的意义要远大于突击;其次,养成自律,爱

学方式)

钻研,有兴趣去探索算法与编程内在奥秘学习主人,有规范有格局,

课程实

信息学竞赛注重实际操作,学过的知识都是用来指导编程的。竞赛的主要

施简述

是用程序解决数学问题或逻辑问题或两者都有,所以学是一方面,实际写题

(教学

更重要,我们叫做"刷题"(其他科竞赛也得刷题,只不过信息学用电脑刷

计划或

题)。

教学手

总结一下,学好信息学竞赛的公式是:持续学习+刷题。

段等)

课程评

价简述

(评价

方式、考勤10%课堂表现45%课程考核45%

评价实

施等简

述)

信息学奥赛校本教材(上)

第1章初识C++语言

C++语言简介:信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用计算机解题

的能力,选手首先应针对竞赛题目的要求构建数学模型,进而构造出计算机可以接受的算法,之后编写出

计算机能够执行的程序。程序设计是信息学竞赛的基本功,选手参与竞赛活动的第一步是熟练掌握一门程

序设计语言,目前竞赛中允许使用的程序设计语言有C语言、C++语言、Pascalo

C++语言概述C++由美国AT&T贝尔实验室的本贾尼・斯特劳斯特卢普博士在20世纪80年代初期发明并

实现(最初这种语言被称作"CwithClasses"带类的C)。开始,C++是作为C语言的增强版出现的,从

给C语言增加类开始,不断的增加新特性。

今天C++已成为世界主流编程语言之一。

C++语言的特点:语言简洁紧凑,使用灵活方便

C++语言一共只有32个关键字和9种控制语句,程序书写自由,主要用小写字母表示。

运算符丰富

C++语言的运算符包含的范围很广泛,共有34个运算符。

数据结构丰富

C++语言的数据类型有:整型、实型、字符型、数组类型等等

结构化语言

结构化语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼

此独立。

生成的代码质量高

C++语言在代码效率方面可以和汇编语言相媲美。

可移植性强

C++语言编写的程序很容易进行移植,在一个环境下运行的程序不加修改或少许修改就可以

在完全不同的环境下运行。

C++程序结构:在介绍C++语言程序的结构之前,我们先来看一个简单的例子:

例1.1在屏幕上输出"HelloWorld!"。

#include<iostream>〃使用cin.cout,须调用iostream库,否则编译出错

#include<cstdlib>//使用system()调用cstdlib库

usingnamespacestd;〃在C语言中要省略,例如在VC++和TC++中

intmain()〃有的C语言可用voidmain。例如TC++和VC++

cout<<"HelloWorld!"<<endl;〃输出"HelloWorld!"

system("pause");〃暂停作用,使用system("pause")调用cstdlib库

return0;〃结束整个程序

运行结果:

HelloWorld!

【说明】:

1、以"//"开头为注释行,“〃”后的内容用以对语句进行说明,输入程序时可以不输入。

2、#include<iostream>

告诉编译器的预处理器将输入输出流的标准头文件(iostream)包括在本程序中。

这个头文件包括了C++中定义的基本标准输入输出程序库的声明。

3、usingnamespacestd

使用std(标准)名字空间的意思。所谓的名字空间是标准C++中的一种机制,用来

控制不同类库的冲突问题。使用它可以在不同的空间内使用相同名字的类或者函数。

4、intmain()

这一行为主函数(mainfunction)的起始声明。main()是所有C++程序的运行的起始

点。不管它是在代码的开头,结尾还是中间,此函数中的代码总是在程序开始运行时第

一个被执行。所有C++程序都必须有一个main。,intmain。前int在DevC++中可省略,

在TC++和VC++中最好保留。

main后面跟了一对圆括号(),表示它是一个函数。C++中所有函数都跟有一对圆

括号(),括号中可以有一些输入参数。注意,圆括号中即使什么都没有也不能省略。

如例题中显示,主函数main。中的内容,由一对花括号{}括起来。

5、cout<<"HelloWorld!"<<endl

这个语句在本程序中最重要。cout是一个输出语句,告诉计算机把引号之间的字符

串送到标准的输出设备(屏幕)上。cout的声明在头文件iostream中,所以要想使用cout

必须将头文件iostream包括在程序开始处。endl是C++语言的换行控制符,表示内容输出

后换行显示后续的内容。

6、system("pause")

在4.99以前版本的Dev-C++环境下,为了查看程序运行结果,需要在main函数的return

0语句前加上:system("pause");这样程序运行到该语句时,结果显示屏幕将会停留,让大家有时间看程序

的输出结果,否则结果显示屏幕将会一闪而过。在4.99之后的版本可不必加该语句,运行结束后结果显示

屏幕将自动停留。

7、return0

主函数main()的返回语句,一般是函数的最后一条可执行语句。main。函数末尾使用return

语句时,数值0表示程序顺利结束,其他数表示有异常。在后面的例子中你会看到C++程序都以类似的语

句结束。

在C++中,语句的分隔是以分号为分隔符的,分行写代码只是为了更方便人阅读。

一.启动Dev-C++

1.鼠标点击任务栏中的“开始”按钮,选“程序”菜单项,然后选“程序”下的子菜单项"Bloodshed

Dev-C++”项,显示该项下的子菜单。

2.方法一:单击”Dev-C++”菜单项,即可启动Dev-C++集成开发工具。(如图1所示)

方法二:直接双击桌面上的Dev-C++的图标。

如果大家看到界面上的字是英文的,则可以点击主菜单"Tools>EnvironmentOptions"(如图

3),在弹出的对话框中选择第二个标签页"interface"(如图4),在Language下拉列表中选择Chinese即

可,将操作界面改为中文的。

二、新建源程序

1)从主菜单选择“文件”〉“新建”〉“源代码”即可(如图2所示)。

2).此时屏幕右下侧出现一片白色区域,称为“源程序编辑区域”;可以在此输入程序。如(图5)

所示。

注意:

1•必须在英文输入环境下编辑程序(如果你当前能在程序编辑区输入中文,说明你是在

中文输入环境下。为了输入程序,你必须切换到英文输入环境下)。

2.在4.99以前的版本的Dev-C++环境下,为了查看程序运行结果,需要在main函数

的return语句前加上:system("pause")或getchar(),这样程序运行到该语句时,结果显示屏幕将会停留,

让大家有时间看程序的输出结果。否则结果显示屏幕将会一闪而过。在4.99之后的版本可不必加该语句,

运行结束后结果显示屏幕将自动停留。

三、保存源程序到硬盘

一个好的习惯是创建了一个新程序后,在还未输入代码之前先将该程序保存到硬盘某个目录

下,然后在程序的编辑过程中经常性地保存程序,以防止机器突然断电或者死机。要保存程序,只需从主

菜单选择“文件”一〉“保存”就可以将文件保存到指定的硬盘目录。如图6所示。

此时会弹出一个对话框。在此你需要指定文件要存放的磁盘目录(例如:D:\temp),自定

文件名称(例如:exl)以及保存类型。在点击右下角的保存按钮后,在D盘上的temp目录下将会出现一个

名为exl.cpp的源文件。

四、编译、运行

编译:从主菜单选“运行”一〉“编译运行”或快捷键"F9"(图7)。如果程序中存在词法、

语法等错误,则编译过程失败。

编译器会在屏幕右下角的"CompileLog"标签页中显示错误信息,如(图8)所示,并且将

源程序相应的错误行标成红色底色。

五、调试程序

1,设置程序断点

通过预处理、编译和链接的程序仅仅是该程序中没有词法和语法等错误,而无法发现程序深

层次的问题(譬如算法不对导致结果不正确)。当程序运行出错时,需要找出错误原因。仔细读程序来寻

找错误固然是一种方法,但是有时光靠读程序已经解决不了问题,此时需要借助于程序调试(Debug)手

段。这是一种有效的排错手段,每一位同学都需要掌握。

如果想让程序运行到某一行前能暂停下来,就需要将该行设成断点。具体方法是在代码所在

行行首单击,该行将被加亮。默认的加亮颜色是红色。

如果想取消不让某行代码成为断点,则在代码行首再次点击即可。

2.运行程序

设置断点后,此时程序运行进入debug状态。要想运行程序,就不能使用主菜单“Execute”

->"Run",而是需要用主菜单"Debug"—)"Debug"(或者按快捷键F8),如图12所示。

3.单步执行程序

要想运行蓝色底色的代码,可以使用图14所示的"NextStep(F7)"、"StepInto(Shift

F7)"、"Continue(CtrlF7)","RuntoCursor(ShiftF4)"等(具体含义见下面的介绍)。在学习函

数之前,一般用的是NextStep和Continue。学习函数后,还会用到StepInto。

4.设置watch窗口

在调试程序时,可能要看程序运行过程中变量的值,以检测程序对变量的处理是否正确,可

以在调试时通过调试菜单下的添加变量(AddWatch)窗口来增加变量watch,新增的变量将会显示在最

左边Explore的Debug页中。如果左边Explore中的当前页不是Debug页,则可以点击Debug标签使之

成为当前页。

无论做任何事情,都要有一定的方式方法与处理步骤,所谓“无规矩无以成方圆”。计算机程序设计

比日常生活中的事务处理更具有严谨性、规范性和可行性。为了使计算机有效地解决实际问题,必须将处

理步骤编排好,用计算机能理解的计算机语言编写成“序列”,让计算机自动识别并执行这个“序列”,达

到解决实际问题的目的。将处理问题的步骤编排好,用计算机语言组成序列,就是常说的编写程序。在C++

语言中,执行每条语句都是由计算机完成相应的具体操作,编写程序是利用C++语句的功能来实现预定的

处理要求。“千里之行,始于足下”,我们从简单程序学起,逐步了解和掌握怎样编写程序。

在学习C++语言之前,让我们绕过那些繁琐的语法规则细节,通过一些简单的例题,来熟悉

程序的基本组成和基本语句的用法,选手刚接触编程时,多动手模仿是一条捷径。

例1.2在梯形中阴影部分面积是150平方厘米,求梯形面积。

【分析】已知梯形上、下底长为15和25。令梯形的高为h,则由已知三角形面积为150平方厘米,

有150=(15*h)/2,得h为20,然后根据梯形面积公式算出梯形面积。程序如下:

#include<cstdio>//printf和scant调用cstdio库,在C语言中可调用stdio.h库

#include<cstdlib>〃使用system()调用cstdlib库

usingnamespacestd;〃在C语言中要省略,例如在VC++和TC++中

intmain()〃有的C语言可用voidmain。,例如TC++和VC++

〃整个程序开始

floats,h,up,down;//float定义s,h,up,down为单精度实型变量

up=15;〃已知上底

down=25;〃已知下底

h=2*150/up;〃根据上底求出梯形的高

s=(up+down)*h/2;〃求出梯形的面积

printf("s=%0.2f\n",s);//\n是换行控制符,0.2f按实际位数输出,保留2位小数

system("pause");〃暂停作用,TC++和VC++中使用system()调用stdlib.h库

return0;〃结束程序,在TC++和VC++中也要保留

)

运行结果:

s=400.00

【说明】:

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于

一个名为std的namespace中。

当使用<iostream.h>时,相当于在C中调用库函数,使用的是全局命名空间,也就是早期的

C++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespacestd;这样

才能正确使用cout、cin和endlo

例1.3已知一位小朋友的电影票价是10元,计算x位小朋友的总票价是多少?

【分析】假设总票价用y来表示,则这个问题可以用以下几个步骤来实现

①输入小朋友的数目x;

②用公式y=10*x计算总票价;

③输出总票价y的值。

程序如下:

#include<iostream>〃使用cin.cout,须调用iostream库

usingnamespacestd;

intmain()

(

intx,y;〃定义整型变量

cout<<"lnputx=";〃输入提示

cin>>x;〃小朋友的人数

y=10*x;〃计算总票价

cout<<"total="<<y<<endl;〃输出总票价

return0;〃结束程序

}

【说明】:

1、int定义x,y为整型变量,有关整型变量将在第二章详细介绍。

、的作用是在屏幕中显示字符串

2cout<<"Inputx="0

3、cin>>x的作用是输入一个数,赋予变量X。

4、cout<<"total="<<y<<endl的作用是输出提示符total=,输出y的值,endl是换行的意思。

通过以上例12和例1.3两个例子,可以总结出C++语言程序的结构如下:

1)C++语言变量在使用之前必须先定义其数据类型,未经定义的变量不能使用。

2)程序由一个或多个函数组成,一个程序中必须有且只有一个主函数,主函数的名字为main。

不论main。函数在程序中什么位置,程序都是从main。函数开始执行,main。函数执行完毕,程序也就结

束了。

3)在程序中可以调用系统提供的库函数。在调用库函数之前,必须将相应头文件包含在程序中。

4)程序中可以有注释行。注释是为了使程序更易于理解和提示。

5)程序的语句以分号结束。分号是C++语言不可缺少的组成部分。

6)程序的书写要注意适当的缩进,一般采用“逐层缩进”形式,以便使程序更加清晰易读。

把处理问题的步骤编成能从上到下顺序执行的程序,是简单程序的基本特征。再来分析下面

一道例题的程序结构,同时继续学习基本语句。

例1.4有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供15头牛吃20天,或可供20

头牛吃10天,那么,这片牧场每天新生的草量可供几头牛吃1天?

【分析】解决这类问题的关键是利用牛吃的草量,最终求出这片牧场每天新生长的草量,我们设

1单位的草量为1头牛1天所需的草量,于是15头牛20天所食的草量为300单位(包括这20天内的新

生草量),20头牛10天所食的草量为200单位(包括这10天内的新生草量),两者的差值即为10天内的

新生草量。程序如下:

#include<iostream>〃使用cin.cout,须调用iostream库

usingnamespacestd;

intmain()

(

intsl,s2,s3;〃变量定义

sl=15*20;〃:L5头牛20天所食的草量

s2=20*10;//20头牛10天所食的草量

s3=(sl-s2)/(20-10);〃每天新生的草量单位数

cout<<"s="<<s3<<endl;//I单位为1头牛1天的食量

return0;〃结束程序

运行结果:

s=10

♦例1.5给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符三角形。

♦#

♦###

♦#####

程序如下:

#include<iostream>〃使用cin.cout,须调用iostream库

usingnamespacestd;

intmain()

(

chara;〃定义字符变量,

cin>>a;〃输入给定一个字符

cout<<""<<a<<endl;〃输出1个字符,先输出2个空格

cout«""<<a«a«a«endl;〃输出3个字符,先输出1个空格

cout<<a<<a<<a<<a<<a<<endl;〃输出5个字符

♦return0;〃结束程序

♦}

♦【DevC++版本注意事项】

♦在5.0版本DevC++中,<iostream>不是万能库,不包括cstdio,cstring,cstdlib,其

他常用的min,max函数也不保证包括,需要注意如下几个细节:

♦IXgetchar(),stdin,stdout,freopen。,fclose(),scanf()在C++中需要调用<cstdio>

♦②、memset()需要包含C头文件<string.h>,在C++中需要调用<cstring>

♦③、qsort(),exit。需要包含C头文件<stdlib.h>,在C++中需要调用<cstdlib>

♦在5.0版本C++中,根据标准去除了iostream对cstdio,cstring,algorithm的依赖性,

需要显式包括。你现在还可能不透彻理解以上注意事项,就慢慢消化吧,在信息学奥赛中一定要

注意以上细节,请记住:”细节决定成败”。

♦:

.

第二章顺序结构

第一章的简单程序已体现出处理问题的步骤的顺序关系,每条语句按自上而下的顺序依次执行一次,

这种自上而下依次执行的程序称为顺序结构程序。

在一个程序中,所有的操作都由执行部分来完成,而执行部分又都是由一条条语句组成的。因此,

先要学习C++语言的基本语句,并且在学习过程中逐步学会程序设计的基本方法。我们还是先绕过那些繁

琐的语法规则细节,先看一些例子,然后给出语法以供选手们参考。

赋值语句:在C++语言中,“=”作为赋值运算符,而不表示“等于"判断。赋值语句是由赋值表达

式再加上分号构成的表达式语句,它是程序中使用最多的语句之一。

变量=表达式;

在赋值语句的使用中,需要注意以下几点:

1)由于赋值运算符“=”右边的表达式也可以是赋值表达式,因此,下述形式:

变量=(变量=表达式);

是成立的,从而形成嵌套的情形。其展开之后的一般形式为:

变量=变量=•••=表达式;

例如,"a=b=c=d=e=5;",它实际上等价于:e=5;d=e;c=d;b=c;a=b;

2)在进行赋值运算时,如果赋值运算符两边的数据类型不同,系统将会自动进行类型转换,

即将赋值运算符右边的数据类型转换成左边的变量类型。当左边是整型而右边是实型时,将去掉小数部分

并截取该整型对应的有效位数。

例2.1输入两个正整数A和B,试交换A、B的值(使A的值等于B,B的值等于A)。

【分析】交换两个变量的值方法很多,一般我们采用引入第三个变量的算法,二个变量交换,

可以想像成一瓶酱油和一瓶醋进行交换,这时容易想到拿一个空瓶子过来:

①将酱油倒到空瓶中;②将醋倒到酱油瓶中;③将原空瓶中的酱油倒到醋瓶中。

程序如下:

#include<iostream>〃使用cin.cout,须调用iostream库

usingnamespacestd;

intmain()

inta,b,c;〃定义三个变量

cout<<"lnputa,b=";〃输入提示Inputa,b=

cin>>a>>b;〃输入A、B的值

c=a;a=b;b=c;〃交换A、B的值

cout«"a="«a<<"b="<<b<<endl;〃输出结果

例2.2圆柱体的表面积

输入底面半径r和高h,输出圆柱体的表面积,保留3位小数,格式见样例。

样例输入:3.59样例输出:274.889

【分析】

圆柱体的表面积由3部分组成:上底面积、下底面积和侧面积。由于上下底面积相等,完整

的公式可以写成:表面积=底面积*2+侧面积。根据平面几何知识,底面积=TTR2,侧面积=2nrh。参考程序:

#include<cstdio>//使用printf和scanf,须调用cstdio库

#include<cmath>〃使用数学函数atan,须调用cmath库

usingnamespacestd;〃在这个程序中可以省略这行

intmain()

{constdoublepi=3.1415926;〃定义pi为常量

doubler,h,sl,s2,s;〃定义双精度实型,float为单精度实型

scanf("%lf%lf",&r,&h);//r和h前的&符号不能漏掉,double型用%If

sl=pi*r*r;〃计算底面积

s2=2*pi*r*h;〃计算侧面积

s=2*sl+s2;〃计算总的表面积

printf("Area=%0.3lf\n",s);〃输出结果保留3位小数,注意用If格式

return0;

)

例2.3数学中经典的“鸡兔同笼”问题,已知头共30个,脚共90只,问笼中的鸡和兔各有多少

只?

【分析】设鸡为j只,兔为t只,头为h,脚为f,那么有:

j+t=30①

2对+4*t=90②

假设笼中30个头全都是兔,那么都按每头4只脚计算,总脚数为(4*h),与实际脚数(f)之差为

(4*h-f),如果这个差=0,则笼中全是兔(即鸡为0只);如果这个差值>0,说明多计算了脚数,凡是鸡都

多计算了两只脚,用它除以2就能得到鸡的只数,算法为:①j=(4*h-f)/2〃先用脚数差值

除以2算出鸡的只数

②t=h-j〃再用总头数减鸡数算出免

的只数

注意这两步运算的先后顺序。程序如下:

#include<cstdio>〃使用getchar()语句,须调用cstdio库

#include<iostream>〃使用cin.cout,须调用iostream库

usingnamespacestd;

intmain()

{inth,f,j,t;〃定个变量

h=30;f=90;〃赋初始值

j=(4*h-f)/2;〃计算鸡的只数

t=h-j;〃计算免的只数

cout<<"j="<<j<<"t="<<t<<endl;〃输出结果

getchar();〃和system("pause")作用相似,用于结果显示暂停

}

第二节运算符和表达式:C++语言中运算符和表达式数量之多,在高级语言中是少见的。正

是丰富的运算符和表达式使C++语言功能十分完善。这也是C++语言的主要特点之一。

运算符纵览

1.算术运算符

用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增

(++)、自减(--)共七种。

2.关系运算符

用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于

(!=)六种。

3.逻辑运算符

用于逻辑运算。包括与(&&)、或(||)、非⑴三种。

4.位操作运算符

参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(八)、

左移(<<)、右移(>>)六种。

5.赋值运算符

用于赋值运算,分为简单赋值(二)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值

(&=,|=,人=,>>=,<<=)三类共H■一种。

6.条件运算符

这是一个三目运算符,用于条件求值(?:)。

7.逗号运算符

用于把若干表达式组合成一个表达式(,)。

8.指针运算符

用于取内容(*)和取地址(&)二种运算。

9.求字节数运算符

用于计算数据类型所占的字节数(sizeof)。

10.特殊运算符

有括号0,下标口,成员等几种。

一、算术运算符

1、模运算符

求余的运算符"附’也称为模运算符,是双目运算符,两个操作数都是整型数。a%b的值就是

a除以b的余数,5%2余数为1。其操作对象只能是整型数,而其他四种运算符对int,float,double,char都

适用。

2、除法运算符

C++语言的除法运算符有一些特殊之处,即如果a、b是两个整数类型的变量或常量,那么

a/b的值是a除以b的商。例如,5/2的值是2,而不是2.5,而5.0/2或5/2.0的值是2.5。

3、自增自减运算符

自增、自减运算符用来对一个操作数进行加1或减1运算,其结果仍然赋予该操作数,而且

参加运算的操作数必须是变量,而不能是常量或表达式。

1)自增运算符。例如,x++表示在使用x之后,使x的值加1,即x=x+l;++x表示使用x

之前,先使X的值加1,即x=x+l。

2)自减运算符。例如,X--表示在使用x之后,使x的值减1,即x=x-l;--X表示使用x

之前,先使X的值减1,即x=x-l。

4、复合算术赋值。例如,a+=l,相当于a=a+l;a+=b,相当于a=a+b。

例2.4变量自加运算

#include<iostream>

usingnamespacestd;

intmain()

(

intx,y,zl,z2;

x=7;y=8;

zl=y-(x++);〃计算zl=l,计算后x=8

z2=y-(++x);〃计算前x的值自加1,x的值为9,再与y求差

cout«,,zl="«zl«endl«"z2="«z2;〃分别输出zl和z2的值

)

运行结果:

zl=l

z2=-l

二、关系运算符

关系运算符用于数值的大小比较。包括大于(>)、小于(<)、等于(二二)、大于等于(>二)、小于等于

(<二)和不等于(!二)六种,它们都是双目运算符。

关系运算符运算的结果是整型,值只有两种:0或1,。代表关系不成立,1代表关系成立。

请看下面的例子:

intmain()

{intnl=4,n2=5,n3;

n3=nl>n2;//n3的值为0

n3=nl<n2;//n3的值变为1

n3=nl==4;//n3的值变为1

n3=nl!=4;//n3的值变为0

n3=nl==l+3;〃n3的值变为1

)

三、逻辑运算符C++语言中提供了三种逻辑运算符:与运算(&&)、或运算(||)、非运算(!)。与运

算符(&&)和或运算符(||)均为双目运算符。具有左结合性。非运算符⑴为单目运算符,具有右结合性。逻

辑运算符和其它运算符优先级的关系可表示如下:

按照运算符的优先顺序可以得出:

a>b&&c>d等价于(a>b)&&(c>d)

!b==c||d<a等价于((!b)==c)||(d<a)

a+b>c&&x+y<b等价于((a+b)>c)&&((x+y)<b)

逻辑运算的值也为嗔”和“假”两种,用“V和"0"来表示。其求值规则如下:

L与运算&&参与运算的两个量都为真时,结果才为真,否则为假。例如,5>0&&4>2,由于

5>0为真,4>2也为真,相与的结果也为真。

2.或运算||参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。

例如:5>0||5>8,由于5>0为真,相或的结果也就为真

3.非运算!参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(5>0)的结

果为假。

虽然C++编译在给出逻辑运算值时,以“1"代表嗔”,“0”代表“假但反过来在判

断一个量是为“真"还是为“假"时,以"0"代表"假”,以非“0”的数值作为“真"。例如:由于5和

3均为非“0”因此5&&3的值为,即为1。又如:5||0的值为嗔”,即为1。

需要说明的是,对于有符号数,在右移时,符号位将随同移动。当操作数为正数时,最高

位为0,而为负数时,最高位为1。最高位是补0或补1取决于编译系统的规定。

在C++语言中,有一些运算可以简写,如下表所示。

算术运算符、关系运算符、逻辑运算符和赋值运算符的优先级如下:

赋值运算符逻辑运算符关系运算符算术运算符

低演)

关系运算符的结合性为:自左至右。

根据以上优先级和结合性,计算出以下表达式的结果(假设a=3,b=2,c=l)

a>b表达式为真,所以表达式的值为1

(a>b)==c表达式为真,所以表达式的值为1

b+c<a表达式为假,所以表达式的值为0

d=a>ba>b为真,所以d的值为1

f=a>b>ca>b为真,结果为1,l>c为假,所以f的值为0

【上机练习】1.A+B问题[1.3编程基础之算术表达式与顺序执行01】

大部分的在线题库,都会将A+B问题作为第一题,以帮助新手熟悉平台的使用方法。

A+B问题的题目描述如下:给定两个整数A和B,输出A+B的值。保证A、B及结果均在整型范

围内。现在请你解决这一问题。

输入:

一行,包含两个整数A,B,中间用单个空格隔开。A和B均在整型范围内。

输出:

一个整数,即A+B的值。保证结果在整型范围内。

样例输入:

12

样例输出:

3

2.计算(a+b)*c的值[1.3编程基础之算术表达式与顺序执行02]

给定3个整数a、b、c,计算表达式(a+b)*c的值。

输入:

输入仅一行,包括三个整数a、b、c,数与数之间以一个空格分开。

(-10,000<a,b,c<10,000)

输出:

输出一行,即表达式的值

样例输入:

235

样例输出:

25

3.计算(a+b)/c的值[1.3编程基础之算术表达式与顺序执行03]

给定3个整数a、b、c,计算表达式(a+b)/c的值,/是整除运算。

输入;

输入仅一行,包括三个整数a、b、c,数与数之间以一个空格分开。(-10,000<abc<10,000,c

不等于0)

输出:

输出一行,即表达式的值。

样例输入:

113

样例输出:

0

4.带余除法[1.3编程基础之算术表达式与顺序执行04]

给定被除数和除数,求整数商及余数。此题中请使用默认的整除和取余运算,无需对结果进行任

何特殊处理。

输入:

一行,包含两个整数,依次为被除数和除数(除数非零),中间用一个空格隔开。

输出:

一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。

样例输入:

103

样例输出:

31

5.计算分数的浮点数值[1.3编程基础之算术表达式与顺序执行05】

两个整数a和b分别作为分子和分母,既分数a/b,求它的浮点数值(双精度浮点数,保留小数点

后9位)。

输入:

输入仅一行,包括两个整数a和b。

输出:

输出也仅一行,分数a/b的浮点数值(双精度浮点数,保留小数点后9位)。

样例输入:

57

样例输出:

0.714285714

第三节常量和变量:一、常量

常量是指在程序中使用的一些具体的数、字符。在程序运行过程中,其值不能被更改。如

123,145.88,'m',TRUE

1、整型常量:如3、-5、0等。

整型常量是表示整数的常量。有三种表示形式:

1)十进制形式。如99、-1。

2)八进制形式。以数字0打头,由0-7构

温馨提示

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

评论

0/150

提交评论