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

news2024/9/29 11:23:37

目录

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;                           // 定义并初始化整型变量 a
        float b = 1.5;                       // 定义并初始化浮点型变量 b
        double 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;                           // 定义并初始化整型变量 a
    float b = 1.5;                       // 定义并初始化浮点型变量 b
    double 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;                           // 定义并初始化整型变量 a
    float b = 1.5;                       // 定义并初始化浮点型变量 b
    double 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

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

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

相关文章

[containerd] 在Windows上使用IDEA远程调试containerd, ctr, containerd-shim

文章目录 1. containerd安装2. 源码编译3. 验证编译的二进制文件是否含有调试需要的信息3.1. objdump工具验证3.2. file工具验证3.3. dlv工具验证 4. debug 1. containerd安装 [Ubuntu 22.04] 安装containerd 2. 源码编译 主要步骤如下&#xff1a; 1、从github下载containe…

MyBatis-Plus 查询PostgreSQL数据库jsonb类型保持原格式

文章目录 前言数据库问题背景后端返回实体对象前端 实现后端返回List<Map<String, Object>>前端 前言 在这篇文章&#xff0c;我们保存了数据库的jsonb类型&#xff1a;MyBatis-Plus 实现PostgreSQL数据库jsonb类型的保存与查询 这篇文章介绍了模糊查询json/json…

前端调用合约如何避免出现transaction fail

前言&#xff1a; 作为开发&#xff0c;你一定经历过调用合约的时候发现 gas fee 超出限制&#xff0c;但是不知道报了什么错。这个时候一般都是触发了require错误合约校验。对于用户来说他不理解为什么一笔交易会花费如此大的gas&#xff0c;那我们作为开发如何尽量避免这种情…

Power BI-网关设置与云端报表定时刷新(一)

网关的工作原理 网关是将本地数据传输至云端的桥梁&#xff0c;不仅Power BI能使用&#xff0c;其他微软软件也能够使用。 我们发布在云上的报表&#xff0c;发布后是静态的&#xff0c;不会自动刷新。需要通过网关设置定时刷新。 安装与设置 1.登录到Powerbi 在线服务–设置…

kaggle新赛:RSNA 2023 腹部创伤检测大赛赛题解析(CV)

赛题名称&#xff1a;RSNA 2023 Abdominal Trauma Detection 赛题链接&#xff1a; https://www.kaggle.com/competitions/rsna-2023-abdominal-trauma-detection 赛题背景 腹部钝力创伤是最常见的创伤性损伤类型之一&#xff0c;最常见的原因是机动车事故。腹部创伤可能导致…

大促之前全链路压测原理解析

1. 全链路压测的意义 上图为 2012 年淘宝核心业务应用关系的拓扑图&#xff0c;还不包含了其他的非核心业务应用&#xff0c;所谓的核心业务就是和交易相关的&#xff0c;和钱相关的业务&#xff0c;这张图大家可能看不清楚&#xff0c;看不清楚才是正常的&#xff0c;因为当时…

BGP实验

第一步&#xff1a;配置IP 第二步&#xff1a;写ospf 在R2&#xff0c;R3&#xff0c;R4&#xff0c;R5&#xff0c;R6&#xff0c;R7上分别配置ospf 如&#xff1a;R2 [R2]ospf 1 router-id 2.2.2.2 [R2-ospf-1]area 0 [R2-ospf-1-area-0.0.0.0]network 172.16.0.0 0.0.255…

wxwidgets Ribbon构建多个page与按钮响应

新建一个控制台应用程序&#xff0c;添加好头文件的依赖与lib库文件的依赖&#xff0c;修改属性&#xff1a; 将进入ribbon界面的文件与主界面的类分开&#xff1a; 1、RibbonSample.cpp #include "stdafx.h" #include "MyFrame.h" class MyApp : public…

谷粒商城第六天-商品服务之分类管理下的获取三级分类树形列表

目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端部分 2.1 在网页中建好目录及菜单 2.1.1 建好商品目录 2.1.2 建好分类管理菜单 ​编辑 2.2 编写组件 2.2.1 先完成组件文件的创建 2.2.2 编写组件 2.2.2.1 显示三级分类树形列表 三、后端部分 3.1 编写商品分类…

二十章:基于弱监督语义分割的亲和注意力图神经网络

