【C快学-C语言程序设计(基础篇)】从VSCode中使用C编写我的第一个Hello world

在这里插入图片描述

简介:本专栏是一个C语言基础入门知识学习的一个专栏
面向:广大C友
工具:VSCODE
博主:一个友好且宠粉的博主,送书活动小专栏,不定期抽奖送图书给粉丝
社区:🦈山鱼社区

1.如何配置C语言环境(VSCode版本)

我这里是使用超级强大的vscode来进行C语言的学习的,因为vscode有着许多好用且方便的插件,能够提高我们编码的效率和速度,那么下面我们就来迈出学习C语言的第一步吧!

第一步我们要找到C语言环境的下载地址

嗖~的一下就飞到了地址处
在这里插入图片描述

1.MinGW/MinGW-w64是啥

MinGW 的全称是:Minimalist GNU on Windows ,是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64 则可以编译生成 64位 或 32位 可执行程序。正因为如此,MinGW 现已被 MinGW-w64 所取代,且 MinGW 也早已停止了更新,内置的 GCC 停滞在了 4.8.1 版本,而 MinGW-w64 内置的 GCC 则更新到了 8.1.0 版本。

2.解压配置环境

①找到这样一个压缩包,解压之后打开已经解压的mingw64文件我们会看到一个带有bin文件夹的文件
在这里插入图片描述

在这里插入图片描述

②右击此电脑,打开高级设置
在这里插入图片描述

③点击环境变量并添加环境变量
在这里插入图片描述
在这里插入图片描述

点击新建将刚才的解压mingw64路径复制到这里
在这里插入图片描述
在这里插入图片描述

配置好之后就是这样的了
在这里插入图片描述

④再打开cmd输入 gcc -v
在这里插入图片描述

出现这个就说明环境Ok啦
在这里插入图片描述

⑤接下来就是打开VSCode,安装插件,安装这三个C插件,我们就可以开始我们的C语言编程之旅了!
在这里插入图片描述

3.第一个C语言文件—>hello.C

#include <stdio.h>

int main()
{

 /* 这是我的第一个C代码 */printf("Hello, World! \n");
return 0;
}

我们可以先来了解一下,各行代码是什么东西

1.stdio.h 是一个头文件 (标准输入输出头文件) , #include 是一个预处理命令,用来引入头文件。 当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。

2.所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行,所以我们编写C代码时,首先要做的事情就是将前两行写上

3./**/用于多行注释说明,//为单行注释。

4.printf() 用于格式化输出到屏幕。printf() 函数在 “stdio.h” 头文件中声明。

5.return 0; 语句用于表示退出程序。

我们安装了插件之后会有这样一个小三角,它可以帮助我们编译运行我们所写的C文件

在这里插入图片描述

打开终端我们可以看到,这个程序成功的把‘Hello world’输出出来了

在这里插入图片描述

这样我们的第一个C代码文件就成功的创建出来了。

2.C的基本语法

1.C的令牌

首先我们来看几行代码,它分别是由大括号,printf函数,和return组成的,我们可以把他们每一个都称为令牌,C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号

printf("Hello world\n");

上面就有这么5个令牌组成的,每一个字符,关键字,标识符等都是一个令牌,我们拆分开来看就是这样子
在这里插入图片描述

在C语言的程序中,当一个语句结束了,我们就要把分号添加在结束语句的末尾,当一个程序结束了我们就要把return 添加到末尾,用来表示一个程序已经结束。

2.C的标识符

标识符在C中也是不可或缺的,我们定义变量,函数,或者其他的自定义属性,项目等,都会用到标识符,那么标识符有哪些限制呢?

①一个标识符以字母 A-Za-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。

②C标识符内不允许出现标点字符,比如 @$%。在C中是区分大小写的编程语言。因此,在 C 中,Appleapple 是两个不同的标识符。

3.C的关键字

