当前位置: 首页 > news >正文

【C++ 程序设计】实战:C++ 变量实践练习题

目录

01. 变量:定义

02. 变量:初始化

03. 变量:参数传递

04. 变量:格式说明符

① 占位符 “%d” 改为格式说明符 “%llu”

② 占位符 “%d” 改为格式说明符 “%f” 或 “%e”

05. 变量:字节数统计

06. 变量:浮点数 float 的最小/大值 



01. 变量:定义

未定义变量,直接引用变量时:

  • 出现报错:未定义标识符 "a"
  • 解决报错:先定义变量


02. 变量:初始化

只定义变量,未初始化变量时,引用变量时: 

  • 出现报错:C6001: 使用未初始化的内存 "a"。
  • 解决报错:定义变量时,同时初始化变量


03. 变量:参数传递

已定义变量,并初始化变量时,传递变量参数时: 

  • 出现报错:C6271: 传递给 "printf" 的额外参数
  • 解决报错:使用占位符 “%d”,需注意传递的参数不能超过格式字符串中占位符的数量

【报错解决详解】

当在调用 printf 函数时,如果传递的参数超过了格式字符串中占位符的数量,就会出现 C6271 错误,这个错误是指传递给 printf 的额外参数:

  • 例如,假设定义了一个整数变量 num 并初始化为 10,然后想将其打印出来,以下是一个正确的示例,因为格式字符串 "%d" 中有一个占位符 %d 来接收整数参数 num 的值,正确代码如下所示:
    int num = 10;
    printf("Number: %d\n", num);
    
  • 然而,如果在格式字符串中只有一个占位符 %d,但传递了多个参数给 printf,就会触发 C6271 错误,下述代码中,传递了两个参数 num 和 20 给 printf 函数,但是在格式字符串中只有一个 %d 占位符。这就导致了额外的参数无法被正确处理,从而引发了错误,错误代码如下所示:
    int num = 10;
    printf("Number: %d\n", num, 20);
    
  • 为了解决这个问题,需要确保传递给 printf 函数的参数的数量与格式字符串中的占位符的数量一致,或者确保占位符的数量与要打印的参数的数量相匹配。例如,如果想将两个整数打印出来,需要使用两个占位符 %d,这样就不会触发 C6271 错误了,正确代码如下所示:
    int num1 = 10;
    int num2 = 20;
    printf("Numbers: %d, %d\n", num1, num2);
    


04. 变量:格式说明符

① 占位符 “%d” 改为格式说明符 “%llu”

已定义变量,并初始化变量时,传递变量参数时: 

  • 出现报错:C6328: 大小不匹配: 已将 “unsigned _ _int64" 作为 _Param_(2) 传递,但需要使用 "int" 来调用 "printf"。
  • 解决报错:解决参数类型不匹配错误,修改 “%d” 为 “%llu”,使用 %llu 格式说明符来与 unsigned __int64 类型匹配,其中 llu 表示无符号长整型数。

【报错解决详解】

  • C6328 错误是由于参数类型不匹配引起的。
  • 在代码中,sizeof(int) 返回一个 unsigned __int64 类型的值,但是传递给 printf 函数的格式字符串中使用了 %d,这会导致参数类型不匹配错误。
  • 为了解决这个问题,可以使用 %llu 格式说明符来与 unsigned __int64 类型匹配,其中 llu 表示无符号长整型数。
  • 以下是修正后的代码:
    #include <stdio.h>int main()
    {int a = 0;float b = 0;double c = 0;printf("变量名(中文):%d\n", a);printf("变量值(数字):%llu\n" , sizeof(int));
    }
    
  • 修复后,printf 函数的参数类型与格式说明符 %llu 相匹配,因此就不会触发 C6328 错误了。

② 占位符 “%d” 改为格式说明符 “%f” 或 “%e”

