学习 C语言第二天 :C语言数据类型和变量(下)
目录:
1.变量的介绍以及存储
2.算术操作符、赋值操作符、单目操作符
3.scanf和printf的介绍
1.变量的介绍以及存储
1.1.变量的创建
了解了什么是类型了,类型是用来创建变量的。
变量是什么呢?在C语言当中不经常变的量称为常量,经常变化的量称为变量。
变量是如何创建的呢?下是例子:
data_type name;
//数据类型 变量名;
int age; // 整型变量
char ch; // 字符变量
double weight; // 浮点型变量
变量在创建的时候,需要给一个初始值。这个过程就叫初始化。如下:
// 初始化
int age = 18;
char ch = 'D';
double weight = 70.5;
unsigned int height 100;
1.2.变量的分类
分为:全局变量、局部变量
全局变量:在大括号外部定义的变量就是全局变量。全局变量使用的范围更广,
整个工程当中想使用,都是有办法去使用的。
局部变量:在大括号内部定义的变量就是局部变量。
局部变量的使⽤范围是比较局限,只能在自己所在的局部范围内使用的。
代码演示:
#include <stdio.h>int global = 2023; // 全局变量int main()
{int locol = 2018; // 局部变量printf("%d\n", locol);printf("%d\n", global);return 0;
}
1.2.1.注意变量名的命名
如果定义了个全局变量 为 n,在局部变量里面也定义了个 变量名为n,在过程中首先是使用局部变量的 n的值,这里需要注意。如下代码演示:
#include <stdio.h>int n = 1;int main()
{int n = 2;printf("%d\n", n); // 这里打印出来的值应是2,所以变量名命名的时候需要注意。return 0;
}
1.3.全局变量和局部变量在内存中存储在哪呢?
学习C/C++语言当中,我们会关注三个区域:栈区,堆区,静态区;
1.局部变量是放在内存的栈区中;
2.全局变量是放在内存的静态区中;
3.堆区是用来动态管理内存的
如下图:
2.算术操作符、赋值操作符、单目操作符
算术操作符(运算符):+、-、*、/、%
赋值操作符:=、+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=
单目操作符:++、--、+、-
2.1.算数操作符代码演示如下:
// 算术操作符
// +、-、*、/、%
int main()
{int a = 1;int b = 2;int c = 3;int d = 4;int e = 6;float f = 7.1;printf("%d\n", a + b);printf("%d\n", b - a);printf("%d\n", b * c);printf("%d\n",e / d); // 于C语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。printf("%f\n", e / f); // 浮点数的除,返回就不会丢弃小数部分。printf("%d\n", e % d); // 运算符 %,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数。// 负数取模的情况:// 由一下得出 第⼀个运算数的正负号决定了结果的正负号printf("%d\n",11 % 5); // 1printf("%d\n", -11 % -5); // -1printf("%d\n", -11 % 5); // -1return 0;
}
运行结果:
2.2.赋值操作符
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
int a = 0; // 初始化
a = 200; // 赋值
赋值操作符[=],是⼀个随时可以给变量赋值的操作符。
2.2.1连续赋值
如下:
int a = 3;
int b = 4;
int c = 5;
c = b = a + 3; // 虽然C语言支持这样写,但是不方便阅读代码,建议拆开进行写int a = 3;
int b = 4;
int c = 5;
b = a + 3;
c = b;
2.2.2.复合赋值符
在写代码时,我们经常可能对⼀个数进行自增、自减的操作,如下代码:
int a = 10;
a = a + 3;
a = a - 2;
这样的代码C语言提供了更加便捷的写法,如下:
int a = 10;
a += 3;
a -= 2; // 还有更多的复合赋值符,上面我也列出来了,都可以去尝试一下。
2.3.单目操作符
++、--、+(正)、-(负)就是单目操作符的。
2.3.1.++和--
++是⼀种自增的操作符,⼜分为前置++和后置++,--是⼀种自减的操作符,也分为前置--和后置--.
2.3.2.前置++
int a = 10;
int b = ++a; // ++的操作数是a,是放在a前面的,就是前置 ++
printf("%d\n", b);// 计算⼝诀:先+1,后使⽤;
// a原来是10,先+1,后a变成了11,再使⽤就是赋值给b,b得到的也是11,所以计算技术后,a和b都是11.
int a = 10;
a = a+1;
b = a;
printf("a=%d b=%d\n",a , b);
2.3.3.后置++
int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
printf("a=%d b=%d\n",a , b);// 计算⼝诀:先使⽤,后+1
// a原来是10,先使⽤,就是先赋值给b,b得到了10,然后再+1,然后a变成了11,所以直接结束后a是
11,b是10
int a = 10;
int b = a;
a = a+1;
printf("a=%d b=%d\n",a , b);
2.3.4.前置--
// 如果你懂了前面我写的前置++,那前置--是同理的,只是把加1,换成了减1;
// 计算⼝诀:先-1,后使⽤
int a = 10;
int b = --a; // --的操作数是a,是放在a的前⾯的,就是前置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 9
2.3.5.前置--
// 同理后置--类似于后置++,只是把加一换成了减一
// 计算⼝诀:先使⽤,后-1
int a = 10;
int b = a--; // --的操作数是a,是放在a的后⾯的,就是后置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 10
2.3.6.+和-
这里的+是正号,-是负号,都是单目操作符。
运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,
但是写了也不会报错。
int a = +10; 等价于 int a = 10;
运算符 - 用来改变⼀个值的正负号,负数的前面加上 - 就会得到正数,正数的前面加上 - 会得到负 数。
int a = 10;
int b = -a;
int c = -10;
printf("b=%d c=%d\n", b, c); // 这⾥的b和c都是-10
int a = -10;
int b = -a;
printf("b=%d\n", b); // 这⾥的b是10
3.scanf和printf的介绍
3.1.printf
基本用法:printf() 的作用是将参数⽂本输出到屏幕。它名字里面的 f 代表 format (格式化),表示可以 定制输出文本的格式。
#include <stdio.h>int main(void)
{printf("Hello World"); // 会在屏幕输出 Hello Worldreturn 0;
}
3.1.printf输出之后怎么换行
printf() 不会在行尾自动添加换行符,运行结束后,
光标就停留在输出结束的地方,不会自动换行。
为了让光标移到下⼀行的开头,可以在输出文本的结尾,添加⼀个换行符 \n 。
#include <stdio.h>
int main(void)
{printf("Hello World\n");return 0;
}
如果文本内部有换行,也是通过插入换行符来实现的,如下代码:
#include <stdio.h>
int main(void)
{printf("Hello\nWorld\n");printf("Hello\n");printf("World\n");return 0;
}
printf() 是在标准库的头文件 stdio.h 定义的。使用这个函数之前,必须在源码文件头部引入这个头文件。
3.2.scanf
当我们有了变量,我们需要给变量输⼊值就可以使用scanf 函数,如果需要将变量的值输出在屏幕上 的时候可以使用 printf 函数,下面看⼀个例子:
基本用法:scanf() 函数⽤于读取用户的键盘输入。
程序运行到这个语句时,会停下来,等待用户从键盘输入。
用户输入数据、按下回车键后, scanf() 就会处理用户的输⼊,将其存入变量。
它的原型定义在头头件 stdio.h 。
scanf() 的语法跟 printf() 类似。
scanf(%d, &i);
scanf()的第一个参数 %d ,表示用户输入的应该是一个整数。 %d 就是一个占位符,% 是占位符的标志,d 表示整数。第二个参数& 表示,将用户从键盘输入的整数存入变量i。
注意:变量前面必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,而是地址即将变量 i 的地址指向用户输入的值。如果这里的变量是指针变量 (比如字符串变量),那就不用加 &运算符。
3.2.1.scanf的返回值
scanf()的返回值是⼀个整数,表示成功读取的变量个数。
如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量 EOF。
在VS环境中按3次 ctrl+z ,才结束了输入,我们可以看到r是2,表示正确读取了2个数值。如果一个数字都不输入,直接按3次 ctrl+z 输出的r是-1,也就是EOF。
3.2.2.占位符
scanf()常用的占位符如下,与printf()的占位符一致:
-
%c:字符
-
%d:整数
-
%f:float类型浮点数
-
%lf:double类型浮点数
-
%Lf:long double类型浮点数
-
%s:字符串
-
%[]:在方括号中指定一组匹配的字符 (比如 %[0-9] ),遇到不在集合之中的字符,匹配将会
停止。
注:上面所有占位符之中,除了 %c 以外,都会自动忽略起首的空白字符。 %c 不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。
相关文章:

学习 C语言第二天 :C语言数据类型和变量(下)
目录: 1.变量的介绍以及存储 2.算术操作符、赋值操作符、单目操作符 3.scanf和printf的介绍 1.变量的介绍以及存储 1.1.变量的创建 了解了什么是类型了,类型是用来创建变量的。 变量是什么呢?在C语言当中不经常变的量称为常量,经常…...

【Kubernetes资源篇】ingress-nginx最佳实践详解
文章目录 一、Ingress Controller理论知识1、Ingress Controller、Ingress简介2、四层代理与七层代理的区别3、Ingress Controller中封装Nginx,为什么不直接用Nginx呢?4、Ingress Controller代理K8S内部Pod流程 二、实践:部署Ingress Control…...

Java基础阶段学习哪些知识内容?
Java是一种面向对象的编程语言,刚接触Java的人可能会感觉比较抽象,不要着急可以先从概念知识入手,先了解Java,再吃透Java,本节先来了解下Java的基础语法知识。 对象:对象是类的一个实例,有状态…...
【HISI IC萌新虚拟项目】ppu整体uvm验证环境搭建
关于整个虚拟项目,请参考: 【HISI IC萌新虚拟项目】Package Process Unit项目全流程目录_尼德兰的喵的博客-CSDN博客 前言 本篇文章完成ppu整体uvm环境搭建的指导,在进行整体环境搭建之前,请确认spt_utils、cpu_utils和ral_model均已经生成。此外,如果参考现在的工程目录…...

