(完整版)信息学奥赛简介NOIP及C++基础知识夏令营第一天顺序语句_第1页
(完整版)信息学奥赛简介NOIP及C++基础知识夏令营第一天顺序语句_第2页
(完整版)信息学奥赛简介NOIP及C++基础知识夏令营第一天顺序语句_第3页
(完整版)信息学奥赛简介NOIP及C++基础知识夏令营第一天顺序语句_第4页
(完整版)信息学奥赛简介NOIP及C++基础知识夏令营第一天顺序语句_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

(顺序语句)夏令营讲义信息学奥赛介绍延迟符奥赛知识延迟符信息学奥赛知识一.信息学奥林匹克竞赛介绍面向全国中学生的一种竞赛活动旨在激发中学生在计算机科学方面的兴趣培养他们的逻辑思维能力给那些有才华的学生提供相互交流和学习的机会通过竞赛和相关的活动培养和选拔优秀的计算机后备人才。延迟符信息学奥赛知识二、信息学奥林匹克竞赛赛事1.NOIP(全国信息学奥林匹克联赛)

NationalOlympiadinInformaticsinProvinces2.NOI(全国信息学奥林匹克竞赛)

NationalOlympiadinInformatics3.IOI(国际信息学奥林匹克竞赛)

InternationalOlympiadinInformatics延迟符信息学奥赛知识NOIP联赛初赛:10月中旬(周六/周日下午2:30-4:30)笔试(100分)资格赛,地市独立组织(全国统一命题,统一时间)复赛:11月份中旬(第二周,周六周日上午3.5个小时)上机编程两试:每试3个题目,300分,共600分。提交源程序,黑盒子测试法延迟符信息学奥赛知识掌握一门计算机程序设计语言

(Pascal/C/C++)数据结构(线性表、树、图等)算法(搜索、图论、动规等)三、学习内容预知识:程序设计、算法和C++第一章:顺序结构1.1标准数据类型和变量的定义1.2运算符、标准函数和表达式1.4基本语句程序设计、算法和C++延迟符预知识延迟符预知识:程序设计、算法和C++0.1、程序设计程序设计

是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。延迟符预知识:程序设计、算法和C++0.2、算法算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。有穷性确切性输入项(≥0)输出项(≥1)可行性算法应该具有五个重要特征延迟符预知识:程序设计、算法和C++0.2、算法描述算法的方法有多种,常用的有自然语言、结构化流程图、伪代码和PAD图等,其中最普遍的是流程图。顺序结构流程图循环for语句流程图延迟符预知识:程序设计、算法和C++0.3、计算机程序计算机程序

是用计算机语言编写的能完成一定功能的指令序列。延迟符预知识:程序设计、算法和C++0.4、计算机语言计算机语言是计算机能识别的指令及其使用规则的集合。计算机语言有很多种:例如:Fortran、C、Java、VB、Python、PHP、C++等。延迟符预知识:程序设计、算法和C++0.5、C++语言1、C++是一种历史悠久的语言。1983年,,贝尔实验室的BjarneStroustrup在C语言基础上推出了C++。C++进一步扩充和完善了C语言,是一种面向对象的程序设计语言。2、C++是应用广泛、深受欢迎的语言,流行程序排行第三\四。排在前四名的分别是C、Java、C++和ObjectiveC。3、C++兼容C,是面向对象的语言,适合编写系统程序。4、C++标准的版本。第一个标准,C++98,1998年发布;第二个标准C++03,2003年发布;第三个标准,C++11,2011年发布;下一个标准可能是C++15、C++17。本课程主要讲标准的C++。延迟符预知识:程序设计、算法和C++0.6、何谓好的程序符合以下两条,即是好的程序:第一:能完成要求的功能。第二:良好的性能。(包括:1、可读性好,易于理解。2、节省时间,节约空间。3、可靠性高,易维护。)延迟符预知识:程序设计、算法和C++0.7、C++程序C++的程序是结构化程序设计语言。结构化程序包括顺序、选择、循环三种控制结构。顺序结构就是按照语句的先后顺序依次招待程序的方式。顺序选择循环结构化程序预知识:程序设计、算法和C++引例1:最简单的程序:输出:Helloworld!【参考程序】:#include<iostream>//以符号“#”开头的行称为编译预处理行usingnamespacestd;//为变量名开辟内存空间intmain()//主程序或主函数{//程序开始

