抽丝剥茧C语言(初阶 上)

24 篇文章 1 订阅
这篇博客介绍了C语言的基础知识,包括C语言的特性、第一个C语言程序的编写、数据类型如char、int等的介绍,以及变量和常量的概念。文中通过实例讲解了变量的作用域和生命周期,强调了一个程序只有一个main函数,数据类型的重要性以及常量不可更改的特性。
摘要由CSDN通过智能技术生成

C语言初阶(上)

学习C语言由浅到深,我们先来了解C语言大概是什么样子的intro

什么是C语言

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
C语言与C++、C#、Java等面向对象编程语言有所不同。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。(我这里主要用VS2022来为大家做示范)
度娘还有更详细的C语言介绍.

第一个C语言程序

别人第一个输出都是Hello world,我喜欢玩LOL,那就来个不一样的。

#include <stdio.h>
int main()
{
	printf("Welcome to League of Legends!");
	return 0;
}

程序输出是:Welcome to League of Legends!(意思是,欢迎来到英雄联盟!)

  • 我们来分析这个程序

所有C语言程序都是从 main 这个函数进入,然后从上往下依次执行,一个工程只能有一个 main 函数。
如果有多个 main 函数,就像你开车一样,你的经常走目的地明明只有一条路,某一天突然多出一条路或者是n条路,你会怀疑人生的,或许你会说你可以随便选择一条路,但是程序不会,它是会停下来的。
在这里插入图片描述
我们的编译器会给你报错,她是是一个很贴心的助手,不仅仅会帮你翻译你想对计算机表达的意思,还会纠正你的错误,相信我,以后她就是你的第二个女朋友了(开个玩笑)
让我们看看错误是什么,编译器已经给出错误位置和原因了。
在这里插入图片描述
这里显示 main 函数已经有主体,说明我上面的表达不是忽悠家人们!
那么一个工程是什么呢?
为了有效地管理这些种类繁杂、数目众多的文件,我们有理由把它们都放到一个目录(文件夹)下,并且这个目录下只存放与当前程序有关的资源。实际上 IDE 也是这么做的,它会为每一个程序都创建一个专门的目录,将用到的所有文件都集中到这个目录下,并对它们进行便捷的管理,比如重命名、删除文件、编辑文件等。
在这里插入图片描述
看,这些就是,后面带.c的叫做源文件(先认识这一种常见的)。
​这个为当前程序配备的专用文件夹,在 IDE 中也有一个专门的称呼,叫做“Project”,翻译过来就是“工程”或者“项目”。在 Visual C++ 6.0下,这叫做一个“工程”,而在 Visual Studio(就是我们的VS编译器)下,这又叫做一个“项目”,它们只是单词“Project”的不同翻译而已,实际上是一个概念。
关于#include <stdio.h>是什么,这个以后再说。

printf的那一行是什么?

printf 是一个输出函数,它的括号是什么,以后会讲(暂时先记住这个格式就好)括号里面的双引号之内的是你要输出的信息。
最后一个 ; 是这段话结束的标志,就像中文里的句号一样。

关于C语言的程序我们先认识到这里,以后大家会更详细的了解。

数据类型

char        //字符数据类型
short       //短整型
int         //整形
long        //长整型
long long   //更长的整形
float       //单精度浮点数
double      //双精度浮点数

这些是你要表示一个东西是什么什么类型的,就像现实生活中你对于某个物品的定义一样,比如,你是个人,一个人,你是人类或者长什么样子取决你的父母。
我们C语言的数据类型也一样,对于一些数据是有定义类型,由你和编译器来定义它是什么类型的数据。

每一个不同类型都有不同的大小,让我们看看他们的大小是多少

#include <stdio.h>
int main()
{
	printf("%d\n", sizeof(char));
	printf("%d\n", sizeof(short));
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(long));
	printf("%d\n", sizeof(long long));
	printf("%d\n", sizeof(float));
	printf("%d\n", sizeof(double));
	printf("%d\n", sizeof(long double));
	return 0;
}

sizeof是一个计算大小的操作符,单位是字节。%d是打印整形数据。\n是换行,也就是回车换行,这个都能看出来。printf双引号后面有个逗号,逗号后面是你要输出对应的%d,不然人家不知道你要打印哪个整形数据。

