基于Linux的C++ Part2:程序控制结构

Kalibr标定避坑指南:如何用AprilGrid板快速完成双目IMU标定 本文详细介绍了使用AprilGrid板进行Kalibr双目IMU联合标定的实战技巧,包括标定工具选型、数据采集优化、标定流程及结果验证。通过AprilGrid板的唯一标识性和抗遮挡优势,结合IMU静止标定和运动激励设计,显著提升标定精度。文章还提供了常见报错处理和高级优化技巧,帮助开发者高效完成传感器标定。 阅读详情

2.1 结构化程序设计基础

  • 定义
    程序的控制结构就是一个黑箱子。单入口单出口的控制结构易于理解
  • 三种基本控制结构

1.顺序结构

**
在这里插入图片描述

顺序结构示例
编写程序,接受用户输入的两个整数,输出其中较大者
#include <iostream>
using namespace std;
int main()
{
int a, b, max;
/* 输入部分 */
cout << "The program gets two numbers and prints the greater one.\n";
cout << "The first number: ";
cin >> a;
cout << "The second number: ";
cin >> b;
/* 计算部分 */
max = a > b ? a : b; /* 三元表达式 */
/* 输出部分 */
cout << "The greater one is " << max << "." << endl;
return 0;
}

2.分支结构

在这里插入图片描述

3.循环结构

在这里插入图片描述

  • 复杂控制结构

2.2 布尔数据

枚举类型

  • 枚举类型的声明
    格式:enum 枚举名 { 元素名1, 元素名2, …, 元素名n };
    例:enum MONTH{ JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };
    默认第一个元素值为0
    枚举类型声明中的元素为枚举文字,不是变量
  • 枚举类型变量的定义
    例:MONTH month;//MONTH为枚举名,month为枚举类型变量名
  • 枚举类型的意义
    将多个文字组织在一起,表达从属于特定类型的性质,使源代码更易理解

用户自定义类型

  • 自定义类型的格式
    格式:typedef 原类型标识 新类型名;
    例一:typedef int DWORD;
  • 自定义类型的性质
    新类型与原类型相同,并未产生新类型,重新命名的自定义类型使程序更易理解
    若整数可以用于表示两类不同数据对象,使用自定义类型可以区分它们
    自定义类型不是简单的类型替换,虽然它们确实等同

布尔类型

  • bool 类型 适用于C++
    取值:false、true
  • bool 量的定义
    定义:bool modified;
    赋值:modified = true;

关系表达式

  • 关系操作符
    大于(>)、等于(==)、小于(<)、不大于(<=)、不小于(>=)、不等于(!=)
  • 关系表达式
    关系操作符与两个操作数构成的表达式
    关系表达式
    多个关系表达式可连接起来构成复杂关系表达式
    运算结果为逻辑值:真或假
  • 逻辑值(布尔值)
    C/C++ 语言以 0 表示假,以非 0 表示真(经常以 1 表示)
    尽量使用 bool 类型表示逻辑值

逻辑表达式

  • 逻辑操作符:逻辑与(&&)、逻辑或(||)、逻辑非(!)
  • 逻辑表达式
    逻辑操作符与一个或两个操作数构成的表达式,结果仍为真或假
    x && y:若 x、y 均为真,则结果为真,否则为假
    x || y:若 x、y 均为假,则结果为假,否则为真
    !x:若 x 为真,则结果为假,否则为真
  • 复杂逻辑表达式
    例:x > y || a != b && 3 <= 2
  • 关系操作符与逻辑操作符的优先级
    从高到低顺序:
    逻辑非“!”;小于“<”、不小于“>=”、大于“>”、不大于“<=”(同级);
    等于“==”、不等于“!=”(同级);
    逻辑与“&&”;逻辑或“||”

2.3 分支结构

