【C语言次列车ing】No.1站---C语言入门

文章目录

  • 前言
  • 一、什么是C语言
  • 二、第一个C语言程序
  • 三、数据类型
  • 四、变量、常量
  • 五、字符串+转义字符+注释


前言

在这里插入图片描述

👧个人主页:@小沈YO.
😚小编介绍:欢迎来到我的乱七八糟小星球🌝
📋专栏:C语言次列车ing
🔑本章内容:数据类型、变量+常量、字符串+转义字符+注释
记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是C语言

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

C语言中有哪些单位?
byte - 字节1 byte=8 bit
KB1 KB=1024 byte
MB1 MB=1024 KB
GB1 GB=1024 MB
TB1 TB=1024 GB
PB1 PB=1024 TB
bit比特位

二、第一个C语言程序

stdio.h 标准输入输出头文件
#include<stdio.h>
//C语言的代码都是main函数的第一行开始执行的
main函数是程序的入口  ---  但是有且仅有一个
int main()
{printf("hello world\n");//printf是一个库函数---C语言的标准库中提供的一个现成的函数//功能:在屏幕上打印信息//输出函数,打印函数,使用前一定要包含头文件stdio.hreturn 0;
}

三、数据类型

char (字符数据类型)%c用来输出字符,char型;%s用来输出字符串,通常用来输出char型
short (短整型)%d
int (整形)%d整型输出,通常用来输出int型
long (长整型)%ld长整型输出,通常用来输出long型
long long (更长的整形)%lld更长整形输出,通常用来输出long long 型
float (单精度浮点数)%f用来输出小数,通常用来输出float型
double (双精度浮点数)%lf是双精度浮点型,通常用来输出double型
1. 为什么出现这么的类型和研究它的大小?
  • 存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。
    类型的使用:
注意:字符必须要单引号引起来
char ch = 'w';
double weight = 120.0;
int salary = 20000;

请添加图片描述
请添加图片描述

  • 假设有一个数字20想要将它存到内存中,那应该申请多大空间呢?
    首先20是一个整形,申请一个int 类型的空间就可以了,只要申请4个字节的空间把它放进去就可以啦也就是为什么研究类型大小
2. 每种类型的大小是多少?
#include<stdio.h>
int main()
{sizeof - 运算符(操作符)单位字节printf("%d\n", sizeof(char));printf("%d\n", sizeof(short));printf("%d\n", sizeof(int));C语言标准:sizeof(long)>=sizeof(int)printf("%d\n", sizeof(long));printf("%d\n", sizeof(long long));printf("%d\n", sizeof(float));printf("%d\n", sizeof(double));return 0;
}

请添加图片描述

四、变量、常量

生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)
不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。

1. 定义变量的方法
#include<stdio.h>
int main()
{int num = 20;char ch = "b";float weight = 45.5f;编译器默认认为一个小数就是double所以可以在末尾加个freturn 0;
}#include<stdio.h>
int main()
{int num = 10;printf("%d\n", num);num = 20;printf("%d\n", num);return 0;通过下述图片可以主观的看到num是可变的是一个变量
}

请添加图片描述

2. 变量的命名
  • 只能由字母(包括大写和小写)、数字和下划线( _ )组成
  • 不能以数字开头
  • 长度不能超过63个字符
  • 变量名中区分大小写的(Num和num是不一样的)
  • 变量名不能使用关键字
  • 变量名最好有意义(比如年龄:int age)
3. 变量的分类

变量是有分类的:

  • 局部变量:在{}内部定义的变量就是局部变量
  • 全局变量:在{}外部定义的变量就是全局变量

🌟局部变量

#include<stdio.h>
int main()
{int a = 10;//限制在main函数内部是一个局部变量printf("%d\n", num);return 0;
}

🌟全局变量

int num = 100;//全局变量
#include<stdio.h>
int main()
{printf("%d\n", num);return 0;
}

🌟局部变量与全局变量的易错点

int a = 1000;
#include<stdio.h>
int main()
{int a = 10;//int a = 20;//同一个范围内出现两个局部变量就会冲突printf("%d\n", a);全局变量和局部变量的名字可以相同但是在使用时局部变量优先所以下述打印出来是10而不是1000return 0;
}

请添加图片描述
🌟变量的使用

计算两个数值相加
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{int num1 = 0;//创建了两个变量int num2 = 0;//scanf 是一个输入函数scanf("%d %d", &num1, &num2);int sum = 0;sum = num1 + num2;printf("%d\n", sum);return 0;
}

请添加图片描述

4. 变量的作用域和声明周期

