/*** #include头文件,既用于声明头文件以供多个文件使用,同时也用来声明函数原型,以便于在整个程序中使用 ***/
#include
// 主函数,程序入口
int main(){
std::cout << "Hello World !" << std::endl;
std::cout << "Welcome to C++ ! " << std::endl;
return 0;
}
//注释描述
/* 注释描述 */
数据类型 变量名 = 初始值;
#include
using namespace std;
int main() {
//变量的定义
//语法:数据类型 变量名 = 初始值
int a = 10;
cout << "a = " << a << endl;
system("pause");
return 0;
}
#define 常量名 常量值
const 数据类型 常量名 = 常量值
//1、宏常量
#define day 7
int main() {
cout << "一周里总共有 " << day << " 天" << endl;
//day = 8; //报错,宏常量不可以修改
//2、const修饰变量
const int month = 12;
cout << "一年里总共有 " << month << " 个月份" << endl;
//month = 24; //报错,常量是不可以修改的
system("pause");
return 0;
}
// file_1.cpp
// 定义并初始化了一个常量,该常量可以被其他文件访问
extern const int bufSize = fcn();
// file_2.h
// 与file_1.cpp中定义的bufSize是同一个
extern const int bufSize;
// file_1.cpp定义并初始化了bufSize,因此显然是一个定义,加上了extern则可以被其他文件访问
// file_2.h头文件中的声明也由extern做了限定,其作用是指明bufSize并非本文独有,它的定义将在别处出现
sizeof( 数据类型 / 变量)
sizeof(float)
作用:表示小数
分成两种:float、double
作用:用于显示单个字符
语法:char ch = 'a';
注意:
C/C++中字符型变量只占用一个字节
不是把字符本身放到内存中存储,而是将对应的ASCII编码放入存储单元
int main() {
char ch = 'a';
cout << ch << endl;
cout << sizeof(char) << endl;
//ch = "abcde"; //错误,不可以用双引号
//ch = 'abcde'; //错误,单引号内只能引用一个字符
cout << (int)ch << endl; //查看字符a对应的ASCII码
ch = 97; //可以直接用ASCII给字符型变量赋值
cout << ch << endl;
system("pause");
return 0;
}
转义字符:用于表示一些不能显示出来的ASCII字符
字符串型
C风格:char 变量名[]="字符串值"
int main() {
char str1[] = "hello world";
cout << str1 << endl;
system("pause");
return 0;
}
C++风格:string 变量名="字符串值"
#include
int main() {
string str = "hello world";
cout << str << endl;
system("pause");
return 0;
}
int main() {
bool flag = true;
cout << flag << endl; // 1
flag = false;
cout << flag << endl; // 0
cout << "size of bool = " << sizeof(bool) << endl; //1
system("pause");
return 0;
}
标准库 string 表示可变长的字符序列
使用string类型时必须要首先包含string头文件
#include
定义和初始化
string s1; // 默认初始化,s1是一个空字符串
string s2(s1); // 直接初始化
string s2 = s1; // 拷贝初始化
string s3(n, 'c'); // 把s3初始化为由连续n个字符c组成的串
// 例如:
string s3(5, 'c'); // s3的初始化内容是5个c组成的串:ccccc
string对象的操作
#include
int main() {
string s;
std::cin >> s;
std::cout << s << std::endl;
return 0;
}
string s1, s2;
cin >> s1 >> s2; // 第一个输入读到s1中, 第二个输入读到s2中
cout << s1 << s2 << endl;
getline
int main() {
string line;
// 每次循环都是读入一整行,
while (getline(cin, line)) {
cout << line << endl;
}
return 0;
}
empty
while ( getline(cin, line) ) {
if ( !line.empty() ) {
count << line << endl;
}
}
size
string line;
while (getline(cin, line)) {
if (line.size() > 80)
cout << line << endl;
}
vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,该索引可用于访问对象
vector容纳着其他对象,因此也常称为容器(container)
#include
using std::vector;
定义和初始化
vector v1; // T是对象类型,v1是一个空的vector对象,执行默认初始化
vector v2(v1); // v2中包含v1所有元素的副本
vector v2 = v1; // 同上
vector v3(n, val); // v3包含n个重复的元素, 每个元素值都是val
// 值初始化
vector v4(n) // 只提供容纳的元素数量,初值由元素类型决定,如int型则初值为0
// 列表初始化
vector v4{a, b, c, ...}; // v4包含了初始值个数的元素,每个元素被赋予相应的初始值
vector v5 = {a, b, c, ...}; // 同上
push_back
// 将0 ~ 99的整数存储到v2中
vector v2;
for (int i = 0; i != 100; ++i) {
v2.push_back(i);
}
// 从标准输入中读取单词,将其作为vector对象的元素存储
string word;
vector text;
while ( cin >> word ) {
text.push_back(word);
}
注意:
不能用下标形式给vector对象添加元素
可用于访问已存在的元素,下标从0开始
int main(){
//整型输入
int a = 0;
cout << "请输入整型变量:" << endl;
cin >> a;
cout << a << endl;
//浮点型输入
double d = 0;
cout << "请输入浮点型变量:" << endl;
cin >> d;
cout << d << endl;
//字符型输入
char ch = 0;
cout << "请输入字符型变量:" << endl;
cin >> ch;
cout << ch << endl;
//字符串型输入
string str;
cout << "请输入字符串型变量:" << endl;
cin >> str;
cout << str << endl;
//布尔类型输入
bool flag = true;
cout << "请输入布尔型变量:" << endl;
cin >> flag;
cout << flag << endl;
system("pause");
return EXIT_SUCCESS;
}
两种方式:
typedef
typedef double d; // d是类型double的同义词
别名声明:using
using d = double; // 把等号左侧的名字规定成右侧的类型的别名
auto a = val1 + val2;
// a初始化为val1和val2相加的结果
auto i = 1, *p = &i; // i是整型变量,p是整型指针
auto a = 0, b = 3.14; // 错误!!!
decltype( fcn() ) sum = x; // sum的类型是函数fcn返回类型
int main() {
int a1 = 10;
int b1 = 3;
cout << a1 + b1 << endl;
cout << a1 - b1 << endl;
cout << a1 * b1 << endl;
cout << a1 / b1 << endl; //两个整数相除结果依然是整数
int a2 = 10;
int b2 = 20;
cout << a2 / b2 << endl;
int a3 = 10;
int b3 = 0;
//cout << a3 / b3 << endl; //报错,除数不可以为0
//两个小数可以相除
double d1 = 0.5;
double d2 = 0.25;
cout << d1 / d2 << endl;
return 0;
}
int main() {
int a1 = 10;
int b1 = 3;
cout << 10 % 3 << endl;
int a2 = 10;
int b2 = 20;
cout << a2 % b2 << endl;
int a3 = 10;
int b3 = 0;
//cout << a3 % b3 << endl; //取模运算时,除数也不能为0
//两个小数不可以取模
double d1 = 3.14;
double d2 = 1.1;
//cout << d1 % d2 << endl;
return 0;
}
int main() {
//后置递增
int a = 10;
a++; //等价于a = a + 1
cout << a << endl; // 11
//前置递增
int b = 10;
++b;
cout << b << endl; // 11
//区别
//前置递增先对变量进行++,再计算表达式
int a2 = 10;
int b2 = ++a2 * 10;
cout << b2 << endl;
//后置递增先计算表达式,后对变量进行++
int a3 = 10;
int b3 = a3++ * 10;
cout << b3 << endl;
return 0;
}
C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构
int main() {
//选择结构-单行if语句
//输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;
cout << "您输入的分数为: " << score << endl;
//if语句
//注意事项,在if判断语句后面,不要加分号
if (score > 600) {
cout << "我考上了一本大学!!!" << endl;
}
return 0;
}
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600) {
cout << "我考上了一本大学" << endl;
}
else {
cout << "我未考上一本大学" << endl;
}
return 0;
}
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600) {
cout << "我考上了一本大学" << endl;
}
else if (score > 500) {
cout << "我考上了二本大学" << endl;
}
else if (score > 400) {
cout << "我考上了三本大学" << endl;
}
else {
cout << "我未考上本科" << endl;
}
return 0;
}
/**********************等价于*************************/
else {
if (score > 500) {
cout << "我考上了二本大学" << endl;
}
}
// 案例需求:
// 提示用户输入一个高考考试分数,根据分数做如下判断
// 分数如果大于600分视为考上一本,大于500分考上二本,大于400考上三本,其余视为未考上本科
// 在一本分数中,如果大于700分,考入北大,大于650分,考入清华,大于600考入人大
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600) {
cout << "我考上了一本大学" << endl;
if (score > 700) {
cout << "我考上了北大" << endl;
}
else if (score > 650) {
cout << "我考上了清华" << endl;
}
else {
cout << "我考上了人大" << endl;
}
}
else if (score > 500) {
cout << "我考上了二本大学" << endl;
}
else if (score > 400) {
cout << "我考上了三本大学" << endl;
}
else {
cout << "我未考上本科" << endl;
}
return 0;
}
表达式1 ? 表达式2 :表达式3
int main() {
int a = 10, b = 20, c = 0;
c = a > b ? a : b;
cout << "c = " << c << endl;
//C++中三目运算符返回的是变量,可以继续赋值
(a > b ? a : b) = 100;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
return 0;
}
switch(表达式) {
case 结果1:执行语句; break;
case 结果2:执行语句; break;
...
default:执行语句;break;
}
//请给电影评分
//10 ~ 9 经典
// 8 ~ 7 非常好
// 6 ~ 5 一般
// 5分以下 烂片
int main() {
int score = 0;
cout << "请给电影打分" << endl;
cin >> score;
switch (score) {
case 10: // 没有break就会继续往下执行
case 9:
cout << "经典" << endl;
break;
case 8:
cout << "非常好" << endl;
break;
case 7:
case 6:
cout << "一般" << endl;
break;
default:
cout << "烂片" << endl;
break;
}
return 0;
}
int main() {
int num = 0;
while (num < 10) {
cout << "num = " << num << endl;
num++;
}
return 0;
}
int main() {
int num = 0;
do {
cout << num << endl;
num++;
} while (num < 10);
return 0;
}
for(起始表达式; 条件表达式; 末尾循环体) { 循环语句; }
int main() {
for (int i = 0; i < 10; i++) {
cout << i << endl;
}
return 0;
}
/*****************等价于***********************/
int i = 0;
bool condition = true;
for(;condition;) {
i++;
if(!(i < 10))
condition = false;
}
用于跳出选择结构或者循环结构
break使用的时机:
int main() {
//2、在循环语句中用break
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; //跳出循环语句
}
cout << i << endl;
}
return 0;
}
int main() {
for (int i = 0; i < 100; i++) {
if (i % 2 == 0) {
continue;
}
cout << i << endl;
}
return 0;
}
数据类型* 变量名;
int main() {
//指针的定义:数据类型* 变量名 ;
int a = 10; //定义整型变量a
int* p = &a; //定义并初始化指针, 指向变量a的地址
cout << &a << endl; //打印数据a的地址
cout << p << endl; //打印指针变量p
}
*
,即可访问指针指向内存中存储的数据,并对其进行操作
*
也称为解引用符//通过*操作指针变量指向的内存
cout << "*p = " << *p << endl;
数据类型& 引用名
int main() {
int a = 10;
int &b = a; // b是a的别名
cout << "a = " << a << endl;
cout << "b = " << b << endl;
// b是a的别名,修改b的值就是在修改a的值
b = 100;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
int main() {
int a = 10;
int b = 20;
/***引用必须初始化***/
// int &c; // 错误!!!
int &c = a;
/***引用一旦初始化后,就不可以更改***/
// c = b; // 错误!!!
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
return 0;
}
函数的组成:
返回类型 函数名字(参数列表) {
函数体
}
函数的声明(也称为函数接口):
一般在头文件中进行声明,在源文件中定义
示例:
swap.h 头文件
# include
//实现两个数字交换的函数声明
void swap(int a, int b);
swap.cpp 源文件
// 双引号""代表自定义的头文件
# include "swap.h"
void swap(int a, int b){
int temp = a;
a = b;
b = temp;
}
main.cpp 主程序文件
# include
# include "swap.h"
int main(){
int a = 10;
int b = 20;
swap(a, b);
return 0;
}
// 利用冒泡排序实现升序序列
#include
// 冒泡排序函数 参数1 数组的首地址 参数2 数组长度
void bubbleSort(int* arr, int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 打印数组
void printArray(int* arr, int len) {
for (int i = 0; i < len; i++) {
std::cout << arr[i] << std::endl;
}
}
int main() {
// 1、创建数组
int arr[10] = { 4, 3, 6, 9, 1, 2, 10, 8, 7, 5 };
int len = sizeof(arr) / sizeof(arr[0]);
// 2、创建函数,实现冒泡排序
bubbleSort(arr, len);
// 3、打印排序后的数组
printArray(arr, len);
system("pause");
return 0;
}