if分支结构

  • If 分支结构的三种格式
    格式一:if( 条件表达式 ) { 语句序列 }
    格式二:if( 条件表达式 ) { 语句序列 1 } else { 语句序列 2 }
    格式三:if( 条件表达式 1 ) { 语句序列 1 } else if( 条件表达式 2 ) { 语句序列 2 } … else { 语句序列 n }

  • 特别说明
    条件表达式必须位于括号内,一般为关系或逻辑表达式
    先计算条件表达式值,若为真则执行语句序列 1,否则执行语句序列 2
    语句序列 1 与语句序列 2 可以为复合语句、单语句或空语句
    语句序列 1 与语句序列 2 只能有一个被执行
    若仅用于确定某条语句是否执行,else 分支可以省略

  • 简单if语句 实例:编写程序,接受用户输入的整数,如果该整数为奇数则将其乘 3 加 1 后输出,偶数直接输出

#include <iostream>
using namespace std;
int main(){
    int input;
    int output;
    cout << "Input a number: ";
    cin >> input;
    output = input;
    if (input%2!=0){
    	output = input * 3 + 1;
    }
    cout << output << endl;
    return 0;
}
运行结果
Input a number: 8
8
Input a number: 15
46
  • if-else 语句 实例:接受用户输入的整数,如果该整数为奇数则将其乘 3 加 1 后输出,偶数除以 2 后输出
#include <iostream>
using namespace std;
int main(){
    int input;
    int output;
    cout << "Input a number: ";
    cin >> input;
    output = input;
    if (input%2!=0){
    	output = input * 3 + 1;
    }
    else{
        output = input/2;
    }
    cout << output << endl;
    return 0;
}
运行结果:
Input a number: 9
28
Input a number: 10
5

  • if-else if-else 语句 实例:已知2006年12月1日为星期五。编制程序,接受用户输入的1~31之间的整数,按照下述格式将该日星期几信息打印在对应栏下。例如,2006年12月1日打印在星期五“Fr”下面:
    在这里插入图片描述
#include <iostream>
#include <iomanip>//Table
using namespace std;
int main(){
    int input;
    int date;
    int cal;
    //enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//Sun = 0
    enum WEEKDAY{Thu,Fri,Sat,Sun,Mon,Tue,Wed};//Fri=1
    WEEKDAY weekday;
    cout << "Input the DATE(1~31): ";
    cin >> input;
    date = input;
    cout << "In printing: 2006-12 Calendar "<< endl;
    if(date<1||date>31){
        cout << "ERROR DATE!!!!" <<endl;
        return 1;
    }
    cal = date % 7;
    weekday = (WEEKDAY)cal;
    cout<<"Calendar 2006-12\n";
    cout<<"------------------\n";
    cout<<"Su Mo Tu We Th Fr Sa\n";

    if (weekday == Sun){
        cout << setw(2)<< date;
    }
    else if(weekday == Mon){
        cout << setw(5)<< date;
    }
    else if(weekday == Tue){
        cout << setw(8)<< date;
    }
    else if(weekday == Wed){
        cout << setw(11)<< date;
    }
    else if(weekday == Thu){
        cout << setw(14)<< date;
    }
    else if(weekday == Fri){
        cout << setw(17)<< date;
    }
    else{
        cout << setw(20)<< date;
    }
    cout << endl;
    return 0;
}
运行结果1:
Input the DATE(1~31): 0
In printing: 2006-12 Calendar 
ERROR DATE!!!!
运行结果2:
Input the DATE(1~31): 33
In printing: 2006-12 Calendar 
ERROR DATE!!!!
运行结果3:
Input the DATE(1~31): 1
In printing: 2006-12 Calendar 
Calendar 2006-12
------------------
Su Mo Tu We Th Fr Sa
                1
运行结果4:
Input the DATE(1~31): 8
In printing: 2006-12 Calendar 
Calendar 2006-12
------------------
Su Mo Tu We Th Fr Sa
                8
运行结果5:
Input the DATE(1~31): 27
In printing: 2006-12 Calendar 
Calendar 2006-12
------------------
Su Mo Tu We Th Fr Sa
         27
运行结果6:
Input the DATE(1~31): 30
In printing: 2006-12 Calendar 
Calendar 2006-12
------------------
Su Mo Tu We Th Fr Sa
                  30

