-
C++ 书写 Hello world:
#include<iostream> using namespace std; int main() { cout << "Hello world" << endl; system("pause"); return 0; }
-
C++ 定义常量 两种方式
- #define 常量名 常量值
//宏常量 #define day 7
- const 数据类型 常量名 = 常量值
const int month = 12;
- #define 常量名 常量值
-
产生 随机数
//添加随机数种子,利用当前时间产生随机数;防止m每次产生随机数都一样 srand((unsigned int)time(NULL)); //1. 产生随机数 int target = rand() % 100 + 1;//系统产生 1 - 100 之间的随机数
-
查找三位数的 水仙花数 (个、十、百位的数字立方和等于自身的数);
int waterNum = 0; for (int i = 1; i <= 9; i++) { for(int j = 0; j <= 10; j++ ){ for (int k = 0; k <= 10; k++) { waterNum = i * 100 + j * 10 + k; if (waterNum == i*i*i + j*j*j +k*k*k) { cout << waterNum << endl; } } } }
-
打印 乘法口诀表
//注:外层是行,内层是列,本题是:列<=行且列×行;j <= i 是亮点; for (int i = 1; i < 10; i++ ) { for (int j = 1; j <= i; j ++) { cout << j<<" × "<< i<<" = "<< i * j << "\t"; } cout <<"\n"<< endl; }
-
continue 和 break
continue 跳过本次循环中余下尚未执行的语句,继续执行下一次循环;break直接跳出循环;int main() { //输出奇数; for (int i = 0; i < 100; i++) { if (i % 2 == 0) { continue; } cout << i << endl; } system("pause"); return 0; }
-
数组
//注:C++中没有提供 直接获取数组长度的函数,用以下方法; int size = sizeof(arr) / sizeof(arr[0]);
-
数组元素逆置
int arr[] = {300 ,200 , 150 , 700 , 950 , 120}; const int size = sizeof(arr) / sizeof(arr[0]); int temp = 0; //这里i的取值范围需要是常量;所以给size添加了 const参数;但是赋值时需要根据角标获取arr中数据; for (int i = 0; i < size / 2; i ++) { temp = arr[i]; arr[i] = arr[size - i - 1]; arr[size - i - 1] = temp; } for (int i = 0; i < size; i ++) { cout << arr[i] << "\t"; }
-
冒泡排序
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。 3. 重复以上的步骤,每次比较次数-1,直到不需要比较 。
//注:冒泡排序;外层为排序轮数;每次少一;内层为对比次数;从 0 开始递增,但总数在减少; for (int i = size - 1; i > 0 ; i --) { for (int j = 0; j < i; j ++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }
-
值传递
* 就是函数调用时实参将数值传入给形参 * 值传递时,如果形参发生,并不会影响实
void swap(int num1, int num2){ cout << "交换前:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; int temp = num1; num1 = num2; num2 = temp; cout << "交换后:" << endl;//此处打印的结果:两数字实现了交换; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; } int main() { int a = 10; int b = 20; swap(a, b); //这里 打印的 结果,a b 值没有改变!这叫值传递 cout << "mian中的 a = " << a << endl; cout << "mian中的 b = " << b << endl; system("pause"); return 0; }
总结:
- 方法体中对传入的形参进行操作,确实会执行;
- 但是调用该方法时,主函数中实际参数将值传递给形参,形参进行赋值传递等操作;
- 但仅是形参进行操作,实参并不受影响;
- 即如果需要交换数据,打印操作应写在方法体中,而不是写在调用方法时;
-
函数
** 的C++语言,如果调用写在下面的方法体时,会报错,说找不着……
所以要么把方法体写在调用之前;如果写在了后面要在调用前进行声明,如:int max(int a, int b);
-
函数的分文件编写
1. 创建后缀名为.h的头文件 2. 创建后缀名为.cpp的源文件 3. 在头文件中写函数的声明 4. 在源文件中写函数的定义
//swap.h文件 #include<iostream> using namespace std; //实现两个数字交换的函数声明 void swap(int a, int b); //swap.cpp文件 #include "swap.h" void swap(int a, int b) { int temp = a; a = b; b = temp; cout << "a = " << a << endl; cout << "b = " << b << endl; } //main函数文件 #include "swap.h" int main() { int a = 100; int b = 200; swap(a, b); system("pause"); return 0; }
-
指针
指针变量定义语法:数据类型 * 变量名;
//1. 指针变量赋值 p = &a; //指针指向变量a的地址
//2。 指针的使用 //通过*操作指针变量指向的内存 cout << "*p = " << *p << endl;
-
const 修饰指针
const修饰指针有三种情况
- const修饰指针 — 常量指针
- const修饰常量 — 指针常量
- const即修饰指针,又修饰常量
//const修饰的是指针,指针指向可以改,指针指向的值不可以更改 const int * p1 = &a; p1 = &b; //正确 //*p1 = 100; 报错 //const修饰的是常量,指针指向不可以改,指针指向的值可以更改 int * const p2 = &a; //p2 = &b; //错误 *p2 = 100; //正确 //const既修饰指针又修饰常量 const int * const p3 = &a; //p3 = &b; //错误 //*p3 = 100; //错误
技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量
-
结构体
这不就是Java中的类吗?
总结1:定义结构体时的关键字是struct,不可省略
总结2:创建结构体变量时,关键字struct可以省略
总结3:结构体变量利用操作符 ‘’.’’ 访问成员结构体数组:
struct 结构体名 数组名[元素个数] = { {} , {} , ... {} }
利用操作符->
可以通过结构体指针访问结构体属性
当传入或者要操作的数据太多时,利用值传递会造成不必要的内存浪费;这时建议传入指针作为参数
;随之而来的问题是:指针会操作实参,故要利用 const 防止操作实参;//const使用场景 void printStudent(const student *stu) {//加const防止函数体中的误操作 //stu->age = 100; //操作失败,因为加了const修饰 cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl; }
16. 声明:本文由黑马程序员匠心之作C++教程从0到1入门编程,学习编程不再难
系列课程学习整理;