C++入门基础:数据类型与条件判断语句

news2024/11/24 23:04:35

数据类型

基础数据类型

整型(Integral Types)

int:基本的整型,大小依赖于编译器和平台,通常是32位或64位。

short:短整型,通常是16位。 

long:长整型,大小依赖于编译器和平台,但至少是32位,可能是64位。

long long:长长整型,通常是64位。

#include <iostream>  
  
int main() {  
    int intVar = 12345;                  // 基本的整型  
    short shortVar = 123;               // 短整型  
    long longVar = 1234567890L;         // 长整型,使用L后缀  
    long long longLongVar = 1234567890123456789LL; // 加长整型,使用LL后缀  
  
    std::cout << "整型变量: " << intVar << std::endl;  
    std::cout << "短整型变量: " << shortVar << std::endl;  
    std::cout << "长整型变量: " << longVar << std::endl;  
    std::cout << "长长整型变量: " << longLongVar << std::endl;

    return 0;
}

字符型(Character Types)

char:字符类型,用于存储一个字符,占用1个字节。

#include <iostream>  
  
int main() {    
    char charVar = 'A';              
    std::cout << "字符型变量: " << charVar << std::endl; 
    return 0;  
} 
浮点型(Floating-Point Types)

float:单精度浮点数。

double:双精度浮点数。

long double:扩展的双精度浮点数,精度高于double。

#include <iostream>  
  
int main() {  
    float floatVar = 1.23f;             // 单精度浮点数,使用f后缀  
    double doubleVar = 2.34567;         // 双精度浮点数  
    long double longDoubleVar = 3.4567890123456789L; // 扩展的双精度浮点数,使用L后缀  
  
    std::cout << "单精度浮点数变量: " << floatVar << std::endl;  
    std::cout << "双精度浮点数变量: " << doubleVar << std::endl;  
    std::cout << "扩展的双精度浮点数变量: " << longDoubleVar << std::endl;  
  
    return 0;  
}

布尔型(Boolean Types)

bool:布尔类型,可以存储true或false。

#include <iostream>

int main()
{
    bool b = true;
    std::cout << b << std::endl;    // true会输出1,false会输出0
    bool boolVar = true;               
    std::cout << "布尔型变量: " << std::boolalpha << boolVar << std::endl; 
    return 0;
}

 复合数据类型

数组(Arrays)

存储相同类型数据的固定大小序列。

#include<iostream>

int main() {  
    int numbers[5] = {1, 2, 3, 4, 5};  
    for (int i = 0; i < 5; ++i) {  
        std::cout << "Element at index " << i << ": " << numbers[i] << std::endl;  
    }  
    return 0;
}

字符串(Strings)

在C++中,字符串通常由 std::string 类表示。

#include<iostream>

int main() {  
    std::string greeting = "Hello, World!";  
    std::cout << "Greeting: " << greeting << std::endl;  
    return 0;
}
结构体(Structures)

用户定义的数据类型,可以包含多个不同类型的数据成员。

#include <iostream>  
#include <string>  

struct Person {  // 定义结构体  
    std::string name;  
    int age;  
};  

int main()
{
    Person p;  // 声明结构体变量  
    p.name = "GGBond";  // 赋值  
    p.age = 18;  
    std::cout << "Name: " << p.name << ", Age: " << p.age << std::endl;  
    return 0;
}

联合体(Unions)

union 允许在相同的内存位置存储不同的数据类型,但一次只能使用其中一个成员。

#include <iostream>  
#include <string>  

// 定义联合体 
union Data {  
    int intValue;  
    float floatValue;  
    char charValue;  
};  

int main()
{
        Data data;  
    data.intValue = 100;  
    std::cout << "Union intValue: " << data.intValue << std::endl;  
    data.floatValue = 3.14f; // 覆盖上面的intValue  
    std::cout << "Union floatValue: " << data.floatValue << std::endl;  
    return 0;
}

 