关键字在我们设计程序编写代码时,经常出现并且使用,所以我们并不能把关键字当作变量名称,函数名称来用,下面是C中的关键字,在C99,C11中还新增了一些关键字,可以自行查阅一下

auto声明自动变量
break跳出当前循环
case开关语句分支
char声明字符型变量或函数返回值类型
const定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变
continue结束当前循环,开始下一轮循环
default开关语句中的"其它"分支
do循环语句的循环体
double声明双精度浮点型变量或函数返回值类型
else条件语句否定分支(与 if 连用)
enum声明枚举类型
extern声明变量或函数是在其它文件或本文件的其他位置定义
float声明浮点型变量或函数返回值类型
for一种循环语句
goto无条件跳转语句
if条件语句
int声明整型变量或函数
long声明长整型变量或函数返回值类型
register声明寄存器变量
return子程序返回语句(可以带参数,也可不带参数)
short声明短整型变量或函数
signed声明有符号类型变量或函数
sizeof计算数据类型或变量长度(即所占字节数)
static声明静态变量
struct声明结构体类型
switch用于开关语句
typedef用以给数据类型取别名
unsigned声明无符号类型变量或函数
union声明共用体类型
void声明函数无返回值或无参数,声明无类型指针
volatile说明变量在程序执行中可被隐含地改变
while循环语句的循环条件

3.C 数据类型

1.C的多种数据类型

在大多数语言中我们或多或少都可以找到那么几种数据类型,比如Java中就有int,float,double等类型

在这里插入图片描述

Ts中any,string,object等类型

在这里插入图片描述

所以在C语言中也可以找到数据类型,C中的类型可以分为这几种,分别是,基本数据类型,枚举类型,void 类型,派生类型

数据类型类型描述
基本数据类型它们是算术类型,包括整型(int)、字符型(char)、浮点型(float)和双精度浮点型(double)。
枚举类型它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
void 类型类型说明符 void 表示没有值的数据类型,通常用于函数返回值。
派生类型包括数组类型、指针类型和结构体类型。

2.C的类型字节大小

我们在编写C程序的时候可能会用到字符的大小,我们只知道类型却不知道大小该怎么办呢?这个时候我们就可以使用sizeof来得到想要使用的字节大小。
在这里插入图片描述
在这里插入图片描述

在标准整数类型中和浮点类型中,C给出了相对应的存储大小和值得范围

整数类型储存大小&范围值

类型存储大小值范围
char1 字节-128 到 127 或 0 到 255
unsigned char1 字节0 到 255
signed char1 字节-128 到 127
int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int2 或 4 字节0 到 65,535 或 0 到 4,294,967,295
short2 字节-32,768 到 32,767
unsigned short2 字节0 到 65,535
long4 字节-2,147,483,648 到 2,147,483,647
unsigned long4 字节0 到 4,294,967,295

浮点类型范围大小&储存大小&精度

类型存储大小值范围精度
float4 字节1.2E-38 到 3.4E+386 位有效位
double8 字节2.3E-308 到 1.7E+30815 位有效位
long double16 字节3.4E-4932 到 1.1E+493219 位有效位

在这里插入图片描述
在这里插入图片描述

3.C的类型转换

类型转换:类型转换是将一个数据类型的值转换为另一种数据类型的值。

C语言中有两种类型转换分别是

隐式类型转换: 隐式类型转换是在表达式中自动发生的,无需进行任何明确的指令或函数调用。它通常是将一种较小的类型自动转换为较大的类型,例如,将int类型转换为long类型或float类型转换为double类型。隐式类型转换也可能会导致数据精度丢失或数据截断。
显式类型转换: 显式类型转换需要使用强制类型转换运算符(type casting operator),它可以将一个数据类型的值强制转换为另一种数据类型的值。强制类型转换可以使程序员在必要时对数据类型进行更精确的控制,但也可能会导致数据丢失或截断。