已定义变量,并初始化变量时,传递变量参数时: 

  • 出现报错:C6273: 调用 "printf" 实际类型: "double" 时需要整数时,非整数传递为_Param_(2)。
  • 解决报错:解决参数类型不匹配错误,修改占位符 “%d” 改为 “%f” 或 “%e” 来打印 FLT_MIN 和 FLT_MAX,这两个值是浮点类型的,而不是整型,应该使用 %f 或 %e 格式说明符来打印浮点数

【报错解决详解】

  • 报错信息提示的问题出现在以下两行代码:
    printf("打印浮点数 float 的最小值:%d\n", FLT_MIN);
    printf("打印浮点数 float 的最大值:%d\n", FLT_MAX);
    
  • 错误原因是使用错误的格式说明符 %d 来打印 FLT_MIN 和 FLT_MAX,这两个值是浮点类型的,而不是整型。应该使用 %f 或 %e 格式说明符来打印浮点数。
  • 修改后的代码中,使用 %f 替代 %d 格式说明符来打印浮点数 FLT_MIN 和 FLT_MAX,从而解决了格式化输出的错误。修改后的代码如下:
    #include<stdio.h>
    #include <cfloat>int main()
    {int a = 0;                           // 定义并初始化整型变量 afloat b = 1.5;                       // 定义并初始化浮点型变量 bdouble c = 5.78;                     // 定义并初始化双精度浮点型变量 c/* 参数传递 */printf("打印变量 a 的值:%d\n", a);  // 打印变量 a 的值,使用 %d 格式说明符打印整型值/* 字节数统计 */printf("打印 int 的字节数:%llu\n", sizeof(int));     // 使用 sizeof 运算符获取 int 类型的大小并使用 %llu 格式说明符打印无符号长整型值printf("打印 float 的字节数:%llu\n", sizeof(float));   // 使用 sizeof 运算符获取 float 类型的大小并使用 %llu 格式说明符打印无符号长整型值printf("打印 double 的字节数:%llu\n", sizeof(double)); // 使用 sizeof 运算符获取 double 类型的大小并使用 %llu 格式说明符打印无符号长整型值/* 浮点数的最小/大值 */printf("打印浮点数 float 的最小值:%f\n", FLT_MIN);printf("打印浮点数 float 的最大值:%f\n", FLT_MAX);return 0;
    }
    


05. 变量:字节数统计

【示例代码】 

#include<stdio.h>int main()
{int a = 0;                           // 定义并初始化整型变量 afloat b = 1.5;                       // 定义并初始化浮点型变量 bdouble c = 5.78;                     // 定义并初始化双精度浮点型变量 c/* 参数传递 */printf("打印变量 a 的值:%d\n" , a);  // 打印变量 a 的值,使用 %d 格式说明符打印整型值/* 字节数统计 */printf("打印 int 的字节数:%llu\n" , sizeof(int));     // 使用 sizeof 运算符获取 int 类型的大小并使用 %llu 格式说明符打印无符号长整型值printf("打印 float 的字节数:%llu\n", sizeof(float));   // 使用 sizeof 运算符获取 float 类型的大小并使用 %llu 格式说明符打印无符号长整型值printf("打印 double 的字节数:%llu\n", sizeof(double)); // 使用 sizeof 运算符获取 double 类型的大小并使用 %llu 格式说明符打印无符号长整型值
}

【代码详解】

  1. 包含头文件 <stdio.h>,这是一个标准输入输出库文件,其中包含了 printf 函数的声明。
  2. 在 main 函数中,定义了整型变量 a 并初始化为 0,定义了浮点型变量 b 并初始化为 1.5,定义了双精度浮点型变量 c 并初始化为 5.78
  3. 使用 printf 函数分别打印了变量 a 的值、int 类型的大小、float 类型的大小、double 类型的大小;分别使用 %d%llu%llu%llu 格式说明符和相应的 sizeof 运算符获取变量的值和类型的大小。

