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

C++(条件判断与循环)

getchar和putchar

getchar()和 putchar()是属于C语言的库函数,C++是兼容 C语言的,所以 C++ 中只要正确包含头文件也可以正常使用这两个函数。
getchar()
函数原型如下:
int getchar(void );
getchar()函数返回用户从键盘输入的一个字符,使用时不带有任何参数。
程序运行到这个命令就会暂停,等待用户从键盘输入,等同于使用 cin scanf()方法读取一个字符。
它的原型定义在头文件#include <cstdio>。

cin与cout

count输出格式的控制

一、整数格式化输出控制

  • dec:以十进制格式显示整数(默认格式)。
  • hex:以十六进制格式显示整数。
  • oct:以八进制格式显示整数。

二、浮点数格式化输出控制

  • fixed:以固定小数点形式表示浮点数,设置后不会以科学计数法展示。
  • scientific:以科学计数法表示浮点数。
  • setprecision:设置浮点数的精度,用于控制小数点后的数字位数,一般先使用fixed固定小数点,再设置精度。

头文件是#include <iomanip>

三、输出格式(字段与填充)控制

  • setw:设置字段宽度(仅对紧接着的输出项有效)。
  • setfill:设置填充字符。

sqrt函数

头文件#include <cmath>

通过sqrt(x)来计算X的平方根

fabs 函数

1. 函数功能
  • 用于计算浮点数的绝对值
  • 与整数绝对值函数abs()对应,但专门处理浮点类型
2. 头文件
  • C 语言:需包含 <math.h>
  • C++ 语言:可包含 <math.h> 或 <cmath>
3. 函数原型
  • 针对double类型:
    double fabs(double x);
    
  • 针对float类型(C99 及以上):
    float fabsf(float x);  // 单精度版本
    
  • 针对long double类型(C99 及以上):
    long double fabsl(long double x);  // 长双精度版本
    
4. 参数与返回值
  • 参数:x为需要计算绝对值的浮点数
  • 返回值:x的绝对值(非负值),类型与参数一致
5. 使用示例

c

运行

