单目操作符、--、++和do-while循环

news2024/11/17 1:30:50

昨天我们算术操作符的除法和乘法,以及引入while和for循环,今天我们来看新的内容。

借助我们之前写的计算器代码来深入学习一下其他东西。

单目操作符——++、--、&

除了昨天说的那些操作符之外,记不记得输入函数中有一个&这么一个符号,实际上它跟++一样都是单目操作符。

++在昨天的时候讲到是用于for循环计数器i的迭代,每次经过一个循环就会使得i+1,其实除了i++,也有++i,只不过两者有点区别:

int i = 4;
int j = 4;
int a = i++;
int b = ++j;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", i);
printf("%d\n", j);

控制台:可以明显看到结果是不一样的,a是i原来的值,而b是j+1后的值,说明++在后面的(即后置++)是先被使用去赋值给a,然后+1,而++在前面的(即前置++)是先+1后被使用去赋值给b,共同的特点是都会实现自增,但是若旁边有赋值的符号时就要考虑到它们两个的区别了。可以这样记忆:前置的先+1后被使用,后置的先使用后+1.

--和++仅是含义上的不同,但是前置和后置之间的区别是一致的。

在输入时为什么需要用到&这个单目操作符呢?是因为在输入时scanf需要获取变量的内存地址才能进行输入对变量进行赋值(变量的内存地址是在编译时被给定的)。

do while循环

昨天我们说了while循环和for循环,其实还有另外一种循环:do-while循环。这三种循环for循环最多,而do-while用得最少。

//方式一: while
    int a;
    int b;
    while (scanf_s("%d %d" , &a, &b) != EOF)//括号里面的语句是指当一直有输入需求时会进行下面大括号里面的内容
    {
        int c = a / b;
        printf("%d\n", c);
    }

//方式二:for
for(int i=0;i<5;i++)//表示进行5次的测试,可以看作是一个计数器
{
    int a;
    int b;
    scanf_s("%d %d", &a, &b);
    int c = a * b;
    printf("%d\n", c);
}

根据for循环还可以改一下while,可以变成下面这样写:

//方式三:while——新  
    int a;
    int b;
    int i=0;
    while (i<5)//括号里面的语句是指当一直有输入需求时会进行下面大括号里面的内容
    {
        int c = a / b;
        printf("%d\n", c);
        i++;
    }

而do-while其实和while相差不太大:计数变量i定义也是要在循环之外。

int i = 0;
do
{
    int a;
    int b;
    scanf_s("%d %d", &a, &b);
    int c = a * b;
    printf("%d\n", c);
    i++;
} while (i < 5);

do-while和while的区别

其实区别在于do-while会先进入循环体内而不是先进行判断(while和for都是),这里的例子不是很能区别这其中的差别,下面举一个新的例子:计算一个整数的位数。

用while循环是这样的:

    int n;//先定义输入的数
    scanf_s("%d", &n);//输入整数
    int count = 0;//计数count置为0
    while (n)//括号里面是判断条件,结果为真是指不为零便可进行下面的语句
    {
        count++;//count自增,每次进入循环就可以进行+1,进入多少次等于最终的结果即会是整数的位数
        n = n / 10;//这里的n是整数,每次除以10就说明舍弃最后面的一位:比如123/10=12,12/10=1,1/10=0,三次刚好为零这时循环结束。
    }
    printf("%d\n", count);

可以看到控制台输出:

再用do-while来试试:

int n;
    scanf_s("%d", &n);
    int count = 0;
    do
    {
        n = n / 10;
        count++;
    } while (n);
    printf("%d", count);

依旧是可以:

但是我们如果计算0的位数会发现while循环出现了错误,而do-while依旧可以正确计算,这就是它们的区别所在:前者先进行条件判断,所以n=0时连循环都进不去,而后者是先进入循环体后面才进行条件判断,所以n=0是进得去的,计数变量count自然也能+1。

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

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

相关文章

分散加载文件 scatter files

目录 一、加载域和执行域二、Image entry points三、映射符号四、链接器预定义符号1、将符号引入到程序中1.1 引入到 C/C1.2 引入到汇编 2、域相关的符号2.1 执行域符号 Image$$2.2 执行域符号 Load$$2.3 加载域符号 Load$$LR$$2.4 节相关的符号2.5 镜像符号2.6 输入节符号 五、…

HarmonyOS鸿蒙 Next 实现协调布局效果

HarmonyOS鸿蒙 Next 实现协调布局效果 ​ 假期愉快! 最近大A 的涨势实在是红的让人晕头转向&#xff0c;不知道各位收益如何&#xff0c;这会是在路上&#xff0c;还是已经到目的地了? 言归正传&#xff0c;最近有些忙&#xff0c;关于鸿蒙的实践系列有些脱节了&#xff0c;…

Electron 是如何工作的