cout<<"Helloword!";//输出”Helloword!”return0;//结束}//程序结束预知识:程序设计、算法和C++引例2:计算正方形的面积和周长【参考程序】:#include<iostream>//以符号“#”开头的行称为编译预处理行usingnamespacestd;//为变量名开辟内存空间intmain()//主程序或主函数{//程序开始inta,s,c;//变量声明cout<<"Pleaseinputa:"<<endl;//输出流输出字符串常量cin>>a;//输入流输入变量as=a*a;//求正方形面积scout<<"s="<<s<<endl;//输出正方形面积c=4*a;//求正方形周长ccout<<"c="<<c<<endl;//输出正方形周长return0;}//主程序结束【问题分析】:正方形的面积等于边长乘以边长,周长等于4倍的边长。【算法设计】:正方形的边长用a表示,面积用s表示,周长用c表示,则s=a*a,c=4*a。【说明】:所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。当使用<iostream.h>时,相当于在C中调用库函数,使用的是全局命名空间,也就是早期的C++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespacestd;这样才能正确使用cout、cin和endl。延迟符预知识:程序设计、算法和C++【DevC++版本注意事项】在5.0版本DevC++中,<iostream>不是万能库,不包括cstdio,cstring,cstdlib,其他常用的min,max函数也不保证包括,需要注意如下几个细节:①、getchar()、putchar()、gets()、puts()、stdin、stdout、freopen()、fclose()、scanf()、printf()在c++中需要调用<cstdio>②、memset()需要包含C头文件<string.h>,在c++中需要调用<cstring>③、qsort(),exit()需要包含C头文件<stdlib.h>,在c++中需要调用<cstdlib>在5.0版本C++中,根据标准去除了iostream对cstdio,cstring,algorithm的依赖性,需要显式包括。你现在还可能不透彻理解以上注意事项,就慢慢消化吧,在信息学奥赛中一定要注意以上细节,请记住:“细节决定成败”。顺序结构延迟符第一章延迟符1.1标准数据类型和变量的定义1.1标准数据类型和变量的定义知识点:

各种标准数据类型的分类、定义标识符、占字节数、数值范围、表现形式和应用,常量和变量的概念、分类、语法格式说明和应用。延迟符1.1标准数据类型和变量的定义1.1.1、标准数据类型知识点:

C++语言提供了丰富的数据类型。本节介绍几种基本的数据类型:整型、实型、字符型。它们都是系统定义的简单数据类型,称为标准数据类型。整型字符型实型标准数据类型1.1标准数据类型和变量的定义

1、整型(integer)在C++语言中,整型类型标识符为int。根据整型变量的取值范围又可将整型变量定义为以下8种整型类型:数据类型定义标识符占字节数数值范围数值范围短整型short[int]2(16位)-32768~32767-215~215-1整型[long]int4(32位)-2147483648~2147483647-231~231-1长整型long[int]4(32位)-2147483648~2147483647-231~231-1超长整型longlong[int]8(64位)-9223372036854775808~9223372036854775807-263~263-1无符号整型unsigned[int]2(16位)0~655350~216-1无符号短整型unsignedshort[int]2(16位)0~655350~216-1无符号长整型unsignedlong[int]4(32位)0~42949672950~232-1无符号超长整型Unsignedlonglong8(64位)0~184467440737095516150~264-11.1标准数据类型和变量的定义

2、实型(real)数据类型定义标识符数值范围占字节数有效位数单精度实型float-3.4E+38~3.4E+384(32位)6~7位双精度实型double-1.7E+308~1.7E+3088(64位)15~16位长双精度实型longdouble-3.4E+4932~1.1E+493216(128位)18~19位布尔变量bool真true或假false1(8位)