【输出结果】 

  • 在大多数编译器中,sizeof(int) 表达式返回的结果是 int 类型在当前编译环境中的字节数。
  • 通常情况下,int 类型在大部分平台上占据 4 个字节(32 位),但这并不是绝对的,它可能会在不同的平台和编译器上有所不同。
  • 因此,当运行 sizeof(int) 时,输出结果为 4,说明在当前编译环境中 int 类型占据 4 个字节。
  • 需要注意的是,sizeof 运算符返回的是无符号整型值,因此在使用 %llu 格式说明符打印 sizeof(int) 的结果时,需要使用无符号长整型 (unsigned long long) 格式来匹配参数的类型。
打印变量 a 的值:0
打印 int 的字节数:4
打印 float 的字节数:4
打印 double 的字节数:8


06. 变量:浮点数 float 的最小/大值 

【示例代码】 

#include<stdio.h>
#include <cfloat>int main()
{int a = 0;                           // 定义并初始化整型变量 afloat b = 1.5;                       // 定义并初始化浮点型变量 bdouble c = 5.78;                     // 定义并初始化双精度浮点型变量 c/* 参数传递 */printf("打印变量 a 的值:%d\n", a);  // 打印变量 a 的值,使用 %d 格式说明符打印整型值/* 字节数统计 */printf("打印 int 的字节数:%llu\n", sizeof(int));       // 使用 sizeof 运算符获取 int 类型的大小并使用 %llu 格式说明符打印无符号长整型值printf("打印 float 的字节数:%llu\n", sizeof(float));   // 使用 sizeof 运算符获取 float 类型的大小并使用 %llu 格式说明符打印无符号长整型值printf("打印 double 的字节数:%llu\n", sizeof(double)); // 使用 sizeof 运算符获取 double 类型的大小并使用 %llu 格式说明符打印无符号长整型值/* 浮点数 float 的最小/大值: %f 格式 */printf("打印浮点数 float 的最小值:%f\n", FLT_MIN);     // 打印浮点数 float 的最小值,使用 %f 格式说明符打印浮点数值printf("打印浮点数 float 的最大值:%f\n", FLT_MAX);     // 打印浮点数 float 的最大值,使用 %f 格式说明符打印浮点数值/* 浮点数 float 的最小/大值: %e 格式 */printf("打印浮点数 float 的最小值:%e\n", FLT_MIN);     // 打印浮点数 float 的最小值,使用 %e 格式说明符打印浮点数值printf("打印浮点数 float 的最大值:%e\n", FLT_MAX);     // 打印浮点数 float 的最大值,使用 %e 格式说明符打印浮点数值
}

【代码详解】

  1. 包含了头文件 <stdio.h> 和 <cfloat> 分别用于输入输出和浮点数相关常量。
  2. 在 main 函数中,定义了整型变量 a 并初始化为 0,定义了浮点型变量 b 并初始化为 1.5,定义了双精度浮点型变量 c 并初始化为 5.78
  3. 使用 printf 函数打印了变量 a 的值,并使用 %d 格式说明符来打印整型值。
  4. 使用 printf 函数分别打印了 int 类型、float 类型和 double 类型的字节数,并使用 %llu 格式说明符和 sizeof 运算符来获取并打印无符号长整型值。
  5. 使用 printf 函数分别打印了浮点数 float 类型的最小值和最大值,并使用 %f 格式说明符来打印浮点数。
  6. 使用 printf 函数分别以科学计数法的格式打印了浮点数 float 类型的最小值和最大值,并使用 %e 格式说明符来打印浮点数。

【输出结果】 

  • %f 是格式说明符,用于打印浮点数的值。
  • %e 是格式说明符,用于以科学计数法打印浮点数的值。
  • 科学计数法:1.175494e-38 表示为 1.175494 乘以 10 的 -38 次方
  • 科学计数法:3.402823e+38 表示为 3.402823 乘以 10 的 38 次方
  • 打印变量 a 的值: 0:这是因为变量 a 被初始化为整型的默认值 0。
  • 打印 int 的字节数: 4int 类型通常占用 4 个字节(32 位)的内存空间。
  • 打印 float 的字节数: 4float 类型通常占用 4 个字节(32 位)的内存空间。
  • 打印 double 的字节数: 8double 类型通常占用 8 个字节(64 位)的内存空间。
  • 打印浮点数 float 的最小值: 0.000000FLT_MIN 是 float 类型的最小正非零值,通常为 0。
  • 打印浮点数 float 的最大值: 340282346638528859811704183484516925440.000000FLT_MAX 是 float 类型的最大值,通常是一个极大的数。
  • 打印浮点数 float 的最小值: 1.175494e-38:这是使用科学计数法表示的 float 类型的最小正非零值。
  • 打印浮点数 float 的最大值: 3.402823e+38:这是使用科学计数法表示的 float 类型的最大值。