#include <stdio.h>
#include <math.h>int main() {double a = -3.14;float b = -2.718f;printf("double绝对值: %.2f\n", fabs(a));   // 输出: 3.14printf("float绝对值: %.2f\n", fabsf(b));  // 输出: 2.72return 0;
}
6. 注意事项
  • 区分abs()fabs()abs()用于整数,fabs()用于浮点数,混用会导致精度问题或编译错误
  • 编译时注意:部分编译器(如 GCC)需要链接数学库,添加-lm参数(如gcc test.c -o test -lm
  • 对于复数的绝对值计算,需使用专门的cabs()函数(针对double复数)
  • 当输入为NaN(非数值)时,返回值仍为NaN;当输入为无穷大时,返回正无穷大

三目操作符(条件运算符)

  1. 基本格式条件表达式 ? 表达式1 : 表达式2

  2. 运算逻辑

    • 先判断条件表达式真假(非 0 为真,0 为假)
    • 若为真,返回表达式 1 的值;若为假,返回表达式 2 的值
  3. 使用示例

    int a = 5, b = 3;
    int max = (a > b) ? a : b;  // max = 5(因a > b为真,返回a)
    
  4. 特点

    • 是 C++ 中唯一的三目运算符(需要 3 个操作数)
    • 可替代简单的if-else判断,使代码更简洁
    • 运算结果可直接赋值给变量或作为表达式一部分
  5. 注意事项

    • 表达式 1 和表达式 2 类型需兼容(或可隐式转换)
    • 避免嵌套过深(影响可读性),复杂逻辑建议用if-else
    • 结合优先级较低,复杂条件建议加括号明确逻辑

Switch语句

基本语法

switch (表达式) {case 常量表达式1:// 执行语句1break;case 常量表达式2:// 执行语句2break;// 更多 case 分支default:// 表达式不匹配任何 case 时执行的语句
}
  • 表达式:结果必须是整数类型(intchar 等,enum 类型也可)。
  • case 常量表达式:值必须是与表达式类型兼容的常量,且各 case 常量值唯一。
  • break:用于跳出 switch 结构,若省略,会继续执行下一个 case 的代码(“穿透” 现象)。
  • default:可选,用于处理表达式不匹配所有 case 的情况,通常放最后,也可省略。

示例

#include <iostream>
using namespace std;
int main() {int num = 2;switch (num) {case 1:cout << "数字是 1" << endl;break;case 2:cout << "数字是 2" << endl;break;case 3:cout << "数字是 3" << endl;break;default:cout << "数字不是 1、2、3" << endl;}return 0;
}

输出:数字是 2

穿透性(省略 break)

#include <iostream>
using namespace std;
int main() {int grade = 'B';switch (grade) {case 'A':cout << "优秀" << endl;// 无 break,穿透到 case 'B'case 'B':cout << "良好" << endl;// 无 break,穿透到 case 'C'case 'C':cout << "合格" << endl;break;default:cout << "不合格" << endl;}return 0;
}

输入 'B',输出:

plaintext

良好
合格

注意事项

  1. 常量要求case 后必须是常量,不能是变量或表达式。
  2. 类型匹配switch 表达式与 case 常量类型要兼容。
  3. default 位置default 可在任意位置,但通常放最后,且执行完 default 后若没有 break,也会继续 “穿透”(不过一般 default 放最后且加 break)。
  4. 适用场景:适合多分支且条件为离散常量的情况,比多个 if - else if 结构更简洁。

while 语句

基本语法

while (循环条件) {// 循环体(要重复执行的代码)
}
  • 执行逻辑:先判断循环条件,若为true则执行循环体,执行完后再次判断条件,直到条件为false时退出循环。

特点

  • 先判断后执行:循环体可能一次都不执行(若初始条件为false)。
  • 适合场景:当循环次数不确定,仅知道终止条件时使用。

示例

  1. 基本用法(输出 1~5):
int i = 1;
while (i <= 5) {cout << i << " ";i++; // 必须有使条件趋于false的语句,否则会无限循环
}
// 输出:1 2 3 4 5
  1. 无限循环与 break
int n = 0;
while (true) { // 条件恒为true,无限循环n++;if (n > 3) break; // 满足条件时跳出循环cout << n << " ";
}
// 输出:1 2 3

注意事项

  • 循环体内必须包含改变循环条件的语句(如i++),否则可能导致无限循环。
  • 循环条件必须是布尔表达式(结果为truefalse)。
  • 若循环体只有一条语句,可省略大括号{},但建议始终添加以增强可读性

ceil(向上取整)与floor(向下取整)函数

一、头文件

所有取整函数均需要包含头文件 <cmath>

二、向下取整函数:floor()

  • 功能:返回小于或等于输入值的最大整数(向负无穷方向取整)
  • 语法double floor(double x);
  • 示例
    floor(3.8)  → 3.0
    floor(3.2)  → 3.0
    floor(-3.8) → -4.0  // 注意负数的处理
    floor(-3.2) → -4.0
    floor(5.0)  → 5.0
    

三、向上取整函数:ceil()

  • 功能:返回大于或等于输入值的最小整数(向正无穷方向取整)
  • 语法double ceil(double x);
  • 示例
    ceil(3.8)  → 4.0
    ceil(3.2)  → 4.0
    ceil(-3.8) → -3.0  // 注意负数的处理
    ceil(-3.2) → -3.0
    ceil(5.0)  → 5.0
    

四、特殊说明

  1. 参数与返回值类型

    • 输入可以是 double 或 float 类型
    • 返回值为 double 类型(即使结果是整数,也会带小数部分)
  2. 整数转换:如果需要得到整数类型结果,需显式转换:

    int a = static_cast<int>(floor(3.8));  // a = 3
    int b = static_cast<int>(ceil(3.2));   // b = 4
    
  3. 常见错误点

    • 对负数取整时容易混淆方向(如 floor(-3.2) 结果是 -4.0而非-3.0
    • 忘记包含 <cmath> 头文件会导致编译错误

五、应用场景

  • 向下取整:计算数组分组、时间片划分等需要 “不超过某值” 的场景
  • 向上取整:计算最少容器数量、分页总数等需要 “不少于某值” 的场景

pow函数

1. 头文件包含

使用 pow() 函数前,需要包含 <cmath> 头文件,它提供了一系列数学函数和相关的常量定义,例如常见的三角函数、指数函数等。

cpp

运行

#include <cmath>

2. 函数原型

pow() 函数有两个重载形式:

double pow(double base, double exponent);
float pow(float base, float exponent);
long double pow(long double base, long double exponent);
  • 参数
    • base:表示底数,即要进行幂运算的基础数值,可以是整数、浮点数等。
    • exponent:表示指数,决定了底数需要自乘的次数,同样可以是整数、浮点数等。
  • 返回值:返回 base 的 exponent 次幂的结果,返回值类型与参数类型一致,即如果传入的是 double 类型参数,返回值也是 double 类型 。

3. 示例代码

#include <iostream>
#include <cmath>int main() {// 计算 2 的 3 次方double result1 = pow(2, 3);std::cout << "2 的 3 次方结果是:" << result1 << std::endl; // 计算 4.5 的 1.5 次方double result2 = pow(4.5, 1.5);std::cout << "4.5 的 1.5 次方结果是:" << result2 << std::endl; // 计算 10 的 0 次方double result3 = pow(10, 0);std::cout << "10 的 0 次方结果是:" << result3 << std::endl; return 0;
}

4. 注意事项

  • 特殊情况处理
    • 当底数 base 为负数且指数 exponent 为小数时,结果是一个复数,但 pow() 函数返回的是 double 类型,此时会返回 NaN(Not a Number),表示非数值。例如 pow(-2, 0.5) 。
    • 当指数 exponent 很大时,可能会导致结果溢出,超出数据类型所能表示的范围,这种情况下结果是未定义的。
  • 精度问题:由于浮点数在计算机中的存储方式是近似表示,对于一些幂运算,可能会存在精度误差。例如 pow(0.1, 3) 得到的结果与理论值在小数点后若干位可能会有细微差异。
  • 替代方案:在一些特定场景下,比如指数是整数且较小,也可以使用循环来实现幂运算,这样可以避免 pow() 函数可能带来的精度和性能问题(pow() 函数内部实现相对复杂)。例如:
int base = 2;
int exponent = 3;
int result = 1;
for (int i = 0; i < exponent; ++i) {result *= base;
}

5. 应用场景

pow() 函数在很多领域都有应用,如:

  • 数学计算:用于求解各种幂运算相关的数学问题,如计算复利(假设本金为 P,年利率为 r,存款年限为 n,则最终金额 A = P * pow(1 + r, n) )。
  • 科学计算:在物理、化学等学科中,计算与幂次相关的公式,比如计算电场强度、放射性物质的衰变等。
  • 算法和数据处理:在一些算法实现中,例如计算某些数据的权重值(可能涉及幂运算) ,或者在图像处理中计算亮度调整等(可能涉及亮度值的幂次变换)。

do-while 语句

  1. 语法结构
do {// 循环体语句
} while (条件表达式);  // 注意末尾分号
  1. 执行逻辑
  • 先执行一次循环体,再判断条件
  • 条件为true则重复执行,为false则退出循环
  • 至少执行一次循环体(与 while 的区别)
  1. 适用场景
  • 需要先执行后判断的场景(如菜单选择、输入验证等)
  1. 示例
int n;
do {cin >> n;  // 至少输入一次
} while (n < 0);  // 直到输入非负数才退出
  1. 注意事项
  • 循环体若为单条语句,可省略{},但建议始终添加
  • 条件表达式后必须加;,否则语法错误
  • 避免死循环:确保循环体内有修改条件的语句
http://www.dtcms.com/a/490046.html

相关文章:

  • 温州建设局网站首页中国企业名录黄页
  • linux/centos迁移conda文件夹
  • Quill 富文本编辑器 功能介绍,使用场景说明,使用示例演示
  • 网站生成器怎么做网站建设与管理实训主要内容
  • 网站信用认证可以自己做吗稀奇古怪好玩有用的网站
  • MySQL 基础语句
  • Linux中CPU初始化和调度器初始化函数的实现
  • MATLAB基于ST-CNN-SVM的轴承故障诊断,S变换和卷积神经网络结合支持向量机
  • 在优豆云免费云服务器上初探SSH与SCP的便捷操作
  • MySQL数据库:软件、相关知识和基本操作
  • Bahdanau注意力
  • 重生之我在大学自学鸿蒙开发第七天-《AI语音朗读》
  • Spring AI 1.0 GA 深度解析:Java生态的AI革命已来
  • Linux网络之----TCP网络编程
  • 【零基础学习CAPL语法】——writeLineEx() 函数
  • 计算机网络数据链路层
  • 做网站选什么专业门户网站开发步骤博客
  • 论文写作 24: 全文保持同样的节奏
  • 洛谷 P1438 无聊的数列 题解
  • iOS混淆与IPA加固实战手记,如何构建苹果应用防反编译体系
  • 想抓PostgreSQL里的慢SQL?pg_stat_statements基础黑匣子和pg_stat_monitor时间窗,谁能帮你更准揪出性能小偷?
  • 把 iOS 26 的「Liquid Glass」带进 React Native
  • 基于物理信息的神经网络求解偏微分方程反问题的综合优化策略
  • 工地佩戴安全帽检测-目标检测数据集
  • 广东网站备案查询系统企业网站带后台
  • 知名的集团门户网站建设费用我要自学网网站建设
  • 2025 年 10 月科技前沿全景:从量子跃迁到生命重构的文明拐点
  • scene graph generation 用到的vg150数据集groundtruth数据预处理,展示和保存
  • 【Qt开发】多元素类控件(一)-> QListWidget
  • 【Mybatis从入门到入土】ResultMap映射、多表查询与缓存机制全解析