🌟作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用
的而限定这个名字的可用性的代码范围就是这个名字的作用域。

  • 局部变量的作用域是变量所在的局部范围。
#include<stdio.h>
void test()
{printf("%d\n", a);
}
int main()
{int a = 10;printf("%d\n", a);{int b = 20;//b在{ }内部,它的作用域就是{ }内部,出了作用域就不可以用了printf("%d\n", b);}printf("%d\n", b);return 0;
}

在这里插入图片描述

  • 全局变量的作用域是整个工程
#include<stdio.h>
int a = 100;
void test()
{printf("2: %d\n", a);
}
int main()
{printf("1: %d\n", a);test();return 0;
}//声明外部符号
extern int g_val;#include<stdio.h>
int main()
{printf("%d\n", g_val);return 0;
}

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

这也证明了全局变量是不安全的因为使用的范围比较广谁都可以用,也就代表潜在危险大
extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。

🌟生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

  • 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
#include<stdio.h>
int main()
{{int a = 10;printf("%d\n", a);}printf("%d\n", a);return 0;
}

在这里插入图片描述

  • 全局变量的生命周期是:整个程序的生命周期
#include<stdio.h>
int a = 10;
void test()
{printf("%d\n", a);
}
int main()
{//...test();return 0;
}
5. 常量

C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:

  • 字面常量
#include<stdio.h>
int main()
{字面常量100;整形字面值"w";字符字面值3.14;浮点型字面值"abcdef";字符串常量return 0;
}
  • const 修饰的常变量
#include<stdio.h>
int main()
{const 是常属性不能被改变const int num = 10;    num本质上是个变量,但是具有了常属性不能被修改printf("%d\n", num);//num = 20;              不能被改变了    printf("%d\n", num);怎么证明num本质上还是个变量呢?用数组试验一下://const int n = 10;//int arr[n] = { 0 };n虽然被const修饰具有了常属性不能被修改但本质上还是变量不能用来指定数组大小int arr[10] = { 0 };下述代码在支持C99的编译器上是可以编译的,C99中引入了变长数组的概念变长数组的大小是可以使用变量来指定的,但是数据不能初始化//int n = 10;//int arr[n];return 0;
}
  • #define 定义的标识符常量(不是常变量)
#define MAX 1000
#include<stdio.h>
int main()
{
#define MIN 200printf("%d\n", MAX);printf("%d\n", MIN);int arr[MAX];return 0;
}

请添加图片描述

  • 枚举常量
enum Sex
{下面三个符号是Sex这个枚举类型的未来的可能取值MALE=5,         赋初始值FEMALE=8,       不赋值就是上面递增1SECRET          不赋值就是上面递增1
};
int main()
{enum Sex s=FEMALE;//默认取值printf("%d\n", MALE); 1printf("%d\n", FEMALE);2printf("%d\n", SECRET);3//MALE=5;枚举常量不能被改return 0;
}

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

五、字符串+转义字符+注释

1. 字符串
"hello world.\n"

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容

#include<stdio.h>
int main()
{C语言表示字符用单引号引起来例如:'a'   'w'   '1' 多个字符组成的一串字符称为字符串C语言表示字符串由双引号引起啦例如:"abcdef"  "www""abc"  ---> a b c \0     其中\0作为这个字符串的结束标志char ch1 = 'a';char ch2 = 'b';//字符数组char arr[]括号里没有指定大小是因为给它赋值初始化了,大小就不用指定了,编译器会根据初始化内容确认数组的大小char arr1[] = "abc";arr1里面放了四个字符 a b c \0char arr2[] = { 'a','b','c' };arr2里面只放了三个字符 a b creturn 0;
}

在这里插入图片描述
🌟那如何验证\0是字符串的结束标志呢

#include<stdio.h>
int main()
{char arr1[] = "abc";char arr2[] = { 'a','b','c' };%s --- 打印字符串,直到\0才终止打印%c --- 打印字符printf("%s\n", arr1);printf("%s\n", arr2);return 0;
}

在这里插入图片描述

用%s打印arr1的时候遇到\0,而\0是字符串的结束标志,然后就不打印了,所以打印的是abc;但是arr2中放的abc没有\0,没有结束标志,所以用%s打印的时候就会依次往后找,找到\0这个结束标志打印停止,但是后面是什么我们根本不知道,所以打印的是随机值

#include<stdio.h>
int main()
{char arr1[] = "abc";char arr2[] = { 'a','b','c' };当主动放进去一个\0就不会出现arr2的情况char arr3[] = { 'a','b','c','\0' };printf("%s\n", arr1);printf("%s\n", arr2);printf("%s\n", arr3);return 0;
}

在这里插入图片描述
🌟补充一个知识点:strlen是一个库函数,专门用来求字符串长度(统计的是\0之前出现的字符的个数),使用时要包含头文件#include<string.h>

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "abc";char arr2[] = { 'a','b','c' };char arr3[] = { 'a','b','c','\0' };printf("%s\n", arr1);printf("%s\n", arr2);printf("%s\n", arr3);printf("%d\n", strlen(arr1));printf("%d\n", strlen(arr2));printf("%d\n", strlen(arr3));char len = strlen("abcdef");strlen 在求字符串长度的时候,统计的是\0之前出现的字符的个数printf("%d\n", len);return 0;
}

