C语言笔记第01章:初识C语言(一)

简介: C语言笔记第01章:初识C语言

第01章:初识C语言

📍 来自:中南林业科技大学软件协会学术部:谢添

⏲ 时间:2022 - 10 - 05

🏠 官网:https://www.csuftsap.cn/

✏️ 本章所有提供代码均已测试,读万卷书不如行万里路,一定要把代码都自己敲一遍并测试

💬 一件事,你若不想做,你会?找出千万个理由去拒绝,你若想做,你会绞尽脑汁的去想办法,做与不做,不在于你行不行,而在于你要不要。

1.什么是C语言

  • C语言是一门通用的计算机编程语言,广泛应用于底层开发
  • 尽管C语言提供了许多低级处理的功能,却仍然保持着良好的跨平台特性,一个标准规格写出的C语言程序可以在许多电脑平台上进行编译。
  • C语言是一门纯面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

2.编译器选择

2.1 Visual Studio(VS)介绍

是一套非常完备的工具和服务,可帮助您为 Microsoft 平台和其他平台创建各种各样的应用程序。Visual Studio 还可将您所有的项目、团队和利益干系人联系在一起。现在您的团队可以从任何位置以虚拟方式进行更为敏捷的合作,无论他们采用何种开发工具。

可以通过强大的集成开发环境构建面向 Windows、Android、iOS 以及 Web 的出色应用。使用任何 IDE 或编辑器在云中进行版本控制、敏捷、持续交付、应用程序分析协作。

适用于所有操作系统的编辑器使用可在 Windows、OS X 或 Linux 上运行的免费代码编辑器构建和调试现代 Web 和云应用程序。

2.2 为什么选择VS

在学习C语言的过程中,编译环境和编辑器肯定是必不可少的。比如大家常见的VC 6.0,Dev,g++等等,但是目前市场上使用最广泛,相对成熟的集成开发环境依旧是Visual Studio。

只是很多高校在教学实践中普遍采用VC或者Dev,因为文件小,安装便捷嘛!不过相对而言,这些软件对初学者往往不够友好,包括界面、提示符、文件系统等等。

而与之对应的,VS凭借它出色的界面、友好的操作方式和完备的体系得到很多开发者的青睐,所以也是奉劝一些仍在坚持学校的软件的学弟学妹入坑VS,只有四个字送给你们:绝对不亏!

2.3 下载与安装教程

👇 必学必会

🏠 VS官网:https://visualstudio.microsoft.com/zh-hans/vs/

🏠 推荐视频教程:https://www.bilibili.com/video/BV11R4y1s7jz/?spm_id_from=333.337.search-card.all.click

3.第一个C语言程序与基本结构

Hello World是一个最著名的程序。对每一位程序员来说,这个程序几乎是每一门编程语言中的第一个示例程序。实际上,这个程序的功能只是告知计算机显示Hello World这句话。传统意义上,程序员一般用这个程序测试一种新的系统或编程语言。对程序员来说,看到这两个单词显示在电脑屏幕上,往往表示他们的代码已经能够编译、装载以及正常运行了,这个输出结果就是为了证明这一点。这个测试程序在一定程度上具有特殊的象征意义。在过去的几十年间,这个程序已经渐渐地演化成为了一个久负盛名的传统。几乎所有的程序员,无论是在你之前,或在你之后,当第一次实现与计算机成功沟通之后,在某种程度上,他们的肾上腺素就会急剧上升(激动不已)。

#include<stdio.h>
int main() {
  printf("Hello World:你好,软件协会");
  return 0;
}

3.1 具体结构

一个C程序就是由若干头文件和函数组成。

  • #include <stdio.h>就是一条预处理命令, 它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。
  • 函数就是实现代码逻辑的一个小的单元。

3.2 主函数

一个C程序有且只有一个主函数,即main函数。

  • C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。
  • 而main前面的int就是主函数的返回值类型
  • printf()格式输出函数,这里就记住它的功能就是在屏幕上输出指定的信息
  • return是函数的返回值,根据函数类型的不同,返回的值也是不同的。
  • \n 是转义字符中的换行符。
  • C程序一定是从主函数开始执行的

3.3 规范

  • 一个说明或一个语句占一行,例如:包含头文件、一个可执行语句结束都需要换行。
  • 函数体内的语句要有明显缩进,通常以按一下Tab键为一个缩进。
  • 括号要成对写,如果需要删除的话也要成对删除。
  • 一句可执行语句结束的时候末尾需要有分号
  • 代码中所有符号均为英文半角符号

4.0.前言

针对不同的数据,采取不同的存储方式和进行不同的处理。随着处理对象的复杂化,数据类型也要变得更丰富。数据类型的丰富程度直接反映了程序设计语言处理数据的能力。

