第一章 c++简单程序设计
第一节 基本数据类型与表达式
注:标识符的构成规则:①以大小写字母或者下划线开头②不能为c++关键字、操作符
一、基本数据类型
1.整数类型:int(占4个字节)、signed(4)、unsigned(4)、short(2)、long(4)、longlong(8)
2.实数类型:float(4)、double(8)、long double(8)
3.字符类型:char(1)
4.布尔类型:只有true和false两类
二、常亮与变量
1、常量
所谓常量是指在程序运行的整个过程中其值始终不可改变的量,也就是直接使用符号(文字)表示的值。例如:12,3.5,’A’都是常量。
(1)整数常量
十进制-----> 数字部分不能以 0开头,正数前边的正号可以省略
八进制-----> 0若干个0~7 的数字,注意数字部分要以数字 0开头
十六进制---->0x若干个 0 ~ 9的数字及A ~ F的字母(大小写均可),注意数字部分要以0x开头
加后缀------>L(或 l)表示长整型;U(或 u)表示无符号型。也可同时后缀 L和 U(大小写无关)
(2)浮点数常量
以文字形式出现的实数。符点数都是近似存储,所以不能直接比较符点数的大小
一般形式------>例如,12.5,-12.5等。
指数形式------>例如,0.345E+2,-34.4E-3(E可大写可小写,整数、小数部分可以省略其一)
实数常量默认为double型,如果后缀F(或f)可以使其成为float型----->例如:12.3f。
(3)字符常量
单引号括起来的一个字符------>例如:‘a’, ‘D’, ‘?’, '$‘
(4)转义字符
字符常量形式 | ASCII码(十六进制) | 含义 |
---|---|---|
\a | 07 | 响铃 |
\n | 0A | 换行 |
\t | 09 | 水平制表符 |
\v | 0B | 垂直制表符 |
\b | 08 | 退格 |
\r | 0D | 回车 |
\v | 0C | 换页 |
\ | 5C | 字符“\” |
\” | 22 | 双引号 |
\’ | 27 | 单引号 |
2、变量
(1)变量的声明、定义和初始化
数据类型 变量名1, 变量名2, …, 变量名n;
int a=0;
int a(0);
int a={0}; //初始化列表时 这种方法可以避免数据丢失
int a{0};
(2)变量的存储类型
- auto:采用堆栈方式分配内存空间属于暂时性存储,其存储空间可以被若干变量多次覆盖使用。
- register:存放在通用寄存器中。
- extern:在所有函数和程序段中都可引用。
- static:在内存中是以固定地址存放的,在整个程序运行期间都有效。
(3)符号常量
符号常量在声明时一定要赋初值,而在程序中间不能改变其值
const 数据类型说明符 常量名=常量值;// 或:数据类型说明符 const 常量名=常量值;
const float PI = 3.1415926;
三、运算符与表达式
1、算术运算符与算术表达式
(1)基本算数运算符 + - * /(若整数相除,结果取整) %(取余,操作数为整数)
(2)优先级与结合性
先乘除,后加减,同级自左至右
++, --(自增、自减)例:i++; --j ;
2、赋值运算符和赋值表达式
(1)复合运算符:+=, -=, *=, /=, %=,<<=, >>=, &=, ^=, |=
a += 3; //等价于 a = a + 3;
x *= y + 8 ; //等价于 x = x * (y + 8);
3、逗号运算符和逗号表达式
(1)格式 :表达式1,表达式2
(2)求解顺序及结果:先求解1,再求解2,最终结果为表达式2的值
a = 3 * 5 , a * 4; //最终结果为60
4、关系运算与关系表达式
(1)< <= > >= (优先级高) == !=(优先级低)
(2)其结果类型为 bool,值只能为 true 或 false
5、逻辑运算与逻辑表达式
(1)逻辑运算符:!(非) &&(与) ||(或) 优先次序:高 → 低
(2)逻辑表达式例如:(a > b) && (x > y)
(3)其结果类型为 bool,值只能为 true 或 false
6、条件运算符与条件表达式
(1)一般形式
表达式1?表达式2:表达式3
表达式1 必须是 bool 类型
(2)执行顺序
先求解表达式1,若表达式1的值为true,则求解表达式2,表达式2的值为最终结果
若表达式1的值为false,则求解表达式3,表达式3的值为最终结果
x = a > b ? a : b;
7、sizeof 运算符
sizeof(short);
sizeof x;
8、运算符优先级
++,–,sizeof 高
*, /, %
+, -
==, !=
位运算
&&
||
?:
赋值运算
逗号运算 低
9、隐含转换与显性转换
(1)隐含转换
- 当参与运算的操作数必须是bool型时,如果操作数是其它类型,编译系统会自动将非0数据转换为true,0转换为false
- 位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,也会自动进行类型转换
- 赋值运算要求左值与右值的类型相同,若类型不同,编译系统会自动将右值转换为左值的类型
(2)显性转换
显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型
int(z);
(int)z;
static_cast<int>(z);
四、数据的输入与输出
1、输出
“<<”是预定义的插入符,作用在流类对象cout上便可以实现最一般的屏幕输出
cout<< 表达式 << 表达式…;
2、输入
键盘输入是将提取符作用在流类对象cin上。
cin >> 表达式 >> 表达式…;
在输入语句中,提取符可以连续写多个,每个后面跟一个表达式,该表达式通常是用于存放输入值的变量。
int a, b;
cin >> a >> b;
第二节 算法的基本控制结构
一、选择语句
1、if
if(x>y)
{
cout<<y;
}
2、if -else
if(x>y)
{
cout>>y;
}
else
{
cout<<x;
}
3、if-if else
if(x>y)
{
cout>>y;
}
if else(x<y)
{
cout<<x;
}
if else(x=y)
{
cout<<"error";
}
4、switch语句
#include<iostream>
using namespace std;
int main()
{
int day;
cout>>"what day is it today";
cin>>day;
switch(day)
{
case 0:cout<<"sunday"<<endl;
break;
case 1:cout<<"monday"<<endl;
break;
case 2:cout<<"tuesday"<<endl;
break;
case 3:cout<<"wednesday"<<endl;
break;
case 4:cout<<"thursday"<<endl;
break;
case 5:cout<<"friday"<<endl;
break;
default:
cout<<"error"<<endl;
break;
}
return 0;
}
二、循环语句
1、while
先判断表达式的值,若为 true 时,执行语句
int x=100;
int i=1;
while(x<=1)
{
x=x-1;
i=i+1;
}
2、do-while
先执行循环体语句,后判断条件。表达式为 true 时,继续执行循环体
int x=100;
int i=1;
do
{
x=x-1;
i=i+1;
}while(x<=1);
3、for 语句
解决循环次数已知的问题 适合计数循环
for(初始化语句;表达式1;表达式2)
最先执行初始化语句 再是判断表达式1 然后执行循环体 最后执行表达式2
for(int i=1,int x=100;x<=1;i++)
{
x=x-1;
}
三、其他控制语句
1、break语句
使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。
2、continue 语句
结束本次循环,接着判断是否执行下一次循环。
3、goto 语句
goto语句的作用是使程序的执行流程跳转到语句标号所指定的语四句。
四、自定义类型名与自定义类型(枚举类型)
1、自定义类型名
格式一:typedef 已有类型名 新类型名;
typedef int hello;
hello a=1;
格式二:using 新类型名=已有类型名;
using hellp=int;
hello a=1;
2、枚举类型
只要将需要的变量值一一列举出来,便构成了一个枚举类型。
格式:enum 枚举类型名 {变量值列表};
enum Weekday
{SUN, MON, TUE, WED, THU, FRI, SAT};
注:这个是不限定作用域枚举类型
①对枚举元素按常量处理,不能对它们赋值例如,不能写:SUN = 0;
②枚举元素具有默认值,它们依次为: 0,1,2,…。
③可以在声明时另行指定枚举元素的值,如:
enum Weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
④枚举值可以进行关系运算
⑤整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。
3、auto类型与decltype类型
(1)auto类型:编译器通过初始值自动推断变量的类型
int num1=2;
int num2=3;
auto num=num1+num2 //此时编译器自动判断变量num的类型为int
(2)decltype类型:定义某个变量与某一表达式类型相同,但并不用改表达式初始化变量
int i=5;
decltype(i)j=2; //表示j的类型与i一致为int,但是用2作为初始值,而不是5
④枚举值可以进行关系运算
day{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
⑤整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。
3、auto类型与decltype类型
(1)auto类型:编译器通过初始值自动推断变量的类型
int num1=2;
int num2=3;
auto num=num1+num2 //此时编译器自动判断变量num的类型为int
(2)decltype类型:定义某个变量与某一表达式类型相同,但并不用改表达式初始化变量
int i=5;
decltype(i)j=2; //表示j的类型与i一致为int,但是用2作为初始值,而不是5