学习 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);  // 1
	printf("%d\n", -11 % -5); // -1
	printf("%d\n", -11 % 5); // -1
	
	return 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 World
 return 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 不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt : day1

1.聊天界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {qDebug() << this->size(); //获取当前页面尺寸this->setFixedSize(500, 600); //设置固定尺寸this->setWindowTitle("聊天框"); //设置窗口…

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

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

mybatisPlus入门篇

文章目录 初窥门径1.1 初识MybatisPlus1.2 MybatisPlus的特性1.3 MybatisPlus的架构模型 入门案例2.1 准备相关开发环境2.2 搭建springboot工程2.3 创建数据库2.4 引入相关依赖2.5 创建实体类2.6 集成MybatisPlus2.7 单元测试2.8 springboot日志优化 初窥门径 1.1 初识Mybatis…

【TiDB理论知识06】PD架构与作用

目录 一 PD的架构与功能 PD架构 PD作用 名词解释 路由功能 二 TSO的分配 概念 分配过程 性能问题 高可用问题 三 PD的调度原理 总流程 1 信息收集 2 生成调度 3 执行调度 四 Label的作用 Label的配置 给TiKV打标签 PD配置 一 PD的架构与功能 PD架构 PD集群…

GPT-4 模型详细教程

GPT-4&#xff08;Generative Pretrained Transformer 4&#xff09;是 OpenAI 的最新语言生成模型&#xff0c;其在各类文本生成任务中表现优秀&#xff0c;深受开发者和研究者喜爱。这篇教程将帮助你理解 GPT-4 的基本概念&#xff0c;并向你展示如何使用它来生成文本。 什么…

二叉树详解

这里写目录标题 前言树型结构(了解)树常见的概念树的表示形式&#xff08;了解&#xff09;树的应用 二叉树概念两种特殊的二叉树二叉树的性质(重要)二叉树的存储二叉树的基本操作 前言 本篇博客讲述了以下几个知识点 树的基本概念二叉树概念及特性二叉树的基本操作 树型结构…

DevExpress WPF Tree List组件,让数据可视化程度更高!(一)

DevExpress WPF Tree List组件是一个功能齐全、数据感知的TreeView-ListView混合体&#xff0c;可以把数据信息显示为REE、GRID或两者的组合&#xff0c;在数据绑定或非绑定模式下&#xff0c;具有完整的数据编辑支持。 DevExpress WPF 拥有120个控件和库&#xff0c;将帮助您…

一遍过JavaSE基础知识

文章目录 前言安装Java Development Kit (JDK)安装jdk配置开发环境验证是否安装配置成功 编写第一个Java程序hello world运行Java程序的流程 数据类型和变量数据类型变量 程序逻辑控制条件语句循环语句跳转语句 数组声明和创建数组访问数组元素数组长度遍历数组多维数组 面向对…

【亲测可用】Linux上安装Redis教程

一、下载并解压Redis 1、执行下面的命令下载redis&#xff1a; wget https://download.redis.io/releases/redis-6.2.6.tar.gz 2、解压redis&#xff1a; tar xzf redis-6.2.6.tar.gz 3、移动redis目录&#xff0c;一般都会将redis目录放置到 /usr/local/redis目录&#xff1a…

excel 生成sql技巧

"update 表名 set 字段名"&A2&" where 字段名"&B2&";"

Log4j源码解析

Log4j源码解析 主要流程 Logger logger Logger.getLogger(Main.class); 1、通过Logger.getLogger(Class clazz) 或 Logger.getLogger(String name)进入。 2、加载LogManager进jvm, 执行静态代码块执行初始化, 创建出RepositorySelector实例及LoggerRepository实例(Hierarchy…

ansible自动化运维(二)剧本、角色编写实战

&#x1f618;作者简介&#xff1a;一名运维工作人员。 &#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。 &#x1f64f;创作不易&#xff0c;动动小…

【学习篇】SAE J1939协议—常用到的知识点

前言&#xff1a;以下关于SAE J1939协议知识点的学习均抄录自书籍&#xff0c;侵权请联系删除。 故障诊断 SAE J1939诊断应用层定义了用于诊断服务的报文帧&#xff0c;诊断报文&#xff08;DM&#xff09;提供了用于车辆进行诊断和维修的功能。 诊断故障代码定义 SAE J193…

C语言每日一题:5.至少是其他数字的两倍+两个数组的交集。

第一题&#xff1a;至少是两倍其他数字的最大数 第一题&#xff1a; 思路一&#xff1a; 1.需要我们返回最大数值的下标&#xff0c;所以先循环遍历我们的这个数组记录一下最大的数值和下标位置。 2.使用qsort排序&#xff08;总是存在唯一的最大整数&#xff09; 3所以排序之…

Java编程实现遍历两个MAC地址之间所有MAC的方法

Java编程实现遍历两个MAC地址之间所有MAC的方法 本文实例讲述了java编程实现遍历两个MAC地址之间所有MAC的方法。分享给大家供大http://家参考&#xff0c;具体如下&#xff1a; 在对发放的设备进行后台管理时,很多时候会用到设备MAC这个字段,它可以标识唯一一个设备。然而在数…

安全渗透--正则表达式

什么是正则表达式&#xff1f; 正则表达式是一组由字母和符号组成的特殊文本&#xff0c;它可以用来从文本中找出满足你想要的格式的句子。 一个正则表达式是一种从左到右匹配主体字符串的模式。 “Regular expression”这个词比较拗口&#xff0c;我们常使用缩写的术语“regex…

16K个大语言模型的进化树;81个在线可玩的AI游戏;AI提示工程的终极指南;音频Transformers课程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; LLM 进化树升级版&#xff01;清晰展示 15821 个大语言模型的关系 这张进化图来自于论文 「On the Origin of LLMs: An Evolutionary …

uniapp 微信小程序 预览pdf方法

效果图&#xff1a; 1、在小程序中 // #ifdef MP */ 是区分运行的环境&#xff0c;在小程序中可使用如下方法uni.downloadFile({url: item.link,//文件地址success: function (res) {var filePath res.tempFilePath;uni.openDocument({filePath: filePath,showMenu: false…

spring 存储对象 + 获取对象

前言 本篇在spring中如何使用五大类注释与方法注释将对象加入IOC容器中&#xff0c;了解如何使用注释来获取容器中的Bean对象&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1.通过注释将类加入IoC…

大数据Flink(五十):流式计算简介

文章目录 流式计算简介 一、数据的时效性 二、流式计算和批量计算