打印变量 a 的值: 0
打印 int 的字节数: 4
打印 float 的字节数: 4
打印 double 的字节数: 8
打印浮点数 float 的最小值: 0.000000
打印浮点数 float 的最大值: 340282346638528859811704183484516925440.000000
打印浮点数 float 的最小值: 1.175494e-38
打印浮点数 float 的最大值: 3.402823e+38

相关文章:

【C++ 程序设计】实战:C++ 变量实践练习题

目录 01. 变量&#xff1a;定义 02. 变量&#xff1a;初始化 03. 变量&#xff1a;参数传递 04. 变量&#xff1a;格式说明符 ① 占位符 “%d” 改为格式说明符 “%llu” ② 占位符 “%d” 改为格式说明符 “%f” 或 “%e” 05. 变量&#xff1a;字节数统计 06. 变量&a…...

微软对Visual Studio 17.7 Preview 4进行版本更新,新插件管理器亮相

近期微软发布了Visual Studio 17.7 Preview 4版本&#xff0c;而在这个版本当中&#xff0c;全新设计的扩展插件管理器将亮相&#xff0c;并且可以让用户可更简单地安装和管理扩展插件。 据了解&#xff0c;目前用户可以从 Visual Studio Marketplace 下载各式各样的 VS 扩展插…...

Kafka 入门到起飞 - Kafka怎么做到保障消息不会重复消费的? 消费者组是什么?

Kafka怎么做到避免消息重复消费的&#xff1f; 消费者组是什么&#xff1f; 消费者&#xff1a; 1、订阅Topic&#xff08;主题&#xff09; 2、从订阅的Topic消费&#xff08;pull&#xff09;消息&#xff0c; 3、将消费消息的offset&#xff08;偏移量&#xff09;保存在K…...

MongoDB 的增、查、改、删

