一、C++初识
1.编写hello world
一个函数的定义包括四个部分:返回类型、函数名、形参列表、函数体
#include<iostream>
using namespace std;
int main()
{
cout << "hello world\n"; // 换行
cout << "hello world" << endl; //endl 被称为操作符,效果是换行,清空缓冲区并将其实际写入设备
system("pause"); //暂停黑窗口,输入任意键后继续
return 0;
}
2.测试system(“pause”);暂停窗口的代码
#include<iostream>
#include <cstdio>
using namespace std;
int main()
{
cout << "本进程执行过程中的第一处暂停位置!" << endl;
system("pause");
cout << "本进程执行过程中的第二处暂停位置!" << endl;
system("pause");
return 0;
}
运行结果图片:
3.C++定义常量
(1)#define 宏常量 #define 常量名 常量值
(2)const 修饰的变量 const 数据类型 常量名 = 常量值
区别:
-
#define是定义宏变量,是在编译之前,由预处理指令把代码里面的宏变量用指定的字符串替换,它不做语法处理,而const是定义含有变量类型的常量
-
一般来说推荐使用const定义常量,它在编译时会做语法处理。 Effective c++ 的条款1中:“尽量用编译器而不用预处理”,因为#define经常被认为好象不是语言本身的一部分。而且有时候用宏,会出现意想不到的输出结果。
两者比较:
- const常量有数据类型,而宏变量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,并且在字符替换可能会产生意料不到的输出结果。
- 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试
4.C++关键字
这些关键字不能作为常量名、变量名或其他标识符名称
5.C++标识符
C++规定给标识符(变量、常量)命名时,有一套规则
(1)标识符不能是关键字
(2)标识符只能由字母、数字、下划线组成
(3)第一个字符必须为字母或下划线
(4)标识符中字母区分大小写
示例:
mohd _temp j a23b9 rVtdh
6.转义字符
作用:用于表示一些不能显示出来的ASCII字符
示例:水平制表符\t
cout <<"aaa\tbbb" <<endl;
显示的结果是aaa bbb;(在aaa后面会有5个空格)
cout <<"aaaa\tbbb" <<endl;
显示的结果是aaaa bbb;(在aaaa后面会有4个空格)
7. 编译、运行程序
$ g++ ./test.cpp -o test
$ ./test.out
使用参数-std=c++11
来开启C++ 11标准支持
$ g++ -std=c++11 test_c11.cpp
二、数据类型
1.整型
作用:整型变量表示的是整数类型的数据
C++中能够表示整型的类型有以下几种方式, 区别在于所占内存空间的不同
数据类型 | 占用空间 | 取值范围 |
---|---|---|
short(短整型) | 2字节 | -32768到 32767 |
int (整型) | 4字节 | -2147483648 到 2147483647 |
long (长整型) | Windows为 4字节,Linux为4字节(32位),8字节(64位) | -2^31 ~ 2 ^31-1 |
long long (长长整型) | 8字节 | -2^63 ~ 2 ^63-1 |
2.sizeof关键字
作用:利用sizeof关键字可以统计数据类型所占内存大小(字节)
语法:sizeof(数据类型/变量)
cout << "short 类型所占内存空间为:" << sizeof(short) << endl;
cout << "int 类型所占内存空间为:" << sizeof(int ) << endl;
cout << "long int 类型所占内存空间为:" << sizeof(long int) << endl;
cout << "long long 类型所占内存空间为:" << sizeof(long long ) << endl;
3.实型(浮点型)
作用:用于表示小数
如下图,两者的区别在于表示的有效数字范围不同
数据类型 | 占用空间 | 有效数字范围 |
---|---|---|
单精度float | 4字节 | 7位有效数字 |
双精度double | 8字节 | 15~16位有效数字 |
示例:
// 浮点常数通常以 double 类型存储在内存中。如果需要强制将这类常数存储为 float 类型,则可以将 F 或 f 字母附加到其末尾。
float f1 = 3.14f; //后面加个f
double f2 = 3.14;
//默认情况下,输出一个小数,会显示出6位有效数字
float f1 = 3.14156897f;
cout << f1 << endl;
double f2 = 3.14156897;
cout << f2 << endl;
/*输出的是3.14157
3.14157 */
//科学计数法
float d1 = 3e2; //3 * 10^2;
float d2 = 3e-2; //3 * 0.1^2;
输出时要小数点后保留几位小数的问题
1.两种简单地使用方式 其实就是一种
第一种:cout<<setiosflags(ios::fixed)<<setprecision( n)<<num;这里的n就是要保留几位小数
第二种:cout<<fixed<<setprecision(n)<<num;其实就是第一种的简写
//控制输出时要小数点后保留几位小数,会四舍五入 必要头文件#include<iomanip>
cout << setiosflags(ios::fixed) << setprecision(6) << f3 << endl;//3.141569
cout << fixed << setprecision(7) << f4 << endl; //3.1415690
输出时保留几位有效数字的问题
#include<iomanip> //必要头文件
#include<iostream>
using namespace std;
int main()
{
double num = 3.14159;
cout << "原数:" << num << endl; //3.14159
cout << "保留两位有效数字:" << endl;
//{
cout <<setprecision(2) << num << endl; //3.1
//}
cout << "保留三位有效数字:" << endl;
//{
cout << setprecision(3) << num << endl; //3.14
//}
cout << "保留四位有效数字:" << endl;
//{
cout << setprecision(4) << num << endl; //3.142
//}
cout << "保留五位有效数字:" << endl;
//{
cout << setprecision(10) << num << endl; //3.14159 注意这里并不会补零
//}
system("pause");
return 0;
}
4.字符型
作用:字符型变量用于显示单个字符
语法:char ch = ‘a’ ;
注意:(1)创建字符型变量时,要用单引号
(2)单引号内只能有一个字符,不可以是字符串
●C和C++中字符型变量只占用1个字节。
●字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元
char ch = 'a';
cout << sizeof(char) << endl; //查看内存大小
cout << (int )ch << endl; //查看字符a对应的ASCII编码
char ch1 = 97; //可以直接用ASCII给字符型变量赋值
cout << ch1 << endl;
5.字符串型
作用:用于表示一串字符
两种风格
1.C风格字符串:char 变量名[] = "字符串值"
注意:C风格的字符串要用双引号括起来
char str1[] = "helloworld";
cout << str1 << endl;
2.C++风格字符串:string 变量名 = "字符串值"
注意:C++风格字符串,需要加入头文件#include<string>
string str1 = "helloworld";
cout << str1 << endl;
6.bool类型
作用:布尔数据类型代表真或假的值
bool类型只有两个值:
●true-----真(本质是1)
●false----假(本质是0)
bool类型只占一个字节
bool flag = true;
cout << flag << endl; //1
bool flag1 = false;
cout << flag1 << endl;
7.数据的输入
作用:用于从键盘上获取数据
关键字:cin
语法:cin >> 变量
int a;
cin >> a ;
cout << a << endl;
三、运算符
1.算术运算符
假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
– | 自减运算符,整数值减少 1 | A-- 将得到 9 |
2.关系运算符
假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 不为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 不为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
3.逻辑运算符
作用:用于根据表达式的值返回真值或假值
假设变量 A 的值为 1,变量 B 的值为 0,则:
运算符 | 描述 | 实例 |
---|---|---|
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(A && B) 为真。 |
4.位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
&:按位与 ------上下乘
| :按位或--------1+0=1 1+1 =1
^ : 按位异或------不同为真,相同为假
~ :按位求反------完全相反
<< :二进制左移运算符
>>
::二进制右移运算符
(空出来的位置会用0补充)
p | q | p & q | p|q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
A << 2 = 1111 0000
A >>2 = 0000 1111
5.赋值运算符
运算符 | 实例 |
---|---|
= | C = A + B 将把 A + B 的值赋给 C |
+= | C += A 相当于 C = C + A |
-= | C -= A 相当于 C = C - A |
*= | C *= A 相当于 C = C * A |
/= | C /= A 相当于 C = C / A |
%= | C %= A 相当于 C = C % A |
<<= | C <<= 2 等同于 C = C << 2 |
>>= | C >>= 2 等同于 C = C >> 2 |
&= | C &= 2 等同于 C = C & 2 |
^= | C ^= 2 等同于 C = C ^ 2 |
|= | C |= 2 等同于 C = C | 2 |
6.C++ 中的运算符优先级
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与AND | && | 从左到右 |
逻辑或 OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
四、程序流程结构
1.选择结构
C++ 编程语言提供了以下类型的判断语句。
语句 | 描述 |
---|---|
if 语句 | 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 |
if…else 语句 | 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。 |
嵌套 if 语句 | 您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 |
switch 语句 | 一个 switch 语句允许测试一个变量等于多个值时的情况。 |
嵌套 switch 语句 | 您可以在一个 switch 语句内使用另一个 switch 语句。 |
? : 运算符
可以用来替代 if…else 语句。它的一般形式如下:
Exp1 ? Exp2 : Exp3;
如果 Exp1 为真,则计算 Exp2 的值.
如果 Exp1 为假,则计算 Exp3 的值.
结果即为整个表达式的值。
2.循环结构
1.循环类型
循环类型 | 描述 |
---|---|
while 循环 | 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。 |
for 循环 | 多次执行一个语句序列,简化管理循环变量的代码。 |
do…while 循环 | 除了它是在循环主体结尾测试条件外,其他与 while 语句类似。 |
嵌套循环 | 您可以在 while、for 或 do…while 循环内使用一个或多个循环。 |
2.跳转语句
(1)break 语句
作用:用于跳出选择结构或循环结构
break使用的时机:
●出现在switch条件语句中,作用是终止case 并跳出switch
●出现在循环语句中,作用是跳出当前的循环语句
●出现在嵌套循环中,跳出最近的内层循环语句
(2)continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
int i;
//如果是奇数输出,偶数不输出
for(i = 0; i< 100; i++)
{
if(i % 2 == 0 ){
continue; //后面跳过,然后开始下一个循环
}
cout << i <<endl ;
}
(3)goto语句
作用:可以无条件跳转语句
语法:goto标记
注意:在程序中不建议使用goto语句,以免造成程序流程混乱
int main()
{
cout << "1" << endl;
goto FLAG;
cout << "2" << endl;
cout << "3" << endl;
cout << "4" << endl;
FLAG:
cout << "5" << endl;
/*输出结果为 1
5 */
return 0;
}
3.无限循环
如果条件永远不为假,则循环将变成无限循环。for 循环在传统意义上可用于实现无限循环
for( ; ; )
{
printf("This loop will run forever.\n");
}