枚举(Enumerations)

enum: 一种用户定义的类型,包含固定数量的常量。

#include <iostream>  
#include <string>  

enum Pig { GGBond, FeiFei, MiHu };  

int main() {  
    Pig pig = FeiFei;  
    std::cout << pig << std::endl;  
    return 0;  
}

指针和引用类型

指针(Pointers)

存储内存地址的变量。

引用(References)

对象的别名,提供了对对象的直接访问。

#include <iostream>  
  
int main() {  
    // 使用指针  
    int value = 42;  
    int *pointerToValue = &value; // 指针存储value的内存地址  
    std::cout << "Value: " << value << std::endl;  
    std::cout << "Address of value: " << &value << std::endl;  
    std::cout << "Value pointed by pointerToValue: " << *pointerToValue << std::endl;  
    std::cout << "Address stored in pointerToValue: " << pointerToValue << std::endl;  
  
    // 引用指针  
    int &referenceToValue = value; // 引用是value的别名  
    referenceToValue = 100; // 修改引用的值,实际上修改了value的值  
    std::cout << "Value after modification through reference: " << value << std::endl;  
  
    return 0;  
}

用户自定义数据类型

类(Classes)

用户定义的类型,可以包含数据成员和成员函数,支持继承、多态等面向对象特性。

#include <iostream>  
#include <string>  
  
// 定义类Person,类中有name和age两个成员变量  
class Person {  
private:  
    std::string name;  
    int age;  
  
public:  
    // 构造函数  
    Person(const std::string &n, int a) : name(n), age(a) {}  
    // 成员函数  
    void introduce() {  
        std::cout << "My name is " << name << " and I am " << age << " years old." << std::endl;  
    }  
    // 访问器(getter)  
    int getAge() const {  
        return age;  
    }  
    // 修改器(setter)  
    void setAge(int newAge) {  
        age = newAge;  
    }  
};  
  
int main() {  
    // 创建Person类的实例  
    Person person("GGBond", 18);  
    person.introduce(); // 调用成员函数  
    // 使用访问器和修改器  
    std::cout << "Original age: " << person.getAge() << std::endl;  
    person.setAge(35);  
    std::cout << "Updated age: " << person.getAge() << std::endl;  
  
    return 0;  
}

C++11及之后引入的新数据类型

空指针类型(nullptr_t)

表示空指针的类型,用于替代C++03中的NULL宏。

#include <iostream>  
  
int main() {  
    // 使用nullptr初始化指针  
    int* ptr = nullptr;  
  
    if (ptr == nullptr) {  
        std::cout << "Pointer is null." << std::endl;  
    } else {  
        std::cout << "Pointer is not null." << std::endl;  
    }  
  
    return 0;  
}

 

自动类型推导的变量(auto)

编译器根据初始化表达式自动推断变量的类型。

#include <iostream>  
#include <vector>  
  