//隐式类型转换实例
 int i = 10; float f = 3.14; double d = i + f; 
 // 隐式将int类型转换为double类型* 
 //显式类型转换实例: 
 double d = 3.14159 ; int i = (int)d; 
 // 显式将double类型转换为int类型*

创作不易希望能得到您的支持,您的支持是我创作的动力✌
点赞:您的赞赏是我前进的动力! 👍
收藏:您的支持我是创作的源泉! ⭐
评论:您的建议是我改进的良药! ✍

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

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

相关文章

matlab使用教程(15)—图论基础

1.有向图和无向图 1.1什么是图&#xff1f; 图是表示各种关系的节点和边的集合&#xff1a; • 节点 是与对象对应的顶点。 • 边 是对象之间的连接。 • 图的边有时会有权重 &#xff0c;表示节点之间的每个连接的强度&#xff08;或一些其他属性&#xff09;。 这些定…

Tree相关

1.树相关题目 1.1 二叉树的中序遍历&#xff08;简单&#xff09;&#xff1a;递归 题目&#xff1a;使用中序遍历二叉树 思想&#xff1a;按照访问左子树——根节点——右子树的方式遍历这棵树&#xff0c;而在访问左子树或者右子树的时候我们按照同样的方式遍历&#xff0…

​LeetCode解法汇总1572. 矩阵对角线元素的和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 给你一个正…

Camx--概述

该部分代码主要位于 vendor/qcom/proprietary/ 目录下&#xff1a; 其中 camx 代表了通用功能性接口的代码实现集合&#xff08;CamX&#xff09;&#xff0c;chi-cdk代表了可定制化需求的代码实现集合&#xff08;CHI&#xff09;&#xff0c;从图中可以看出Camx部分对上作为H…

Redis_缓存2_缓存删除和淘汰策略

14.5 缓存数据的删除和替换 14.5.1 过期数据 可以使用ttl查看key的状态。已过期的数据&#xff0c;redis并未马上删除。优先去执行读写数据操作&#xff0c;删除操作延后执行。 14.5.2 删除策略 redis中每一个value对应一个内存地址&#xff0c;在expires&#xff0c;一个内…

安全第二次

一&#xff0c;iframe <iframe>标签用于在网页里面嵌入其他网页。 1&#xff0c;sandbox属性 如果嵌入的网页是其他网站的页面&#xff0c;因不了解对方会执行什么操作&#xff0c;因此就存在安全风险。为了限制<iframe>的风险&#xff0c;HTML 提供了sandb…

Django路由Router

文章目录 一、路由router路由匹配命名空间反向解析 二、实践创建用户模型Model添加子路由 - 创建用户首页页面跳转 - 使用反向解析和命名空间1. 不使用命名空间的效果2. 使用命名空间的效果 用户详情页面跳转 - 路由传参路由传递多个参数re_path 以前写法,了解即可重定向Redire…

二叉树题目:二叉树的直径

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉树的直径 出处&#xff1a;543. 二叉树的直径 难度 3 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root&#xff0c;返回其直径…

java练习3.快速查找

