C++入门 & 基础算法

  1. C++ 书写 Hello world:

    #include<iostream>
    using namespace std;
    
    int main() {
    
    	cout << "Hello world" << endl;
    
    	system("pause");
    
    	return 0;
    }
    
  2. C++ 定义常量 两种方式

    1. #define 常量名 常量值
      //宏常量
      #define day 7
      
    2. const 数据类型 常量名 = 常量值
      const int month = 12;
  3. 产生 随机数

    //添加随机数种子,利用当前时间产生随机数;防止m每次产生随机数都一样
    srand((unsigned int)time(NULL));
    //1. 产生随机数
    int	target  = rand() % 100 + 1;//系统产生 1 - 100 之间的随机数
    
  4. 查找三位数的 水仙花数 (个、十、百位的数字立方和等于自身的数);

    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;
    			}
    		}
    	}
    }
    
  5. 打印 乘法口诀表

    //注:外层是行,内层是列,本题是:列<=行且列×行;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;
    }
    
  6. 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;
    }
    
  7. 数组

    //注:C++中没有提供 直接获取数组长度的函数,用以下方法;
    int size = sizeof(arr) / sizeof(arr[0]);
    
  8. 数组元素逆置

    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";
    }
    
  9. 冒泡排序

    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;
    		}
    	}
    }
    
  10. 值传递

    * 就是函数调用时实参将数值传入给形参
    * 值传递时,如果形参发生,并不会影响实
    
    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;
    }
    

    总结:

    1. 方法体中对传入的形参进行操作,确实会执行;
    2. 但是调用该方法时,主函数中实际参数将值传递给形参,形参进行赋值传递等操作;
    3. 但仅是形参进行操作,实参并不受影响;
    4. 即如果需要交换数据,打印操作应写在方法体中,而不是写在调用方法时;
  11. 函数
    ** 的C++语言,如果调用写在下面的方法体时,会报错,说找不着……
    所以要么把方法体写在调用之前;如果写在了后面要在调用前进行声明,如:int max(int a, int b);

  12. 函数的分文件编写

    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;
    }
    
  13. 指针
    指针变量定义语法: 数据类型 * 变量名;

    //1. 指针变量赋值
    p = &a; //指针指向变量a的地址
    
    //2。 指针的使用
    //通过*操作指针变量指向的内存
    cout << "*p = " << *p << endl;
    
  14. const 修饰指针

    const修饰指针有三种情况

    1. const修饰指针 — 常量指针
    2. const修饰常量 — 指针常量
    3. 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右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量

  15. 结构体

    这不就是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入门编程,学习编程不再难系列课程学习整理;

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liusaisaiV1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值