一、C语言的发展过程
早期计算机只认识二进制,也就是0和1,程序员们想要写个加法函数需要写一堆的0和1,后来他们想出了一个简化的方法,将一堆表示加法的0和1用Add表示,以后他们想要写个假发函数时,只用写个Add就可以了,简化了程序的编写过程,由此产生了助记符。
C语言之所以命名为C,是因为C语言源自肯·汤普森(Ken Thompson)发明的B语言,而B语言源自于BCPL语言。
1967年,由于CPL语言规模大,使用起来比较复杂,难以实现。剑桥大学的马丁·理查德(Martin Richards)对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。
1969年,美国贝尔实验室的肯·汤普森以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母),并且用B语言写了初版的UNIX操作系统,也叫UNICS。据记载,UNICS系统是汤普森为了玩一个他自己编写的,模拟在太阳系航行的电子游戏——Space Travel而开发出来的操作系统。
1971年,同样酷爱Space Travel的丹尼斯·里奇(Dennis Ritchie)为了能早点玩上游戏,加入了汤普森的开发项目,合作开发UNIX。他的主要工作是改造B语言,使其更成熟。
1972年,丹尼斯·里奇终于在B语言的基础上设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
1973年初,C语言的主体完成。汤姆森和里奇迫不及待地开始用它完全重写了UNIX系统。此时,编程的乐趣使他们已经完全忘记了那个“Space Travel”的游戏,一门心思地投入到了UNIX和C语言的开发中
二、第一个C语言程序——Hello World!
C语言的主体结构,开头需要引入stdio.h头文件,std是standard的缩写,译为标准;i是input的缩写,译为输入;o是output的缩写,译为输出;.h全名是.head。还需要一个主函数main,main函数是程序的入口,有且仅有一个。
//包含一个叫stdio.h的头文件
//std-标准 standard input output
#include <stdio.h>
//int 整型
//main前面int表示main函数调用后返回一个正数值
//void main(){}--这种写法已过时
int main() //主函数-程序的入口,main函数有且仅有一个
{
//printf - print function - 打印函数
//库函数 - C语言本身提供给我们的函数 - 别人的东西
//使用别人的东西需要打招呼 - #include
printf("Hello World!\n");
return 0;//返回 0
}
三、C语言的数据类型
char -- 字符型
short -- 短整型、int -- 整型、long -- 长整型,还有long long
float -- 单精度实型、double -- 双精度实型
#include <stdio.h>
int main()
{
char ch = 'A';//向内存申请了一段大小为1字节的空间,命名为ch,用来存放字符'A'
printf("%c\n", ch);//%c --打印字符格式的数据
//short int - short -- 短整型
//int -- 整型
int age = 20;
printf("%d\n", age);//%d -- 打印整型十进制数据
//long -- 长整型
long num = 1000;
printf("%d\n", num);
//float -- 单精度实型
float f = 5.0;
printf("%f\n", f);
//double -- 双精度实型
double d = 6.01;
printf("%lf\n", d);//这里用%f也可以,double使用%lf比较标准
printf("%d\n", sizeof(char));// 1 字节
printf("%d\n", sizeof(short));// 2
printf("%d\n", sizeof(int));// 4
//C语言标准规定 sizeof(long) >= sizeof(int)
printf("%d\n", sizeof(long));// 4/8 -- 可能是4或者8字节
printf("%d\n", sizeof(long long));// 8
printf("%d\n", sizeof(float));// 4
printf("%d\n", sizeof(double));// 8
return 0;
}
四、变量
变量指的是程序可操作的存储区的名称。C语言中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围的值都可以存储在内存中,运算符可应用于变量上。
变量的命名需要注意一下几点:
- 开头必须是英文字母或下划线
- 大小写敏感,大小写不同的变量是不同的
- 变量的名称由字母、数字和下划线组成
#include <stdio.h>
int num2 = 20; //全局变量 - 定义在代码块({})之外的变量
int a = 8;
int main()
{
//可以同时声明多个变量,变量之间用逗号,隔开
//int i, j, k;
//char c, ch;
//float f, salary;
//double d;
//外部变量声明
//extern int x;
//extern float y;
int num1 = 10; //局部变量 - 定义在代码块({})之内的变量
//局部变量和全局变量的名字建议不要相同 - 容易产生bug
//当局部变量和全局变量的名字相同的时候,局部变量优先
int a = 9;
printf("%d\n", a);
//计算两个数的和
int h = 10;
int v = 20;
//输入数据 - 使用输入函数scanf
scanf_s("%d%d", &h, &v);//&取地址符号
int sum = h + v;
printf("sum = %d\n", sum);
return 0;
}
如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上extern关键字声明即可。
变量的作用域就是在哪里可以用这个变量,哪里就是这个变量的作用域,也就是这个变量所在的代码块。变量的生命周期,局部变量的生命周期是从声明这个变量开始到其所在代码块结束;全局变量的生命周期是从声明这个变量开始到这个工程结束。