int main() {  
    std::vector<int> vec = {1, 2, 3, 4, 5};  
  
    // 使用auto关键字自动推导迭代器类型  
    for (auto it = vec.begin(); it != vec.end(); ++it) {  
        std::cout << *it << " ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}

输出:1 2 3 4 5 

范围基础的for循环(Range-based for loop)

虽然不算是一个数据类型,但C++11引入了新的循环语法,它依赖于范围的概念。

#include <iostream>  
#include <vector>  
  
int main() {  
    std::vector<int> vec = {1, 2, 3, 4, 5};  
  
    // 使用范围基础的for循环遍历容器  
    for (const auto& value : vec) {  
        std::cout << value << " ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}

 

智能指针(Smart Pointers)

std::unique_ptrstd::shared_ptrstd::weak_ptr,用于自动管理动态分配的内存。

#include <iostream>  
#include <memory>  
  
struct Example {  
    Example(int value) : value_(value) {}  
    ~Example() { std::cout << "Destroying Example with value " << value_ << std::endl; }  
    int value_;  
};  
  
int main() {  
    // 使用std::unique_ptr管理动态内存  
    std::unique_ptr<Example> examplePtr(new Example(42));  
  
    // 当unique_ptr超出范围时,它会自动删除所指向的对象  
    return 0;  
}

 

右值引用和移动语义(Rvalue References and Move Semantics)

C++11引入了右值引用,以支持移动语义和完美转发。

#include <iostream>  
#include <string>  
#include <utility> // 使用std::move  
  
void processString(std::string&& str) {  
    std::cout << "Processing moved string: " << str << std::endl;  
}  
  
int main() {  
    std::string str = "Hello, World!";  
    // 使用std::move将左值转换为右值引用,实现移动语义, 移动后,str的状态是未定义的,使用前需要重新赋值或清除。  
    processString(std::move(str));  
  
    return 0;  
}

 

初始化列表(Initializer Lists)

允许使用花括号初始化对象和容器。

#include <iostream>  
#include <vector>  
#include <initializer_list>  
  
int main() {  
    // 使用初始化列表初始化vector  
    std::vector<int> vec = {1, 2, 3, 4, 5};  
  
    for (const auto& value : vec) {  
        std::cout << value << " ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}

 

条件判断语句

if语句

if语句是最基础的条件判断语句 ,当只需要在条件为真时执行操作,而不需要处理条件为假的情况。

例如:如果数值 number 大于5,在终端输出 数值比5大

#include <iostream>  
using namespace std;  
  
int main() {  
    int number = 10;  
  
    if (number > 5) {  
        cout << "数值比5大" << endl;  
    }  
  
    return 0;  
}

if-else语句

if-else语句在if语句的基础上增加了对条件为假时的处理,当需要在条件为真时执行一段代码,条件为假时执行另一段代码。

例如:如果数值 number 大于5,在终端输出数值比5大,如果数值 number 小于5,在终端输出数值比5小

#include <iostream>  
using namespace std;  
  
int main() {  
    int number;  

    std::cout << "请输入一个整数: ";
    std::cin >> number;
  
    if (number > 5) {  
        cout << "数值比5大" << endl;  
    } else {  
        cout << "数值比5小" << endl;  
    }  
  
    return 0;  
}

 if-else-if语句

 if-else if-else语句允许对多个条件进行判断,并分别处理。

#include <iostream>  
using namespace std;  
  
int main() {  
    
    std::cout << "输入成绩: ";
    int grade;
    std::cin >> grade;
  
    if (grade >= 90) {  
        cout << "你的成绩是 A." << endl;  
    } else if (grade >= 80) {  
        cout << "你的成绩是 B." << endl;  
    } else if (grade >= 70) {  
        cout << "你的成绩是 C." << endl;  
    } else if (grade >= 60) {  
        cout << "你的成绩是 D." << endl;  
    } else {  
        cout << "你的成绩是 E." << endl;  
    }  
  
    return 0;  
}

 switch语句

switch语句用于对某个表达式的值进行判断,并与多个case标签进行比较,当需要根据某个变量的不同值执行不同代码块时,特别是该变量为整型或枚举类型时。

#include <iostream>  
using namespace std;  
  
int main() {  
    char day ;
    cout << "请输入评分等级(A, B, C, D, E): ";  
    cin >> day; 
  
    switch (day) {  
        case 'A':  
            cout << "90分以上" << endl;  
            break;  
        case 'B':  
            cout << "80~90分" << endl;  
            break;  
        case 'C':  
            cout << "70~80分" << endl;  
            break;  
        case 'D':  
            cout << "60~70分" << endl; 
            break;  
        case 'E':  
            cout << "不合格" << endl;  
            break;  
        default:  
            cout << "没有这个等级" << endl;  
            break;  
    }  
  
    return 0;  
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2033351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本地部署Code Llama大模型结合Text generation Web UI远程运行LLM

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

pdf拆分成一页一页,怎么操作?pdf拆分的好用方法

pdf拆分成一页一页&#xff0c;怎么操作&#xff1f;PDF文件的拆分通常涉及到以下几个常见场景和需求&#xff1a;首先&#xff0c;PDF文件可能包含大量的页面&#xff0c;例如数百页的电子书或详尽的技术手册。在某些情况下&#xff0c;用户可能只需要处理其中的几页或者想要单…

揭秘!亚马逊与速卖通自养号测评:必备资源与技术要点

面对测评服务商的种种承诺&#xff0c;其真实性往往难以验证&#xff0c;而在像Facebook这样的社交平台上自行寻找测评资源&#xff0c;也显得相当困难和不切实际。随着产品即将上架&#xff0c;寻找一个可靠的测评服务似乎并不那么容易。因此&#xff0c;对于亚马逊等跨境平台…

运动耳机哪个品牌好用?五款质量一流品牌推荐!

运动耳机无疑是运动爱好者的绝佳伴侣&#xff0c;让每一次挥汗如雨的瞬间都伴随着无与伦比的音乐盛宴与舒适的佩戴感受。特别是对于跑步爱好者而言&#xff0c;一款优秀的运动耳机更是不可或缺的装备。然而&#xff0c;市场上的运动耳机种类繁多&#xff0c;质量也千差万别&…

Mirror学习笔记(五)概念指南

文章目录 一、Authority(权限)二、IDs(身份编号)三、Attributes(属性)四、Time Synchronization(同步时间)五、Data types(数据类型)六、Serialization(序列化)七、Synchronization(同步)八、Communications(通讯)九、GameObject(游戏对象) 顶层脚本API: Mirror是一个高级网络库…

Qt信号与槽-思维导图-学习笔记

Qt 信号与槽 Qt 信号与槽机制 基本概念 信号与槽机制&#xff1a;Qt 编程的基础与创新&#xff0c;使得处理界面组件交互操作更加直观和简单 信号&#xff08;Signal&#xff09;&#xff1a;在特定情况下被发射的事件&#xff0c;如按钮点击的 clicked() 信号、组合框项变化…

服务器数据恢复—服务器raid常见故障产生原因数据恢复方案

磁盘阵列&#xff08;raid&#xff09;是一种将多块物理硬盘整合成一个虚拟存储的技术。raid模块相当于一个存储管理中间层&#xff0c;上层接收并执行操作系统及文件系统的数据读写指令&#xff0c;下层管理数据在各个物理硬盘上的存储及读写。相对于单独的物理硬盘&#xff0…

超算互联网-Stable Diffusion 2.1文生图教程

一、名词简介 1. 超算互联网 超算互联网是一种基于云计算的高性能计算平台&#xff0c;用户可以通过互联网接入超级计算资源。它集成了大量的计算节点&#xff0c;提供强大的计算能力&#xff0c;适用于科学计算、深度学习、人工智能等领域。用户可以利用超算互联网平台运行复…

Neural Architecture Search:使用Ultralytics框架进行YOLO-NAS目标检测

Neural Architecture Search&#xff1a;使用Ultralytics框架进行YOLO-NAS目标检测 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行YOLO-NAS目标检测进行预测进行验证 参考文献 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c…

旧照片如何修复翻新?这3个方法值得收藏

旧照片如何修复翻新&#xff1f;旧照片的修复翻新是一项既具有挑战性又充满意义的工作。它不仅仅是一个简单的图像处理过程&#xff0c;更是一次穿越时空的旅行&#xff0c;让那些被岁月遗忘的珍贵回忆重新焕发光彩。每一张旧照片都承载着独特的历史和情感价值&#xff0c;通过…

CTF-PWN-web pwn初探

文章目录 参考简介生命周期php扩展模块搭建php扩展模块初始化编写扩展模块编译扩展模块测试 检查调试相关技巧/proc/self/maps泄露php堆PHP 内存管理机制空闲堆块管理示例解释1. 内存分配示例2. 内存释放示例3. tcache poison 攻击 溢出mprotect改栈权限反弹shell 常用phpexp 参…

[Pytorch案例实践008]基于卷积神经网络和通道注意力机制的图像分类实战

一、项目介绍 这是一个蜜蜂、蚂蚁图像分类项目&#xff0c;旨在使用卷积神经网络&#xff08;CNN&#xff09;结合SE&#xff08;Squeeze-and-Excitation&#xff09;模块进行二分类任务。以下是项目的详细介绍&#xff1a; 项目背景 图像分类是计算机视觉中的一个基本任务&a…

一图看懂数据仓库、数据平台、数据中台、数据湖的内涵和区别!

当大数据平台出现的时候&#xff0c;有人是说这不就是大号的数据仓库吗?当数据中台出现的时候&#xff0c;有人说这不就是数据仓库的进一步包装吗?数据湖的出现更是让很多人陷入困惑。 事实上&#xff0c;数据仓库、数据平台、数据中台、数据湖还是有区别的&#xff0c;不仅…

算法 三

堆 满二叉树&#xff1a;节点满的。 完全二叉树定义&#xff1a;最下层从左往右满&#xff0c;不跳。 下标性质 大根堆&#xff1a;某个节点为根节点&#xff0c;其下的所有结点都小于根节点。 小根堆 重要的变量 heapSize&#xff1a;当前堆的有效节点个数 重要的两个过程…

RCE-无字母数字绕过正则表达式

目录 一、源码展示 二、分析源码 2.1异或运算 2.2或运算 2.3取反运算 一、源码展示 <?php error_reporting(0); highlight_file(__FILE__); $code$_GET[code]; if(preg_match(/[a-z0-9]/i,$code)){die(hacker); } eval($code); 二、分析源码 根据源码&#xff0c;我…

数据治理:国家标准 GB/T 43697-2024《数据安全技术 数据分类分级规则》

按照国家数据分类分级保护有关要求,参照本文件制定本行业本领域的数据分类分级标准规范,重点可明确以下内容: 明确行业数据分类细则,确定数据分类所依据的业务属性,给出按照业务属性划分的数据类别:分析行业领域数据的领域、群体、区域、精度、规模、深度、重要性等分级要素…

设计模式-单一职责模式

DecoratorBridge Decorator 动机 在某些情况下我们可能会 “过度地使用继承来扩展对象的功能”&#xff0c;由于继承为类型引入的静态特质&#xff0c;使得这种扩展方式缺乏灵活性&#xff1b;并且随着子类的增多&#xff08;扩展功能的增多&#xff09;&#xff0c;各种子类的…

基于RK3568+FPGA医用心电监护仪解决方案

医用心电监护仪解决方案 随着我国老龄化速度加快、规模扩大&#xff0c;越来越多民生领域的热点引起民众的关注。庞大的老龄化群体将是一个严峻的问题&#xff0c;各种社会保障政策的实施和各级医疗资源的扩展与升级正在有效化解这一难题。 在这种背景下&#xff0c;医用心电监…

如何构建一个帮助你高效学习编程的完美笔记系统?

在编程学习的过程中&#xff0c;笔记记录是一项至关重要的技能。尤其是在学习Python这样一门功能强大、广泛应用的编程语言时&#xff0c;建立一个高效的笔记系统不仅能帮助你更好地掌握知识&#xff0c;还能提高你的编程效率。那么&#xff0c;如何构建一个帮助你高效学习Pyth…

Java面试八股之消息队列有哪些协议?各种协议有哪些具体实现

消息队列有哪些协议&#xff1f;各种协议有哪些具体实现 消息队列协议是指在消息队列系统中&#xff0c;用于消息的发送、接收和管理的一套通信规则。不同的协议有着不同的特性和应用场景&#xff0c;以下是一些常见的消息队列协议及其具体实现&#xff1a; AMQP (Advanced M…