Monogo使用 增 单条增加 db.member.insertOne({"name":"张三","age":18,"create":new Date()}) db.member.insert({"name":"李四1","age":18,"create":new Date()}) db.member.insertOne(…...

mysql常用操作命令

mysql常用操作命令 mysql:单进程多线程模型,一个SQL语句无法利用多个cpu core 一:基本命令 0.查看当前连接数 show global status like Thread$; show variables like "%timeout%"; show variables like "log_%";1.查看当前连接状态 show processlist…...

数学建模常见模型汇总

优化问题 线性规划、半定规划、几何规划、非线性规划、整数规划、多目标规划(分层序列法)、动态规划、存贮论、代理模型、响应面分析法、列生成算法 预测模型 微分方程、小波分析、回归分析、灰色预测、马尔可夫预测、时间序列分析(AR MAMA.RMA ARTMA LSTM神经网络)、混沌模…...

C#使用LINQ查询操作符实例代码(二)

目录 六、连表操作符 1、内连接2、左外连接(DefaultIfEmpty)3、组连接七、集合操作 八、分区操作符 1、Take()&#xff1a;2、TakeWhile()&#xff1a;3、Skip()&#xff1a;4、SkipWhile()&#xff1a;九、聚合操作符 1、Count&#xff1a; 返回集合项数。 2、LongCount&…...

jenkinsfile小试牛刀

序 本文主要演示一下如何用jenkinsfile来编译java服务 安装jenkins 这里使用docker来安装jenkins docker run --name jenkins-docker \ --volume $HOME/jenkins_home:/var/jenkins_home \ -p 8080:8080 jenkins/jenkins:2.416之后访问http://${yourip}:8080&#xff0c;然后…...

C++ xmake构建

文章目录 一、xmake.lua二、xmake常用语句 一、xmake.lua --xmake.luaset_project("XXX")add_rules("mode.debug", "mode.release") set_config("arch", "x64")if is_plat("windows") then -- the release modei…...

推荐带500创作模型的付费创作V2.1.0独立版系统源码

ChatGPT 付费创作系统 V2.1.0 提供最新的对应版本小程序端&#xff0c;上一版本增加了 PC 端绘画功能&#xff0c; 绘画功能采用其他绘画接口 – 意间 AI&#xff0c;本版新增了百度文心一言接口。 后台一些小细节的优化及一些小 BUG 的处理&#xff0c;前端进行了些小细节优…...

wps图表怎么改横纵坐标,MLP 多层感知器和CNN卷积神经网络区别

目录 wps表格横纵坐标轴怎么设置&#xff1f; MLP (Multilayer Perceptron) 多层感知器 CNN (Convolutional Neural Network) 卷积神经网络 多层感知器MLP&#xff0c;全连接网络&#xff0c;DNN三者的关系 wps表格横纵坐标轴怎么设置&#xff1f; 1、打开表格点击图的右侧…...

rdb和aof

RDB持久化&#xff1a;原理是将Redis在内存中的数据库记录定时dump到磁盘上的RDB持久化AOF持久化&#xff1a;原理是将Redis的操作日志以追加的方式写入文件 rdb&#xff1a; 开启方式&#xff1a;客户端可以通过向Redis服务器发送save或bgsave命令让服务器生成rdb文件&#…...

TCP网络通信编程之网络上传文件

【图片】 【思路解析】 【客户端代码】 import java.io.*; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException;/*** ProjectName: Study* FileName: TCPFileUploadClient* author:HWJ* Data: 2023/7/29 18:44*/ public class TCPFil…...

Java中对Redis的常用操作

目录 数据类型五种常用数据类型介绍各种数据类型特点 常用命令字符串操作命令哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令 在Java中操作RedisRedis的Java客户端Spring Data Redis使用方式介绍环境搭建配置Redis数据源编写配置类&#xff0c;创建RedisTempla…...

链路追踪设计

...

Golang之路---02 基础语法——常量 (包括特殊常量iota)

常量 //显式类型定义const a string "test" //隐式类型定义const b 20 //多个常量定义 const(c "test2"d 2.3e 27)iota iota是Golang语言的常量计数器&#xff0c;只能在常量表达式中使用 iota在const关键字出现时将被重置为0&#xff0c;const中每新…...

Pytest学习教程_装饰器(二)

前言 pytest装饰器是在使用 pytest 测试框架时用于扩展测试功能的特殊注解或修饰符。使用装饰器可以为测试函数提供额外的功能或行为。   以下是 pytest 装饰器的一些常见用法和用途&#xff1a; 装饰器作用pytest.fixture用于定义测试用例的前置条件和后置操作。可以创建可重…...

redis的如何使用

1、redis的使用 1.1windows安装 安装包下载地址&#xff1a;Releases dmajkic/redis GitHub 1.2 redis中常使用的几个文件 1.3 redis中运行 双击redis-server&#xff0c;既可以运行。 1.4使用redis客户单来连接redis 1.5redis的常用指标 redis-serve 服务端,端口号&am…...

MyBatis(二)

文章目录 一.MyBatis的模式开发1.1 定义数据表和实体类1.2 配置数据源和MyBatis1.3 编写Mapper接口和增加xxxMapper.xml1.4 测试我们功能的是否实现. 二. Mybatis的增删查改操作2.1 单表查询2.2 多表查询三.动态SQL的实现3.1 什么是动态SQL3.2 动态SQL的使用if标签的使用trim标…...

【【51单片机AD转换模块】】

代码是简单的&#xff0c;板子是坏的&#xff0c;电阻是识别不出来的 main.c #include <REGX52.H> #include "delay.h" #include "LCD1602.h" #include "XPT2046.h"unsigned int ADValue;void main(void) {LCD_Init();LCD_ShowString(1,1…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...