C语言很重要的一个特点是它的数据类型十分丰富。因此,C语言程序数据处理功能很强。C语言丰富的数据类型可归纳如下:

我们现在要讲的呢,只是对数据类型的简单了解,我们后面的章节再详细讲解各种数据类型。当然,关于基本数据类型还有很多值得探究的地方,也会放在后面补充,毕竟一口气吃不了那么多,就像你能一下子追到你的男神或女神 💓 吗?肯定是要有个循序渐进,循循善诱的过程嘛💫

4.1 常见基本数据类型

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

💬 C语言没有字符串类型哦,但是我们可以使用字符数组,或者用指针指向字符串,现在不理解没关系,我们先在这稍微提一嘴

以上类型都有两种子类型:有符号数(signed XXX)无符号数(unsigned XXX)。二者最大的区别:表示的值的范围大小不同,signed > unsigned。

4.2 数据类型字节大小与取值范围

在讲这个前,我们先来简单聊聊字节:

计算机最小的存储单位: bit 比特位。一个比特位存放一个二进制数字 0 / 1

再大一点的单位是 byte 字节。一个字币=8个比特位。

它们之间的换算规则是这样的:

  • 1 KB = 1024 byte ( byte 也可简写成 B )
  • 1 MB =1024 KB
  • 1 GB = 1024 MB
  • 1 TB = 1024 GB

那字节大小如何确定取值范围的呢?

一个字节 = 8 bit
1 bit 可以存放 0 或 1
那么 1 bit 可以表示两个数:0 1
那么 2 bit 可以表示 2 * 2 即 4 个数:00 01 10 11 分别代表0,1,2,3
这样算下来,8 bit 可以存放2的8次方即256个数
那unsigned short类型占2字节,一共16 bit,不就可以表示65536个数吗
从 0 ~ 65536 不就是65535个数吗 

这里其实还涉及到进制,如果你想了解进制,可以在软协官网下载资源《进制,原码反码补码,位运算》,帮你打通进制从而理解取值范围

也可以查看链接(CSDN上发表):https://blog.csdn.net/qq_62982856/article/details/126052638?spm=1001.2014.3001.5501

数据类型 字节大小 取值范围
short 2字节 -32768~32767
unsigned short 2字节 0~65535
int 4字节 -2147483648~2147483647
unsigned int 4字节 0~4294967295
long 4字节 -2147483648~2147483647
unsigned long 4字节 0~4294967295
long long 8字节 9,223,372,036,854,775,808~9,223,372,036,854,775,807
unsigned long long 8字节 0~18,446,744,073,709,551,616
float 4字节 -3.4*10^38~3.4*10^38
double 8字节 -1.7*10^308~1.7*10^308
long double 8字节 -1.7*10^308~1.7*10^308

unsigned 是无符号的意思,我们以 short 和 short int 来说明,short 就是有符号数,unsigned short 是 无符号数,但它们占的字节是相同的,则能表示的数的个数也是一致的,short 从 -32768~32767 一共 65536 个整数,unsigned 从 0 ~ 65535 不也是 65536 个整数吗

4.3 测试各种数据类型所占字节大小

计算字节大小,我们可以使用 sizeof(数据类型) 这个单目运算符(sizeof(数据类型)不是函数哦,C/C++语言编译器在预编译阶段的时候就已经处理完了sizeof的问题,也就是说sizeof类似于宏定义),它的返回值是括号内的数据类型的字节大小,在这里先简单使用一下,后面章节会详讲。不多说,上代码。

#include<stdio.h>
int main()
{
  //sizeof:计算()内数据所占内存空间大小,单位是字节。
  printf("char = %d\n", sizeof(char)); //计算字符型字节大小
  printf("short = %d\n", sizeof(short)); //计算短整型
  printf("int = %d\n", sizeof(int)); //计算整型
  printf("long = %d\n", sizeof(long)); //计算长整型
  printf("long long = %d\n", sizeof(long long)); //计算更长整型
  printf("float = %d\n", sizeof(float)); //计算单精度浮点型
  printf("double = %d\n", sizeof(double)); //计算双精度浮点型
  return 0;
}

运行来看看结果吧:

❗️ 提一个问题:

📍 问题出在sizeof上,它返回的是一个64位 (8 bytes)的无符号整型

再看看我们使用的占位符 %d ,在格式化输入输出中代表int(4bytes),%ld代表long int(>=4bytes), %lld代表long long int (8 bytes);

那你应该很清楚应该怎么改才能消除警告了吧,👇 修改后的代码