在这里插入图片描述
这就是那些数据类型的大小(32位系统下

注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。
类型的使用:

char ch = 'w';
int weight = 120;
int salary = 20000;

w是字符,当然要储存到char类型的,int是整形,也就是整数,所以20000和120都要储存到int类型的变量里。

上面对于一些基本的数据类型也都有了解释,现在不理解没关系,后面我们会说。

变量、常量

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

int age = 18;
float weight = 45.5f ;
char ch = 'w';

int 是数据类型,后面的英文意思是年龄(age),age 就是变量,有的家人们就问了,变量很麻烦啊,不背单词这部是啥也定义不出来吗?
其实并不是,我们用 age 来表达变量是因为方便看,方便理解,并不是用英语单词才能表达,可以自定义。
变量,顾名思义,可以变的量,也就是说这个变量的值可以改变。
= 的作用,这个是赋值,左边是你要赋值的对象,右边是你要赋值的那个值。
定义的过程中也是初始化,因为如果没有赋值,电脑就会分配随机值。
但是自定义也是有规矩的,只能由字母,数字,下划线组成,数字不能打头阵(不能是第一个),变量也不可以重定义!(这里并没有演示)
在这里插入图片描述
这就是例子。

变量分类

  • 局部变量
  • 全局变量
    我用下面这段代码做一个示范
#include <stdio.h>
int global = 2019;//全局变量
int main()
{
    int local = 2018;//局部变量
    //下面定义的global会不会有问题?
    int global = 2020;//局部变量
    printf("global = %d\n", global);
    return 0;
}

在我们这里可以看到,在 main 函数外部有一个变量 global ,这就是全局变量,而main函数内部也有一个 global 的变量,这个是局部变量,在打印的时候我们不知道,应该打印哪一个值出来,结果如下。
在这里插入图片描述
从这个可以发现,其实代码本身并没有问题,可以让局部变量和全部变量名字相同,并且局部变量优先。

变量的使用
变量是可以变化的值,让我们看下面的代码。

#include <stdio.h>
int main()
{
    int num1 = 0;
   int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0; }

上面 num1,num2 sum 已经明确初始化是0了.
scanf这个函数是什么?是输入函数,双括号里面的%d %d和后面&num1 &num2是要输入的整形对象。(先了解一下)
在这里插入图片描述

看图我们知道,输入了两个值,10和20;结果sum=30;
也就是说num1 num2 sum确实可以改变自身的值

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

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程。
    生命周期
    变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
  3. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  4. 全局变量的生命周期是:整个程序的生命周期。

例如

#include <stdio.h>
void add()
{
    printf("%d",a);
}
int main()
{
    int a=10;
    add();
    printf("%d",a);
    return 0;
}

来看这段代码,局部变量 a 在 main 函数内,因为程序会从上往下走,add()是个函数,只要记住会进入这个函数执行命令就可以了。
结果如下
在这里插入图片描述
这里可以得出一个结论, a 这个变量的生命周期只在 main 函数内有效,main 函数内也被称为作用域。
而全局变量生命周期是整个程序,这里就不演示了。

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

  1. 字面常量
  2. const 修饰的常变量
  3. #define 定义的标识符常量
  4. 枚举常量
    什么是常量?无法被改变的值。
    比如,一只猫不可能变成一只狗对吧?10这个数字能变成11吗?我不是在说可以加上1等于11,而是说10这个数字不经过任何操作让他本身变成11的含义,10就是10,他自己永远表达不了11的意思。
    同理,常量就是无法被改变的值。
    例如:
#include <stdio.h>
//举例
enum Sex
{
	MALE,
	FEMALE,
	SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
	//字面常量演示
	3.14;//字面常量
	1000;//字面常量

	//const 修饰的常变量
	const float pai = 3.14f; //这里的pai是const修饰的常变量
	pai = 5.14;//是不能直接修改的!

	//#define的标识符常量 演示
    #define MAX 100
	printf("max = %d\n", MAX);

	//枚举常量演示
	printf("%d\n", MALE);
	printf("%d\n", FEMALE);
	printf("%d\n", SECRET);
	return 0;
}

上面的数字什么的就是字面常量。
const修饰过的变量也不能被改变,这段代码在编译器里会出现问题。
在这里插入图片描述
看到编译器会在pai这个变量下面有红线,这是编译器给你的报错了,显示这个值无法被修改,也就是说 const 修饰过的变量是无法被修改的。
注:
上面例子上的 pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。
枚举常量在下面打印了结果为:

0
1
2

//注:枚举常量的默认是从0开始,依次向下递增1的.

最后的#define 定义的标识符常量

#define 后面的MAX相当于变成了100。
也就是说在这个程序里,MAX就是100这个常量了。
printf(“max = %d\n”, MAX);
运行结果是 100

我们的初始C语言(上)到i这里就完结了,今天主要了解了以下内容。
什么是C语言
第一个C语言程序
数据类型
变量、常量

本章重点是:
1.一个程序只能由一个main函数。
2.数据类型很重要,必须声明这个变量是什么类型,不然就是现实生活中的“不明生物”!
3.变量可以被修改,常量是不可以被修改的。

本章到此为止,请路过的大佬们指正错误!谢谢!

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ℳℓ白ℳℓ夜ℳℓ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值