switch 分支结构

  • 计算过程
    先计算表达式的值
    依次与常数表达式比较
    若相同则执行该分支(子句)
    否则转向 default 分支
    最后退出 switch 语句
  • 表达式
switch( 表达式 )
{
case 常数表达式 1: 语句序列 1
case 常数表达式 2: 语句序列 2
┇
case 常数表达式 n: 语句序列 n
default: 默认语句序列
}
  • 执行流程
    在这里插入图片描述

  • 特别说明
    switch 后面的表达式必须为整型、字符型或枚举型
    case 后面必须为常量表达式,且各个 case 值必须不同
    若无 default 分支,且无 case 分支匹配,则不执行
    case 分支中的语句可以有多条,不需要花括号

  • 上面计算日期用switch代码表示

#include <iostream>
#include <iomanip>//Table
using namespace std;
int main(){
    int input;
    int date;
    int cal;
    //enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//Sun = 0
    enum WEEKDAY{Thu,Fri,Sat,Sun,Mon,Tue,Wed};//Fri=1
    WEEKDAY weekday;
    cout << "Input the DATE(1~31): ";
    cin >> input;
    date = input;
    cout << "In printing: 2006-12 Calendar "<< endl;
    if(date<1||date>31){
        cout << "ERROR DATE!!!!" <<endl;
        return 1;
    }
    cal = date % 7;
    weekday = (WEEKDAY)cal;
    cout<<"Calendar 2006-12\n";
    cout<<"------------------\n";
    cout<<"Su Mo Tu We Th Fr Sa\n";

    switch (weekday)
    {
    case Sun:
        cout << setw(2)<< date;
        break;
    case Mon:
        cout << setw(5)<< date;
        break;
    case Tue:
        cout << setw(8)<< date;
        break;
    case Wed:
        cout << setw(11)<< date;
        break;
    case Thu:
        cout << setw(14)<< date;
        break;
    case Fri:
        cout << setw(17)<< date;
        break;
    case Sat:
        cout << setw(20)<< date;
        break;
    default:
        break;
    }

    
    cout << endl;
    return 0;
}

2.4 break 语句

  • break 语句的目的
    终止 switch 语句的执行
    如果没有 break 语句,则程序会从指定的 case 分支开始,并在该分支结束后继续执行下去
    除非 switch 语句结束,后面的其他 case 分支或 default 分支中的语句都会得到执行
    原因:case 子句中的常数表达式仅起到语句标号的作用,不是分支之间的分隔标记
  • 省去break 语句的场合
    允许多个分支执行同样的代码

2.5 循环结构

while 循环

  • while 循环格式:while ( 表达式 ) 循环体
  • while 循环执行流程
    先判断后执行:表达式为真时,执行一遍循环体(一次迭代),返回重新计算表达式的值以确定是否重复执行循环体;若表达式为假,则终止循环
    为保证循环终止,循环体内应有能改变表达式值的语句
    在这里插入图片描述
  • while 循环示例:编写程序,接受用户输入的多个整数求和,用户输入0时程序结束
#include <iostream>
using namespace std;
int main(){
    int input;
    int sum=0;
    cout <<"Input some integers, I will help you to get their sum."<< endl;
    cout << "If you want to quit the program, please input 0 " << endl;
    cin >> input;
    while(input!=0){
        sum += input;
        cout<< "Go continue: " << endl;
        cin >> input;
    }
    cout << "The sum is : " << sum << endl;
    return 0;
}
运行结果:
Input some integers, I will help you to get their sum.
If you want to quit the program, please input 0 
4
Go continue: 
7
Go continue: 
0
The sum is : 11

无限循环

  • 发生无限循环的场合
    循环体内没有改变循环变量值的语句
    即使改变循环变量值,也不能否定循环条件
    循环体内没有能够强制终止循环执行的语句或命令
  • 无限循环的后果
    程序永远不会结束,大多数时有害,编程时一般应避免
    例外情况:循环体内有专门控制循环终止的语句或命令
    命令格式:满足某种条件下使用 break 语句,终止循环执行
    哨兵:使循环满足终止条件的循环变量值