请添加图片描述
在这里插入图片描述

2. 转义字符
转义字符释义
\?在书写连续多个问号时使用,防止他们被解析成三字母词
\’用于表示字符常量’
\“用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符。
\0字符串的结束标志
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字。 如: \130 X
\xdddd表示2个十六进制数字。 如: \x30 0
程序输出什么?
#include <stdio.h>
int main()
{printf("%d\n", strlen("abcdef"));\62被解析成一个转义字符\ddd, ddd表示1~3个八进制的数字(0~7没有8)printf("%d\n", strlen("c:\test\628\test.c"));\628中有8说明不是八进制的数字return 0;
}

在这里插入图片描述

3. 注释
  • 代码中有不需要的代码可以直接删除,也可以注释掉
  • 代码中有些代码比较难懂,可以加一下注释文字

注释有两种风格:

  • C语言风格的注释 /xxxxxx/
    缺陷:不能嵌套注释
  • C++风格的注释 //xxxxxxxx
    可以注释一行也可以注释多行
#include <stdio.h>
int Add(int x, int y)
{return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{return x-y;
}
*/
int main()
{//C++注释风格//int a = 10;//调用Add函数,完成加法printf("%d\n", Add(1, 2));return 0;
}

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

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

相关文章

【笔试强训day02】倒置字符串 排序子序列

​&#x1f47b;内容专栏&#xff1a; 笔试强训集锦 &#x1f428;本文概括&#xff1a;C笔试强训day02。 &#x1f43c;本文作者&#xff1a; 阿四啊 &#x1f438;发布时间&#xff1a;2023.10.1 二、day02 1.倒置字符串 题目描述&#xff1a; 将一句话的单词进行倒置&…

手动实现BERT

本文重点介绍了如何从零训练一个BERT模型的过程&#xff0c;包括整体上BERT模型架构、数据集如何做预处理、MASK替换策略、训练模型和保存、加载模型和测试等。 一.BERT架构   BERT设计初衷是作为一个通用的backbone&#xff0c;然后在下游接入各种任务&#xff0c;包括翻译…

《MySQL高级篇》十六、主从复制

文章目录 1、主从复制概述1.1 如何提升数据库并发能力1.2 主从复制的作用 2、主从复制的原理2.1 原理剖析2.2 复制的基本原则 3、一主一从架构搭建3.1 准备工作3.2 主机配置文件3.3 从机配置文件3.4 主机&#xff1a;建立账户并授权3.5 从机&#xff1a;配置需要复制的主机3.6 …

面试记录_

1&#xff1a;面试杉岩数据&#xff08;python开发&#xff09; 1.1.1 选择题 for(int i0;i<n;i){for(int j0;j<n;jji) } }O(n) * (O(0) O(n/1) O(n/2) O(n/3) ... O(n/n)) 在最坏情况下&#xff0c;内部循环的迭代次数为 n/1 n/2 n/3 ... n/n&#xff0c;这是…

笔试强训Day8

链接&#xff1a;求最小公倍数__牛客网 T1:求最小公倍数 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值&#xff0c;设计一个算法&#xff0c;求输入A和B的最小公倍数。 数据范围&#xff1a;1≤a,b≤100000 #include<iostream> using namespace…

【算法|贪心算法系列No.2】leetcode2208. 将数组和减半的最少操作次数

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

Unity把UGUI再World模式下显示到相机最前方

Unity把UGUI再World模式下显示到相机最前方 通过脚本修改Shader 再VR里有时候要把3D的UI显示到相机最前方&#xff0c;加个UI相机会坏事&#xff0c;可以通过修改unity_GUIZTestMode来解决。 测试用例 测试用例如下&#xff1a; 场景包含一个红色的盒子&#xff0c;一个UI…

MonkeyRunner自动化测试

一&#xff1a;简介 MonkeyRunner提供了一个API&#xff0c;使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner&#xff0c;您可以写出一个Python程序去安装一个Android应用程序或测试包&#xff0c;运行它&#xff0c;向它发送模拟击键&…

Linux C/C++下收集指定域名的子域名信息(类似dnsmap实现)

我们知道dnsmap是一个工具&#xff0c;主要用于收集指定域名的子域名信息。它对于渗透测试人员在基础结构安全评估的信息收集和枚举阶段非常有用&#xff0c;可以帮助他们发现目标公司的IP网络地址段、域名等信息。 dnsmap的操作原理 dnsmap&#xff08;DNS Mapping&#xff…

Xmake v2.8.3 发布,改进 Wasm 并支持 Xmake 源码调试

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量&#xff0c;没有任何依赖&#xff0c;因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建&#xff0c;相比 makefile/CMakeLists.txt&#xff0c;配置语法更加简洁直观&#xff0c;对新手非常友好&#x…

学信息系统项目管理师第4版系列14_沟通管理

1. 与IT项目成功有关的最重要的四个因素 1.1. 主管层的支持 1.2. 用户参与 1.3. 有经验的项目经理 1.4. 清晰的业务目标 1.5. 依赖于项目经理和团队具有良好的沟通能力 2. 沟通的主旨 2.1. 互动双方建立彼此相互了解的关系 2.2. 相互回应 2.3. 期待能经由沟通的行为与…

软件过程的介绍

软件过程概述 软件的诞生和生命周期是一个过程&#xff0c;我们总体上称这个过程为软件过程。软件过程是为了开发出软件产品&#xff0c;或者是为了完成软件工程项目而需要完成的有关软件工程的活动&#xff0c;每一项活动又可以分为一系列的工程任务。任何一个软件开发组织&a…

ESP32官方MPU6050组件介绍

前言 &#xff08;1&#xff09;因为我需要使用MPU6050的组件&#xff0c;但是又需要在这条I2C总线上挂载多个设备&#xff0c;所以我本人打算自己对官方的MPU6050的组件进行微调。建立一个I2C总线&#xff0c;设备依赖于这个总线挂载。 &#xff08;2&#xff09;既然要做移植…

【AI视野·今日Robot 机器人论文速览 第四十四期】Fri, 29 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 29 Sep 2023 Totally 38 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;NCF,基于Neural Contact Fields神经接触场的方法实现有效的外部接触估计和插入操作。 (from FAIR ) 操作插入处理结果&am…

凉鞋的 Godot 笔记 101. Hello Godot!

101. Hello Godot 学习任何一门技术&#xff0c;第一件事就是先完成 Hello World&#xff01;的输出 所以我们也来先完成 Godot 的 Hello World。 我们所使用的 Godot 版本是 4.x 版本。 安装的过程就不给大家展示了&#xff0c;笔者更推荐初学者用 Steam 版本的 Godot&…

第一次作业题解

第一次作业题解 P5717 【深基3.习8】三角形分类 思路 考的是if()的使用,还要给三条边判断大小 判断优先级&#xff1a; 三角形&#xff1f;直角、钝角、锐角等腰等边 判断按题给顺序来 代码 #include <stdio.h> int main() {int a 0, b 0, c 0, x 0, y 0, z 0…

紫光同创FPGA图像视频采集系统,基于OV7725实现,提供工程源码和技术支持

目录 1、前言免责声明 2、设计思路框架视频源选择OV7725摄像头配置及采集动态彩条HDMA图像缓存输入输出视频HDMA缓冲FIFOHDMA控制模块HDMI输出 3、PDS工程详解4、上板调试验证并演示准备工作静态演示动态演示 5、福利&#xff1a;工程源码获取 紫光同创FPGA图像视频采集系统&am…

[每周一更]-(第64期):Dockerfile构造php定制化镜像

利用php官网镜像php:7.3-fpm&#xff0c;会存在部分插件缺失的情况&#xff0c;自行搭建可适用业务的镜像&#xff0c;才是真理 Dockerhub 上 PHP 官方基础镜像主要分为三个分支&#xff1a; cli: 没有开启 CGI 也就是说不能运行fpm。只可以运行命令行。fpm: 开启了CGI&#x…

Docker从认识到实践再到底层原理(九)|Docker Compose 容器编排

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

libtorch之tensor的使用

1. tensor的创建 tensor的创建有三种常用的形式&#xff0c;如下所示 ones创建一个指定维度&#xff0c;数据全为1的tensor. 例子中的维度是2维&#xff0c;5行3列。 torch::Tensor t torch::ones({5,3}); zeros创建一个指定维度&#xff0c;数据全为0的tensor&#xff0c;例子…