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

学习 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语言数据类型和变量(下)

目录&#xff1a; 1.变量的介绍以及存储 2.算术操作符、赋值操作符、单目操作符 3.scanf和printf的介绍 1.变量的介绍以及存储 1.1.变量的创建 了解了什么是类型了&#xff0c;类型是用来创建变量的。 变量是什么呢&#xff1f;在C语言当中不经常变的量称为常量&#xff0c;经常…...

【Kubernetes资源篇】ingress-nginx最佳实践详解

文章目录 一、Ingress Controller理论知识1、Ingress Controller、Ingress简介2、四层代理与七层代理的区别3、Ingress Controller中封装Nginx&#xff0c;为什么不直接用Nginx呢&#xff1f;4、Ingress Controller代理K8S内部Pod流程 二、实践&#xff1a;部署Ingress Control…...

Java基础阶段学习哪些知识内容?

Java是一种面向对象的编程语言&#xff0c;刚接触Java的人可能会感觉比较抽象&#xff0c;不要着急可以先从概念知识入手&#xff0c;先了解Java&#xff0c;再吃透Java&#xff0c;本节先来了解下Java的基础语法知识。 对象&#xff1a;对象是类的一个实例&#xff0c;有状态…...

【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&#xff0c;圆心为 &#xff08; a , b &#xff09; &#xff08;a,b&#xff09; &#xff08;a,b&#xff09;的圆&#xff0c;我们将…...

el-upload文件上传(只能上传一个文件且再次上传替换上一个文件) vue3+vite+ts

组件&#xff1a; <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种情况根据点对来估计相机运动所使用的方法 计算相机运动 有了匹配好的点对&#xff0c;接下来&#xff0c;要根据点对来估计相机的运动。这里由于相机的原理不同分为&#xff1a; 当相机为单目时…...

ip校园广播音柱特点

ip校园广播音柱特点IP校园广播音柱是一种基于IP网络技术的音频播放设备&#xff0c;广泛应用于校园、商业区、公共场所等地方。它可以通过网络将音频信号传输到不同的音柱设备&#xff0c;实现远程控制和集中管理。IP校园广播音柱具备以下特点和功能&#xff1a;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接口虽然经常使用&#xff0c;很多同学可能并不清楚Vivado里面也集成了AXI的Verification IP&#xff0c;可以当做AXI的master、pass through和slave&#xff0c;本次内容我们看下AXI VIP当作master时如何使用。 新建Vivado工程&#xff0c;并新建block design&#xff0c;命…...

mysql主主架构搭建,删库恢复

mysql主主架构搭建&#xff0c;删库恢复 搭建mysql主主架构环境信息安装msql服务mysql1mysql2设置mysql2同步mysql1设置mysql1同步mysql2授权测试用账户 安装配置keepalivedmysql1检查脚本mysql2检查脚本 备份策略mysqldump全量备份mysqldump增量备份数据库目录全量备份 删除my…...

pythonweek1

引言 做任何事情都要脚踏实地&#xff0c;虽然大一上已经学习了python的基础语法&#xff0c;大一下也学习了C加加中的类与对象&#xff0c;但是自我觉得基础还不太扎实&#xff0c;又害怕有什么遗漏&#xff0c;所以就花时间重新学习了python的基础&#xff0c;学习Python的基…...

进程虚拟地址空间区域划分

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

OpenAI Code Interpreter 的开源实现:GPT Code UI

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

macOS Ventura 13.5 (22G74) 正式版发布,ISO、IPSW、PKG 下载

macOS Ventura 13.5 (22G74) 正式版发布&#xff0c;ISO、IPSW、PKG 下载 本站下载的 macOS Ventura 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也…...

Electron 主进程和渲染进程传值及窗口间传值

1 渲染进程调用主进程得方法 下面是渲染进程得代码: let { ipcRenderer} require( electron ); ipcRenderer.send( xxx ); //渲染进程中调用 下面是主进程得代码: var { ipcMain } require( electron ); ipcMain.on("xxx",function () { } )...

C#设计模式之---建造者模式

建造者模式&#xff08;Builder Pattern&#xff09; 建造者模式&#xff08;Builder Pattern&#xff09;是将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。建造者模式使得建造代码与表示代码的分离&#xff0c;可以使客户端不必知道…...

output delay 约束

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

html2Canvas+jsPDF 下载PDF 遇到跨域的对象存储的图片无法显示

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

【C#】并行编程实战:异步流

本来这章该讲的是 ASP .NET Core 中的 IIS 和 Kestrel &#xff0c;但是我看了下这个是给服务器用的。而我只是个 Unity 客户端程序&#xff0c;对于服务器的了解趋近于零。 鉴于我对服务器知识和需求的匮乏&#xff0c;这里就不讲原书&#xff08;大部分&#xff09;内容了。本…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...