1.程序的注释,变量,常量,关键字,标识符命名规则
#include<iostream>//头文件,iostream:输入输出流
using namespace std;/*名称空间,C++ 的标准库函数(比如 cout)都放在一个叫 std 的大盒子里。
如果不写这一行,你在用 cout 时就必须写成 std::cout。*/
//常量的定义方式(常量不可修改)
//1,#define 宏常量(main函数上面)
//2,const修饰的变量
//1,#define 宏常量
#define Day 7
int main() {
cout << "一周有" << Day << "天" << endl; // endl:换行
//2,const修饰的变量
const int month = 12;
cout << "一年有" << month << "个月" << endl;
int a = 10; //定义一个整数变量 a,并赋值为 10
cout << "Hello, World!" <<a << endl;
return 0;
}
/*1.6 标识符命名规则
**作用**:C++规定给标识符(变量、常量)命名时,有一套自己的规则
* 标识符不能是关键字
* 标识符只能由字母、数字、下划线组成
* 第一个字符必须为字母或下划线
* 标识符中字母区分大小写
> 建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读*/
2.整型,sizeof(),浮点型,字符型,转义字符,字符串,bool类型,数据的输入(cin)
#include<iostream>
#include<string>
using namespace std;
int main() {
//整型:short(2),int(4),long(4),long long(8),单位字节
//可以用sizeof()函数查看数据类型所占内存大小
//语法:sizeof(数据类型或变量名)
short num1 = 10;
cout << "short类型占用内存空间为:" << sizeof(short) << "字节" << endl;
int num2 = 20;
cout << "int类型占用内存空间为:" << sizeof(num2) << "字节" << endl;
//浮点型:float(4),double(8),long double(16)
float f1 = 3.1415926f;
cout << "float类型占用内存空间为:" << sizeof(float) << "字节" << endl;
double d1 = 3.1415926;
cout << "double类型占用内存空间为:" << sizeof(d1) << "字节" << endl;
//科学计数法E或e,E6表示10的6次方,E-6表示10的负6次方
float f2 = 3.14e2f; //3.14*10的2次方
cout << "f2=" << f2 << endl;
float f3 = 3.14e-2f; //3.14*10的负2次方
cout << "f3=" << f3 << endl;
//字符型:char(1),另一种整数类型,对应的ASCII编码:A~Z(65~90),a~z(97~122),0~9(48~57)
char ch = 'A';
cout << "char类型占用内存空间为:" << sizeof(ch) << "字节" << endl;
int ch2 = ch;
cout<< ch << "对应的ASCII码值为:" << ch2 << endl;
//转义字符:\n换行,\t制表符table:四个空格,\\反斜杠:代表\,\'单引号,\"双引号
cout << "Hello\nWorld!" << endl;
cout << "Hello\\World!" << endl;
//string字符串类型,需要添加头文件#include<string>
string str = "Hello World!";
cout << "string类型占用内存空间为:" << sizeof(str) << "字节" << endl;
cout << str << endl;
//布尔类型:bool(1),true==非0(真),false==0(假)
bool flag = true;
cout << "bool类型占用内存空间为:" << sizeof(flag) << "字节" << endl;
//cin用于接收键盘输入
int age;
cin >> age;//从键盘接收一个整数,信息从cin流进age变量中
cout << "age=" << age << endl;
return 0;
}
3.运算符
#include<iostream>
using namespace std;
//算术运算符+,-,*,/,%,自增运算符++,自减运算符--
int main() {
int a = 10;
int a1 = 10;
int b = ++a * 10;//先自增后运算
int c = a1++ * 10;//先运算后自增
cout << "a=" << a << endl;
cout << "b=" << b << endl;//b=110
cout << "c=" << c << endl;//c=100
//关系运算符>,<,>=,<=,==,!=
//赋值运算符=,+=,-=,*=,/=,%=
int num = 10;
num += 5;//num=num+5
cout << "num=" << num << endl;//num=15
//逻辑运算符&&,||,!
//!:非,取反,true变false,false变true
//&&:与,两个操作数都为true,结果才为true
//||:或,两个操作数有一个为true,结果就为true
return 0;
}
4.循环,选择
#include<iostream>
using namespace std;
#include<ctime>//time系统时间头文件
int main() {
//选择结构if语句
//if(条件表达式){实体}else if (条件表达式){实体}...else{实体}
int score;
cout << "请输入成绩:";
cin >> score;
if (score >= 90 && score <= 100) {
cout << "优秀" << endl;
}
else if (score >= 80 && score < 90) {
cout << "良好" << endl;
}
else if (score >= 70 && score < 80) {
cout << "中等" << endl;
}
else if (score >= 60 && score < 70) {
cout << "及格" << endl;
}
else if (score >= 0 && score < 60) {
cout << "不及格" << endl;
}
else {
cout << "输入成绩有误!" << endl;
}
//三目运算符 expression1?expression2:expression3;如果expression1为true,
// 则表达式的值为expression2,否则表达式的值为expression3
int a = 10;
int b = 20;
int c;
c = a > b ? a : b;
cout << "c=" << c << endl;//c=20
//switch case的用法;case里面没有break,那么程序会一直向下执行
//1,提示用户给电影评分
cout << "请给电影评分" << endl;
//2.用户开始进行打分
int score1 = 0;
cin >> score1;
cout << "您打的分数为" << score1 << endl;
switch (score1) {
case 10:
cout << "您认为是经典电影" << endl;
break;
case 9:
cout << "您认为是高分电影" << endl;
break;
case 8:
cout << "可以算高分" << endl;
break;
default :
cout << "勉强可以" << endl;
break;
}
//while循环
//在屏幕上输出1到10
int i = 1;
while (i <= 10) {
cout << i << endl;
i++;
}
//do{ }while(条件)循环;至少执行一次循环体
int j = 1;
do
{
cout << j << endl;
j++;
} while (j<=1);
//利用rand()来生成随机数;
//添加随机数种子,保证每次运行程序生成的随机数不一样srand((unsigned int)time(NULL));
//这一点跟python不同,python的随机数种子是保证每次运行程序生成的随机数一样的
srand((unsigned int)time(NULL));
int age=rand() % 100+1;
int w_age;
while (true) {
cout << "继续猜一个数" << endl;
cin >> w_age;
if (w_age < age) {
cout << "猜的数字小了" << endl;
}
else if(w_age >age) {
cout << "猜的数字大了" << endl;
}
else {
cout << "恭喜你,猜对了" << age << "=" <<w_age<< endl;
break;
}
}
int shui=100;
do {
int shui1 = shui % 10;
int shui2 = shui / 10 % 10;
int shui3 = shui / 100;
if ((shui == shui1 * shui1 * shui1 + shui2 * shui2 * shui2 + shui3 * shui3 * shui3)) {
cout << shui << "为水仙花" << endl;
}
shui++;
} while (shui<=999);
//for循环
//语法for(起始表达式;条件;更新条件)
for (int i = 0; i < 9; i++) {
//实体
}
for (int i = 1; i < 100; i += i) {
cout << i << endl;//从i=1开始输出
}//更新条件在每次循环结束后执行
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
cout << j << "x" << i <<"=" << i * j << " ";
}
cout << endl;
}
//goto语句,可以无条件跳转语句
//语法:goto 标记
cout << "1" << endl;
goto FLAG;//开始跳转,跳转到FLAG:处
cout << "2" << endl;//不再输出
FLAG:
cout << "3" << endl;
return 0;
}
5.数组
#include<iostream>
using namespace std;
int main() {
//一维数组的定义方式
int arr1[5]; //定义了一个可以存放5个int类型数据的数组
int arr2[3] = { 1,2,3 }; //定义了一个可以存放3个int类型数据的数组,并且进行了初始化
int arr3[] = { 4,5,6,7,8 }; //定义了一个数组,并且进行了初始化,数组的长度由初始化数据的个数决定
//冒泡排序
int arr[]={ 2, 4, 5, 3, 6, 1, 10, 8, 9 };
int t;
for (int i = 0; i < size(arr) - 1; i++) {
for (int j = 0; j < size(arr) - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
for (int i = 0; i < size(arr); i++) {
cout << arr[i] << " ";
}
//二维数组的定义方式
int arr_2d[2][3]; //定义了一个2行3列的二维数组
int arr_2d1[2][3] = { {1,2,3},{4,5,6} };//定义并初始化二维数组
int arr_2d2[][4] = { {1,2,3,4},{5,6,7,8} };//定义并初始化二维数组,行数由初始化数据决定
//二维数组的首地址表示法
cout << "二维数组的首地址表示法" << endl;
cout << arr_2d1 << endl; //输出二维数组的首地址
cout << arr_2d1[0] << endl; //输出二维数组第一行的首地址
cout << &arr_2d1[0][0] << endl; //输出二维数组第一个元素的地址,这里是看元素的地址需要加&
return 0;
}
6.函数
#include<iostream>
#include"sayhello.h"
using namespace std;
//函数的声明和定义包括三步:函数原型(声明),函数定义,调用函数
//函数原型:返回值数据类型 函数名(参数类型1,参数类型2,...);
//void sayHello();//函数原型声明
int main() {
//调用函数
sayHello();
return 0;
}
////函数定义:返回值数据类型 函数名(参数类型1 参数1,参数类型2 参数2,...){实体}
//void sayHello() {//数据类型为void,没有返回值
// cout << "Hello,world!" << endl;
//}
//函数的分文件编写(.h,.cpp文件名相同)
//1.创建.h后缀名的头文件,声明函数原型
//2.创建.cpp后缀名的源文件,包含.h头文件,定义函数实体
//3.在主函数文件中包含.h头文件,调用函数
//sayhello.h文件
#include<iostream>
using namespace std;
void sayHello();//函数原型声明
//sayhello.cpp文件
#include"sayhello.h"
void sayHello() {//数据类型为void,没有返回值
cout << "Hello,world!" << endl;
}
7.指针
#include "first7.h"
void zhizhen() {
//指针变量的使用
int a = 10;
//指针定义的语法:数据类型* 指针变量名;定义一个指针变量p
int* p;
p = &a; //&取地址符号,表示取变量a的地址
cout << "a的地址是:" << &a << endl;
cout << "指针变量p的值是:" << p << endl;
cout << "指针变量p存储的地址对应的值是:" << *p << endl; //*解引用,表示取指针变量p所指向地址对应的值
//通过指针修改变量的值
*p = 20; //将指针变量p所指向地址对应的值修改为20
cout << "修改后a的值是:" << a << endl;
//指针的空值判断
int* p1 = nullptr; //nullptr表示空指针
//空指针是指向内存地址0的指针
//空指针用来给指针变量初始化,空指针是不可以进行解引用操作的
//0~255的地址是系统保留地址,程序不能使用
if (p1 == nullptr) {
cout << "指针p1是空指针" << endl;
} else {
cout << "指针p1不是空指针" << endl;
}
//野指针的概念
int* p2; //未初始化的指针变量p2
//cout << "指针p2的值是:" << p2 << endl;//野指针,指向未知地址的指针,可能会引发程序崩溃
//const修饰指针的情况有三种
const int* p3; //1.const修饰指针,指针指向地址可以修改,但指针指向地址对应的值不可以修改
int b = 30;
p3 = &b;
// *p3 = 40; //错误,不能通过指针修改指针指向地址对应的值
int c = 40;
p3 = &c; //正确,可以修改指针指向地址
int* const p4 = &b; //2.const修饰指针变量,指针指向地址不可以修改,但指针指向地址对应的值可以修改
*p4 = 50; //正确,可以通过指针修改指针指向地址对应的值
// p4 = &c; //错误,不能修改指针指向地址
const int* const p5 = &b; //3.const修饰指针变量和指针,指针指向地址和指针指向地址对应的值都不可以修改
// *p5 = 60; //错误,不能通过指针修改指针指向地址对应的值
// p5 = &c; //错误,不能修改指针指向地址
//利用指针访问数组中的元素
int qrr[] = { 10,20,30,40,50 };
int* q = qrr;//指针变量q指向qrr的首地址
for (int i = 0; i < size(qrr); i++) {
cout << *q << endl;
q++;//每+1相当于地址加4个字节(指针是int类型的)
}
//利用指针访问数组中的元素,并进行冒泡排序
int wrr[] = { 4,3,6,9,5,2,1 };
int temp;
int* w = wrr;
for (int i = 0; i < size(wrr) - 1; i++) {
w = wrr;
for (int j = 0; j < size(wrr) - 1 - i;j++) {
if (*w > *(w + 1)) {
temp = *w;
*w = *(w + 1);
*(w + 1) = temp;
}
w++;
}
}
w = wrr;
for (int i = 0; i < size(wrr); i++) {
cout << *w << endl;
w++;
}
}
//char* p指针跟其他类型的指针有些区别;
//cout<<p时会自动解析出地址中的字符串并输出,而不是输出内存地址
//如果你需要打印指针的地址,而不是内容,可以通过 (void*)p 来实现
8.结构体
#include"first8.h"
//结构体的定义和使用,用于储存不同的数据类型
//定义结构体类型的语法:struct 结构体名{成员列表};
struct Student {
string name;
int age;
int score;
};
void struct1() {
//使用结构体
//第一种
Student stu1;//定义结构体类型的变量stu1
stu1.name = "张三";
stu1.age = 18;
stu1.score = 90;
cout << "姓名:" << stu1.name << " 年龄:" << stu1.age << " 分数:" << stu1.score << endl;
//第二种
Student stu2 = {
"李四",
19,
95
};
cout << "姓名:" << stu2.name << " 年龄:" << stu2.age << " 分数:" << stu2.score << endl;
//定义结构体类型的数组
Student stuArr[2] = {
{"王五",20,85},
{"赵六",21,88}
};//定义结构体类型的数组stuArr,数组中有两个元素,每个元素都是Student类型的结构体变量
for (int i = 0; i < size(stuArr); i++) {
cout << "姓名:" << stuArr[i].name << " 年龄:" << stuArr[i].age << " 分数:" << stuArr[i].score << endl;
}
//定义结构体类型的指针变量
Student* pStu = &stu1;//定义结构体类型的指针变量pStu,指向结构体变量stu1的地址
cout << "通过指针访问结构体变量stu1的成员:" << endl;
cout << "姓名:" << pStu->name << " 年龄:" << pStu->age << " 分数:" << pStu->score << endl;
//结构体中const的使用
const Student stu3 = { "钱七",22,92 };//定义一个const类型的结构体变量stu3
//stu3.age = 23; //错误,不能修改const类型的结构体变量的成员
}