题目: 数组 arr[6,1,3,7,9,8,5,4,2],用快速排序进行升序排序. import java.util.Random;public class recursionDemo {public static void main(String[] args) {/*快速排序:* 第一轮:以0索引为基准数,确定基准数在数组正确的位置,* 比基准数小的放到左边,比基准数大的放在右边…

FPGA应用学习-----FIFO双口ram解决时钟域+asic样机的时钟选通

60m写入异步ram&#xff0c;再用100M从ram中读出 写地址转换为格雷码后&#xff0c;打两拍和读地址判断是否空产生。相反读地址来判断是否满产生。 分割同步模块 asic时钟的门控时钟&#xff0c;fpga是不推荐采用门控时钟的&#xff0c;有很多方法移除fpga的时钟选通。 如果是a…

算法通关村第七关——递归和迭代实现二叉树前中后序遍历

1.递归 1.1 熟悉递归 所有的递归有两个基本特征&#xff1a; 执行时范围不断缩小&#xff0c;这样才能触底反弹。终止判断在调用递归的前面。 写递归的步骤&#xff1a; 从小到大递推。分情况讨论&#xff0c;明确结束条件。组合出完整方法。想验证就从大到小画图推演。 …

中级课程——XSS

文章目录 介绍挖掘思路分类反射型存储型dom类型 介绍 挖掘思路 注入点&#xff1a;各种输入框 测试代码&#xff08;poc&#xff09;&#xff1a;js语句 分类 反射型 存储型 dom类型

Java并发编程(六)线程池[Executor体系]

概述 在处理大量任务时,重复利用线程可以提高程序执行效率,因此线程池应运而生。 它是一种重用线程的机制,可以有效降低内存资源消耗提高响应速度。当任务到达时&#xff0c;任务可以不需要的等到线程创建就能立即执行线程池可以帮助我们更好地管理线程的生命周期和资源使用,…

机器学习 | Python实现KNN(K近邻)模型实践

机器学习 | Python实现KNN(K近邻)模型实践 目录 机器学习 | Python实现KNN(K近邻)模型实践基本介绍模型原理源码设计学习小结参考资料基本介绍 一句话就可以概括出KNN(K最近邻算法)的算法原理:综合k个“邻居”的标签值作为新样本的预测值。更具体来讲KNN分类过程,给定一个训…

Android APK体积优化(瘦身)

1、基础知识&#xff1a; 1.1 apk结构 lib &#xff1a;存放so文件&#xff0c;对应不同的cpu架构 res &#xff1a;资源文件&#xff0c;layout、drawable等&#xff0c;经过aapt编译 assets &#xff1a;资源文件&#xff0c;不经过aapt编译 classes.dex &#xff1a;dx编译…

基于HTML+CSS+Echarts大屏数据可视化集合共99套

基于HTMLCSSEcharts大屏数据可视化集合共99套 一、介绍二、展示1.大数据展示系统2.物流订单系统3.物流信息系统4.办税渠道监控平台5.车辆综合管控平台 三、其他系统实现四、获取源码 一、介绍 基于HTML/CSS/Echarts的会议展览、业务监控、风险预警、数据分析展示等多种展示需求…

菜单和内容滚动的联动原理及代码

之前写代码有个需求&#xff1a;左侧是一个菜单&#xff0c;右边是内容&#xff0c;点击左侧菜单右边内容滚动到对应位置&#xff0c;右边内容滚动到某位置时&#xff0c;左侧菜单也会选中对应的菜单项。UI如下&#xff1a;这是大多网站的移动端都会有的需求。 解决方案一&…

Spring Boot业务代码中使用@Transactional事务失效踩坑点总结

1.概述 接着之前我们对Spring AOP以及基于AOP实现事务控制的上文&#xff0c;今天我们来看看平时在项目业务开发中使用声明式事务Transactional的失效场景&#xff0c;并分析其失效原因&#xff0c;从而帮助开发人员尽量避免踩坑。 我们知道 Spring 声明式事务功能提供了极其…

python3装饰器理解与实战

前言 装饰器本质上是一个Python函数&#xff0c;它可以让其他函数在不需要做任务代码变动的前提下增加额外功能&#xff0c;装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景&#xff0c;比如&#xff1a;插入日志、性能测试、事务处理、缓存、权限校验等场景。装…

R语言生存分析(机器学习)(2)——Enet(弹性网络)

弹性网络&#xff08;Elastic Net&#xff09;:是一种用于回归分析的统计方法&#xff0c;它是岭回归&#xff08;Ridge Regression&#xff09;和lasso回归&#xff08;Lasso Regression&#xff09;的结合&#xff0c;旨在克服它们各自的一些限制。弹性网络能够同时考虑L1正则…