使用 break 语句终止循环

cout << "If you want to quit the program, please input 0"; 
while( true )
{ 
	cout << "Please input an integer: ";
	cin >> n;
	if( n == 0 )
	break; 
	sum += n; 
}
  • 使用无限循环和哨兵的优势
    不再需要将首个数据处理过程提到循环体前单独处理

for 循环结构

  • 递增递减表达式
    递增递减表达式的优先级非常高

  • 前缀递增递减
    格式:++变量名称; --变量名称;
    例一:设 a 为 1,++a 等价于 a = a + 1,a 结果为 2
    例二:设 a 为 1,--a 等价于 a = a - 1,a 结果为 0
    计算要诀:先递增递减,再参与运算
    例三:设 a 为 1,b = ++a * 3 等价于 a = a + 1; b = a * 3,a 结果为 2, b 结果为 6
    例四:设 a 为 1,b = --a * 3 等价于 a = a - 1; b = a * 3,a 结果为 0, b 结果为 0

  • 后缀递增递减
    格式:变量名称++; 变量名称--;
    例一:设 a 为 1,a++ 等价于 a = a + 1,a 结果为 2
    例二:设 a 为 1,a-- 等价于 a = a - 1,a 结果为 0
    计算要诀:先参与运算,再递增递减
    例三:设 a 为 1,b = a++ * 3 等价于 b = a * 3; a = a + 1,a 结果为 2, b 结果为 3
    例四:设 a 为 1,b = a-- * 3 等价于 b = a * 3; a = a - 1,a 结果为 0, b 结果为 3

  • 注意事项
    操作数必须为变量,而不能为其他表达式
    不要在复杂表达式中使用递增递减操作符

  • for 语句 循环格式

for( 初始化表达式; 条件表达式; 步进表达式 ) 循环体
  • for 循环执行流程
    先判断后执行:先执行初始化表达式,再计算条件表达式,并根据其结果决定是否执行一遍循环体(为真时执行),计算步进表达式的值(循环再次“初始化”),返回重新计算条件表达式的值以确定循环是否终止
    在这里插入图片描述

  • for 循环示例: 编写程序,接受用户输入的整数 n,求 1 ~ n 的平方和

#include <iostream>
using namespace std;
int main(){
    int i,n;
    int sum = 0;
    cout << "Please input an integer: \n";
    cin >> n;
    for(i=1;i<=n;i++){
        sum += i*i;
    }
    cout << "The sum is: " << sum << endl;
    return 0;
}
运行结果:
Please input an integer: 
4
The sum is: 30

for 与 while 的比较

  • 两种循环结构可以互换使用
  • while 循环常用于不需要或很少需要初始化的场合
  • for 循环常用于需要简单初始化和通过递增递减运算控制循环体执行的场合
  • for 循环将所有循环控制因素都放在循环头部,循环结构最清晰
  • 通过省略循环头部的一个或多个表达式,for 循环也可能非常复杂

循环嵌套

编写程序,按下述格式打印九九乘法表
在这里插入图片描述

2.6 编程实践

  • 1 使用循环结构打印带有"*"的正反等边三角形,三角形行数n由用户输入。
    两个三角形中间间隔空格字符数m也由用户输入。
    在这里插入图片描述
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
    int m,n;
    int t;
    int i,j,k,l;
    int a,b;
    cout << "How many lines of * do you want to print?\n";
    cin >> n;
    cout << "How many space do you want to print?\n";
    cin >> m;
    for(i=1;i<=n;i++){
        
        a = 2*i-1;  //The '*' counts in each line on left
        t = n-i;    //The ' ' counts in each line on left
        
        b = 2*n-a;  //The '*' counts in each line on right


        /*For the LEFT*/
        for (j=1;j<=t;j++){
            cout << " ";
        }

        for (k=1;k<=a;k++){
            cout << "*";
        }

        cout << setw(m);

        /*For the RIGHT*/
        for(l=1;l<=b;l++){
            cout << "*";
        }

        /*Next line*/
        cout << endl;
    }
    return 0;
}
运行结果:
How many lines of * do you want to print?
5
How many space do you want to print?
4
    *   *********
   ***   *******
  *****   *****
 *******   ***