1.1标准数据类型和变量的定义3、字符型(char)字符常量有以下两种表示法:⑴、普通表示形式字符常量是由单个字符组成,所有字符采用ASCII编码,ASCII编码共有128个字符(表2-4)。在程序中,通常用一对单引号将单个字符括起来表示一个字符常量。如:'a','A','0'等。如字符A的序号是65,字符a的序号是97,字符0的序号的48。序号字符序号字符序号字符序号字符序号字符序号字符32空格48064@80P96`112p33!49165A81Q97a113q34”50266B82R98b114r35#51367C83S99c115s36$52468D84T100d116t37%53569E85U101e117u38&54670F86V102f118v39'55771G87W103g119w40(56872H88X104h120x41)57973I89Y105i121y42*58:74J90Z106j122z43+59;75K91[107k123{44,60<

76L92\108l124|45-61=77M93]109m125}46.62>

78N94^110n126~47/63?79O95_111o127deLASCII码表1.1标准数据类型和变量的定义3、字符型(char)⑵、转义字符表示形式。转义字符有三种用法:表示控制字符、表示特殊字符、表示所有字符。常用的转义字符如右表所示。转义字符含义'\n'换行'\t'水平制表'\b'退格'\r'回车(不换行)'\0'空字符'\’'单引号'\”'双引号'\\'一个反斜杠字符'\ddd'1~3位八进制数所代表的字符'\xhh'1~2位十六进制数所代表的字符1.1标准数据类型和变量的定义例1:整型数据类型存储空间大小【参考程序】:#include<iostream>usingnamespacestd;intmain(){ intx; shorty; cout<<sizeof(x)<<""<<sizeof(y)<<endl;//sizeof返回一个对象或者类型所占的内存字节数return0;}分析:分别定义int,short类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。整型数据类型存储空间大小【说明】:

sizeof(表达式)除变量外,还可以是常量和各种标准类型。C++默认整型常量和实型常量为int型和double型,所以长度为4和8。基于char数据在内存中存储的是整型数值,所以它可以和int变量一样做加减运算,下面这个例子说明了这种用法。1.1标准数据类型和变量的定义例2:大小字母的转换【参考程序】:

#include<iostream>

usingnamespacestd;

intmain()

{charc1,c2;

c1='a';

c2='A';

cout<<c1<<""<<c2<<endl;

c1=c1-32;//小写字母转换大写字母

c2=c2+32;//大写字母转换小写字母

cout<<c1<<""<<c2<<endl;

}运行结果:

aA

Aa【说明】:因为所有小写字母的ASCII值要比对应大写字母的ASCII值大32,所以c1减去32后便得到原来字母的大写形式。反之,c2加上32后便得到原来字母的小写形式。延迟符

1.1.2、常量和变量

1、常量的概念及分类常量:

是指在程序中使用的一些具体的数、字符。在程序运行过程中,其值不能被更改。如123,145.88,'m',TRUE等。延迟符

1.1.2、常量和变量

1、常量的概念及分类常量:

是指在程序中使用的一些具体的数、字符。在程序运行过程中,其值不能被更改。如123,145.88,'m',TRUE等。

1.1.2、常量和变量

1、常量的概念及分类1、整型常量:如3、-5、0等。整型常量是表示整数的常量。有三种表示形式:

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

2)八进制形式。以数字0打头,由0-7构成,如012,表示八进制整数12,即12(8)。

3)十六进制形式。以0x打头,如0x12A,表示十六进制整数12A,即12A(16)。2、实型常量:如3.1、-6.1E+2(科学记数法)。3、字符常量:是用单引号括起来的字符,如'k'、'5'、'%'。

注意:'a'与"a"表示的含义是不同的,'a'表示一个字符常量,"a"表示一个字符串。1.1.2、常量和变量

2、常量的说明一个常量可以直接调用(如124,'A'),也可以给常量取个名字用一个标识符代表它,这就是符号常量。其语法格式为:

const符号常量=常量字串;例如:constdoublePI=3.1415926;1.1.2、常量和变量例:输入半径r,求圆的周长及面积#include<cstdio>//调用iostream库,否则使用printf和scanf语句编译出错usingnamespacestd;//这个程序可省略这行constdoublePI=3.1415926;//PI是符号常量。代表3.1415926intmain(){floatr,c,s;//定义实型变量

printf("r=");//显示提示符r=scanf("%f",&r);//输入r的值,&符号不能漏掉

c=2*PI*r;//计算圆的周长

s=PI*r*r;//计算圆的面积

printf("c=%.2fs=%.2f\n",c,s);//显示计算结果,结果保留2位小数}分析:圆的周长c=2*∏*r,圆的面积s=∏*r*r,在这里=∏是希腊字母,是常量。在程序中定义PI代表常量3.1415926,在编译源程序时,遇到PI就用常量3.1415926代替,PI可以和常量一样进行运算。C++语言规定,每个符号常量的定义占据一个书写行,而且符号常量不能被再赋值。【说明】:

1、程序中定义的PI代表常量3.1415926,在编译源程序时,遇到PI就用常量3.1415926代替,PI可以和常量一样进行运算。C++语言规定,每个符号常量的定义占据一个书写行,而且符号常量不能被再赋值。如果在上例中使用以下赋值语句是错误的。PI=3.1415926;2、习惯上,符号常量名用大写,而变量名用小写,以便于区别。

1.1.2、常量和变量3、变量的概念及变量名

变量代表了一个存储单元,其中的值是可以改变的,因此称为变量。一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量(存储单元)取一个名,称为变量名。用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。C++语言规定,标识符只能由字母(包含下划线“_”)开头,后面的字符可以是字母或数字。对于标识符的长度,不同的C++语言编译器有不同的规定,考虑到系统的可移植性,建议变量名的长度不要超过8个字符。例如:month、_age、s2为合法的标识符;m.k.jack、a<=b、9y为不合法的标识符。

1.1.2、常量和变量4、变量的类型和语法格式变量在某一固定时刻用来存储一个常量,因此也应有相应的类型。如整型变量用来存储整数,实型变量用来存储实数。变量的类型,可以是标准数据类型int、short、long、float、double和char等,也可以是用户自定义的各种类型。1.1.2、常量和变量变量的语法格式:数据类型变量表例如:

inti=5,j,k;//定义i,j,k为整型变量,i赋初值为5,j,k的初值未知。

chara,b,c;//定义a,b,c为字符变量

floatx,y,z;//定义x,y,z为实型变量

说明:C++语言允许在定义变量的同时为变量赋初值。课后训练:温度表达转化。利用公式C=5*(F-32)/9(其中C表示摄氏温度,F表示华氏温度)进行计算转化,输入华氏温度f,输出摄氏温度c,要求精确到小数点后5位。输入:

输入一行,包含一个实数f,表示华氏温度。(f>=-459.67)输出:

输出一行,包含一个实数,表示对用的摄氏温度,要求精确到小数点后5位。样例输入:41样例输出:5.00000延迟符1.2运算符、标准函数和表达式1.2运算符、标准函数和表达式知识点:各类运算符的组成及参与运算的优先级;常用标准函数的形式及应用;表达式的概念及不同数据类型之间运算之间的转换。延迟符1.2运算符、标准函数和表达式1.2.1运算符的分类1.算术运算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。⑴模运算符求余的运算符“%”也称为模运算符,是双目运算符,两个操作数都是整型数。a%b的值就是a除以b的余数,5%2余数为1。其操作对象只能是整型数,而其他四种运算符对int,float,double,char都适用。⑵除法运算符

C++语言的除法运算符有一些特殊之处,即如果a、b是两个整数类型的变量或常量,那么a/b的值是a除以b的商。例如,5/2的值是2,而不是2.5,而5.0/2或5/2.0的值是2.5。⑶自增自减运算符自增、自减运算符用来对一个操作数进行加1或减1运算,其结果仍然赋予该操作数,而且参加运算的操作数必须是变量,而不能是常量或表达式。

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

2)自减运算符。例如,x--表示在使用x之后,使x的值减1,即x=x-1;--x表示使用x之前,先使x的值减1,即x=x-1。⑷复合算术赋值。例如,a+=1,相当于a=a+1;a+=b,相当于a=a+b。延迟符1.2运算符、标准函数和表达式1.2.1运算符的分类2.关系运算符

用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。关系运算符用于数值的大小比较。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种,它们都是双目运算符。关系运算符运算的结果是整型,值只有两种:0或1,0代表关系不成立,1代表关系成立。延迟符1.2运算符、标准函数和表达式1.2.1运算符的分类3.逻辑运算符

用于逻辑运算。包括与(&&)、或(||)、非(!)三种。按照运算符的优先顺序可以得出:

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)逻辑运算的值也为“真”和“假”两种,用“1”和“0”来表示。其求值规则如下:1.与运算&&参与运算的两个量都为真时,结果才为真,否则为假。例如,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。延迟符1.2运算符、标准函数和表达式1.2.1运算符的分类4.位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。把数转化为二进制按二进制的位进行运算。5.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。简写含义

简写含义a+=ba=a+b

a&=ba=a&ba-=ba=a-b

a|=ba=a|ba*=ba=a*b

a^=ba=a^ba/=ba=a/b

a<<=ba=a<<ba%=ba=a%b

a>>=ba=a>>b延迟符1.2运算符、标准函数和表达式1.2.1运算符的分类6.条件运算符这是一个三目运算符,用于条件求值(?:)。在选择结构中可学到此知识。7.逗号运算符用于把若干表达式组合成一个表达式(,)。例如:y=(a=a+1,b=b+1,c=c+1),结果为c的值。8.指针运算符用于取内容(*)和取地址(&)二种运算。9.求字节数运算符用于计算数据类型所占的字节数(sizeof)。10.特殊运算符有括号(),下标[],成员(->,.)等几种。延迟符1.2运算符、标准函数和表达式(二)运算符的优先级算术运算符、关系运算符、逻辑运算符和赋值运算符的优先级如下:赋值运算符逻辑运算符关系运算符算术运算符低高关系运算符的结合性为:自左至右。根据以上优先级和结合性,计算出以下表达式的结果(假设a=3,b=2,c=1)

a>b表达式为真,所以表达式的值为1(a>b)==c表达式为真,所以表达式的值为1b+c<a表达式为假,所以表达式的值为0d=a>ba>b为真,所以d的值为1f=a>b>ca>b为真,结果为1,1>c为假,所以f的值为0延迟符1.2运算符、标准函数和表达式(二)运算符的优先级算术运算符、关系运算符、逻辑运算符和赋值运算符的优先级如下:赋值运算符逻辑运算符关系运算符算术运算符低高关系运算符的结合性为:自左至右。根据以上优先级和结合性,计算出以下表达式的结果(假设a=3,b=2,c=1)

a>b表达式为真,所以表达式的值为1(a>b)==c表达式为真,所以表达式的值为1b+c<a表达式为假,所以表达式的值为0d=a>ba>b为真,所以d的值为1f=a>b>ca>b为真,结果为1,1>c为假,所以f的值为01.2.2典型例题例1:变量自加运算

【参考程序】:

#include<iostream>usingnamespacestd;intmain(){intx,y,z1,z2;x=7;y=8;z1=y-(x++);//计算z1=1,计算后x=8z2=y-(++x);//计算前x的值自加1,x的值为9,再与y求差

cout<<"z1="<<z1<<endl<<"z2="<<z2;//分别输出z1和z2的值}

运行结果:

z1=

z2=【说明】:在运行z1=y-(x++),是先算减法,x再自加1,所以结果为1。在z2=y-(++x),是x选加1,然后再算减法。1.2.2典型例题例2:位运算【参考程序】:#include<iostream>usingnamespacestd;intmain(){inta=105,b=0x5E;intc;cout<<dec<<a<<"\t"<<hex<<a<<"\t"<<oct<<a<<endl;//输出十进制、十六进制、八进制的a。cout<<dec<<b<<"\t"<<hex<<b<<"\t"<<oct<<b<<endl;c=a&b;//a和b位与cout<<dec<<c<<"\t"<<hex<<c<<"\t"<<oct<<c<<endl;c=a|b;//a和b位或cout<<dec<<c<<"\t"<<hex<<c<<endl;c=a^b;//a和b位异或cout<<dec<<c<<"\t"<<hex<<c<<endl;c=~a;//位非cout<<dec<<c<<"\t"<<hex<<c<<endl;c=a<<2;//a左移2位cout<<dec<<c<<"\t"<<hex<<c<<endl;c=a>>2;//a右移2位cout<<dec<<c<<"\t"<<hex<<c<<endl;cout<<dec;return0;}1、本程序是对a、b进行了位运算,“dec”十进制缩写,“hex”十六进制缩写,“oct”八进制缩写。

2、a为十进制数,b十六进制数,

注意:单目运算符是运算所需变量为一个的运算符,又叫一元运算符。它的运算级别是最高的。延迟符1.2运算符、标准函数和表达式1.2.2、常用函数函数名格式功能说明例子绝对值函数abs(x)求一个数x的绝对值abs(-5)=5自然数指数函数exp(x)求实数x的自然指数exexp(1)=2.718282向下取整floor(x)求不大于实数x的最大整数floor(3.14)=3向上取整ceil(x)求不小于实数x的最小整数ceil(3.14)=4自然对数函数log(x)求实数x的自然数对数log(1)=0指数函数pow(x,y)计算xy,结果为双精度实数pow(2,3)=8随机函数rand()产生0到RAND-MAX之间的随机整数

平方根值函数sqrt(x)求实数x的平方根sqrt(25)=5【说明】:1、使用函数之前,在程序的开头要加上函数所在的头文件。2、调用格式:变量名=函数名(表达式),或在输出语句中直接输出。延迟符1.2运算符、标准函数和表达式1.2.3、表达式1、表达式

是由常量、变量、标准函数与运算符按照一定的规则组成的式子。延迟符1.2运算符、标准函数和表达式1.2.3、表达式2、数据类型转换

C++语言中,要将一个表达式的结果转换成期望的数据类型,或者不同数据类型的运算对象进行混合运算,就需要依据数据类型转换规则进行转换。⑴隐性转换

a混合运算时的类型转换整型、实型、字符型数据间可以混合运算。在这种情况下,需要将不一致的数据类型转换成一致的数据类型,然后进行运算。为了保证运算精度,系统在运算时的转换规则是将存储长度较短的运算对象转成存储长度较长的类型,然后再进行处理。这种转换是系统自动进行的。延迟符1.2运算符、标准函数和表达式1.2.3、表达式2、数据类型转换

b赋值时的类型转换当赋值运算符两侧的数据类型不同时,需进行类型转换,这种转换是系统自动进行的,转换规则如下:1)float、double型赋值给int型:直接截断小数。例如,“inti=f+0.6;”,f的值为4.0,右边算术表达式运算后的结果为4.6的double型数据,根据上述转换原则,直接舍弃小数,所以i的值为4。2)int、char型赋值给float、double型:补足有效位以进行数据类型转换。例如:“floatf=4;”,float为7位有效数字,所以f的值为4.0000000。3)char型(1字节)赋给int型(4字节):数值赋给int型的低8位,其它位补0。4)lomglongint型赋值给int型:longlongint型截断低字节给int型。5)int型赋值给longlongint型:赋给longint型的低16位,如果int型的最高位是0,则longlongint的高16位全为0;如果int型的最高位是1,则longlongint型的高16位全为1(称为“符号扩展”)。6)unsignedint型赋值给int型:直接传送数值。7)非unsignedint型赋值给位数相同的unsignedint型:直接传送数值。延迟符1.2运算符、标准函数和表达式1.2.3、表达式2、数据类型转换

⑵强制类型转换在C++语言中,还允许强制类型转换,即将某一数据的数据类型转换为指定的另一种数据类型,强制类型转换只是临时转换。强制转换运算符组成的运算表达式的一般形式:(类型名)(表达式)例如:已知有变量定义“intb=7;floata=2.5,c=4.7;”,求下面算术表达式的值。

a+(int)(b/3*(int)(a+c)/2.0)%4根据运算符的结合性规则,表达式要自左至右执行,b/3为2,2*(int)(a+c)为14,14/2.0为7.0,强制类型转换后为7,7%4为3,a的值2.5与3相加,最终结果为5.5。延迟符1.2运算符、标准函数和表达式课后训练训练1:整型数据类型和浮点型存储空间大小分别定义int,short、float和double类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。输入:无。输出:一行,四个整数,分别是两个变量的存储空间大小,用一个空格隔开。延迟符1.2运算符、标准函数和表达式课后训练训练2:浮点数向零舍入【1.2编程基础之变量定义、赋值及转换06】输入一个单精度浮点数,将其向零舍入到整数。说明:向零舍入的含义是,正数向下舍入,负数向上舍入。提示:可以使用强制类型转换来实现。输入:一个单精度浮点数。输出:一个整数,即向零舍入到整数的结果。样例输入:2.3样例输出:2延迟符1.2运算符、标准函数和表达式课后训练训练3:整型与布尔型的转换将一个整型变量的值赋给一个布尔型变量,再将这个布尔型变量的值赋给一个整型变量,得到的值是多少?输入:

一个整型范围内的整数,即初始时整型变量的值。输出:

一个整数,经过上述过程后得到的结果。样例输入:3样例输出:1延迟符1.2运算符、标准函数和表达式课后训练训练4:打印字符输入一个整数,即字符的ASCII码,保证存在对应的可见字符。输出相对应的字符。输入:

一个整数,即字符的ASCII码,保证存在对应的可见字符。输出:

一行,包含相应的字符。样例输入:65样例输出:A延迟符1.2运算符、标准函数和表达式课后训练训练5:Hello,World!的大小可以用sizeof函数获得它所占用的空间大小。输入:

无。输出:

一个整数,即“Hello,World!”的大小。延迟符1.4基本语句1.4基本语句知识点:

掌握赋值语句“=”、C++语言的输入流cin、输出流cout、C语言的输入语句scanf语句、输出语句printf语句的格式、执行过程和各种形式的灵活运用。延迟符1.4基本语句1.4基本语句知识点:

掌握赋值语句“=”、C++语言的输入流cin、输出流cout、C语言的输入语句scanf语句、输出语句printf语句的格式、执行过程和各种形式的灵活运用。延迟符1.4基本语句1.4.1知识讲解1、赋值语句的一般格式变量=表达式;

2、功能赋值语句的功能是:首先计算表达式的值,再赋给赋值号左边的变量。对任意一个变量必须先赋值,然后才能引用,否则未赋值的变量将以一个随机值参与运算。在赋值语句的使用中,需要注意以下几点:1)由于赋值运算符“=”右边的表达式也可以是赋值表达式,因此,下述形式:

变量=(变量=表达式);是成立的,从而形成嵌套的情形。其展开之后的一般形式为:

变量=变量=…=表达式;例如,“a=b=c=d=e=5;”,它实际上等价于:e=5;d=e;c=d;b=c;a=b;2)在进行赋值运算时,如果赋值运算符两边的数据类型不同,系统将会自动进行类型转换,即将赋值运算符右边的数据类型转换成左边的变量类型。当左边是整型而右边是实型时,将去掉小数部分并截取该整型对应的有效位数。3)单独一个常量、一个变量或一个函数都可看作是简单的表达式。延迟符1.4.2典型例题例1:输入两个正整数A和B,试交换A、B的值(使A的值等于B,B的值等于A)参考程序:

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

usingnamespacestd;

intmain()

{inta,b,c;//定义三个变量

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

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

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

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

}分析:交换两个变量的值方法很多,一般我们采用引入第三个变量的算法,二个变量交换,可以想像成一瓶酱油和一瓶醋进行交换,这时容易想到拿一个空瓶子过来:①将酱油倒到空瓶中;②将醋倒到酱油瓶中;③将原空瓶中的酱油倒到醋瓶中。延迟符1.4.2典型例题例2:数学中经典的“鸡兔同笼”问题,已知头共30个,脚共90只,问笼中的鸡和兔各有多少只?注意这两步运算的先后顺序。程序如下: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;//输出结果

return0;

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

j+t=h①

2*j+4*t=f②假设笼中30个头全都是兔,那么都按每头4只脚计算,总脚数为(4*h),与实际脚数(f)之差为(4*h-f),如果这个差=0,则笼中全是兔(即鸡为0只);如果这个差值>0,说明多计算了脚数,凡是鸡都多计算了两只脚,用它除以2就能得到鸡的只数,算法为:①j=(4*h-f)/2//先用脚数差值除以2算出鸡的只数②t=h-j//再用总头数减鸡数算出免的只数【说明】:也可以解由①和②组成的方程组得到j和t的值。延迟符1.4基本语句1.4.3知识讲解1、输入流cin、输出流cout的非格式化输入、输出格式:

Cin>>变量1>>变量2>>…>>变量n;其中“>>”是预定义的插入运算符,作用在“cin”上,实现键盘输入。

cout<<表达式1<<表达式2<<…<<表达式n;其中“<<”是预定义的插入运算符,作用在“cout”上,实现屏幕输出,输出结果依次为各个表达式的值。延迟符1.4基本语句1.4.3知识讲解2、功能

cin的使用过程中要求输入的数据类型与接收变量的类型一致,并且输入的数据间用Tab空格分开,回车键表示输入完毕。

cout输出语句的功能主要是在程序完成数据处理后,将计算结果以适当形式输出到屏幕上。输出语句有非格式化和格式化输出两种类型。说明:输入/输出流是输入/输出的一系列字节,平时所用到“cin”、“cout”是标准输入/输出流预定义的两个流类对象。在使用“cin”、“cout”前,要用编译预处理命令将所使用的头文件包含到源程序中,同时声明命名空间。#include<iostream>usingnamespacestd;对于cin:延迟符1.4基本语句1.4.3知识讲解输入一个或一个以上的变量例如:inta,b,c;cin>>a>>b>>c;执行后,键盘输入:203040回车结果即是a为20,b为30,c为40。为了正确输入数据,在输入语句之前,常加入一个输出语句以输出提示信息。例如:Cout<<”Inputa,b,c:”<<endl;Cin>>a>>b>>c;对于cout:输出一个或多个表达式。若表达式为字符串,则将双引号中间的部分按原样输出到屏幕;若表达式为endl,则输出“回车”;若表达式为算术运算,则计算出结果后输出屏幕;若为变量,则直接输出变量的值,当然,如果想输出空格,则将其视为字符串输出:cout<<””.延迟符1.4基本语句1.4.3知识讲解3、输出流cout的格式化输出

在这里主要介绍利用C++标准库提供的操作符函数控制输出宽度、填充字符和精度的方法。需要注意的是在使用这些操作符函数时需要包含头文件iomanip,即将文件iomanip中的内容写入到程序当中。①设置输出宽度的函数:setw(宽度值)我们可根据输出格式的要求使用此函数在输出语句中自动定义每个输出项的宽度。如果域宽比需要的宽度小怎么办?例如我输出上面程序的n,它的域宽为3,但我设为2;不用怕,C++自动设为最小的实际宽度,即n需要的3位。若不使用setw(int)设定,则各项默认宽度为0,所以是按实际需要位数显示的。对于浮点型数据,若设定宽度超过其实际宽度,是通过在其小数最后位之后被“0”来达到设定宽度的。延迟符1.4基本语句1.4.3知识讲解②设置输出填充字符的函数:setfill(填充字符)此函数常与setw()函数联合使用,达到向不满设置输出宽度的空间填入指定字符的目的,不设置则填充空格。例:数据按宽度输出,前面空格以其它字符填充。如:cout<<setw(6)<<setfill(‘$’)<<27;则输出为:$$$$27。$需加单引号,则输出总长度为6个,若长度不够,则在前面填充$。又如:cout<<setfill(‘@’)<<setw(5)<<255<<endl;则输出为:@@255③设置输出精度的函数:setprecision(有效位数)此函数用来指明显示浮点型数据的有效位数,可用的最后一位的值四舍五入。1.4.4典型例题例1#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ floata=10.0/3,b=2.0/3; cout<<a<<""<<b<<endl; cout<<setprecision(2)<<a<<""<<b<<endl; return0; }运行结果:3.3333330.666673.30.671.4.4典型例题例2:求出一个三位数每个位上的数字值参考程序:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ intn=234,a,b,c; a=n/100; b=n/10%10; c=n%10; cout<<a<<b<<c<<endl; cout<<setw(3)<<a<<setw(4)<<b<<setw(5)<<c<<endl; cout<<a<<""<<b<<""<<c<<endl; return0;}

输出结果:

234234234问题分析:做这个题,需要把这个三位数上的每一位数取出来。算法设计:利用“/”和“%”来分离这个三位数,分别得到每一位上的数字。1.4.4典型例题例3:某幼儿园里,有5个小朋友编号为1,2,3,4,5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接着2号、3号、4号、5号小朋友同样这么做。问一轮后,每个小朋友手上分别有多少糖果。参考程序:

#include<iostream>

usingnamespacestd;

intmain()

{

inta,b,c,d,e;

cout<<"Inputa,b,c,d,e:";//提示输入五个小朋友存储的糖果数

cin>>a>>b>>c>>d>>e;

a=a/3;b=b+a;e=e+a;

//1号小朋友分糖

b=b/3;c=c+b;a=a+b;

//2号小朋友分糖

c=c/3;d=d+c;b=b+c;

//3号小朋友分糖

d=d/3;e=e+d;c=c+d; //4号小朋友分糖

e=e/3;a=a+e;d=d+e; //5号小朋友分糖cout<<"a="<<a<<""<<"b="<<b<<""<<"c="<<c<<""<<"d="<<d<<""<<"e="<<e<<endl;return0;}输入:89101112输出:1179116问题分析:题目中有5位小朋友,他们初始时糖果的数目不确定,用a,b,c,d,e分别存储5个小朋友的糖果数,初始值由键盘输入。1.4.4典型例题例4:分钱游戏。甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别是多少?#include<iostream>Usingnamespacestd;

intmain()

{inta,b,c;

a=8;b=8;c=8;a=a/2;b=b/2;c=a+b+c;a=a/2;c=c/2;b=a+b+c;b=b/2;c=c/2;a=a+b+c;

cout<<"a="<<a<<"b="<<b<<"c="<<c<<endl;retrun0;

}运行结果:

a=13b=7c=4问题分析:设甲、乙、丙三人的钱数分别为A,B,C。用倒推(逆序)算法,从最后结果入手,按反相顺序,分步骤推算出每次各人当时的钱数:(在每个步骤中,各人钱数分别存在A、B、C中)1.4.4典型例题例5:歌手大奖赛上6名评委给一位参赛者打分,6个人打分的平均分为9.6分;如果去掉一个最高分,这名参赛者的平均分为9.4分;如果去掉一个最低分,这名参赛者的平均分为9.8分;如果去掉一个最高分和一个最低分,这名参赛者的平均是多少?参考程序:

#include<iostream>Usingnamespacestd;

intmain()

{floathigh,low,sall,shigh,slow,ans;

sall=6*9.6;//求6名评委的总分

shigh=5*9.4; //求去掉最高分后的总分

slow=5*9.8; //求去掉最低分后的总分

high=sall-shigh; //求最高分

low=sall-slow;//求最低分

ans=(sall-high-low)/4;//求平均分

cout<<"ans="<<ans<<endl;return0;

}运行结果:9.60问题分析:首先求出6名评委的总分,然后根据去掉最高分的总分和最低分的总分,求出最高分的分值和最低分的分值,最后总分减去最高分和最低分除以4即是答案。延迟符1.4基本语句1.4.5知识讲解1、C语言的格式化输入函数scanf、格式化输出函数printf一般格式scanf函数一般调用格式:scanf(格式控制符,地址列表)2、功能scanf函数的功能是格式化输入任意数据列表3、输出函数printf一般调用格式:printf(格式控制符,输出列表)4、功能printf函数的功能是格式化输出任意数据列表延迟符1.4基本语句1.4.5知识讲解说明:1)scanf函数和printf函数所用的头文件是<cstdio>.2)scanf函数地址列表中给出各变量的地址,可以为变量的地址,即在变量的前面加上“&”,也可以为字符串的首地址。3)scanf函数、printf函数不能自动识别数据类型,由格式控制符来说明,所以格式控制符由%和格式符组成,作用是将要输入的数据按指定的格式类型输入输出,如%d,%c等。4)printf函数输出列表是需要输出的一组数据(可以为表达式和变量),各参数之间用“,”分开。要求格式说明和各输出项在数量和类型上要一一对应,否则将会出现意想不到的错误。5)printf函数可以输出直接输出常量、常量表达式等,字符串常量输出时必须用“”引起来,或者可以跟格式控制符一起输出。延迟符1.4基本语句Scanf的格式控制符:格式符说

明d,i用于输入十进制整数u以无符号十进制形式输入十进制整数o(字母)用于输入八进制整数x用于输入十六进制整数c用于输入单个字符s用于输入字符串(非空格开始,空格结束,字符串变量以'\0'结尾)f用于输入实数(小数或指数均可)e与f相同(可与f互换)延迟符1.4基本语句Printf函数的格式控制符:

格式符说

明d(或i)以带符号的十进制形式输出整数,正数的(+)号省略不输出u以无符号十进制形式输出整数x(或X)以十六进制无符号形式输出整数(不输出前导符0x)o(字母)以八进制无符号形式输出整数(不输出前导符数字0)c输出一个字符s输出字符串f以小数形式输出单、双精度,隐含输出6位小数e(或E)以指数形式输出单、双精度,隐含输出6位小数g(或G)自动选用%f、%e或%E格式中输出宽度较小的一种使用延迟符1.4基本语句Printf函数:d格式符:

参数说

明%d输出数字长为变量数值的实际长度%md输出m位(不足补空格,大于m位时按实际长度输出)%-mdm含义同上。左对齐输出%ldl(小写字母)表示输出“长整型”数据%m1d指定长整型输出宽度m位,左边补空格;否则,按实际位数输出%0md,%0m1d0(数字0)表示位数不足m时补0延迟符1.4基本语句Printf函数:f格式符:参

数说

明%f按实数格式输出,整数部分按实际位数输出,6位小数%m.nf总位数m(含小数点),其中有n位小数%-m.nf同上,左对齐延迟符1.4基本语句Printf函数:s格式符:参

数说

明%s按实际宽度输出一个字符串%msm指定宽度(不足时左补空格,大于时按实际宽度输出)%-ms左对齐,不足时右补空格%m.ns输出占m个字符位置,其中字符数最多n个,左补空格%-m.ns同上,右补空格延迟符

1.4.6典型例题例1:传说古代的叙拉古国王海伦二世发现的公式,利用三角形的三条边长来求取三角形面积。已知△ABC中的三边长分别为a,b,c,求△ABC的面积。(提示:海伦公式,其中p=(a+b+c)/2)参考程序:#include<cstdio>//DevC++可调用<iostream>和<stdio.h>库#include<cmath>//在DevC++中可调用数学函数库cmathintmain(){floata,b,c,p,s;scanf("%f%f%f",&a,&b,&c);//输入三角形的三边

p=(a+b+c)/2;//求出p的值

s=sqrt(p*(p-a)*(p-b)*(p-c));//根据p求面面积,sqrt是开方函数

printf("%0.3f\n",s);//输出面积,0.3f按实际位数输出,保留3位小数}运行结果:输入:345输出:6.000问题分析:公式中p是三角形周长的一半,求出p后直接代入海伦公式中求得面积。延迟符

1.4.6典型例题例2:某幼儿园里,有5个小朋友编号为1,2,3,4,5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接着2号、3号、4号、5号小朋友同样这么做。问一轮后,每个小朋友手上分别有多少糖果。参考程序:#include<cstdio>usingnamespacestd;intmain(){inta,b,c,d,e;printf("Entera,b,c,d,e:");scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);a=a/3;b=b+a;e=e+a;b=b/3;c=c+b;a=a+b;c=c/3;d=d+c;b=b+c;d=d/3;e=e+d;c=c+d;e=e/3;a=a+e;d=d+e;printf("%5d%5d%5d%5d%5d\n",a,b,c,d,e);//%5d按5位宽度输出return0;}问题分析:题目中有5位小朋友,他们初始时糖果的数目不确定,用a,b,c,d,e分别存储5个小朋友的糖果数,初始值由键盘输入。延迟符

1.4.6典型例题例3:歌手大奖赛上6名评委给一位参赛者打分,6个人打分的平均分为9.6分;如果去掉一个最高分,这名参赛者的平均分为9.4分;如果去掉一个最低分,这名参赛者的平均分为9.8分;如果去掉一个最高分和一个最低分,这名参赛者的平均是多少?参考程序:#include<cstdio>intmain(){floathigh,low,sall,shigh,slow,ans;sall=6*9.6;shigh=5*9.4;slow=5*9.8;high=sall-shigh;low=sall-slow;ans=(sall-high-low)/4;printf("ans=%5.2f\n",ans);//%5.2f按实数格式输出,保留2位小数}运行结果:9.60问题分析:首先求出6名评委的总分,然后根据去掉最高分的总分和最低分的总分,求出最高分的分值和最低分的分值,最后总分减去最高分和最低分除以4即是答案。延迟符1.4基本语句1.4.7字符输入函数getchar1、语法格式:getchar();2、功能接收从键盘输入的单个字符数据。说明:1)通常把输入的字符赋予一个字符变量,构成赋值语句。例如:

charch;

ch=getchar();2)getchar函数只能接受单个字符,输入数字也按字

温馨提示

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

评论

0/150

提交评论