学习 C语言第二天 :C语言数据类型和变量(下)

news2025/1/16 2:37:43

目录:

        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 不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。 

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

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

相关文章

Python实战项目——O2O_优惠券使用情况分析(五)

O2O优惠券线下使用情况数据分析 一 项目简介 随着移动设备的完善和普及&#xff0c;移动互联网各行各业进入了高速发展阶段&#xff0c;这其中以O2O&#xff08;Online to Offline&#xff09;消费最为吸引眼球。据不完全统计&#xff0c;O2O行业估值上亿的创业公司至少有10家…

【Docker】Docker的服务更新与发现

consul 一、服务注册与发现1. 服务注册与发现的概念2. 服务发现的机制 二、consul 的概念1. 什么是 consul2. consul 的特性 三、consul 的部署1. consul 服务器架构2. consul 的部署过程2.1 环境配置2.2 consul 服务器建立 Consul 服务查看集群信息通过 http api 获取集群信息…

Jenkins 安装构建

一、CentOS 安装 1. 使用该存储库 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key 2. 安装 Java yum install fontconfig java-11-openjdk配…

聚焦APP开发:理解并预防常见的安全问题

移动应用程序是我们日常生活中不可或缺的一部分&#xff0c;它帮助我们处理信息&#xff0c;完成任务&#xff0c;甚至更多。因此&#xff0c;移动应用程序在我们日常生活中的重要性是毋庸置疑的。随着越来越多的人使用智能手机和平板电脑进行工作和娱乐&#xff0c;移动应用程…

项目管理系统软件有哪些?别错过!这款超好用!(免费试用)

如今&#xff0c;很多企业都面临着复杂的业务流程和庞大的项目数量&#xff0c;为了更好地管理和协调这些项目&#xff0c;企业需要一个高效的项目管理系统。然而&#xff0c;传统的项目管理系统已经无法满足企业的需求了。 企业需要一种新型的项目管理系统来应对这些挑战。一…

Spring Cloud【SkyWalking网络钩子Webhooks、SkyWalking钉钉告警、SkyWalking邮件告警】(十六)

目录 分布式请求链路追踪_SkyWalking网络钩子Webhooks 分布式请求链路追踪_SkyWalking钉钉告警 分布式请求链路追踪_SkyWalking邮件告警 分布式请求链路追踪_SkyWalking网络钩子Webhooks Wbhooks网络钩子 Webhok可以简单理解为是一种Web层面的回调机制。告警就是一个事件&a…

mybatisPlus进阶篇

文章目录 映射自动映射规则表映射字段映射字段失效视图属性 条件构造器条件构造器介绍 等值查询eqallEqne 范围查询gtge(>)lt(<)le(<)betweennotBetween 模糊查询likenotLikelikeLeftlikeRight 判空查询isNullisNotNull 包含查询innotIninSqlnotInSql 分组查询groupBy…

【Java基础教程】(四十七)网络编程篇:网络通讯概念,TCP、UDP协议,Socket与ServerSocket类使用实践与应用场景~

Java基础教程之网络编程 &#x1f539;本节学习目标1️⃣ 网络编程的概念&#x1f50d; TCP和 UDP协议 2️⃣ Socket 与ServerSocket 类3️⃣ 网络编程实战——Echo 程序4️⃣ 应用场景&#x1f33e; 总结 &#x1f539;本节学习目标 了解多线程与网络编程的操作关系&#xff…

JavaWeb黑马程序员——数据库相关概念

本文前提 这是黑马程序员JavaWeb视频里的笔记资源&#xff0c;我只是照搬过来以便于日后复习。 视频链接&#xff1a;https://www.bilibili.com/video/BV1Qf4y1T7Hx?p3&vd_sourced4bb8e491e28c81c780f2db9d6123a41 MySQL基础 今日目标&#xff1a; 完成MySQL的安装及登…

如何利用JMeter测试带有Token参数的POST接口

JMeter有一个很强大的功能就是可以用来做接口测试。 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系…

如何将路径字符串数组(string[])转成树结构(treeNode[])?

原文链接&#xff1a;如何将路径字符串数组(string[])转成树结构(treeNode[])&#xff1f; 需求 这里的UI使用的是Element-Plus。 将一个路径字符串数组&#xff08;当然也可能是其他目标字符串数组&#xff09;&#xff0c;渲染成树。 /*source:/a/b/c/d/e/a/b/e/f/g/a/b/h/a…

深入浅出对话系统——闲聊对话系统

引言 闲聊对话系统也很多别名 聊天机器人ChatbotSocial ChatbotChit-chat botConversational AI开放领域对话系统 实现方法 现在闲聊对话系统一般有两种主要的实现方法 检索式对话系统生成式对话系统 可以任务闲聊对话系统也是一个函数 y f ( x ) yf(x) yf(x)&#xff0…

6-Linux的磁盘分区和挂载

Linux的磁盘分区和挂载 Linux分区查看所有设备的挂载情况 将磁盘进行挂载的案例增加一块磁盘的总体步骤1-在虚拟机中增加磁盘2- 分区3-格式化分区4-挂载分区5-进行永久挂载 磁盘情况查询查询系统整体磁盘使用情况查询指定目录的磁盘占用情况 磁盘情况-工作实用指令统计文件夹下…

【Docker】Docker网络之五大网络模式

Docker网络 1.Docker网络2.Docker的网络模式3.网络模式详解3.1 host模式3.2 container模式3.3 none模式3.4 bridge模式3.5 自定义网络模式 4.docker网络模式知识点总结 1.Docker网络 Docker网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(dock…

Cesium态势标绘专题-圆角矩形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

RNN架构解析——传统RNN模型

目录 传统RNN的内部结构图使用RNN优点和缺点 传统RNN的内部结构图 使用RNN rnnnn.RNN(5,6,1) #第一个参数是输入张量x的维度&#xff0c;第二个是隐藏层维度&#xff0c;第三层是隐藏层的层数 input1torch.randn(1,3,5) #第一个是输入序列的长度&#xff0c;第二个是批次的样本…

FPGA设计时序分析二、建立/恢复时间

目录 一、背景知识 1.1 理想时序模型 1.2 实际时序模型 1.2.1 时钟不确定性 1.2.2 触发器特性 二、时序分析 2.1 时序模型图 ​2.2 时序定性分析 一、背景知识 之前的章节提到&#xff0c;时钟对于FPGA的重要性不亚于心脏对于人的重要性&#xff0c;所有的逻辑运算都离开…

[start] m40 test

software & update 470 drive version # cd /etc/apt # mv sources.list sources.list.bak # sudo vi /etc/apt/sources.list # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ja…

供应商管理平台:高效整合资源,提升供应链效能

随着全球市场竞争的不断升级&#xff0c;企业对供应商管理的重要性越来越重视。而供应商管理平台作为一种高效整合资源、提升供应链效能的工具&#xff0c;对于企业来说意义深远。本文将围绕供应商管理平台的概念、优势以及应用&#xff0c;探讨其在提升供应商管理和优化供应链…

面向对象编程:多态性的理论与实践

文章目录 1. 修饰词和访问权限2. 多态的概念3. 多态的使用现象4. 多态的问题与解决5. 多态的意义 在面向对象编程中&#xff0c;多态是一个重要的概念&#xff0c;它允许不同的对象以不同的方式响应相同的消息。本文将深入探讨多态的概念及其应用&#xff0c;以及在Java中如何实…