2、启动 Dev C++,点击桌面上的图标
7、保存,编译,调试、运行。
一个好的习惯是创建了一个新程序后,在还未输入代码之前先将该程序保存到硬盘某个目录下,然后在程序的编辑过程中经常性地保存程序,以防止机器突然断电或者死机。要保存程序,只需从主菜单选择“文件”—〉”保存”就可以将文件保存到指定的硬盘目录。如下图所示。
编译:从主菜单选“运行”—〉“编译运行”或快捷键“F9”(如下左图)。如果程序中存在词法、语法等错误,则编译过程失败。编译器会在屏幕右下角的“Compile Log”标签页中显示错误信息,如(如下右图)所示,并且将源程序相应的错误行标成红色底色。
8、C++程序的执行过程
9、动手练习编程:
#include
using namespace std;
int main()
{
cout<<"春眠不觉晓,处处蚊子咬。";
return 0;
}
// 在显示器上显示一行文字
#include
using namespace std;
/*使用命名空间 std
----
---- 以下为程序主体部分----*/
int main()
{ cout<<"my frist program."<
#include //预处理
using namespace std;
int main()
{ cout<<"my frist program."<
一个中大型软件往往由多名程序员共同开发,会使用大量的变量名和函数名,不可避免地会出现变量或函数重复命名冲突。当各人代码测试通过,没有问题,但将它们结合到一起,就有可能会出现重命名错误。
如两家公司的类库中都有一个名为“Stack”的类,那么当你需要同时用到这两个公司的类库时,就会产生名字冲突,无法区分是哪一个Stack,因此,一般公司都会把自己的类,函数,变量等放在一个名字空间中,防止冲突。
比如: namespace s1 {int a = 10;} namespace s2 {int a = 20;}
这样就在两个名字空间中声明了两个不同的变量 a,如果想要同时在一个源文件中使用这两个 a,可以这样做:
int c = s1::a; // 表示 s1 中的 a
int d = s2::a; // 表示 s2 中的 a
为了解决合作开发时的命名冲突问题,C++ 引入了命名空间。C++标准库中的所有组件都是在 std 名字空间中声明和定义的。
最开始时,大家用std::cout来表示输出,cout 是std标准名空间下的名字。
#include
int main()
{ std::cout<<“my frist program.“<
但是这样就要在每一个变量或函数前都要加上其所属的系统名。后来为了方便,演变为在程序头统一书写如下:
#include
using std::cout;
using std::endl;
int main()
{ cout<<“my frist program.“<
表示程序中的cout、endl等是标准公司std的对象名或变量名。这样在程序中就不要每个变量前都写所属系统名std。但如果变量名多,那在程序头要写上很多的声明。最后演变为在程序头统一写一条声明:using namespace std;表示程序中用到的cout,endl等都是标准公司的。
#include
using namespace std;
int main()
{ cout<<“my frist program.“<
1、int main()后面跟一对括号,说明它是一个函数。每个C++程序都必须有一个且只能有一个main()函数。不管main()函数在程序的什么位置,整个程序总是从主函数 main() 开始被执行。
2、每条C++语言必须用分号来结束。但预处理命令、函数头和花括号后不加分号。
#include
using namespace std;
int main() //函数头,程序从此开始运行
{ cout<<“my frist program.“<
#include
using namespace std;
int main()
{
cout<<“my “;
cout<<“program”<
#include
using namespace std;
int main()
{ cout<<“my ”; cout<<“program”<
#include
using namespace std;
int main()
{ //这是一条语句写在两行
cout<<“my ”
<<“program”<
#include //printf和scanf调用cstdio库,在C语言中可调用stdio.h库
#include // 使用system( )调用cstdlib库
using namespace std; //在C语言中要省略,
int main() //整个程序开始
{ float s,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"); //暂停作用
return 0; //结束程序
}
运行结果:
例2、 已知一位小朋友的电影票价是10元,计算x位小朋友的总票价是多少?
【分析】 假设总票价用y来表示,则这个问题可以用以下几个步骤来实现: ①输入小朋友的数目x; ②用公式y=10*x计算总票价; ③输出总票价y的值。
#include //使用cin,cout,须调用iostream库
using namespace std;
int main()
{ int x,y; //定义整型变量
cout<<"Input x="; //输入提示
cin>>x; //小朋友的人数
y=10*x; //计算总票价
cout<<"total="<
输入:5
输出:
例3、 有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供15头牛吃20天,或可供20头牛吃10天,那么,这片牧场每天新生的草量可供几头牛吃1天?
【分析】解决这类问题的关键是利用牛吃的草量,最终求出这片牧场每天新生长的草量,我们设1单位的草量为1头牛1天所需的草量,于是15头牛20天所食的草量为300单位(包括这20天内的新生草量),20头牛10天所食的草量为200单位(包括这10天内的新生草量),两者的差值即为10天内的新生草量。
#include //使用cin,cout,须调用iostream库
using namespace std;
int main()
{ int s1,s2,s3; //变量定义
s1=15*20; //15头牛20天所食的草量
s2=20*10; //20头牛10天所食的草量
s3=(s1-s2)/(20-10); //每天新生的草量单位数
cout<<"s="<
输出:
#include //使用cin,cout,须调用iostream库
using namespace std;
int main()
{ char a; //定义字符变量,
cin>>a; //输入给定一个字符
cout<<" "<
例5、输入两个正整数A和B,试交换A、B的值(使A的值等于B,B的值等于A)。
【分析】 交换两个变量的值方法很多,一般我们采用引入第三个变量的算法,二个变量交换,可以想像成一瓶酱油和一瓶醋进行交换,这时容易想到拿一个空瓶子过来:
① 将酱油倒到空瓶中;② 将醋倒到酱油瓶中;③ 将原空瓶中的酱油倒到醋瓶中。
#include //使用cin,cout,须调用iostream库
using namespace std;
int main()
{ int a,b,c; //定义三个变量
cout<<"Input a,b="; //输入提示Input a,b=
cin>>a>>b; //输入A、B的值
c=a; a=b; b=c; //交换A、B的值
cout<<"a="<
第二节 常量与变量
1、常量
常量是在程序运行过程中,其值保持不变的量。 C++ 中定义一个符号常量的格式如下:
类型名 const 常量名=常量值 或 const 类型名 常量名=常量值
例如:
int const A = 100;
const float PI = 3.1415926;
- 使用符号常量是为了方便程序的修改,增强程序的读性。
- 符号常量必须先定义,同时进行初始化它表示一个数值。
- 符号常量的值在其作用域内不能改变,也不能再被赋值。
- 为了更清晰地区别常量和变量,常量名通常用大写字母表示。
2、变量
- C++要求变量必须先定义后使用。在第一次使用该变量之前进行定义即可。
- 多个同一类型的变量可以在一行中定义,中间用逗号隔开,也可以分别定义。例如:
int a=5,b,c; //定义3个整型变量a,b,c
int a=5; //定义整型变量a,并给a赋初值
int b; //定义整型变量b
int c; //定义整型变量c
- 变量在定义的同时,可以给它指定一个初始值,称为变量的初始化。
- 变量的赋值 在 C++ 中,可以通过“赋值”语句来修改变量的值。赋值语句的格式如下:
变量名 = 值或者表达式 ; 其中,“=” 称为“赋值号”。
3、变量名及常量名的命名要遵守以下规则:
- 变量名除了使用26个英文大小写字母和数字外,还可以使用下划线。
- 第一个字符必须是字母或下划线,不能用数字开头,中间不能有空格。
- 一般不要超过31个字符。
- 变量名不要与C++中的库函数名、类名和对象名相同。不能用C++保留字,C++具体的保留字如下表:
- 尽量使用汉语拼音或含有一定意义的英语单词来定义变量,做到见名知义,便于记忆。
c++关键字分类:
数据类型:void,int,char,float,double,bool,w_char
类型定义:struct,union,enum,class,typedef
常量值:true,false
类型修饰符:long,short,singed,unsigned
类型限定符:const,volatile,restrict
存储说明符:auto,register,static,extern,thread_local,mutable
其它修饰符:inline,asm
循环控制:for,while,do
跳转控制:break,continue,return,goto
分支结构: if,else,switch,case,default
内存管理:new, delete
运算符:sizeof,and,and_eq,bitand,bitor,compl,not,not_eq,or,or_eq,xor,xor_eq
访问限定符:this,friend,virtual,mutable,explicit,operator
类访问修饰符:private,protected,public
模板:template,typename
命名空间:namespace,using
异常处理:throw,try,catch
4、练习:
1、下列变量名哪些是合法的变量名?
a123 c3b file_1 ¥3 cout Cout 5ab return 0 Mr.Wang sum Day school_name a>=b ¥1234lotus sum123 day 234NUM #34 int
第三节 数据类型
1、简介
- 数据有数据类型、取值范围、运算类型三个要素。
常用的数据类型有:整型、字符型、布尔型、实数型(浮点型)。
动手编程:
用sizeof()函数测试各种数据类型在计算机中所占的空间大小;
#include //预处理
using namespace std;
int main()
{ cout<<"short="<
2、整数类型:
整数分“有符号”类型和“无符号”类型,无符号整数取值只会是正数和0。例如int 类型取值范围为 -2147483648 ~ 2147483647 ,unsigned int类型的取值范围为0~4294967295。
- 定义变量时,要注意数据的大小,避免数据溢出,C++程序中出现这类错误时,编译和运行过程中并不报错。所以,需要特别细心,注意范围检查。
#include
using namespace std;
int main(){
int a = 2147483647;
a = a + 1;
cout << "a=" << a << endl;
return 0;
}
输出:
- 在 C++ 程序中,使用的各种变量都应“先声明,后使用”。以下程序会报错:
#include
using namespace std;
int main(){
cin>>a>>b>>d;
int a,b,c;
double d,e;
c = a + b;
e = c + d;
cout << a << " + " << b << " = " << c << endl;
cout << c << " + " << d << " = " << e << endl;
return 0;
}
- 在C++中,字符型数据可以直接参与整型或者实型数据的运算,按照其ASCII码值使用。
- int(ch)可以把char字符型强制转换成int整数类型。
#include
using namespace std;
int main(){
int b = 0, a = 100;
char ch = 'A';
b = a + ch;
cout << ch << " " << int(ch) << " " << b << endl;
return 0;
}
输出:
- 不同进制表示法:20(十进制)=024(八进制)=0x14(十六进制)
3、字符类型
1、字符
•单引号括起来的一个字符如‘A’ , ‘2’(非数字) ,
•单引号内只能包含一个字符,如‘ab’是非法的。
•字符常量区分大小字,如‘A’与‘a’ 是不同的字符。
•单引号 ‘ ’ 是定界符,不是字符的一部分。
2、转义字符:
•是以“\”开头的字符系列。它能调用在屏幕上不能显示的字符。
•是将“\”后面的字符转换为另外的意义。例如:\n中的n不代表字母n。而\与n组合一起作为换行。
•转义字符 ‘\n’ ,虽然是二个字符,但系统把它们当成一个字符。
注意:1、转义字符是用’\’(斜杠),不是用‘/’(除号)。
2、“\n”是字符串,‘\n’是字符,功能都可以换行。
转义字符列表
-
运用转义字符 \ddd,\xhh输出字符
运用转义字符\ddd,\xhh可以调用ASC码表中的任意字符;(只有序号为32到126之间的字符可以显示)。ddd代表八进制数,hh代表十六进制数;
#include
using namespace std;
int main()
{ cout<<'\x41'<<'\t'<<'\101'<<'\n';
cout<<'\x42'<<'\t'<<'\102'<<'\12';
cout<<'\x43'<<'\t'<<'\103'<<'\xa';
}
运行以上程序,思考下面的问题;
1、单引号、双引号在此的效果有没有影响。
2、“\x43”,中的x可以写成大写的X吗?
3、 ‘\t’起了什么作用,其中的\省略会是什么结果?
4、比较‘\n’、‘\12’、‘\xa’的作用是否相同?
看程序写结果:
#include
using namespace std;
int main(){
char a ='A' ;
putchar(a); // 输出一个A
putchar('\\'); // 输出‘\ ’
putchar('\n' ); // 输出回车换行
char c;
c = getchar();
putchar(c + 1);
//输入一个字符, 输出它在ASCII 码表中的后一个字符
return 0;
}
输出:
#include
using namespace std;
int main(){
char c1,c2,c3;
c1 = ‘a’;
c2 = ‘Z’;
c1 = c1 - 32;
c2 = c2 + 32;
c3 = ‘0’ + 9;
cout << c1 << “ ” << c2 << “ ” << c3 << endl;
return 0;
}
输出:
#include
using namespace std;
int main()
{
int i,j;
i='A'; j='a';
cout<
输出:
3、字符串
字符串是用一对双引号括起来的字符序列,例如“China”。‘A’与“A”是不同的:
‘A’是字符,内存中占用一个字节。 “A”是字符串,内存中占用二个字节,分别是A和空字符(字串符结束符)。
在 C语言中,用字符数组 char s[]存放字符串,在 C++ 中除了用字符数组 char s[]存放字符串,也可以用 STL 中的 string 类型。每一个字符串的结尾都要加一个“字符串结束标志”,而且是系统自动添加上去的,C++规定以转义字符“\0”作为字符串结束标志。
4、布尔数据类型
布尔常量仅有两个:false(假)=0 和 true(真)=非0。
布尔类型内存中占一个字节。
5、练习
1、输入a,b两个值,并交换他们的值。
2、五位好朋友相聚。第一位朋友带来了 很多糖块赠送给各位朋友,使每人的糖块 在各自原有的基础上翻了一倍;接着第二位好友也同样向每人赠送糖块,他同样使每人的糖块在各人已有的数量上翻了一倍;第三、第四、第五位好友都照此办理。经过这样的赠送之后,每人的糖块恰好都为32块。问各位好友原先的糖块数分别是多少?
3、分钱游戏。甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。 求原先各人的钱数分别是多少?
4、输入或者字符a,输出全由字符a字符组成的图形。
例如: 输入8,则输出由8组成的圣诞树。 输入T,则输出由T组成的苹果。
5、输入一个数字a和一个字符b,输出全是由字符b组成的图形,并且图形整体向右平移a的位置。
6、输出各种类型的所占存储空间大小。
7、运用Sizeof() 函数,输出“hello world”字符串占用的存储空间大小。
8、请思考:
”abc\ndef”包含几个字符?
”abc\\ndef”包含几个字符?
语句 cout<< ”abc\ndef”; 输出结果是:
语句 cout<< ”abc\\ndef”; 输出结果是:
9、输入一个33到126之间的数字,输出对应的ASC码字符(试试有几种方法) 。
输入一个字符,输出其对应的ASC码。(试试有几种方法)。
10、输入一个四位数,倒序输出这个数, 如输入1234,输出4321。
11、取一个大于8位数的整数a,取从右端开始的4~7位,并输出。
12、时间戳
某国家安全局获得一份珍贵的材料,上面记载着一个恐怖活动的计划,不过,国家安全局人员却没法直接得到实施的时间!材料上的时间使用的是Linux时间戳,即是从1970.1.1日0时0分起到该时刻总共过了多少秒。现希望你帮助完成此事,给你该时间戳,你要写个程序计算出恐怖活动在哪一天实施。这里为了简单起见,规定一年12月,每个月固定为30天。 输入:一个整数n(0<=n<=2147483647),表示从1970.1.1日0时0分开始的秒数。 输出:年月日 格式的日期
样例输入1:1304324570
样例输出1:2011 12 7
样例输入2:93312000
样例输出2:1973 1 1
13、计算某次考试语文、数学、英语和计算机等四科的总成绩与平均成绩。 (请用输入语句从键盘输入各科成绩分,并对齐输出)
Yuwen shuxie yingyu pingjun zhongfen
93 87 90 90 270
14、在屏幕上输出一个算术竖式。可以通过输入变量改变因数的值,并用setw()对齐各数位。如:
输入: 89 57
输出:
89
+ 57
_______
146
第四节 运算符
1、运算符及优先级列表
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[常量表达式]
左到右
()
圆括号
(表达式)/函数名(形参表)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
对象指针->成员名
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针变量
单目运算符
&
取地址运算符
&变量名
单目运算符
!
逻辑非运算符
!表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof(表达式)
3
/
除
表达式/表达式
左到右
双目运算符
*
乘
表达式*表达式
双目运算符
%
余数(取模)
整型表达式/整型表达式
双目运算符
4
+
加
表达式+表达式
左到右
双目运算符
-
减
表达式-表达式
双目运算符
5
<<
左移
变量<<表达式
左到右
双目运算符
>>
右移
变量>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
表达式&表达式
左到右
双目运算符
9
^
按位异或
表达式^表达式
左到右
双目运算符
10
|
按位或
表达式|表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2: 表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量|=表达式
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算
2、算术运算符(+、-、*、/、%、++、--)
1、%(模运算符或称求余运算符)两侧必须为整数。如7%4=3
2、/(整除运算符)两个整数相除为整数。如:5/2=2 ;
两个数中有一个为小数则结果为小数 如:5.0/2=2.5;
两个数中有一个为负数则“向零取整” 如:-19/10=-1 -11/10=-1 -21/10=-2
#include
using namespace std;
int main()
{
int n,a,b,c;
cin >> n; //从键盘输入一个整数给n
a = n % 10;
b = n / 10 % 10;
c = n / 100;
cout << a + b + c << endl;
return 0;
}
输入:321
输出:
计算下面表达式的值:
17/3= 18.0/4= 4567%1000= 17%3= -17/4= 4567/100=
3、++ --(自增自减运算符)作用是使变量加一或减一。
#include
using namespace std;
int main()
{ int i,j;
i=3; j=++i;
cout<<“j=”<
输出: j= i=
#include
using namespace std;
int main()
{ int i,j;
i=3; j=i++;
cout<<“j=”<
输出: j= i=
#include
using namespace std;
int main()
{ int i,j;
i=3; j=i--;
cout<<“j=”<
输出: j= i=
#include
using namespace std;
int main()
{ int i,j;
i=3; j=--i;
cout<<“j=”<
输出: j= i=
#include
using namespace std;
int main()
{ int x,y,z1,z2;
x=7; y=8;
z1=y-(x++); //计算z1=1,计算后x=8
z2=y-(++x); //计算前x的值自加1,x的值为9,再与y求差
cout<<"z1="<
输出:z1= z2=
#include
using namespace std;
int main()
{ int i=1;
i=(++i)+(++i);
cout<
输出:
- 自增(++)、自减(--)运算符为变量的增1和减1提供了紧凑格式。
- 自增、自减运算符都是单目运算符,其作用是使变量的值增1或减1。
- 自增、自减运算符有四种应用格式:
int a=3; b=a++; 等价于 b=a; a=a+1;
int a=3; b=a- -; 等价于 b=a; a=a-1;
- (运算符后置用法,代表先使用变量,然后对变量增值)
int a=3; b=++a; 等价于 a=a+1; b=a;
int a=3; b=- -a; 等价于 a=a-1; b=a;
- (运算符前置用法,代表先对变量增值,再使用变量)
- C++编译器在处理时尽可能多的自左向右将运算符结合在一起。
例如:a+++b 表示为 (a++)+b 而不是 a+(++b)。
- 在调用函数时,实参的求值顺序一般为自右向左。
例如:
#include
using namespace std;
int main()
{ int a=1;
printf("%d,%d,%d",a++,a++,a++);
}
输出的结果为3,2,1而不是1,2,3。
4、 赋值运算符(=)
1、表达形式: int a,b,c; a=3; b=3; c=3; 也可以表达为 a=b=c=3;
a=5+(c=6); 表达式的a值为11;c的值为6;
a=(b=4)+(c=6); 表达式的a值为10;b的值为4;c的值为6;
2、复合赋值运算符:在“=” 号前加其他运算符,可以构成复合运算符。
a+=3 等价于 a=a+3 a+=y+3 等价于 a=a+(y+3)
a-=3 等价于 a=a-3 a*=y+4 等价于 a=a*(y+4)
a*=3 等价于 a=a*3 a%=3 等价于 a=a%3
a/=3 等价于 a=a/3
3、赋值过程中的类型转换
float转换为整型 int a; float b; b=3.65; a=b; 则a==3
字符转换为整型 int a; char b; b=‘A’; a=b; 则a==65
整型转换为字符 int a; char b; a=65; b=a; 则b==‘A’
#include
using namespace std;
int main()
{ int a=10,b,c,t=0,s=100;
a+=20;
c=b*=b=a;
(s/=c)%=a;
t+=(a+b)*c;
cout<
输出:
#include
using namespace std;
int main()
{ int b=13,a=10;
(a=(b*=b))+=4;
cout<
输出:
5、关系运算符
- 关系运算符用于两个值进行比较,运算结果为true(真)或false(假),
分别用值非0(true)或0(false)表示。C++中的关系运算符如下:
<(小于) <=(小于等于) >(大于) >=(大于等于) ==(等于) !=(不等于)
- 关系运算符都是双目运算符,其结合性是从左到右,<、<=、>、>=运算符的优先级相同,==和!=运算符的优先级相同,前者运算的优先级高于后者。
- 关系运算符的优先级低于算术运算符。
例如:a+b>c 等价于 (a+b)>c a!=b>c 等价于 a!=(b>c)
#include
using namespace std;
int main()
{ int n1=4,n2=5,n3;
n3=n1>n2; //n3的值为0
n3=n1
6、逻辑运算符
&&(逻辑与) ||(逻辑或) !(逻辑非)
逻辑表达式的结果为真则为1,结果为假则为0。
逻辑非(!)是单目运算符,逻辑与(&&)与逻辑或(||)为双目运算符。
逻辑非(!)的优先级最高,逻辑与(&&)次之,逻辑或(||)最低。
逻辑运算真值表如下表所示(逻辑运算真值(真为非0,假为0)
数学里的表达式(a>x>b), C++中要写成(a>x && xx>b)
逻辑表达式是“短路计算”,在逻辑表达式的计算过程中,一旦能够确定整个表达式的值,就会立刻停止计算.
7、 条件运算符
- 条件运算符“?:”是C++中唯一的三目运算符,其形式为: 表达式1 ?表达式2 :表达式3
它的运算方式为:先计算表达式1的值,如果其值为非0(真), 则表达式2的值就是整个表达式的最终结果; 否则表达式3的值就是整个表达式的值。
例如:max=((a>b)?a:b)
上面例子定义了一个求两个数a和b中最大值,其中决定哪一个是 最大值用了条件运算符。
- 条件运算符的结合性是自右向左。例如有以下条件表达式:
a>b?a:c>d?c:d 相当于 a>b?a:(c>d?c:d)
- 条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符。
例如有: a>b?a-b:b-a 相当于 a>b?(a-b):(b-a)
8、 位运算符
- 位(bit)是计算机中表示信息的最小单位,一般用0和1表示。一个字符在计算机中用8个位表示,8个位组成一个字节。C++语言需要将人们通常所习惯的十进制数表示为二进制、八进制或十六进制数来理解对位的操作。C++中所有的位运算符如下:
~(按位求反), <<(左移), >>(右移), &(按位与), ^(按位异或), |(按位或)。
- 位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数。
9、 sizeof()运算符(求字节运算符)
- sizeof()运算符是单目运算符,用于计算运算对象在内存中所占字节的多少,它有两种形式:
sizeof (类型标识符);
sizeof 表达式;
- sizeof()可以接受的类型标识符很多,
例如:sizeof(int)表示求整型数据在内存中所占字节数。
例如:sizeof(“Hello,Wlord!”)表示求字符串在内存中所占字节数。
例如:int a,则sizeof(a)表示求变量a在内存中所占字节数。
例如:int a[10],则sizeof(a)表示求数组a在内存中所占字节数。
10、逗号运算符
- 逗号运算符用于将多个表达式连在一起,并将各表达式从左到右的顺序依次求值,但只有其最右端的表达式的结果,作为整个逗号表达式的结果。
- 逗号表达式的一般格式为:表达式1,表达式2,……,表达式n
#include
using namespace std;
int main()
{ int a=3,b=4,c=5,d;
d=(a+b,b+c,c+a);
cout<
则先求解a+b,再求解b+c,最后求解c+a, 整个表达式的结果为c+a的结果。
- 逗号运算符的运算级别是所在运算符中最低的。
#include
using namespace std;
int main()
{ int a,b,c,d;
cin>>a>>b;
a*=b; b--;
(c=d=a)=b;
d=(a++,b+10,c--);
cout<
输入: 100 20
输出:
11、强制类型转换符
- 强制转换的一般形式;(类型名)(表达式)
(double)a (将a的值转换成double类型)
(int) (x+y) (将x+y的值转换成整数类型)
(int) x +y (将x的值转换成整数类型,再加上y)
(float) (5%3) (将5%3的值转换成单精度类型)
#include
using namespace std;
int main()
{ int x;
float a=15.75;
double b=323.01;
cout<<(int)a<
12、运算符优先级
- 运算符优先级决定了在表达式中各个运算符执行的先后顺序。高优先级运算符先于低优先级运算符进行运算。在优先级相同的情形下,则按从左到右的顺序进行运算。
- 当表达式中出现了括号时,会改变优先级。先计算括号中的子表达式值,再计算整个表达式的值。
-
运算符的结合方式有两种:
左结合和右结合。左结合表示运算符优先与其左边的标识符结合进行运算,如加法;
右结合表示运算符优先与其右边的标识符结合,如单目运算符+、-。
- 同一优先级的优先级别相同,运算次序由结合方向决定。
如1*2/3,*和/的优先级别相同,其结合方向自左向右,则等价于(1*2)/3。
- 不同的运算符要求有不同的运算对象个数,单目运算符只需一个运算对象,如 i++,-a,sizeof(b)等。
读程序写结果:
#include
using namespace std;
int main()
{ int s=200,a=10;
int b=20,c=50;
s-=a;
s-=b;
s-=c;
cout<
输出:
#include
using namespace std;
int main()
{ int i=1,sum=0;
sum+=i; i*=2;
sum+=i; i*=2;
sum+=i; i*=2;
sum+=i;
cout<<"i="<
输出:
输出:
#include
using namespace std;
main()
{ int a=17,b=5,c,d;
c=a/b; d=a%b;
cout<
输出:
1、 字符处理 ctype.h
2、 数学函数 math.h
3 、输入输出 stdio.h
4 、实用工具程序 stdlib.h
5 、字符串处理 string.h
包含在math.h库文件中的函数 |
||||||
函数类型 |
函数形式 |
功能 |
类型 |
|||
数 学 函 数 |
abs(int i) |
求整数的绝对值 |
int |
|||
fabs(double x) |
返回浮点数的绝对值 |
double |
||||
floor(double x) |
向下取整 |
double |
||||
ceil(double x) |
向上取整 |
double |
||||
trunc(double x) |
取整数部分 |
int |
||||
round(double x) |
四舍五入 |
int |
||||
fmod(double x, double y) |
计算x对y的模, 即x/y的余数 |
double |
||||
int(double x) |
取整数部分 |
|
||||
exp(double x) |
指数函数 |
double |
||||
log(double x) |
对数函数ln(x) |
double |
||||
log10(double x) |
对数函数log |
double |
||||
labs(long n) |
取长整型绝对值 |
long |
||||
modf(double value, double *iptr) |
把数分为指数和尾数 |
double |
||||
pow(double x, double y) |
指数函数(x的y次方) |
double |
||||
sqrt(double x) |
计算平方根 |
double |
||||
rand() |
产生0到RAND_MAX之间的随机整数 |
int |
||||
sin(double x) |
正弦函数 |
double |
||||
asin(double x) |
反正弦函数 |
double |
||||
sinh(double x) |
双曲正弦函数 |
double |
||||
cos(double x); |
余弦函数 |
double |
||||
acos(double x) |
反余弦函数 |
double |
||||
cosh(double x) |
双曲余弦函数 |
double |
||||
tan(double x) |
正切函数 |
double |
||||
atan(double x) |
反正切函数 |
double |
||||
tanh(double x) |
双曲正切函数 |
double |
||||
包含在ctype.h库文件中的函数 |
||||||
函数类型 |
函数形式 |
功能 |
类型 |
|||
字 符 函 数 |
isalpha(int ch) |
若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 |
int |
|||
isalnum(int ch) |
若ch是字母('A'-'Z','a'-'z')或数字('0'-'9')返回非0值,否则返回0 |
int |
||||
isascii(int ch) |
若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 |
int |
||||
iscntrl(int ch) |
若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F)返回非0值,否则返回0 |
int |
||||
isdigit(int ch) |
若ch是数字('0'-'9')返回非0值,否则返回0 |
int |
||||
isgraph(int ch) |
若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 |
int |
||||
islower(int ch) |
若ch是小写字母('a'-'z')返回非0值,否则返回0 |
int |
||||
isprint(int ch) |
若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0 |
int |
||||
ispunct(int ch) |
若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 |
int |
||||
isspace(int ch) |
若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n'),返回非0值,否则返回0 |
int |
||||
isupper(int ch) |
若ch是大写字母('A'-'Z')返回非0值,否则返回0 |
int |
||||
isxdigit(int ch) |
若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值,否则返回0 |
int |
||||
tolower(int ch) |
若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z') |
int |
||||
toupper(int ch) |
若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z') |
int |
||||
|
|
|
|
|||
包含在string.h库文件中的函数 |
||||||
函数类型 |
函数形式 |
功能 |
类型 |
|||
字 符 串 函 数 |
strcat(char *dest,const char *src) |
将字符串src添加到dest末尾 |
char |
|||
strchr(const char *s,int c) |
检索并返回字符c在字符串s中第一次出现的位置 |
char |
||||
strcmp(const char *s1,const char *s2) |
比较字符串s1与s2的大小,并返回s1-s2 |
int |
||||
stpcpy(char *dest,const char *src) |
将字符串src复制到dest |
char |
||||
strdup(const char *s) |
将字符串s复制到最近建立的单元 |
char |
||||
strlen(const char *s) |
返回字符串s的长度 |
int |
||||
strlwr(char *s) |
将字符串s中的大写字母全部转换成小写字母,并返回转换后的字符串 |
char |
||||
strrev(char *s) |
将字符串s中的字符全部颠倒顺序重新排列,并返回排列后的字符串 |
char |
||||
strset(char *s,int ch) |
将一个字符串s中的所有字符置于一个给定的字符ch |
char |
||||
strspn(const char *s1,const char *s2) |
扫描字符串s1,并返回在s1和s2中均有的字符个数 |
char |
||||
strstr(const char *s1,const char *s2) |
描字符串s2,并返回第一次出现s1的位置 |
char |
||||
strtok(char *s1,const char *s2) |
检索字符串s1,该字符串s1是由字符串s2中定义的定界符所分隔 |
char |
||||
strupr(char *s) |
将字符串s中的小写字母全部转换成大写字母,并返回转换后的字符串 |
char |
||||
包含在stdio.h库文件中的函数 |
||||||
函数类型 |
函数形式 |
功能 |
类型 |
|||
输
入
输
出
函
数 |
getch() |
从控制台(键盘)读一个字符,不显示在屏幕上 |
int |
|||
putch() |
向控制台(键盘)写一个字符 |
int |
||||
getchar() |
从控制台(键盘)读一个字符,显示在屏幕上 |
int |
||||
putchar() |
向控制台(键盘)写一个字符 |
int |
||||
getc(FILE *stream) |
从流stream中读一个字符,并返回这个字符 |
int |
||||
putc(int ch,FILE *stream) |
向流stream写入一个字符ch |
int |
||||
getw(FILE *stream) |
从流stream读入一个整数,错误返回EOF |
int |
||||
putw(int w,FILE *stream) |
向流stream写入一个整数 |
int |
||||
fclose(handle) |
关闭handle所表示的文件处理 |
FILE * |
||||
fgetc(FILE *stream) |
从流stream处读一个字符,并返回这个字符 |
int |
||||
fputc(int ch,FILE *stream) |
将字符ch写入流stream中 |
int |
||||
fgets(char *string,int n,FILE *stream) |
流stream中读n个字符存入string中 |
c har * |
||||
fopen(char *filename,char *type) |
打开一个文件filename,打开方式为type,并返回这个文件指针,type可为以下字符串加上后缀 |
FILE * |
||||
fputs(char *string,FILE *stream) |
将字符串string写入流stream中 |
int |
||||
fread(void *ptr,int size,int nitems,FILE *stream) |
从流stream中读入nitems个长度为size的字符串存入ptr中 |
int |
||||
fwrite(void *ptr,int size,int nitems,FILE *stream) |
向流stream中写入nitems个长度为size的字符串,字符串在ptr中 |
int |
||||
fscanf(FILE *stream,char *format[,argument,…]) |
以格式化形式从流stream中读入一个字符串 |
int |
||||
fprintf(FILE *stream,char *format[,argument,…]) |
以格式化形式将一个字符串写给指定的流stream |
int |
||||
scanf(char *format[,argument…]) |
从控制台读入一个字符串,分别对各个参数进行赋值,使用BIOS进行输出 |
int |
||||
printf(char *format[,argument,…])
|
发送格式化字符串输出给控制台(显示器),使用BIOS进行输出 |
int |
#include
#include//使用数学函数前必须添加cmath或者math.h
using namespace std;
int main()
{ double x1,y1,x2,y2;
cin >> x1 >> y1 >> x2 >> y2;
cout << sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
return 0;
}