| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C语言】笔记 day01 -> 正文阅读 |
|
[C++知识库]【C语言】笔记 day01 |
C语言笔记P02_第一个程序编译型:c语言 ——》汇编 ——》机器语言 ——》CPU执行 解释型:java ——》字节码 ——》解释器 ——》CPU执行
linux环境下
windows环境下
P03_打印具体指的是输出
常见的转义字符 举例说明
P04_变量确定目标并提供存放的空间 命名规则:
关键字
数据类型
声明变量语法
举例说明
P05_常量和宏定义变量 常量:
定义符号常量 宏定义
示例
标识符:和关键字命名规则一样,不能使用关键字来命名标识符。 操作系统读取到字符串是如何具体判断要给其多少空间来存储?
P06_数据类型数据类型
sizeof运算符 用于获取数据类型或表达式的长度 sizeof(变量或对象),可以不加括号,空格隔开。如sizeof(a)或sizeof a sizeof(类型),如sizeof(int) signed和unsigned类型限定符 限定char类型和任何整数类型的取值范围
[signed] short [int] unsigned short [int] [signed] int unsigned int [signed] long [int] unsigned long [int] [signed] long long [int] unsigned long long [int] 示例
P07_取值范围比特位
字节
1Byte=8bit、1个字节等于8比特 1字节最大:二进制11111111 十进制255 十六进制FF n个连续的1等于2的n次方减一
符号位 存放signed类型的存储单元中,左边第一位表示符号位。 如果该位为0表示该整数是一个正数; 如果该位为1,表示该整数是一个负数。 补码 一个32位的整数变量,除去左边第一个符号位,剩下的表示值得只有31个比特位 事实上计算机是用补码的形式来存放整数的值。 正数的补码是该数的二进制形式 负数的补码: (1)先取得该数的绝对值的二进制形式 -7 绝对值7的二进制10000111 (2)将第一步的值按位取反 11111000 (3)最后将第二步的值加1 11111001 补码的最大值127最小值-128 01111111 127 … 00000001 1 00000000 0 11111111 -1 11111110 -2 10000000 -128 基本数据类型的取值范围 P08_字符和字符串字符类型事实上是一个特殊的整数类型 字符类型事实上是一个特殊的整型,因此它也有取值范围,signed char 的取值范围是 -128 ~ 127;unsigned char 的取值范围是 0 ~ 255。 字符类型与普通整数类型的不同之处 C 标准规定普通整数类型默认使用 signed 修饰符,但没有规定 char 的默认修饰符。因此,使用 signed 或 unsigned 修饰符,是由编译系统自行决定。 存放在字符类型中的变量,都可以被解释为 ASCII 字符表中的对应字符 ASCII 字符表 -> 传送门 标准 ASCII 字符表使用7位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符。 其中,ASCII 字符表上的数字 0 ~ 31 以及 127(共 33 个)分配给了控制字符,用于控制像打印机等一些外围设备。这些是看不到的。数字 32 ~ 126 分配给了能在键盘上找到的字符,这些是所见即所得的。 字符串 C 语言没有专门为存储字符串设计一个单独的类型,因为没必要。我们之前已经说过,字符串事实上就是一串字符。所以只需要在内存中找一块空间,然后存放一串字符类型的变量即可。 声明字符串的语法: char 变量名[数量]; 对其进行赋值,事实上就是对这一块空间里边的每一个字符变量进行赋值。我们通过索引号来获得每个字符变量的空间。 变量名[索引号] = 字符; 比如:
当然,我们可以把声明和定义写在一块,语法是这样的:
其实,中括号([])里边的数量咱可以不写,编译器会自动帮你计算的。
事实上可以直接在大括号写上字符串常量,字符串常量用双引号括起来,还记得吧:
使用字符串常量有个好处,那就是你不必亲自在末尾添加 ‘\0’,它会自动帮你加上。 最后,如果使用字符串常量的话,这个大括号也是可以省掉的:
P09_算术运算符1. 算术运算符 C 语言通过提供大量的运算符来支持我们对数据进行处理,前边我们将一个值存放到变量中,使用的是赋值运算符,就是等于号(=),上节课对字符串中的某个字符进行索引,使用方括号([])作为下标运算符实现。 这一节我们谈的是 C 语言中最常用的运算符——算数运算符。 这里有几点要跟大家说一下:
2. 何谓“目”? 大家可能看到有些运算符后边写双目,有些写单目,那么什么是目呢? 我们把被运算符作用的运算对象称之为操作数,比如 1 + 2,那么 1 和 2 就是被加法运算符(+)作用的两个操作数。我们说一个运算符是双目运算符还是单目运算符,就是看它有多少个操作数。 3. 表达式 用运算符和括号将操作数连接起来的式子,我们称之为表达式。
4. 运算符的优先级和结合性 请参考:https://fishc.com.cn/thread-67664-1-1.html 5. 类型转换 当一个运算符的几个操作数类型不同时,编译器需要将它们转换为共同的某种数据类型,才能进行运算。 通常情况下,编译器会将占用坑位比较小的操作数,先转换为与坑位较大的操作数的相同类型,然后再进行运算。这样做的目的就是为了确保计算的精确度。 除了编译器帮你自动转换不同类型的操作数之外,C 语言还允许你强制转换操作数的数据类型。做法就是在操作数的前边用小括号将目标数据类型括起来。 P10_关系运算符和逻辑运算符1. 关系运算符 在 C 语言中,使用关系运算符来比较两个数的大小关系。 关系运算符都是双目运算符,其结合性均为左到右。另外,关系运算符的优先级低于算术运算符,高于赋值运算符。 2. 关系表达式 用关系运算符将两边的变量、数据或表达式连接起来,称之为关系表达式:
关系表达式得到的值是一个逻辑值,即判断结果为“真”或“假”,如果结果为“真”,关系表达式的值为 1,如果为“假”,关系表达式的值则为 0。 3. 逻辑运算符 C 语言总共提供了三种逻辑运算符: 4. 逻辑表达式 用逻辑运算符将两边的变量、数据或表达式连接起来,称之为逻辑表达式:
注:关系表达式和逻辑表达式得到的值都是一个逻辑值,也就是表示真的 1 和表示假的 0。但是用于判断一个值是否为真时,以 0 表示假,以任何非 0 的数表示真。一个是编译系统告诉我们的结果,一个是我们让编译系统去判断的,两者方向不同。 5. 短路求值 短路求值又称最小化求值,是一种逻辑运算符的求值策略。只有当第一个运算数的值无法确定逻辑运算的结果时,才对第二个运算数进行求值。 C 语言对于逻辑与和逻辑或采用短路求值的方式。
结果 P11_if 语句1. 分支结构的作用就是将 C 语言的代码引入歧途 那么光有关系表达式和逻辑表达式还不足以实现分支结构,还需要学习一个新的语句——if 语句。 if 语句的实现有好几种形式,我们逐一给大家介绍一下。 第一种:
第一种是最简单的,if 后边小括号内填写返回逻辑值的表达式,当然你可以直接填入一个逻辑值,当你填入这个值为非 0 的时候,编译系统就会认为这个逻辑值是真;只有当你填入 0 的时候,才被认为是假的。 第二种:
第三种:
P12_switch语句和分支嵌套1. 处理多分支结构,可以考虑使用语法更简便的 switch 语句
2. 使用 break 语句跳出 switch 语句中的 case 和 default 事实上都是“标签”,用来标志一个位置而已。当 switch 跳到某个位置之后,就会一直往下执行,所以我们这里还需要配合一个 break 语句,让代码在适当的位置跳出 switch。 事实上 break 语句在循环中能发挥更大的作用(⊙o⊙)哦! 3. 分支结构的嵌套 如果在一个 if 语句中包含另一个 if 语句,我们就称之为 if 语句的嵌套,也叫分支结构的嵌套。 4. 悬挂 else 这个问题虽然已经为人熟知,而且也并非 C 语言所独有。但即使是有多年经验的 C 程序员,也常常在此失误过! 考虑下面的代码片段:
这段代码中编程者的本意是应该有两种主要情况,x 等于 0 以及 x 不等于 0。对于 x 等于 0 的情形,除非 y 也等于 0(此时调用 error 函数),否则程序不作任何处理;对于 x 不等于 0 的情形,程序将 x 与 y 之和赋值给 z。 然而,这段代码实际上所做的却与编程者的意图相去甚远。 原因在于 C 语言中有这样的规则,else 始终与同一对括号内最近的未匹配的 if 结合。如果我们按照上面这段程序实际上被执行的逻辑来调整代码缩进,大致是这个样子:
也就是说,如果 x 不等于 0,程序将不会做任何处理。如果要得到原来的例子中由代码缩进体现的编程者本意的结果,应该这样写:
现在,else 与第一个 if 结合,即使它离第二个 if 更近也是如此,因为此时第二个 if 已经被括号“封装”起来了。 5. 等于号带来的问题 在 C 语言中使用等号(=)作为赋值运算,使用连续两个等号(==)作为比较运算。一般而言,赋值运算相对于比较运算出现得更频繁,因此字符较少的 = 就被赋予了更常用的含义——赋值操作。此外,在 C 语言中赋值符号被作为一种操作符对待,因而重复进行赋值操作(如 a = b = c)可以很容易地书写,并且赋值操作还可以被嵌入到更大的表达式中。 但是,这种使用上的便利性可能导致一个潜在的问题:当程序员本意是在作比较运算时,却可能无意中误写成赋值运算。 比如下例,该语句本意似乎是要检查 x 是否等于 y :
而实际上是将 y 的值赋给了 x ,然后检查该值是否为零。 再来看看下面的例子:
该程序的本意是计算空白字符(空格符、制表符和换行符)的数量,但是由于程序员在比较字符 ’ ’ 和变量 c 时,误将比较运算符 == 写成了赋值运算符 = 。因为赋值运算符 = 的优先级要低于逻辑运算符 || ,因此实际上是将以下表达式的值赋给了 c :
因为空格(’ ')不等于零(空格的 ASCII 码值为32),那么无论变量 c 此前为何值,上述表达式的值都是 1。 P13_while和do while1. 循环结构 什么是循环结构?我们为什么需要它呢? 在现实生活中,如果重复很多次做同一件事情,往往会让人感觉很懊恼。 在编程中我们大可不必如此——当我们需要重复执行同一段代码很多次的时候,就可以使用循环结构来解决。 2. while 语句
while 语句的语法非常简单,只要表达式的值为真,那么就会不断执行循环体里边的语句或程序块。 执行过程画成流程图如下: 3. do…while 语句 除了通过 while 语句实现循环,C 语言中还有一个叫 do…while 的语句,也是用于实现循环。
如果我们把 while 语句比喻为一个谨慎的小伙子的话,那么 do…while 语句就是一个莽撞的汉子。 因为 while 是先判断表达式,如果表达式结果为真,才执行循环体里边的内容; 而 do…while 则相反,不管三七二十一,先执行循环体的内容再判断表达式是否为真。 注意:do…while 语句在 while 后边一定要用分号(;)表示语句结束。 4. getchar 从标准输入流中获取字符
函数概要: getchar 函数从标准输入流(stdin)中获取下一个字符。 相当于调用 getc(stdin) 函数。 函数原型:
返回值: 如果函数调用成功,返回获取的字符(用整型表示其 ASCII 码)。 返回值如果是 EOF,表示该函数调用失败:
演示:
测试结果 P14_for语句和循环嵌套1. 入口条件循环和出口条件循环 2. 循环的基本结构 通常一个循环都将涉及到三个动作:
3. for 语句 对于 while 语句,这些动作是分散在三个不同的地方。那如果能够把它们都集中到一块,那么对于后期无论是调试也好修改也罢,无疑就便捷了许多。没错,当年 C 语言作者也是跟我们想到一块去了,所以 for 语句就这么应运而生。
三个表达式用分号隔开,其中:
这样一来,for 语句将初始化计数器、循环条件判断、更新计数器三个动作组织到了在一起,那么以后如果要修改循环的次数,每次递进的跨度,或者循环结束条件,只需要在 for 语句后边的小括号内统一修改即可。 4. 灵活的 for 语句 for 语句的表达式1,表达式2和表达式3都可以按照需要进行省略(但分号不能省):
注意:如果目的不是特别明确,建议不要这么做,因为程序的可读性会因此而降低! 5. 最后提一下 C99 的新标准:C99 允许在 for 语句的表达式1中定义变量。
注意:在编译时需要加上–std=c99,否则可能会出错。
增加这个新特性的原因主要是考虑到循环通常需要一个计数器,而这个计数器出了循环就没什么用了。所以在表达式1的位置定义的变量,活动范围仅限于循环中,出了循环,它就无效了。 6. 循环嵌套 循环结构跟分支结构一样,都可以实现嵌套。 对于嵌套的循环结构,执行顺序是从内到外:先执行内层循环,再执行外层循环。 P15_break和continue语句1. break 语句 那么在循环体中,如果我们想要让程序在中途跳出循环,那么我们同样可以使用 break 语句来实现。 执行 break 语句,直接跳出循环体。 有一点需要注意的是,对于嵌套循环来说,break 语句只负责跳出所在的那一层循环,要跳出外层循环则需要再布置一个 break 语句才行。 2. continue 语句 当满足某个条件的时候,跳过本轮循环的内容,直接开始下一轮循环。这时候我们应该使用 continue 语句。 当执行到 continue 语句的时候,循环体的剩余部分将被忽略,直接进入下一轮循环。 对于嵌套循环来说,continue 语句跟 break 语句是一样的:它们都只能作用于一层循环体。 3. for 语句和 while 语句执行过程的区别 for 语句和 while 语句执行过程是有区别的,它们的区别在于出现 continue 语句时。 在 for 语句中,continue 语句跳过循环的剩余部分,直接回到调整部分。 在 while 语句中,调整部分是循环体的一部分,因此 continue 语句会把它也跳过。 P16_补充 拾遗1. 赋值运算符 赋值运算符是 C 语言中用得最多的一个运算符,我们每天都在用它。因此它的设计简便与否直接影响到了 C 语言的开发效率。语法很简单,就是将右边的值放到左边的变量里边,因为它的执行方向是自右向左。
需要注意的是赋值运算符的左边必须是一个 lvalue,变量名就是 lvalue,但常数就不是了,所以你把 5 写在赋值号的左边就会出错:
编译系统会提示类似于“error: lvalue required as left operand of assignment”的错误。 lvalue 不建立理解为“left value of the赋值运算符”,这里我写了篇文章,大家可以参考下 ->什么是 lvalue,什么是 rvalue? 2. 复合的赋值运算符 由于赋值运算符的使用度非常高,所以 C 语言的作者也想出了一些编辑的方案。 比如:
这样写太费劲,你完全可以写成:
同理还有:
3. 自增自减运算符 当我们需要对一个变量加一或减一并赋值给自己的时候,我们可以写成 i++、i— 或 ++i、–i 的形式。 它们也被称为增量减量运算符,或 ++、-- 运算符。 它们的区别是:
另外,自增、自减运算符只能作用于变量,而不能作用于常量或表示。 4. 逗号运算符 逗号表达式的语法是:表达式1,表达式2,表达式3,… ,表达式n
不过,逗号运算符在C语言的所有运算符中,是最没有地位的那个。 因为连赋值运算符的优先级都比逗号运算符要高,所以……
相当于
注意:在 C 语言中看到的逗号,不一定就都是逗号运算符,因为在有些地方,逗号仅仅是被用作分隔符而已。 比如:
这里逗号都是作为分隔符使用,而不是运算符。 5. 条件运算符 有一个操作数的运算符称为单目运算符,有两个两个操作数称为双目运算符,然而 C 语言还有唯一的一个三目运算符,它的作用是提供一种简写的方式来表示 if-else 语句。 语法:exp1 ? exp2 : exp3; exp1 是条件表达式,如果结果为真,返回 exp2,如果为假,返回 exp3。 所以:
可以直接写成:
6. goto 语句 goto 语句可以说是一个历史遗留,因为早的编程语言都留有很多汇编语言的痕迹,比如 goto 语句就是其中之一。 goto 语句的作用就是直接跳转到指定标签的位置。 语法:goto 标签; 其中标签需要被定位于某个语句的前边,比如:
重要:开发中要尽量避免使用 goto 语句。其实就连 C 语言的作者也觉得 goto 语句非常容易被滥用,并且建议一定要谨慎使用,甚至根本不用它。 但在一种情况下使用 goto 语句是情有可原的,那就是当面临要跳出多层循环的时候,使用 goto 语句要比多个 break 语句好使。 7. 注释 C 语言的注释有两种方式,一种是大家常用的,将注释写在两个连续斜杠的后边:
这样每一行注释的开头都需要有两个斜杠,有时候你可能需要写多行注释,那你可以使用 /* 注释的内容 */ 来实现:
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:54:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |