从C语言开始
1. 什么是语言,什么是C语言
语言就广义而言,是采用一套具有共同处理规则来进行表达的沟通指令,指令会以视觉、声音或者触觉方式来传递。严格来说,语言是指人类沟通所使用的指令-自然语言。
计算机语言是一种特殊的语言。因为它是用于人与计算机之间传递信息的,所以人和计算机都能“读懂”。具体地说,一方面,人们要使用计算机语言指挥计算机完成某种特作,就必须对这种工作进行特殊描述,所以它能够被人们读懂。另一方面,计算机必须按计算机语言描述来行动,从而完成其描述的特定工作,所以能够被计算机“读懂”。
软件:一系列按照特定顺序组织的计算机数据和指令的集合。
交互方式:
- 自然交互界面:声音控制,触摸屏手势识别
- 图形化界面:这种方式简单直观,使用者易于接受,容易上手操作。
- 命令行方式:需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记录住一些命令。
C语言是一门面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%-20%。因此,C语言可以编写系统软件。
2. 计算机基础知识
计算机指令执行流程
计算机结构
二进制
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。
十进制 0 1 2 3 4 5 6 7 8 9 二进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。
位(Bit):度量数据的最小单位
字节(Byte):最常用的基本单位,一个字节有8位
K 字节 1K = 1024 byte M(兆)字节 1M = 1024 K G(吉) 字节 1G = 1024 M T(太)字节 1T = 1024 G
十进制 M=10, 数字集 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 二进制 M=2 , 数字集 0, 1 八进制 M=8 , 数字集 0, 1, 2, 3, 4, 5, 6, 7 十六进制 M=16 ,数字集 0, … , 9, A, B, C, D, E, F
机器指令
机器指令(Machine Instructions)是CPU能直接识别并执行的指令,它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。
程序是为完成一项特定任务而用某种语言编写的一组指令序列。
编译器
编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)
语言的层次
不同语言 表达式 高级语言 A+B 汇编 Add AX,BX 机器语言 0000 0000 0000 1010
主流语言进化史
机器语言→汇编→C→C++→C#,Java,Python,VB
C语言特点
优点 缺点 代码量小 编写代码实现周期长 执行速度快 过于自由,经验不足易出错 功能强大 对平台库依赖较多 编程自由 危险性高
3. 为什么要学习C语言
C语言是有史以来最为重要的,最基础的编程语言
- 绝对重要的基石语言,Unix,Linux,Windows,JAVA,C++,C#底层实现都靠C
- 学习数据结构,C++的基础
- 可以说,只要是运行的系统,都可以用C写
五大编程语言统治地位加强
Python、Java、C 和 C++,C# 是 TIOBE 编程语言榜的 Top 5 已经有很长一段时间了,并且远远领先于其它语言。
C语言适用的领域
- C语言的应用极其广泛,从网站后台,到底层操作系统,从多媒体应用到大型网络游戏,均可使用C语言来开发。
- C语言可以写网站后台程序
- C语言可以写出绚丽的GUI界面
- C语言可以专门针对某个主题写出功能强大的程序库,然后供其他程序方便使用,从而让其他程序节省开发时间。
- C语言可以写出大型游戏的引擎。
- C语言可以写出另一个语言来。
- C语言可以写操作系统和驱动程序,并且只能用C语言编写,Linux操作系统的全部源代码都可以从网上得到,要深入了解操作系统的运行秘密,懂C语言,就能看懂。
- 任何设备只要配置了微处理器,就都支持C语言。从家用电器到手机,都是由C语言技术来推动的。
- ARM嵌入方式
- 单片机
- Arduino
学习C语言的理由
- 当掌握了C语言后,再去学习其他面向过程的语言,最多一个星期就能学会。
- C语言已经存在很多年了,它有广泛的使用团体并且有大量的现成代码可以利用。这就使大家能在过去程序的基础上,快速和高效的实现自己的程序。
C语言的精髓
C语言仅有32个关键字,9种控制语句,却能完成无数的功能。
数据类型关键字
a. 基本数据类型(5个)
- void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果。
- char:字符型类型数据,属于整型数据的一种。
- int:整型数据,通常为编译器指定的机器字长。
- float:单精度浮点型数据,属于浮点数据的一种。
- double:双精度浮点型数据,属于浮点数据的一种。
b. 类型修饰关键字(4个)
- short:修饰int,短整型数据,可省略被修饰的int。
- long:修饰int,长整形数据,可省略被修饰的int。
- signed:修饰整型数据,有符号数据类型。
- unsigned:修饰整型数据,无符号数据类型。
c. 复杂类型关键字(5个)
- struct:结构体声明。
- union:共用体声明。
- enum:枚举声明。
- typedef:声明类型别名。
- sizeof:得到特定类型或特定类型变量的大小。
d. 存储级别关键字(6个)
- auto:指定为自动变量,由编译器自动分配及释放,通常在栈上分配。
- static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。
- register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。
- extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的对象的一个“引用“
- const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)。
- volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值。
流程控制关键字
a. 跳转结构(4个)
- return:用在函数体中,返回特定值(或者是void值,即不返回值)。
- continue:结束当前循环,开始下一轮循环。
- break:跳出当前循环或switch结构。
- goto:无条件跳转语句。
b. 分支结构(5个)
- if:条件语句。
- else:条件语句否定分支(与if连用)。
- switch:开关语句(多重分支语句)。
- case:开关语句中的分支标记。
- default:开关语句中的“其他”分治,可选。
c. 循环结构(3个)
- for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件。
- do:do循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件。
- while:while循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件。
- 以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。
34种运算符
- 算术运算符:+ - * / % ++ --
- 关系运算符:< <= == > >= !=
- 逻辑运算符:! && ||
- 位运算符 :<< >> ~ | ^ &
- 赋值运算符:= 及其扩展
- 条件运算符:?:
- 逗号运算符:,
- 指针运算符:* &
- 求字节数 :sizeof
- 强制类型转换:(类型)
- 分量运算符:. ->
- 下标运算符:[]
- 其它 :( ) -
4. 怎么学好C语言
-
方向和目标
首先要确定为什么要学习计算机编程语言,为考试?为工作?为兴趣?
如果是为兴趣学习,兴趣很容易转易,热情最容易消逝,兴趣一开始比较浓,如何无功利长期坚持就比较难,所以在学习兴趣中不段找到成就感就非常重要。
如果是为工作,换一个行业或方向而学习,最有效的方式还是培训。为换一个工作而学习,动力和压力应该是比较大的。也容易在一开始就当作一个技能,工作的技能来学习和操练。
为提升工作效率而学习,把编程的思维,工具和方法,应用到不同的工作中,也是一个很大的学习动力,和能够带来成就感的地方。只是学习的时间相对要少很多。
-
学习中最难的是什么?
学习编程开发中最常见的问题:
1、编程环境不会搭建
编程学习的第一步就是搞定环境,包括开发环境,开发工具,运行环境,服务器等等。 要学会解决环境中遇到各种问题。2、知识点太多,前面学后面忘
如学习C/C++开发,涉及的内容和知识就太多,对初学者来说首先是程序逻辑,然后面对的可能就是C语言三大巨头(指针,数组,数据结构)等,C++的面向对象编程,STL标准模板库,还有图形化编程等, 太多知识我们需要学习。 如果是自学的话,你可能才到嵌套循环就感觉到困难了,可能是到面向对象感觉到难以理解,要放弃了。 所以一定要有长期作战的思想,有打硬仗的准备。3、代码太多,不知道从哪里看起
刚开始代码少还容易,过不了多久,看网上的教程也好,下载的代码也好,拿到的代码很多了,不知道从哪里看起,不知道程序入口在哪里,不知道怎么去运行。 这个原因,就是练习太少,调试太少。很多同学在学习编程时,当作知识来学习,这是一个误区,应该当作技能来学习,技能就需要反复练习,训练。4、完全对着教程做的,就是运行不了
明明是一模一样的代码,视频中能运行出来,你的就是不行。原因还是环境和配置的问题。 当然也有不细心的错误,如拼写错误你没有发现。5、错误解决不了,想放弃
这是自学最大的障碍。编程的学习,不像英语(外语)等语言类的学习,可以通过反复重复得到提高,甚至可以跳过一两课,都没有关系。 如果长时间被卡壳,错误得不到解决,百度怎么查也不行,或者照着网上的还是解决不了,就是分分钟想放弃。 其实,这就是老师的重要性。有老师在旁边,可能就是稍微点拨一下,这个问题就过去,你也能马上获得到经验。当然现在还可以利用网络上的社群,网上的老师,远程协助,来解决你学习过程中遇到的那些稀奇古怪的问题。6、学了很久了,感觉还没有入门
练习不够,项目不够。 这是典型的把编程语言的学习,当作知识点来学习。做项目,就是要把所有知识点一个一个串起来,对你所学习的知识点,技能点都是一个应用的检验。7、技术更新太快,感觉又要重头开始学
还是没有把一门语言,一个技能吃透。掌握了一种语言后,对新的语言,框架掌握起来都不是一件难事。 -
编程学习如何突破?
语言方向,如果你现在开始学习,不妨选择学习起来更容易上手的,而且功能强大。
coding coding coding
就是多敲代码,多练习
要有实战的项目
项目也是增加你代码量最有效的手段
-
掌握一门编程语言的意义
- 编程学起来很苦,但也并不是完全一无是处。客观地看,自学编程还是有很多好处。
- 掌握一门技术技能
- 培养学习能力
- 改变思维方式
- 学会快速迭代,不断迭代,完善改进产品的思路
- 享受沉浸专注的快乐
- 编程的学习不能靠碎片化的时间,一定需要大块的时间安排。编程有助于提升你的专注度。
- 享受创造的快乐
- 会编程的人不会感觉枯燥和孤独,他会创造一个世界出来。
- 锻炼毅力和独处能力
- 提高解决问题能力
- 提高面对挫折失败的承受能力
-
常用网站
GitHub: Let’s build from here · GitHub
百度一下,你就知道 (baidu.com)
5. 常用开发环境IDE
-
Visual Studio 2022
Visual Studio: IDE and Code Editor for Software Developers and Teams (microsoft.com)
下载运行VisualStudioSteup.exe,点击是
点击继续
可能需要等一会时间
进入安装界面
现阶段学习使用勾选以下就可以了。
点击安装
此时需要联网安装,安装时间根据具体网速条件。
重启系统,安装成功了!
点击启动
可以用Microsoft登录,或是以后再说。
-
Code Blocks
Binary releases - Code::Blocks (codeblocks.org)
-
QT
Embedded Software Development Tools & Cross Platform IDE | Qt Creator
-
Xcode
-
VI
6. HelloWorld?
用Visual Studio
下一步
右键新建
#include<stdio.h> void main() { printf("hello world!"); getchar();//等待 }
使用Code:Blocks
下载免安装版本,
新建项目
默认会创建一个main.c的文件
这里需要注意编译器找不到,
Settings→Compiler→Toolchain executables
7. 其它系统下
Debain下,安装c编译器,切换管理员
apt install build-essential
安装图形界面
sudo apt install xorg
sudo apt install xfce4
修改远程端口
sudo sed -i 's/port=3389/port=3390/g' /etc/xrdp/xrdp.ini
sudo echo xfce4-session>~/.xsession
sudo service xrdp restart
通过远程桌面进系统
安装gedit
sudo apt install gedit
sudo apt install wget
编写第一个c语言程序
注意后缀名.c结尾
gcc -o c01 c01.c
通过gcc编译
运行编译后程序
./c01
Qt安装
下载连接
Index of /qt/development_releases/online_installers/4.4/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
新版本安装基本都是在线安装,需要注册账号