#include<stdio.h>
int main()
{
  //sizeof:计算()内数据所占内存空间大小,单位是字节。
  //将 %d 修改为 %lld
  printf("char = %lld\n", sizeof(char)); //计算字符型字节大小
  printf("short = %lld\n", sizeof(short)); //计算短整型
  printf("int = %lld\n", sizeof(int)); //计算整型
  printf("long = %lld\n", sizeof(long)); //计算长整型
  printf("long long = %lld\n", sizeof(long long)); //计算更长整型
  printf("float = %lld\n", sizeof(float)); //计算单精度浮点型
  printf("double = %lld\n", sizeof(double)); //计算双精度浮点型
  return 0;
}

4.4 测试数据类型的取值范围

我们以 short 类型为例,在 4.2 提到它的取值范围为 -32768~32767 ,那就说明最大值是 32767,不能取 32768

📝 上代码测试:

#include<stdio.h>
int main()
{
  short temp1 = 32767;
  short temp2 = 32768;
  printf("temp1 = %d\n", temp1);
  printf("temp2 = %d\n", temp2);
}

看下输出结果吧,可以看到temp2的值是超过了 short 的取值范围,因此输出temp2显示的不是我们定义的32768,而是负值

至于为什么是负值,这里不详说,涉及到底层的二进制运算,以后有机会单独拉出来解释。

5.变量、常量

生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型,张若昀对唐艺昕的爱)

有些值是可变的(比如:年龄,体重,薪资,渣男的爱)。

不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。

5.1 定义变量的方法

int age = 150;
double weight = 45.5;
char ch = 'w';
//我们也可以进行修改
age = 520;
weight = 13.14;

5.2 变量的分类

5.2.1 介绍

1️⃣ 局部变量

  1. 也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内.离开该函数后再使用这种变量是非法的。
  2. 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系
  3. 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元。互不干扰,也不会发生混淆。
  4. 在复合语句中也可定义变量,其作用域只在复合语句范围内。

2️⃣ 全局变量

全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件,其作用域是整个源程序。

3️⃣ 注意事项

如果同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。这就是我们以后会常提起的**就近原则**

5.2.2 实例演示

#include <stdio.h>
int global = 2022;//全局变量,定义在main函数外部
int main()
{
    int local = 2018;//局部变量
    //下面定义的global会不会有问题?
    int global = 2020;//局部变量
    printf("global = %d\n", global);
    return 0; 
}

这是不会有问题的,是允许全局变量与局部变量同名的,但如果在main函数中显示,显示的是2022还是2020呢?

根据就近原则,printf(“global = %d\n”, global);也在main函数当中,说明局部的变量离这条语句更近,因此显示的是 2020

5.3 变量的作用域和生命周期

1️⃣ 作用域

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

  1. 局部变量的作用域是变量所在的局部范围。比如上述例子中的 local ,它是在main函数当中,因此它的作用域就是main函数内
  2. 全局变量的作用域是整个工程。比如上述例子中main函数外面的 global,它的作用域是所在的这个源文件。

2️⃣ 生命周期

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

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期是:整个程序的生命周期。

现在你或许还不是很太理解,毕竟第一次接触,但等我们讲到函数还会继续讨论变量的作用域和生命周期。❤️

5.4 常量

C语言中的常量和变量的定义的形式有所差异。

C语言中的常量分为以下以下几种:

  1. 字面常量
  2. const 修饰的常变量
  3. #define 定义的标识符常量
  4. 枚举常量

这里我们先提 字面常量const修饰的常变量,后面两个以后再说。

5.4.1 字面常量

100;//字面常量
  2.5;//字面常量
  1;//字面常量
#include<stdio.h>
int main()
{
    //这个 100 就是字面常量,而a是变量
    //我们相当于是把 字面常量100 赋值给了 变量a
  int a = 100;
    //我们可以对 变量a 进行修改
    //变量a 原来的值是 100 ,现在我们 将字面常量 520 赋值给了 变量a
    a = 520;
    return 0;
}


相关文章
|
6月前
|
存储 人工智能 算法
【C语言】自学终极笔记
【C语言】自学终极笔记
107 0
|
3月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
3月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
5月前
|
C语言
|
5月前
|
C语言
|
6月前
|
C语言
C语言(指针详解)重点笔记:指针易错点,都是精华
C语言(指针详解)重点笔记:指针易错点,都是精华
75 0
|
存储 编译器 C语言
C语言笔记第03章:数组(四)
C语言笔记第03章:数组
96 0
|
编译器 C语言 索引
C语言笔记第03章:数组(一)
C语言笔记第03章:数组
104 0
|
6月前
|
NoSQL Redis C语言
|
C语言
C语言初阶 牛客网刷题笔记(将持续更新..)
C语言初阶 牛客网刷题笔记(将持续更新..)
C语言初阶 牛客网刷题笔记(将持续更新..)