*********   *

  • 2.打印某年某月的日历:

在这里插入图片描述

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
	int i,j,date;
	enum WEEKDAY{Th,Fr,Sa,Su,Mo,Tu,We};
	WEEKDAY weekday;
	cout << "Calendar 2016-01" << endl;
	cout << "---------------------------\n";
	cout << "Su  Mo  Tu  We  Th  Fr  Sa" << endl;
	cout << "---------------------------\n";
	cout << setw(22) << 1;
	cout << setw(4) << 2 << endl;
	for (j = 0; j < 4; j++) {
		for (i = 3; i <= 9; i++) {
			weekday = WEEKDAY((7*j+i) % 7);
			switch (weekday)
			{
			case(Su):cout << setw(2) << (7 * j + i);
				break;
			case(Mo):cout << setw(4) << (7 * j + i);
				break;
			case(Tu):cout << setw(4) << (7 * j + i);
				break;
			case(We):cout << setw(4) << (7 * j + i);
				break;
			case(Th):cout << setw(4) << (7 * j + i);
				break; 
			case(Fr):cout << setw(4) << (7 * j + i);
				break;
			case(Sa):cout << setw(4) << (7 * j + i);
				break;
			default:
				break;
			}
		}
		cout << endl;
	}
	cout << setw(2) << 31 << endl;
	cout << "---------------------------\n";
	return 0;
}
运行结果:
Calendar 2016-01
---------------------------
Su  Mo  Tu  We  Th  Fr  Sa
---------------------------
                     1   2
 3   4   5   6   7   8   9
10  11  12  13  14  15  16
17  18  19  20  21  22  23
24  25  26  27  28  29  30
31
---------------------------


ThinkPad T14 Gen 2与T14P系列对比 表格您的需求推荐机型日常办公、出差、文档处理、视频会议✅(够用、轻便、便宜)视频剪辑、3D建模、编程编译、AI训练、高色准设计✅(性能强、屏幕好、扩展佳)想要未来 5 年不换机✅T14p预算低于 5000 元✅T14 Gen 2(或考虑 T14 Gen 3/4)T14p 2025 款 ≠ 小改款,而是架构级升级它从“高性能笔记本”进化为“AI 移动工作站”,核心差异在于NPU + Ultra 平台 + 全面屏显 + 超长续航。如果您从事AI 开发、视频创作、工程仿真、多任务编程。 阅读详情

相关推荐

别再怕DRIVER_VERIFIER_DMA_VIOLATION蓝屏:手把手教你用WinDbg分析IOMMU与驱动冲突

本文深入解析DRIVER_VERIFIER_DMA_VIOLATION蓝屏错误,从IOMMU原理到实战排错,手把手教你使用WinDbg分析驱动冲突。通过理解DMA与IOMMU的核心机制、搭建分析环境、解读DMAR表与设备拓扑,最终定位问题驱动并提供解决方案,帮助开发者和IT运维人员有效应对此类系统崩溃问题。

weixin_30298497的博客 803

数据挖掘(一)简介

为什么要数据挖掘 Data: 任何事实,数字或文字都可以由计算机处理 在超市出售不同商品的相关数据 Information: 由数据之间的模式,关联或关系提供 上个月哪些商品最畅销? 通常通过查询获得 **Knowledge:**信息可以转换为有关历史模式和未来趋势的知识 通常一起购买哪些商品? 通过分析计算机算法获得 数据从TB爆炸式增长到PB,现在是数据时代不是信息时代 数据...

keke_Memory的博客 463

Flink CDC 3.0 详解

Flink CDC 是基于数据库日志 CDC(Change Data Capture)技术的实时数据集成框架,支持全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等高级特性。配合Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。Flink CDC 于2023年12月7日重磅推出其全新的 3.0 版本,3.0版本的发布对 Flink CDC 而言具有里程碑的意义,自此 Flink CDC 从捕获数据变更的Flink 数据源正式迈向为以 Flink