图像处理之hough圆形检测
hough检测原理 点击图像处理之Hough变换检测直线查看 下面直接描述检测圆形的方法 基于Hough变换的圆形检测方法 对于一个半径为 r r r,圆心为 ( a , b ) (a,b) (a,b)的圆,我们将…...
el-upload文件上传(只能上传一个文件且再次上传替换上一个文件) vue3+vite+ts
组件: <template><el-upload class"upload-demo" v-model:file-list"fileList" ref"uploadDemo" action"/public-api/api/file" multiple:on-preview"handlePreview" :on-remove"handleRemove&quo…...
随手笔记——根据点对来估计相机的运动综述
随手笔记——根据点对来估计相机的运动综述 说明计算相机运动 说明 简单介绍3种情况根据点对来估计相机运动所使用的方法 计算相机运动 有了匹配好的点对,接下来,要根据点对来估计相机的运动。这里由于相机的原理不同分为: 当相机为单目时…...

ip校园广播音柱特点
ip校园广播音柱特点IP校园广播音柱是一种基于IP网络技术的音频播放设备,广泛应用于校园、商业区、公共场所等地方。它可以通过网络将音频信号传输到不同的音柱设备,实现远程控制和集中管理。IP校园广播音柱具备以下特点和功能:1. 网络传输&am…...

用 Node.js 手写 WebSocket 协议
目录 引言 从 http 到 websocekt 的切换 Sec-WebSocket-Key 与 Sec-WebSocket-Accept 全新的二进制协议 自己实现一个 websocket 服务器 按照协议格式解析收到的Buffer 取出opcode 取出MASK与payload长度 根据mask key读取数据 根据类型处理数据 frame 帧 数据的发…...

Xilinx AXI VIP使用教程
AXI接口虽然经常使用,很多同学可能并不清楚Vivado里面也集成了AXI的Verification IP,可以当做AXI的master、pass through和slave,本次内容我们看下AXI VIP当作master时如何使用。 新建Vivado工程,并新建block design,命…...
mysql主主架构搭建,删库恢复
mysql主主架构搭建,删库恢复 搭建mysql主主架构环境信息安装msql服务mysql1mysql2设置mysql2同步mysql1设置mysql1同步mysql2授权测试用账户 安装配置keepalivedmysql1检查脚本mysql2检查脚本 备份策略mysqldump全量备份mysqldump增量备份数据库目录全量备份 删除my…...
pythonweek1
引言 做任何事情都要脚踏实地,虽然大一上已经学习了python的基础语法,大一下也学习了C加加中的类与对象,但是自我觉得基础还不太扎实,又害怕有什么遗漏,所以就花时间重新学习了python的基础,学习Python的基…...

进程虚拟地址空间区域划分
目录 图示 详解 代码段 备注:x86 32位linux环境下,进程虚拟地址空间区域划分 图示 详解 用户空间 用于存储用户进程代码和数据,只能由用户进程访问 内核空间 用于存储操作系统内核代码和数据,只能由操作系统内核访问 text t…...

OpenAI Code Interpreter 的开源实现:GPT Code UI
本篇文章聊聊 OpenAI Code Interpreter 的一众开源实现方案中,获得较多支持者,但暂时还比较早期的项目:GPT Code UI。 写在前面 这篇文章本该更早的时候发布,但是 LLaMA2 发布后实在心痒难忍,于是就拖了一阵。结合 L…...

macOS Ventura 13.5 (22G74) 正式版发布,ISO、IPSW、PKG 下载
macOS Ventura 13.5 (22G74) 正式版发布,ISO、IPSW、PKG 下载 本站下载的 macOS Ventura 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也…...
Electron 主进程和渲染进程传值及窗口间传值
1 渲染进程调用主进程得方法 下面是渲染进程得代码: let { ipcRenderer} require( electron ); ipcRenderer.send( xxx ); //渲染进程中调用 下面是主进程得代码: var { ipcMain } require( electron ); ipcMain.on("xxx",function () { } )...
C#设计模式之---建造者模式
建造者模式(Builder Pattern) 建造者模式(Builder Pattern)是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道…...

output delay 约束
output delay 约束 一、output delay约束概述二、output delay约束系统同步三、output delay约束源同步 一、output delay约束概述 特别注意:在源同步接口中,定义接口约束之前,需要用create_generated_clock 先定义送出的随路时钟。 二、out…...

html2Canvas+jsPDF 下载PDF 遇到跨域的对象存储的图片无法显示
一、问题原因 对象存储的域名和你网址的域名不一样,此时用Canvas相关插件 将DOM元素转化为PDF,就会出现跨域错误。 二、解决办法 两步 1. 图片元素上设置属性 crossorigin"anonymous" 支持原生img和eleme组件 2. 存储桶设置资源跨域访问…...

【C#】并行编程实战:异步流
本来这章该讲的是 ASP .NET Core 中的 IIS 和 Kestrel ,但是我看了下这个是给服务器用的。而我只是个 Unity 客户端程序,对于服务器的了解趋近于零。 鉴于我对服务器知识和需求的匮乏,这里就不讲原书(大部分)内容了。本…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...