【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

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

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

相关文章

【Javalin 】Javalin Kotlin/Java 轻量级 REST API 库

Javalin 旨在为 Kotlin 和 Java 提供一个易用的轻量级 REST API 库。这个 REST API 易于使用&#xff0c;API 也非常的流畅。 Javalin 主要有以下的特点&#xff1a; 易用&#xff1a;不用提前学习任何概念就可以开始使用 一致的 API&#xff1a;所有的处理程序和映射器在 Co…

Redis学习

1.数据类型 Redis支持五种数据类型&#xff0c;分别是String&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、zset&#xff08;有序集合&#xff09;。 1.1 String&#xff08;字符…

Android性能优化之Thread native层源码分析(InternalError/Out of memory)

近期处理Bugly上OOM问题&#xff0c;很多发生在Thread创建启动过程&#xff0c;虽然最后分析出是32位4G虚拟内存不足导致&#xff0c;但还是分析下Java层Thread 源码过程&#xff0c;可能会抛出的异常InternalError/Out of memory。 Thread报错堆栈&#xff1a; Java线程创建…

无涯教程-jQuery - serialize( )方法函数

serialize()方法将一组输入元素序列化为数据字符串。 serialize( ) - 语法 $.serialize( ) serialize( ) - 示例 假设无涯教程在serialize.php文件中具有以下PHP内容- <?php if( $_REQUEST["name"] ) {$name$_REQUEST[name];echo "Welcome ". $na…

递归:一个图教学会递归原理

递归的特点 实际上&#xff0c;递归有两个显著的特征,终止条件和自身调用: 自身调用&#xff1a;原问题可以分解为子问题&#xff0c;子问题和原问题的求解方法是一致的&#xff0c;即都是调用自身的同一个函数。终止条件&#xff1a;递归必须有一个终止的条件&#xff0c;即不…

被泼冷水后,谁能超越微服务?

历史总会重演。一切刚过去的&#xff0c;又会被重新提起。开源项目Codename One的联合创始人Shai&#xff0c;曾是Sun Microsystems开源LWUIT项目的共同作者&#xff0c;参与了无数开源项目。作为最早一批Java开发者&#xff0c;最近感慨道&#xff1a;单体&#xff0c;又回来了…

【matlab】机器人工具箱快速上手-动力学仿真(代码直接复制可用)

动力学代码&#xff0c;按需修改参数 各关节力矩-关节变量的关系曲线&#xff1a; %%%%%%%%SCARA机器人仿真模型 l[0.457 0.325]; L(1) Link(d,0,a,l(1),alpha,0,standard,qlim,[-130 130]*pi/180);%连杆1 L(2)Link(d,0,a,l(2),alpha,pi,standard,qlim,[-145 145]*pi/180);%连…

Intel RealSense D455(D400系列) Linux-ROS 安装配置(亲测可用)

硬件&#xff1a;Intel RealSense D455 系统&#xff1a;Ubuntu 18.04 Part_1: 安装librealsense SDK2.0 1.1 注册密钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE或者 sudo apt-key adv --keyserver hkp:/…

8.python设计模式【组合模式】

内容&#xff1a;将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。角色&#xff1a; 抽象组建&#xff08;component&#xff09;叶子组建(Leaf)复合组建(Composite)客户端 (Client) UML 图 举个例子 需求&#xf…

【初阶C语言】整数比大小

各位大佬的光临已是上上签 在C语言刷题过程中&#xff0c;一定遇到过很多比大小的题目&#xff0c;那么本节就专门介绍比大小的方法&#xff0c;若大佬们还有更优解&#xff0c;欢迎补充呀&#xff01; 本节讲解的方法主要有三种&#xff1a;1.条件判断 2.三目操作符 3.函数调…

【Linux命令200例】lsattr用于查看文件或目录的属性

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

Windows下Nginx安装与配置教程

一、前言 1、Nginx是什么&#xff1f; Nginx是一个开源的Web服务器&#xff0c;同时Nginx也提供了反向代理和负载均衡的功能。 Nginx通常作为负载均衡器暴露在外网接受用户请求&#xff0c;同时也使用其反向代理的功能&#xff0c;将用户的请求转发到实际提供服务的内网服务器…

Power BI-云端报表定时刷新--ODBC、MySQL、Oracle等其他本地数据源的刷新(二)

ODBC数据源 一些小众的数据源无法直接连接&#xff0c;需要通过微软系统自带的应用“ODBC数据源”连接。 1.首次使用应安装对应数据库的ODBC驱动程序&#xff0c;Mysql的ODBC驱动需要手动安装 2.在web服务中进行数据源的配置 Mysql数据源 1.Powerbi与Gateway第一次连SQL…

Java工程师研学之路【002Java基础语法上】

知识体系&#xff08;Knowledge system&#xff09; 练习&#xff08;practice&#xff09; 要求&#xff1a;从控制台输入两个数字&#xff0c;然后输出两个数字的求和结果。 import java.util.Scanner; public class HelloJava {public static void sum(){System.out.print…

maven编译报错

参考链接&#xff1a;mvn打包No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK_51CTO博客_mvn打包命令 在执行 yum install -y java-1.8.0-opensdk命令后&#xff0c;使用maven去编译打包&#xff0c;结果报错&#xff0c; …

【Leetcode】62.不同路径

一、题目 1、题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例1: 输入:m = 3, n = 7 输出:…

《向量数据库指南》——使用Milvus Cloud操作员安装Milvus Cloud独立版

Milvus cloud操作员HelmDocker Compose Milvus cloud Operator是一种解决方案,帮助您在目标Kubernetes(K8s)集群上部署和管理完整的Milvus cloud服务堆栈。该堆栈包含所有Milvus cloud组件和相关依赖项,如etcd、Pulsar和MinIO。本主题介绍如何使用Milvus cloud Operator安…

文心一言 VS 讯飞星火 VS chatgpt (67)-- 算法导论6.5 6题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;67&#xff09;-- 算法导论6.5 6题 六、在 HEAP-INCREASE-KEY 的第 5 行的交换操作中&#xff0c;一般需要通过三次赋值来完成。想一想如何利用INSERTION-SORT 内循环部分的思想&#xff0c;只用一次赋值就完成这一交换操作? 文…

STUN工作原理

目录 一. 前言 二. STUN报文格式 STUN Header RFC3489 RFC5389 STUN Message Body RFC3489 RFC5389 三. WebRTC对STUN协议的支持 四. STUN工作流程 1. 使用STUN获取NAT映射后的地址 五. 参考资料 一. 前言 现实网络环境中绝大多数主机都是处于 NAT 之后&#xff0c…

Docker 容器高级操作

Docker容器高级操作 Docker容器创建、停止、启动、删除等基础操作上篇已述,然Docker容器被广大开发者青睐,不可能只有如此简单的功能,必有高阶功法。那么接下来 让我们一同走进容器操作的高级篇,领略其高级操作的魅力。 查看容器 docker ps -a | grep tomcat [root@tudou…