奔跑的蜗牛的博客 2639

Python,一正整数,如果是奇数,乘3加1,如果是偶数,除2,最终可以得到1

jiesibukeneng的博客 5050

VINS技术路线与代码详解

VINS技术路线 写在前面:本文整和自己的思路,希望对学习VINS或者VIO的同学有所帮助,如果你觉得文章写的对你的理解有一点帮助,可以推荐给周围的小伙伴们,当然,如果你有任何问题想要交流,欢迎随时探讨。话不多说,下面上正文。 VINS代码地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono 参考文档:1.VINS-Mono A R...

wangshuailpp的博客 7万+

【科普知识】什么是驱控一体化伺服电机?

驱控一体化伺服电机以其高度的集成性、兼容性、便捷性以及卓越的性能表现,成为了现代工业自动化领域的一颗璀璨明珠。对于那些追求高效、精准、智能控制的行业用户而言,它无疑是一种理想的选择。

m0_46512607的博客 3151

Cutter入门教程:用Radare2的图形界面简化逆向工程

Cutter是Radare2框架的图形界面工具,专为简化逆向工程流程而设计。作为一款开源逆向分析工具,Cutter结合了Radare2强大的底层分析能力与直观的可视化界面,让新手也能轻松上手二进制文件分析。本文将带你快速掌握Cutter的核心功能与基础操作,开启逆向工程之旅。 ## 什么是Cutter? Cutter是基于Qt和C++开发的Radare2 GUI前端工具,它保留了Radare2

gitblog_00221的博客 308

用LTspice仿真CMOS反相器功耗?这份避坑指南能省你3天调试时间

本文详细介绍了如何使用LTspice准确仿真CMOS反相器的功耗,包括动态功耗、短路功耗和静态功耗的测量技巧。通过工程实践指南,帮助电子工程师避开常见陷阱,优化仿真参数设置,提升仿真结果的可靠性,节省调试时间。

w7x8y9z的博客 189

人形机器人核心技术栈解析:从感知到执行的工业与商用落地实践

机器人技术作为人工智能与自动化领域的关键分支,其核心在于构建能够感知环境、智能决策并精准执行的智能体。其基本原理是通过传感器(如视觉、力觉)采集环境信息,经由算法处理形成感知,再通过运动规划与控制模型驱动执行机构完成指定任务。这项技术的核心价值在于将人类从重复、危险或高精度的劳动中解放出来,提升生产效率与作业安全性。其应用场景已从传统的工业自动化,扩展至商用服务、家庭辅助乃至特种作业等多元领域。随着传感器融合、实时运动控制及AI大模型等技术的突破,人形机器人正成为解决柔性制造、劳动力短缺等产业痛点的前沿方向

weixin_33782386的博客 405

Playwright MCP:开启浏览器自动化的新篇章

在当今数字化时代,浏览器自动化技术在众多领域发挥着至关重要的作用,从简单的网页爬取到复杂的自动化测试,再到智能代理与网页的交互等场景,都离不开高效、可靠的浏览器自动化工具。而微软推出的项目,正是在这一领域的一次创新性探索,它为开发者带来了全新的视角和强大的功能支持。本文将深入探讨的概念、架构、代码示例、应用场景、注意事项以及未来发展方向,帮助读者全面了解这一前沿技术。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 5266

《UDS协议从入门到精通》系列——图解0x85:控制DTC的设置

如何让ECU停止或恢复DTC状态位更新?有哪些注意点?图解+示例教你快速上手UDS 0x85服务!!

车载系统攻城狮 3864

C语言stdlib.h与string.h核心函数深度解析与安全编程实践

内存管理与字符串操作是C语言编程的基石,理解其底层原理对编写安全、高效的代码至关重要。内存动态分配涉及malloc、free等函数,其核心在于理解堆内存的申请与释放机制,以及内存对齐对CPU访问性能的影响。字符串处理则需掌握以'\0'结尾的字符数组模型,避免缓冲区溢出等常见安全漏洞。从技术价值看,这些基础库函数直接决定了程序的稳定性与性能,错误使用会导致内存泄漏、段错误等严重问题。在实际应用场景中,无论是系统编程、嵌入式开发还是高性能计算,都离不开对标准库的精准调用。本文聚焦于stdlib.h和string

