C语言基本语法单位
字符集
字符是高级语言中的最小单位,是构成语法单位的基础。
C语言中规定可以使用的合法字符的集合为C字符集
C字符集采用ASCII码字符集
C语言字符集由下列字符组成
(1)字母和数字字符。(小写字母az、大写字母AZ、数字0~9)
(2)不可打印的字符。(空格符、回车符、换行符、控制符)
(3)空字符。 (ASCII码为0的字符,其作用之一是作为字符串的结束符。)
(4)标点和特殊字符。
标识符
标识符由字母、下划线、数字组成,且第一个字符必须是字母或下划线,要求命名“见名知义",区分英文的大小写字母
关键字
种类
关键字
数据类型关键字(12个)
char、double、enum、float、int、long、short、signed、struct、union、unsigned、void
控制语句关键字(12个)
for、do、while、break、continue、if、else、goto、switch、case、default、return
存储类型关键字(4个)
auto、extern、register、static
其他关键字(4个)
const、sizeof、typedef、volatile
运算符
常用运算符:() [ ] -> ! / \ ~ ++ -- (类型)sizeof * / % + - << >> <= >= == != & ^ | && || ?: = , += -= *= /= %= >>= <<= &= ^= |=
分隔符
分隔符主要指空格符、制表符和换行符等
常量
常量是指在程序执行中其值不会改变的量,分为数字常量和字符常量。
变量是指在程序执行中其值可以改变的量。(C语言规定,各数据类型的变量,使用前必须先定义:说明变量的名称和数据类型。变量用标识符表达)
C语言程序基本结构
第一行为注释,用”/*“开头到*/结尾的部分表示。注释便于对程序的阅读和理解
第二行为预处理命令,程序用了printf库函数,在stdio.h是标准库头文件 ,一般在标准库中调用函数。
#include< file >编译程序会先到标准函数库中找文件 #include”file” 编译程序会先从当前目录中找文件
include 称为文件包含命令,其意义是把尖括号""或引号<>内指定的文件包含到本程序中,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h
main表示C语言程序的主函数。C语言程序都必须有一个main函数,整个程序从主函数开始执行。由{}括起来的程序部分是函数体,表示函数体的开始和结束。
函数体的前3条语句具有相同的作用,调用C编译程序提供的标准库函数printf输出一个字符串。在printf函数中,被原样显示输出的字符串被”“括起来。
\n是一个专用的输出格式控制符,它表示输出字符串后回车换行
;表示一条语句的结束
main函数前的int表示主函数返回值的类型,因此main函数体中最后一条语句为return 0; 表示main函数的返回值为0.一般建议main函数的返回值是int类型。
int a ,b,sum;是定义变量定义,说明a,b和sum为整型(int)变量
a =357;b =123;是两个赋值语句,使a和b的值分别为357和123
%d是C语言中输入/输出的”格式控制“符号,用以制定%d的位置输入/输出的数据类型和格式为:十进制整数。
system("pause")用系统函数暂停程序执行,等待任意输入继续程序的运行
这有两个错误,希望大家能找出来
程序中出主函数main外,还包括一个被主函数调用的volume函数,volume函数是用户自定义函数。自定义函数由函数头和函数体两个部分组成。
第四行是函数头,用以指定函数名称、参数名称、和函数返回值类型。
函数体包括执行函数功能能使用的变量定义和语句(5~9)
&的含义是指变量的地址,表示将输入的3个数值分别给x,y,z对应的存储单元中。
必须有且只有一个main函数,程序从main函数开始执行,程序在执行中可以调用有编译系统提供的各种标准库函数,和由用户自定义的函数。
数据类型
构造类型是由基本类型或其他构造类型而成,是由程序员自己定义的类型;指针类型在C语言提供了动态处理变量的能力;空类型是一种特殊类型,通常作为某些函数的返回值。
整型
知道其中数据类型位数,可算出数值范围。
补充与拓展
什么是字节和位
内存是以字节为单位的连续的存储空间,每个内存单元有一个唯一的编号,即地址
一个字节由8个二进制位(bit)组成,其中,最右边的一位称为“最低位”,最左边的一位称为“最高位”。每一个二进制位的值是0或1
数值的编码是怎么表示的
计算机内表示数值的时候,以最高位为符号位,一般采用不同的编码方法:原码、反码、补码
- 原码
+10的原码是0000 0000 0000 1010
-10的原码是1000 0000 0000 1010
- 反码
正数的反码与原码相同;负数的反码是:原码符号位外仍为1,其他位取反
+10的反码是0000 0000 0000 1010
-10的反码是1111 1111 1111 0101
- 补码
正数的补码与原码相同;负数的补码是,除最高位任为1外,原码其他位取反,最后再加1.
+10的补码是0000 0000 0000 1010
-10的补码是1111 1111 1111 0110
例如:signed short类型占16位
(0111 1111 1111 1111)2
第0位(最高位)是符号位,符号位为0则正;1~15位全为1时表示的数最大,为2^15-1
(1000 0000 0000 0000)2;这是-2^15的补码形式
符号位为1,则为负;1~15位全为0时,表示的数最小,为-2^15
浮点型
字符型
2.常量
常量的表示方法和常量在内存中的存储方式是不一样的
整型常量
一个整常量后面加一个字母u或U,表示该常量的类型是unsigned int型,如879u和0XFED8U
当一个常量后面加一个字母l或L,则表示该常量的类型是long int型,如879l和0X34L
在一个整常量后面同时带有后缀l和u,那么它的类型是unsigned long int,如5789lu
浮点型常量
浮点型常量的表示方法
(1)十进制数表示形式:由数字和小数点组成。例如:3.14、.89、56.
(2)指数形式。(e前有数字,e后必须是整数)例如:3.5e3
2.内存中存放形式
float型数据7.45623在内存中的存放形式
+ .745623 1 ——7.45623
符号位 小数部分 指数部分
+ .745623 10^1
字符型
字符型常量的表示方法
字符型常量是用单引号括起来的一个字符,例如:'A'\'a''?'构成一个字符常量的字符可以是ASCII字符集中除单引号本身(’)、双引号(“)、反斜杠(\)以外的任意字符。
注意:'a'和'A'是不同的字符常量。
还有一种以反斜杠(\)后面的字符转换成另外的语义。
转义字符有3种:简单转义字符,八进制转义字符,和十六进制转义字符。
(1)简单转义字符。
字符形式
含义
ASCII代码
\a
响铃
7
\n
换行,将当前位置移到下一行开头
10
\t
水平制表(跳到下一个tab位置)
9
\b
退格,将当前位置移到前一列
8
\r
回车,将当前位置移到本行开头
13
\f
换页,将当前位置移到下页开头
12
\\
反斜杠字符(\)
92
\'
单引号字符(')
39
\''
双引号字符(")
34
字符串常量
字符串常量是用双引号括起来的零个或多个字符组成的序列。如"hello""CHINA""B"
在字符串的末尾会加上'\0'作为字符串的结束标志。以"hello"为例,长度为5,内存存储字节数为6
如果想将一个字符串存放在变量中,必须使用字符数组(即使用一个数组来存放一个字符串,数组中每一个元素代表一个字符)。
符号常量
符号常量的定义有两种形式
一种是采用宏定义形式
#define PI 3.1415926
将3.1415926命名为PI,从而在程序中凡是3.1415926出现的地方都可用PI来代替。
另一种是采用const说明符,例如:
const float PI =3.1415926;或float const PI =3.1415926;
在使用const声明符号常量时一定要赋初值,而且在程序中间不能改变其值。
const float PI;//错误
PI=3.1415;//错误
符号常量的名字通常用大写字母表示,作为一种良好的程序设计风格,常量应尽量使用符号常量的形式表示,以提升程序代码的可读性和可维护性。
两者的区别
用“#define”的定义符号常量只在编译时完成宏替换,在程序运行期间不占内存空间
而用const定义的符号常量本质上仍是一个变量,在程序运行期间要占据内存空间,只是用const来指明该内存空间的只读约束,因此用const定义的符号常量也称 常变量。
与define宏定义相比,const使用了数据类型,使得进行赋值操作或者函数参数传递的时候可以检查数据类型是否合法,从而减少错误
变量
先定义后使用:类型名 变量名列表
类型名指定变量的数据类型,包括基本数据类型、构造类型、指针类型
变量名列表中使用逗号分隔多个变量,并使用分号结束语句。
使用标识符来表示变量名,变量名要符合C中标识符的命名规则。
不同类型的变量应在各自的数据定义行上定义,增加程序可读性。
在同一个函数内,不允许对同一个变量重复定义