[编程神域 C语言浮游塔 第①期] Hello C language world
建议新人收藏使用!
前言
个人介绍:
大家好,欢迎来到C语言浮游塔,这里是设计人茅场晶彦(误)专栏作者渡枫,人称枫子哥。
初衷:
因为自己很多软件相关的朋友在大一初学C语言的就直呼“难上了天”,果断选择了“开摆”,随着一个学年的过去,我这些朋友中有不少挂科甚至重修C语言。
作为班上的C语言及数据结构的课代表,自己本身的C语言也学的蛮不错的,在闲暇时候,我也会写写小文章或者开直播给这些同学补补课,来帮助他们快速的掌握C语言的基本内容。
事实证明,效果不能说很强,但也不能说没有,至少让几个成功摆脱了重修的命运。(这也让我奶茶喝了个饱)
在这部新专栏里,我将结合自己平时学习的笔记以及网络上的优秀知识,制作出五六篇文章,让各位初入C语言的同学能够有一个大致的学习方向。
那么接下来,就让我们以爬塔的方式,去开始学习C语言吧!
Link Start!
目录
浮游塔第1层:编程界大爹,伟大的C语言的起源
浮游塔第2层:软件
浮游塔第3层:程序设计及其语言
浮游塔第4层:简单的C语言程序
浮游塔第5层:字符集
浮游塔第6层:标识符
浮游塔第7层:关键字
浮游塔第8层:数据类型
浮游塔第9层:常量
浮游塔第10层:变量
后记
浮游塔第1层:编程界大爹,伟大的C语言的起源
在现在的信息化时代,编程似乎变成了一种风尚,一种潮流,如今十岁的孩子都已开始学习编程,直接领先在座的同学们十余年的时间,但这些学习的大多都是python、java、php等编程语言。
而对于我们这些计算机专业的,C语言大概是我们第一个认识,也是印象最为深刻的编程语言之一了。而且学习C语言真的很考验一个人的能力,学的好的那是真的牛逼,学的差那是真的拉跨。当然,这句话用在其他领域也是成立的。
接下来我们正式介绍一下C语言的发展史。
20世纪最伟大的实验室——贝尔实验室
贝尔实验室,位于美国新泽西州墨里山。毫不夸张的说,它曾经是地球上最伟大的实验室(没有之一),但由于AT&T发生巨变,贝尔实验室的命运也发生的改变,变得每况愈下。
但这也不能掩饰它曾经的辉煌,即使到现在,它平均每个工作日也能获得三项多的专利。
曾获得8项(13人)诺贝尔奖(其中7项物理学奖,1项化学奖)。截至2012 年,贝尔实验室共有有效专利 29190 项,出版物和会议论文400多篇,包括晶体管、通信卫星、电子数字计算机等许多重大发明对世界经济发展起到关键性作用。
为王(C语言)的诞生献上礼炮!
C语言诞生于1972年的贝尔实验室。是在BCPL语言以及B语言的基础上发展出的一门面向过程的高级语言,由于前身中有一个叫B语言,故在命名时便顺势称之为C语言。
创始人丹尼斯·里奇和肯·汤普森用它重写了第一个在DEC PDP-11计算机上实现的UNIX操作系统,在此后,随着UNIX的发展,C语言也在不断的完善,两者起到了相辅相成的作用。
也正是由于实现了UNIX的原因,使得二人在1983年荣获图灵奖,1998年又一起获得了美国国家技术奖章。
这两个奖项的含金量不言而喻,前者是计算机领域的国际最高奖项,后者则是美国总统对美国领先的创新者们授予的最高技术成就荣誉。
同属贝尔实验室的计算机先驱布莱恩·W.克尼汉是这样评价丹尼斯·里奇的:
牛顿说他是站在巨人的肩膀上,如今,我们都站在里奇的肩膀上
下图为关键开发者:丹尼斯·里奇
C语言标准
为了C语言的推广,许多的专家学者和硬件厂商联合组成了C语员言标准委会,并在之后的1989年,诞生了第一个完备的C标准,就是常用到的“C89”标准,后面又有了,90,99,11,不过截至2020年,最新的C语言标准为2018年6月发布的“C18”标准,而下一个版本的C语言标准,预计将于2022年12月1日完成。
为什么要说C语言是编程界大爹般的存在呢?
身为腾讯 IEG 运营开发工程师的李彦锋说过这样一句话:
如今这世界上,凡是带电的地方,可能都会有她(C语言)或者她的子孙的影子。
任何比C语言更低级的语言,都不足以完整地抽象一个计算机系统;
任何比C高级的语言,都可以用C来实现。
作为前辈的C语言,影响了诞生于它之后的几乎所有编程语言。如C++、C#等成为了它的直接继承者,而其他语言也不过是采用和改编了C的语法。
虽然时至今日,C语言在TIOBE编程语言排行榜的江山已被python和java占去大半,就连C#和C++也快要超越C语言,但我还是要来一句:
printf("C语言天下第一!");
浮游塔第2层:软件
想必看这篇文章的同志大多都是计算机或者软件相关专业的,既然如此,那么问一个简单的问题。到底何为软件呢?它的定义又是什么的?
以开发语言作为描述语言的话,可以认为软件是一种产品,是由程序、数据以及相关的文档所组成的完整集合。
软件=程序+数据+文档
1.程序:是为了实现特定目标或解决特定问题,而用编写的命令序列的集合。
程序=算法+数据结构
2.数据:就是程序在运行过程中所涉及到的信息。包括:数字、文本、图片、视频 、音频等文件。在计算机中,所有数据都要转换成1或0的二进制代码形式来进行处理。
3.文档:是在程序开发、维护以及使用过程中的相关的图文文件。
综上所述,我们现在可以回答开头的问题了,在特定角度下,软件就是算法+数据结构+数据+文档的一个集合体。
浮游塔第3层:程序设计及其语言
程序设计语言是人与计算机之间交流的工具,程序设计必然使用程序设计语言来实现。
源程序(.c)在输入计算机后,需要“翻译程序”将其翻译成二进制形式的目标程序(.obj),然后再经过”链接“将目标程序与库函数进行链接,变为可执行程序(.exe),计算机才能识别和执行。
这种“翻译”通常有两种方式,即编译方式和解释方式。
编译方式:如C、C++、Java
指在源程序执行之前,将程序的源代码“翻译”成目标程序。
解释方式:如Python、JavaScript(专门制作网页特效的脚本语言)
源程序一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行。
程序设计语言大致上分为两类——高级语言与低级语言
- 低级语言:
- 机器语言:二进制代码,以0,1的形式来表示,是计算机内部唯一能识别的代码
- 汇编语言:是以“助记符”的形式来表示,学习难度比较大。
- 特点:与硬件联系更紧密,运行效率高,但是学习难度大,移植性差。
- 高级语言:
常见的高级语言有:
- C:面向过程的高级语言。主要用于底层开发,
- C++:面向对象的高级语言。也可以开发底层软件,游戏或应用软件。
- Python:面向对象的,解释型的高级语言,主要用于:人工智能、大数据分析,统计等。
- Java:面向对象的高级语言。一般适合企业级项目的开发。
- C#:面向对象的高级语言。主要用于开发网站和中小型项目。
- 特点:与硬件的联系不是很紧密,运行效率相对来讲比较低,学习难度较容易,适用领域更广。
很多人认为高级语言既然被称之为高级,那么在学习过程中必然会更加有难度。
其实不然,相较于作为低级语言的机器语言和汇编语言,高级语言反而更容易学习。
因为低级语言更接近硬件系统层,可直接操纵硬件系统。
而高级语言相对于低级语言,基本脱离了机器的硬件系统,更接近自然语言和数学公式,用人们更易理解的方式编写程序。
浮游塔第4层:简单的C语言程序
说了这么多概念,下面就让我们正式的走入C语言吧。
首先来上第一个演示程序
#include <stdio.h>
int main()
{printf("TECH OTAKUS SAVE THE WORLD!\n");printf(" 技术宅拯救世界! \n");//我不过是个路过的技术宅罢了(大雾)return 0;
}
我们可以将上述程序简单分成几个部分。
1.预处理命令:
//预处理指令,把头文件stdio.h包含进来
#include <stdio.h>
2.主函数体:
//主函数体,利用printf函数,将文件打印出来printf("TECH OTAKUS SAVE THE WORLD!\n");printf(" 技术宅拯救世界! \n");//单行注释(好奇怪哦,用单行注释给单行注释做注释...)//我不过是个路过的技术宅罢了(大雾)//除了单行注释之外还有多行注释,以/*为开始,*/为结束,中间可以相隔很多行。
3.主函数:
//主函数main,程序最先执行的地方,程序有且只有一个main函数。
int main()
{//main的返回值。return 0;
}
浮游塔第5层:字符集
字符集,就是指在编程中可以使用的字符的一个集合。
C语言的基本字符集有两种:
- 源字符集(书写C语言源文件所用的字符集)
- 执行字符集(C语言程序执行期间解释的字符集)
源字符集:
- 字母:大小写英文字母各26个
- 阿拉伯数字:0~9
- 格式符:空格、水平制表符、垂直制表符、换页符
- 特殊字符:
- _ ( ) [ ] { }
- 算术运算符:+ - * / % ++ --
- 关系运算符:< > >= <= == !=
- 逻辑运算符: ! && || ~ & | ^
- 条件运算符:? :
- 赋值运算符:=
- 转义符:\
- 界定符号:’ “ , ;
- 移位符号: >> <<
- 成员运算符: . ->
执行字符集:
在源字符集的基础上,
还包括空字符、换行符(\n)、警报符、退格符(BS)和回车符(CR)。
浮游塔第6层:标识符
任何东西都有一个独属于它的名字,在C语言中就是标识符
标识符的作用:
作为变量、函数、标号、文件及用户定义的对象的名称.(C语言区分大小写字母)
标识符的定义:
标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。标识符的有效长度为1-32个字符
浮游塔第7层:关键字
所谓关键字,就是很关键的字,不是普通的字。(大雾)
关键字,
是具有特定含义的标识符,用户不能将关键字作为普通标识符使用。
根据ANSI标准,C语言共有32个关键字。
auto |
break |
char |
case |
const |
continue |
do |
double |
default |
enum |
extern |
float |
for |
goto |
if |
else |
int |
long |
register |
return |
short |
signed |
sizeof |
static |
struct |
switch |
typedef |
unsigned |
union |
void |
volatile |
while |
浮游塔第8层:数据类型
就像动漫分为恋爱番、穿越番、机战番等等一样,数据也有多种分类。
一、基本类型:
①字符类型:
字符在内存中占1个字节,其ASCII码值的范围为0~127,
其中0~31是控制字符,32~127是可显示字符。
字符型在表示的时候,要用单引号括起来。
②整形:
- 整形:int
- 无符号一般整形:unsigned [int]
- 短整型:short int或short
- 无符号整型:unsigned short
- 长整型:long int或long
- 无符号长整形:unsigned long
在计算机内存中,所有的数据都要转换成二进制代码(补码)的形式来保存。
③实型:
实型数据又分为两种:
- 单精度型(float)
- 双精度型(double)
关键字 |
字节数 |
取值范围 |
精度(位) |
float |
4B |
约±3.4×10±38 |
7 |
double |
8B |
约±1.7×10±308 |
15 |
在表示的时候,若有一个数:98.8,默认是double类型;
若要表示为float类型,则可以后面加上F或f,如:98.8L
若88表示长整型,则表示为88L。
因构造类型、指针类型和空类型会在后面有详细提及,故在此处不加以赘述。
浮游塔第9层:常量
常量(在程序运行过程中,其值不发生变化的量)
常量是固定值,在程序执行期间不会改变。
常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串常量。
一、整型常量:
①十进制整型:
其常量表示与数学上的整数表示相同,通常没有前缀,输出格式控制符为%x;
基数为10,可以用D表示。
如:-132 65534 0
②八进制整型:
其常量表示必须以数字0作为前缀,输出格式控制符为%o;
八进制数通常是无符号数。基数为8,可以用O表示。
如:0017 0123 0177777
③十六进制整型:
其常量以0x或0X作为前缀,输出格式控制符%x;
由0~9,A~F或a~f组成,十六进制数通常也是无符号数。基数为16,可以用H表示。
如:0x4b
关于进制之间的转换,可以阅读以下文章:
[C/C++/初学者] 各进制之间的相互转换(12种情况详解)
二、实型常量:
实型常量是用带小数点的数字表示的,其值有两种表达形式,分别为:
①十进制小数形式
由数字和小数点组成,必须有小数点,且小数点的位置不受限制。
②指数形式
由十进制数加上阶码标志“e”或“E”及阶码(只能为整数,可以带字符)组成,
其一般形式为:xEn。
其中:x为十进制数,n为十进制整数,其值为x×10n。
三、字符常量:
普通字符:是用单引号括起来的一个普通字符。例如:‘2’,‘D’,‘f’,‘=’,‘+’。
转义字符:用反斜杠“\”开头,后跟一个或多个字符,是特殊的字符常量,具有特定的含义。
四、字符串常量:
字符串常量是由一对双引号括起的字符序列。
在内存中存放时,一定以’\0’为结束标识。而字符串的本质,其实就是以‘\0’结尾的字符数组。
(‘\0’是数值转义字符,指ASCII码值为0的字符,它是一个不可显示的字符,也是一个“空操作”字符,即不进行任何操作,只作标记用。)
可包含任意符号,包括问号、冒号、逗号等以及数字(数字字符)
例如: “china” “192.168.0.1” “编程神域 C语言篇”
注意:”\\\”不是字符串常量,因为 \ 是转义字符,必须要配合其他有效的字符使用,单独使用无效。
当遇到\\\时,第一组可以转义为\,但是第二组只有一个\,无法单独使用。
思考一下,既然要以'\0'结尾,那么我们在实际编程中为什么没有看到'\0'呢。
因为它是由系统自动添加的。
字符串常量存放在常量区,故常量区中的内容不可被修改
C语言中,系统自动地在每一个字符串的最后加入一个字符'\0',作为字符串的结束标志。当然,它也要占据一个存储单元。
那么字符串在常量区中的地址该怎么表示呢?
以”Hello World!”为例(中间有一个空格符):
‘H’ |
‘e’ |
‘l’ |
‘l’ |
‘o’ |
‘ ’ |
‘W’ |
‘o’ |
‘r’ |
‘l’ |
‘d’ |
‘!’ |
‘\0’ |
“Hello World”是一个字符接着一个字符存储在常量区中,规定字符串常量本身就代表其在常量区中的地址(也就是字符’H’在常量区中的地址)。
最后,需要重点区分字符串的尺寸和长度。
字符串的尺寸就是字符串实际所占内存空间的大小,包括字符串中的所有字符。
当然,如果字符串很长的话,我们肯定不能去一个一个的数。
这种情况那么就可以使用sizeof函数了,由此可得其尺寸为13,与我们手算的相同。
#include<stdio.h>
int main(void)
{printf("%d\n",sizeof("Hello World!"));return 0;
}
字符串的长度就是指字符串中,第一个'\0'前面的字符个数。
如果这个字符串在程序运行过程中会发生改动,那么此时的字符串的长度就不是一个固定值,
我们可以使用字符串长度函数strlen来获得当前字符串的长度。
注意:\n也可表示为一个字符。
#include<stdio.h>
#include<string.h> //strlen函数的头文件
int main( )
{printf("长度为:%d\n",strlen("C yyds!"));return 0;
}
五、符号常量:
符号常量用标识符表示一个直接常量,其在使用前一定要先定义。
用于作为符号常量使用的标识符一般用大写字母,作为变量使用的标识符一般用小写字母。
一般形式为:
#define 标识符 常量
例如#define PI 3.1415926
#define COUNT 5
#define是一条编译预处理命令,称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后再程序中除字符串外的所有出现该标识符的地方均代之以该常量值。
浮游塔第10层:变量
变量(在程序运行过程中,其值是可以被改变的量)
变量是指在程序运行过程中其值是可以被改变的量。
按定义的类型可以将其分为:整型变量、实型变量、字符型变量等。
每个变量都必须起一个名字,即变量名,而它必须是合法的C语言标识符,
变量名代表内存中某个存储空间及其所存的数据,所存储的数据称为变量的值。
变量的定义
其一般形式为:[存储类型] 类型标识符 [变量名1 ,变量名2,变量名3,...];
例如: auto int x,y,z;
类型标识符:指定变量的类型
[ ]:表示可选项
;不可省略,表示程序中的语句结束
存储类型指明变量的存储特性,有static 、auto等
变量的初始化
在定义变量时给它赋一个初始值叫变量的初始化。
其一般格式为:变量名1=初始数据1[,变量名2=初始数据2,变量名3=初始数据3,...];
例如:char c1=’a’,c2=’3’;
int a=1,b=5,c=7;
在C语言中,
变量可以在定义的时候进行初始化值,也可以先定义变量后初始化值。
如:
①先定义后使用:
int a,b;
a=10;
b=20;
②定义的同时直接初始化:
int a=10,b=20,c=30;
注:一个变量在定义后,系统会自动给该它分配相应长度(和数据类型有关)的存储空间。
后记
好了,这就是C语言浮游塔的第1层至第10层的内容了,希望本次的内容能帮助到看到这的你,
第11层至第20层的内容目前正在施工,预计在不日后发布,敬请期待。
新内容链接:
[编程神域 C语言]程序框架的搭建以及14种基本运算符
[编程神域 C语言浮游塔 第①期] Hello C language world相关推荐
- [编程神域 C语言浮游塔 第③期]数组
前言 嗨嗨,这里是枫枫. 没想到我们的专栏能迎来第三期,先来庆祝一下. 本期的内容主要是设计到一维数组以及字符串数组,其中会夹杂些其他的有关内容,例如一维数组作为函数参数等等. 下面,先给大家讲讲什么 ...
- [编程神域 C语言浮游塔 第②期] 程序框架的搭建及14种基本运算符
前言 都不知道有没有人在看.(悲) 经过之前的学习,我们知道了C语言的起源,C语言的基本结构以及一些基础知识. 本期我们会在此基础上向大家讲解14种运算符(主流使用).格式以及字符的输入输出.数据类型 ...
- [编程神域 C语言浮游塔 第⑤期]内存地址——指针
前言 嗨嗨,这里是渡枫,欢迎阅读第五期的C语言浮游塔. 在正式学习指针之前,我们先提出几个问题. 什么是指针? 什么决定了数据的长度? 指针是否有类型? &a是指针吗? 一:指针就是一个变量的 ...
- [编程神域 C语言浮游塔 第④期] 函数的基本知识
前言 通过上一期的学习,我们知晓了数组及其不同的使用方法. 本期学习的是C语言中的函数,可类比为java中的方法. 函数是构成C程序的基本单元,可以说C程序通常由若干函数组成,它包括函数头和函数体. ...
- 再谈编程范式-程序语言背后的思想
link link 编程范式 托马斯.库尔提出"科学的革命"的范式论后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词.编程范式一般包括三个方面,以OOP ...
- C语言实例第6期:反转字符串
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- C语言实例第5期:在控制台打印100-200之间的所有素数
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- C语言实例第4期:交换数组中最大数和最小数的位置
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- C语言实例第3期:在控制台打印出著名的杨辉三角
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
最新文章
- gym102443 D.Guess the Path
- 你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!
- 已解决:Connecting to raw.githubusercontent.com |185.199.109.133|:443... Unable to establish SSL connect
- 最大流ISAP算法模板
- 【Linux】debian jessie版本安装1.9 svn
- 从Windows XP升级? 这是您需要了解的Windows 7
- linux rsa登录改密码登录_linux服务器secureCRT RSA登录配置
- cat-grep-sed应用案例
- 官方中文文档上线了!Python各种教程已汉化。
- 初级黑客安全技术命令详解
- Java中高级核心知识全面解析——常用框架(SpringMVC-工作原理详解)
- [Swift]LeetCode1009. 十进制整数的补码 | Complement of Base 10 Integer
- C++中带默认参数的函数定义及使用总结
- 幕布(思维导图)官方版 v1.1.15
- 微信 塞班版 服务器繁忙,再见了塞班!微信、QQ从此也不能登录了
- 网店宝贝复制专家操作手册
- java 查看类常量池_Java中常量以及常量池
- IE8 “Automation 服务器不能创建对象”问题解决方法
- python爬取微信公众号图片并生成word文档
- 1.CDC绘图。包括加载图片,消去图片,设置图片一部分透明,不闪烁方式。