weixin_33994429的博客 804

Android系统开发面试指南:系统Launcher岗位解析

本文针对上海礼聪Android系统开发岗位(侧重系统Launcher、充电/电池/USB底层开发)提供面试指南。内容涵盖应用开发(启动流程优化)、系统底层(充电状态机、USBOTG)、编程能力(线程安全LRU实现)、问题排查(ANR分析)及沟通协作等核心考点。通过5类典型问题及技术深度解析,帮助候选人系统准备,重点考察Framework源码理解、系统调试能力和工程思维。建议结合PowerManagerService等模块源码和systrace工具进行实践准备,同时注重技术表达与协作能力的展现。

郑伟强dev的专栏 935

STM32入门实战:从GPIO原理到LED点灯完整开发指南

通用输入输出(GPIO)是微控制器与外部世界交互的基础接口,其核心原理在于通过配置寄存器控制引脚的电平状态与驱动模式。理解GPIO的推挽输出、开漏输出等模式,以及时钟使能、上下拉配置等关键技术,是掌握嵌入式硬件控制的第一步。这项技术的价值在于实现了软件对硬件的直接操控,为LED控制、按键检测、通信协议等应用提供了底层支持。在嵌入式系统开发中,从简单的LED点灯到复杂的传感器网络,GPIO配置都是不可或缺的环节。本文以STM32的GPIO和HAL库为例,结合限流电阻计算与STM32CubeIDE环境搭建,详细

weixin_33795743的博客 308

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

在vector向量中利用find 函数查找特定元素

当使用 std::find 函数在容器中查找特定元素时,如果找到该元素,将返回该元素的迭代器;如果找不到,将返回容器的 end 迭代器。

keke_Memory的博客 5742

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

在set容器中利用find()和end()查找元素的简单使用

在找到元素时返回指向该元素的迭代器,而在未找到时返回集合的。函数来打印元素并查找元素的简单代码示例。指向元素 3 的迭代器,而。指向集合的末尾迭代器。以下是利用容器set的。

keke_Memory的博客 1259

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

一文看明白代码中关于常量引用作为函数的传入参数

当在函数参数中使用常量引用时,这表示函数接受的参数是一个常量引用,即对传入的变量进行只读访问,不会修改该变量。这有助于防止意外修改传递的数据,同时可以提高性能,因为不会复制整个对象。

keke_Memory的博客 1083

基于Linux的C++ Part 4: 算法

Part 4: 算法4.1 算法概念与特征算法基本概念算法特征算法示例4.2 算法描述伪代码流程图(程序框图)4.3 算法设计与实现算法设计与实现步骤典型示例1 :素性判定问题典型示例2 :最大公约数问题4.4 递归算法4.5 容错与算法复杂度4.6 编程实战 4.1 算法概念与特征 算法基本概念 算法定义:解决问题的方法与步骤 设计算法的目的:给出解决问题的逻辑描述,根据算法描述进行实际编程 算法特征 有穷性:算法在每种情况下都可以在有限步后终止 确定性:算法步骤的顺序和内容没有二义性 输入:算法有

keke_Memory的博客 801

C++ 中使用 std::map 的一个示例

这段代码主要是为了演示 std::map 的基本用法,包括插入键值对、通过键访问值、检查特定键是否存在以及遍历整个映射并打印其内容。是一个容器,可以用来存储键值对,其中键是唯一的,每个键都映射到一个值。

keke_Memory的博客 793

使用C++ 标准库map关联式容器根绝键值查找文件是否存在

下面这段代码创建了一个简单的示例,演示了如何使用std::map存储和检索,代码中的注释已经对每一步进行了说明。

keke_Memory的博客 706

基于Linux的C++ Part 6 复合数据类型