0.摘要 弱监督语义分割因其较低的人工标注成本而受到广泛关注。本文旨在解决基于边界框标注的语义分割问题&#xff0c;即使用边界框注释作为监督来训练准确的语义分割模型。为此&#xff0c;我们提出了亲和力注意力图神经网络&#xff08;A2GNN&#xff09;。按照先前的做法&a…

NO1.使用命令行创建Maven工程

①在工作空间目录下打开命令窗口 ②使用命令行生成Maven工程 mvn archetype:generate 运行 MVN 原型&#xff1a;生成命令,下面根据提示操作 选择一个数字或应用过滤器&#xff08;格式&#xff1a;[groupId&#xff1a;]artifactId&#xff0c;区分大小写包含&#xff09;&a…

阿里云服务器全方位介绍_优势_使用_租用费用详解

阿里云服务器全方位介绍包括云服务器ECS优势、云服务器租用价格、云服务器使用场景及限制说明&#xff0c;阿里云服务器网分享云服务器ECS介绍、个人和企业免费试用、云服务器活动、云服务器ECS规格、优势、功能及应用场景详细你说明&#xff1a; 目录 什么是云服务器ECS&…

C++基础知识 (命名空间、输入输出、函数的缺省参数、函数重载)

⭐️ 第一个 c 代码 &#x1f320; 例1&#xff1a; #include <iostream> using namespace std;int main() {cout << "hello world" << endl;return 0; }#include <iostream> 标准输入输出std 是 c 标准库的命名空间&#xff0c;将标准库的…

Open3D-ML自动驾驶点云目标检测与分割入门

当开始新的研究时&#xff0c;我的方法通常是测试不同的相关事物&#xff0c;直到有足够的经验让我开始将这些点联系起来。 在开始构建用于 3D 对象检测的自定义模型之前&#xff0c;我购买了一台 LiDAR 并处理了一些数据。 下一个明显的步骤是在我为自己的数据贴标签之前找出研…

6、Nginx实现反向代理

Nginx 反向代理是一种常见的应用场景&#xff0c;它允许 Nginx 作为中间服务器接收客户端的请求&#xff0c;并代理转发这些请求到后端的真实服务器。这种配置使得客户端只需要与 Nginx 交互&#xff0c;而后端服务器对客户端是透明的。 ngx_http_proxy_module&#xff1a; 将客…

无涯教程-jQuery - Pulsate方法函数

Pulsate 效果可以与effect()方法一起使用。这会使元素的不透明性产生多次脉冲。 Pulsate - 语法 selector.effect( "pulsate", {arguments}, speed ); 这是所有参数的描述- times - 脉动的时间。默认值为3。model - 效果的模式。可以是"显示(show)"&a…

2023年的深度学习入门指南(22) - 百川大模型13B的运行及量化

2023年的深度学习入门指南(22) - 百川大模型13B的运行及量化 不知道上一讲的大段代码大家看晕了没有。但是如果你仔细看了会发现&#xff0c;其实代码还是不全的。比如分词器我们就没讲。 另外&#xff0c;13B比7B的改进点也没有讲。 再有&#xff0c;对于13B需要多少显存我们…

C++ Insights: 源码工具

godbolt&#xff1a;编译器资源管理器 godbolt是一个交互式工具&#xff0c;允许您在一个窗口中键入代码&#xff0c;并在另一个窗口中查看其编译结果。https://godbolt.org/https://github.com/compiler-explorer/compiler-explorer/wiki C Insights - See your source cod…

IDEA debug总结

调试一次编程题&#xff0c;发现没有掌握debug技巧&#xff0c;确实费事&#xff0c;做一次总结&#xff0c;方便以后回顾。 Run to Cursor 跳到光标处&#xff0c;适用于快速跳过循环&#xff0c;定位到光标处&#xff0c;而不用到处打断点&#xff0c;使用断点跳转。非常实…

基于注解的 SpringMVC

SpringMVC SpringMVC使用SpringMVC的两个配置EnableWebMVC 和 ACWACSpringMVC执行流程接收请求参数Postman 发包工具&#xff08;&#xff09;get 请求---简单类型数据&#xff08;基本数据类型和String&#xff09;get 请求---对象类型数据get 请求---数组类型get 请求 --- 集…