1. 创建electron项目 pnpm init pnpm add -D electron修改配置项 package.json {"name": "electron-menu","version": "1.0.0","description": "","main": "main.js", // eletron入口&quo…

【重学 MySQL】四十七、表的操作技巧——修改、重命名、删除与清空

【重学 MySQL】四十七、表的操作技巧——修改、重命名、删除与清空 修改表添加字段语法示例注意事项 删除字段语法示例 修改字段使用 MODIFY COLUMN语法示例 使用 CHANGE COLUMN语法示例 重命名表语法示例 删除表语法示例 清空表使用 TRUNCATE TABLE使用 DELETE FROM对比 TRUNC…

聊聊晶圆厂中的常见口语(1)

知识星球里的学员问&#xff1a;半导体公司的工程师总爱用一些英语代替中文&#xff0c;比如care,show&#xff0c;用这种简单的单词代替中文&#xff0c;能不能给我们总结工程师常用的英语单词&#xff0c;比较口语化的&#xff01; 为什么晶圆厂会用很多英文口语&#xff1f…

华为---以太网静态路由配置使用下一跳通信正常,而使用出接口无法通信

目录 1. 实验环境 2. 结果测试 3. 分析验证 3.1 以太网静态路由配置使用下一跳跨网段通信抓包分析 3.2 以太网静态路由配置使用出接口跨网段通信抓包分析 3.3 以太网静态路由配置使用出接口无法跨网段通信问题解决办法 1. 实验环境 以太网静态路由配置使用下一跳跨网段通…

番茄成熟度检测系统源码分享

番茄成熟度检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

Opencv第十一章——视频处理

1. 读取并显示摄像头视频 1.1 VideoCapture类 VideoCapture类提供了构造方法VideoCapture(),用于完成摄像头的初始化工作&#xff0c;其语法格式如下&#xff1a; capture cv2.VideoCapture(index) 参数说明&#xff1a; capture:要打开的摄像头视频。 index:摄像头设备索引。…

【区间dp】AT_dp_l 题解

题意 给一个双端队列&#xff0c;双方轮流取数&#xff0c;每一次能且只能从队头或队尾取数&#xff0c;取完数后将这个数从队列中弹出。双方都希望自己取的所有数之和尽量大&#xff0c;且双方都以最优策略行动&#xff0c;假设先手取的所有数之和为 X X X&#xff0c;后手取…

【Git】一文看懂Git

Git 一、简介1. Git 与 SVN 区别1.1 Git 是分布式的&#xff0c;SVN 不是1.1.1 分布式版本控制系统Git1.1.2 集中式版本控制系统SVN 1.2 Git 把内容按元数据方式存储&#xff0c;而 SVN 是按文件1.3 Git 分支和 SVN 的分支不同1.4 Git 没有一个全局的版本号&#xff0c;而 SVN …

五.运输层

目录 5.1概述 5.2传输层的寻址与端口 熟知端口号 套接字(Socket) 5.3 UDP 特点 UDP报文格式 UDP校验 二进制反码求和 5.4 TCP 特点 可靠传输 停止等待协议 流水线方式 累计应答 流量控制 滑动窗口 拥塞控制 三次握手&#xff0c;四次握手 5.1概述 只有主机…

Pikachu-Cross-Site Scripting-反射型xss(get)

存储型XSS 存储型XSS是指恶意脚本被存储在目标服务器上&#xff0c;当用户访问包含该脚本的页面时&#xff0c;脚本会被执行。攻击者通常通过输入框、留言板等用户可输入的地方进行注入。例如&#xff0c;攻击者可以在留言板中输入恶意脚本&#xff0c;当其他用户查看留言时&a…

3.基于分数的生成模型

1.简介 基于分数的生成模型(SGM)的核心是Stein分数(或分数函数)。给定一个概率密度函数p(x)&#xff0c;其分数函数定义为对数概率密度的梯度Vxlogp(x)。生成模型通过学习并建模输入数据的分布&#xff0c;从而采集生成新的样木&#xff0c;该模型广泛运用于图片视频生成、文本…

假期惊喜,收到公司款项86167.14元

假期惊喜 近日&#xff0c;有网友爆料称&#xff0c;比亚迪在未提前通知员工的情况下&#xff0c;突然发放了利润奖金。 有人获得了七八万元&#xff0c;也有人拿到了十多万元。 一位比亚迪员工的帖子显示&#xff0c;在9月26日下午&#xff0c;他的银行卡突然收到一笔 86167.1…

数字化那点事:一文读懂数字孪生

一、数字孪生的定义 数字孪生&#xff08;Digital Twin&#xff09;是指通过数字技术构建的物理实体的虚拟模型&#xff0c;能够对该实体进行全方位、动态跟踪和仿真预测。简单来说&#xff0c;数字孪生就是在一个设备或系统的基础上创造一个数字版的“克隆体”&#xff0c;这…

Redis --- 第二讲 --- 特性和安装

一、背景知识 Redis特性&#xff1a; Redis是一个在内存中存储数据的中间件&#xff0c;用于作为数据库&#xff0c;作为缓存&#xff0c;在分布式系统中能够大展拳脚。Redis的一些特性造就了现在的Redis。 在内存中存储数据&#xff0c;通过一系列的数据结构。MySQL主要是通…

Ollama安装部署CodeGeeX4 - ALL - 9B

一、模型本地部署准备 1、 conda create -n ollama python3.82、 curl -fsSL https://ollama.com/install.sh | sh3、验证安装 安装完成后&#xff0c;通过运行以下命令来验证Ollama是否正确安装&#xff1a; ollama --version4、启动ollama ollama serve模型地址&#xff…

【重学 MySQL】四十八、DCL 中的 commit 和 rollback

【重学 MySQL】四十八、DCL 中的 commit 和 rollback commit的定义与作用rollback的定义与作用使用场景相关示例注意事项DDL 和 DML 的说明 在MySQL中&#xff0c;DCL&#xff08;Data Control Language&#xff0c;数据控制语言&#xff09;用于管理数据库用户和控制数据的访问…

Ubuntu 安装RUST

官方给的是这样如下脚本 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh 太慢了 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh -x 执行这个脚本后会给出对应的下载链接 如下图 我直接给出来 大多数应该都是这个 https://static.rust-…

初识算法 · 双指针(1)

目录 前言&#xff1a; 双指针算法 题目一&#xff1a; ​编辑 题目二: 前言&#xff1a; 本文作为算法部分的第一篇文章&#xff0c;自然是少不了简单叭叭两句&#xff0c;对于算法部分&#xff0c;多刷是少不了&#xff0c;我们刷题从暴力过度到算法解法&#xff0c;自…