初始c语言
程序语言的发展
机器语言---汇编语言---高级语言
机器语言:低级语言,也称为二进制语言;计算机使用的是由0和1组成的二进制数组成的一串指令来完成计算机操作的语言---特点:计算机可以直接识别,不需要任何的翻译.
汇编语言:面向机器的程序设计语言,它是为了克服机器语言与人们习惯用的语言差别过大;它是由一些英文字母和数字表示一个指令,例如:ADD---"加",SUB---"减";由于计算机并不能直接识别和执行这些指令,因此需要一种称为汇编程序的软件来把这些指令转换为机器指令,然而转换的过程称为汇编.
高级语言:为了克服低级语言的缺点,创造出了高级语言,它很接近人们习惯使用的自然语言和数学语言,程序中用到的语句和指令都是由英文单词表示的,运算符和表达式也和数学差不多.它功能很强且不依赖具体机器,当然,计算机也不能直接识别高级语言,也要进行翻译;故此用一种成为编译程序的软件把用高级语言写的程序(源程序)转换为机器指令的程序(目标程序),然后再执行,最后得到结果.
高级语言的发展:
1.非结构化语言; 2.结构化语言; 3.面向对象语言
C语言
c语言是一种用途较广的且功能强大的使用灵活的过程性编程语言,既可用于编写应用软件,又可编写系统软件;因此c语言一经问世便迅速推广起来,c语言原来是专门为编写系统软件而设计的,这是因为c的可移植性好,硬件控制能力强,表达和运算能力强大.几乎所有的计算机系统都可使用c语言
第一个c语言程序
helloworld
#include <stdio.h> //编译预处理指令
int main() //定义主函数
{ //函数开始的标志
printf("Hello, World"); //输出所指定的内容
return 0; //函数执行完毕后返回函数值0
} //函数结束的标志
详:
C程序是由若干个头文件和函数组成
1.main函数为程序的主函数(程序执行的入口且是唯一的入口),一个C程序有且只能有一个main函数,在C99标准中建议指定main函数的返回类型为int而非void,当函数执行正常结束后,得到的函数值为0;出现异常或错误时,函数值为一个非0的整数
2.#include预处理指令,它的作用就是在编译C程序前通知C语言编译系统做些预处理工作
3.printf()函数是格式输出函数,用来向终端输出若干个任意类型的数据,使用前必须指定输出的数据的格式,即根据数据的类型指定格式,简单来说就是在屏幕上打印指定的信息
4.return的作用为在函数执行结束后返回指定的值,根据函数类型来指定返回到函数值
5.{}括号一定要成对写,成对出现成对删除
6.分号是语句的结束标志(英文半角)
注释
注释相当于备注解释,也就是写给我们自己看的,运行程序时程序不执行注释的内容
1.单行注释:注释一行内容,可以单独占一行也可以出现在其他内容的右侧(左侧会连同内容也注释)
单行注释: //注释内容
2.多行注释:可以包含多行内容,编译系统在发现一个注释开始符/*时会开始找注释结束符*/,并把二者之间的内容作为注释
多行注释: /*注释内容*/
标识符
标识符是用来对变量 函数 数组 符号常量名 类型等命名的有效字符序列,简单来说就是一个对象的名字
C语言规定,标识符可以是字母(A-Z,a-z),数字(0-9)和下划线_组成的字符串,但是字符串的第一个字符不可以是数字
1.标识符最好做到见名知意,选择有意义的英文单词,不要使用中文
2.C是严格区分大小写的
3.不可以是关键字,例如前面出现的main printf
变量和常量
变量
变量代表一个有名字的且具有特定属性的一个存储单元,它可以用来存放数据,也可以存放变量的值;且变量的值是可以改变的
变量必须先定义,后使用,在定义时指定该变量的名字和类型,一个变量应该有一个名字,以便被引用
一定要区分变量名和变量值,这是两个不同的概念
变量名实际上是一个以名字代表的一个存储地址,在对程序编译时由编译系统给每一个变量名分配对应的内存地址
给变量赋值和取值实际上是通过变量名所对应的内存地址找到内存中对应的存储单元,再进行存放数据和读取数据
变量名一般使用小写
定义变量: 数据类型 变量名;
多个变量类型相同时也可
数据类型 变量1,变量2,变量3...;
也可定义时初始化
数据类型 变量名 = 值;
注:在定义中不允许出现连续赋值操作
例:
int a=b=c=20;这是不符合规定的
还有一种情况
int a,b,c=20;会显示警告a和b,并且只对c进行了赋值操作
解决:
int a=5,b=10,c=20;合法
定义变量的位置一般定义在函数开头的声明部分中(局部变量),也可以在函数外定义变量(全局变量)
当局部变量和全局变量重名时优先访问局部变量
对于变量的声明和定义:
声明仅仅是告诉编译器有一个变量叫什么,类型是什么,且已经在其他地方定义过了,不会为其分配内存存储单元,可以声明多次,一般使用extern关键字进行声明且声明时不可以初始化
定义则是运行程序时在内存中开辟一处空间并取名字还可以指定初值,定义只可以定义一次
注:声明包括定义,但并非所有声明都是定义,对于"int a"来说既是定义也是声明,然而对于"extern a"来说,它是声明不是定义
区别:
声明 | 定义 | |
---|---|---|
存储单元 | 不会建立 | 建立 |
次数 | 多次 | 一次 |
为了方便理解,针对变量一般除了extern关键字为声明,其他都是定义;
针对函数时带了{}为定义,不带则是声明
int main() //主函数
{
//定义变量
int num;
//给num变量赋值
num = 100;
//也可同时定义多个变量
int a,b,c;
//再进行赋值
a=1;
b=2;
c=3;
//也可定义时初始化
int d = 100;
return 0;
}
常量
在运行过程中其值不可被改变的的量为常量(字面量)
例:1,2,3,'a','b'等等;
注:
常量中有几个需要知道的:1.#define指定的常量(符号常量),2.字符串常量("字符串"),3.枚举常量,4.常变量
1.#define指令,指定用一个符号名称代表一个常量
符号变量不占用内存,不要把它误认为变量,它只是一个临时符号,代表一个值,且符号常量不可改变,在预编译后这个符号就不存在了,
符号常量习惯用大写表示
#define PI 3.1416 //注意结尾没有分号
上面代码表示从此行开始该程序中所出现的所有PI都代表3.1316
解析:在对程序进行编译前,预处理器会先对PI进行处理,把所有的PI转换为3.1416,再进行编译
2.字符串常量
"hello world"; //字符串使用双引号
3.枚举常量
枚举是有值的且不可变,默认从0开始
可定义main函数外
enum sex{male,female}; //male和female就是所谓的枚举常量 不可改变
enum sex s = male; //通过枚举创建的变量s 可改变
4.常变量const --->C99允许使用
定义a为一个整型变量,b为一个整型变量其值为10
特性为:在变量存在期间其值不可被改变.
解:本质仍然是变量,有类型,占内存单元,只不过拥有了常量不可变的性质
跟常量的区别:常变量是拥有名字的不变量,常量是没有名字的不变量
const int a;
const int b = 10;
数据类型
变量和常量都是区分类型的
为什么需要类型?
因为在计算机中存储数据是存放在存储单元中的,是具体存在的不是抽象的,而且,存储单元是由有限个字节构成的,每一个存储单元存放数据的范围是有限的,不可能存放无穷大的数据,也不能存放循环小数,因此需要通过类型来控制存储
所谓类型就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式.不同的类型分配不同的长度和存储形式
基本数据类型