基于Linux的C++ Part 6 复合数据类型字 符字符类型、字符文字与量字符量的数学运算标准字符特征库数组数组的意义与性质数组的存储表示数组元素的访问数组与函数多维数组 字 符 字符类型、字符文字与量 定义格式:char ch; const char cch = 'C'; 字符文字使用单引号对 实际存储时字符类型量存储字符的对应 ASCII 值 可使用 signed 与 unsigned 修饰字符类型 //字符表示的等价性 char a = 'A'; char a = 65; char a = 0

keke_Memory的博客 484

基于Linux的C++ Part 7:指针与引用

基于Linux的C++ Part 7:指针与引用指 针指针的基本概念指针运算指针与函数指针与数组指针与结构体字符串字符数组字符指针字符串整体C标准字符串库C++字符串类动态存储管理C格式:malloc/freeC++格式:new/delete引 用 指 针 指针的基本概念 数据对象的地址与值 地址:数据对象的存储位置在计算机中的编号 值:在该位置处存储的内容 地址与值是辩证统一的关系->指针就是这个桥梁 指针变量的定义与使用 指针的定义格式 格式:目标数据对象类型 * 指针变量名称; 例一:

keke_Memory的博客 421

基于Linux的C++ Part3:函数

Part3:函数函数声明与调用函数调用函数实现实例函数定义函数调用规范编程实践 函数声明与调用 函数调用 函数调用:主调(客户)函数与被调(服务器)函数 函数调用时的参数与返回值 例一:Swap( a, b ); 无返回值 例二:n = Add( a, b ); 有返回值 函数原型 函数的实现与调用格式说明:作为函数接口 一般出现在头文件中。 格式:函数返回值类型 函数名称( 形式参数列表 ); 例一:int Add( int x, int y ); 例二:void Swap( int x, int y

keke_Memory的博客 361

基于Linux的C++ Part 8:链表与程序抽象

基于Linux的C++ Part 8:链表与程序抽象数据抽象数据抽象的目的与意义结构化数据类型的性质数据封装信息隐藏抽象数据类型链 表链表定义链表数据结构抽象链表抽象链表实现函数指针抽象链表 数据抽象 数据抽象的目的与意义 数据对象 信息缺失:程序中的数据对象只有地址和值,没有数据类型、数据解释及数据意义等信息 解决手段:抽象 数据的表示:注释、有意义的数据对象名称 数据的功能:描述可以在数据上工作的操作集 数据的功能比表示更重要 例:程序员更关心整数的运算而不是计算机如何存储整数 结构化数据类型的性质

keke_Memory的博客 337

C 教程-初始C语言

初始C语言为什么学习 C 编程初始第一个C语言程序 为什么学习 C 编程 C语言是一种种通用的,面向过程的计算机编程语言,用于开发UNIX操作系统,C是使用最广泛的计算机语言。其他的高级语言都是由C语言演变而来。对于大多数程序员而言,C是他们学习和学习的第一门语言。 C语言因以下特点成为最广泛的编程语言: 简单易学 结构化 产生有效程序 可以处理底层 可以在各种计算机平台上进行编译 初始第一个C语言程序 这里不想说"Hello World" 做一下自我介绍: “My name is KeKe!” Ste

keke_Memory的博客 259

基于Linux的C++ Part1:基于语法元素

Part 1 C++基本语法元素1.1 介绍1.2 什么是程序设计1.3 初时C/C++程序 1.1 介绍 本笔记基于Linux环境学习C++ 开发 C/C++ ,Unix/Linux之间的关系 C++由 C 设计开发 Linux 是和 Unix 学习开发的 Unix系统是由 C 开发的 1.2 什么是程序设计 就是一条条指令序列,按规则完成特定功能。 如何写?程序就是按照任务要求,设计数据结构和算法,得到运行结果。 算法:解决问题的方法和步骤,常用流程图来描述算法。语法和逻辑的设计都是一步步精益求精。通常

keke_Memory的博客 241
上一篇: 基于Linux的C++ Part1:基于语法元素
下一篇: 基于Linux的C++ Part3:函数
kxwang_
博客等级 码龄7年 144粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

kxwang_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值