本文记录C语言基本语法,这里提供简单的示例和代码,来详细讲解C语言的基本语法也作为我复习C语言的笔记,方便自己复习。

1.标识符与关键字

给变量所取的名字叫变量名,定义变量的名字需要遵循标识符的命名规则。
标识符是用来标识变量、符号常量、数组、函数、文件等名字的有效字符序列。

标识符的命名规则:

1.只能由字母、数字和下划线组成(例如:Score1,Stu_name)

2.第一个字符必须为字母或下划线

3.区分大小写字母

4.C语言内部规定的标识符(即关键字)不能作为用户标识

C语言的关键字:

C语言的关键字,是保留的一些特殊作用的词语,一共32个关键字

关键字说明
auto声明自动变量
break跳出当前循环
case开关语句分支
char声明字符型变量或函数返回值类型
const定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变
continue结束当前循环,开始下一轮循环
default开关语句中的”其它”分支
do循环语句的循环体
double声明双精度浮点型变量或函数返回值类型
enum声明枚举类型
extern声明变量或函数是在其它文件或本文件的其他位置定义
float声明浮点型变量或函数返回值类型
for一种循环语句
goto无条件跳转语句
if条件语句
int声明整型变量或函数
long声明长整型变量或函数返回值类型
register声明寄存器变量
return子程序返回语句(可以带参数,也可不带参数)
unsigned声明无符号类型变量或函数
union声明共用体类型
void声明函数无返回值或无参数,声明无类型指针
volatile说明变量在程序执行中可被隐含地改变
while循环语句的循环条件

C99新建关键字:

_Bool_Complex_Imaginaryinlinerestrict

C11新建关键字:

_Alignas_Alignof_Atomic_Generic_Noreturn_Static_assert_Thread_local

2、常量和符号常量

常量:在程序运行过程中,其值不会发送变化的量。

变量:在程序运行过程中,其值可以发送变化的量

(1)常量和常量符号

C语言提供的常量类型有整型常量、实型常量、字符常量、字符串常量和符号常量。

用一个标识符来代表一个常量,该标识符叫做符号常量,其一般形式为:

#define 标识符 常量

例如:

1

#define PI 3.1415926

关于typede和defin的用法与区别:

1.#defien是预处理指令,在编译预处理时进行简单替换,不作正确性检查,不管含义是否正确照样带入,只要在编译器已被展开的源程序时才会发现可能的错误并报错。

例如:#define PI 3.1415926

程序:area = PIrr替换3.1415926r

2.rtypedef是在编译时处理的,通常是用于对已有数据类型取别名,而#define只是简单地替换。

例如:typedef unsigned int uint;

这样就为unsigned int型引入新助记符uint,以后使用uint直接代表unsigned int型。

例如:typedef PI 3.1515926;

编译器会直接报错,原因PI并非已存在类型,其次“3.1515926”不符合命名规则。

(2)变量

1.变量在内存中占用一定的储存单元,在该储存单元中存放变量值。

2.程序中用到的所有变量都必须有一个变量名

3.变量名和变量值是两个不同的概念

4.不同类型的变量在内存中占据储存单元的数量及储存的格式不相同,例如:char ch = ‘1′;int i = 1;

5.变量必须“先定义后使用”,这样做的目的是:

1、便于编译程序程序检测对该变量的运算是否合法。例如:整型变量可以进行求模(余数)运算,实型变量不可以进行求模运算。

2、程序中变量名的正确使用

3、C语言数据类型

(1)整型常量

整型常量就是整数,有3种表示形式

1.十进制整常数:就是通常整数的写法,数码取值为0-9。例如:25、-623、0等

2.八进制整数:以0为前缀,数码取值0-7,

例如:

020(十六进制16)

016(十六进制14)

0177777(十六进制65535)

-010(十进制数-8)

几种不合法的八进制数:

256(无前缀0)

079(包含了非八进制数码9)

3.十六进制整型常数:以数字和字母0x开头,即0x作为前缀,数码的取值为0-9和A-F(或字母a-f)

几种合法的十六进制数:

0x2A(十进制数42)

0x1AB0(十进制数6832)

几个不合法 的十六进制数:

5A(无前缀)、0x2H(包含了非十六进制数码H)

整型变量分为:基本整型、长整型、短整型、无符号型

整型变量的定义及初始化:

定义变量及初始化的一般形式 为:

类型说明符 变量名1 = 值1

例如:

1

2

3

int a,b,c; //定义a,b,c为整型变量

long x = 10; //定义x为长整型变量,并附初值10

unsigned int p=2,q=5,m; //定义p,q,m为无符号整型变量。p赋初值为2,q赋初值为5

整型变量需要注意:
1、允许在一个类型说明符后,定义多个相同类型变量,类型说明符与变量名之间至少用一个空格间隔,各变量名之间用逗号间隔
2、最后一个变量名后面用“;”号结尾
3、变量定义必须放在变量使用之前,一般放在函数体开头
4、没有给变量赋初值,并不意味着该变量中没有数值,只表面给变量中没有确定的值,因此直接使用这种变量的话可能产生莫名其妙的结果,有可能导致运算错误

例程:

1

2

3

4

5

6

7

8

#include

void main(void)

{

int a = 3, b = 5, c, d;

c = a+b;

d = a-b;

printf("a+b=%d,a-b=%d\n",c,d);

}

原码、反码和补码

计算机中数分为有符号和无符号。他们是以二进制形式表示的,有三种表示方法,即原码和补码。

三种表示方式由符号位和数值位两部分构成

符号位在最高位,用0表示“正”,1表示“负”。

取余位为数值位

原码:按照二进制的方法来表示数的绝对值,用这个方法得到的就是数的原码。

反码:正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位 按为取反。

补码:正数的补码与其原码相同,负数的补码是将其原码除符号位之外的各位求反之后,在末位再加1

正数的原码、反码。补码相同;负数的原码、反码、补码不同。数值在计算机中以补码形式存放。

例如:求-127的补码

(2)实型数据

实型数据又称为实数或浮点数,指是带有小数部分的非整数数值。

实型常量

在C语言中,实数常量只能用十进制数表示,有两种表示方法:

1.小数形式:由数字0~9和小数点组成,当小数部分为零时,小数点不能省略。例如:0.0/24.4、-56.33等均为合法的实型常量

2.指数形式:由十进制数、加阶码标志小写字母“e”(或大写字母“E”)和阶码(必须是整数)组成。

例如:2.3E5(相当于2.3 x 10^5)

以下是不合法的实型常量:

123(无小数点)

E4(阶码“E”之前无数字)

23.-E3(负号的位置不对)

2.7E(无阶码)

实型变量

实型变量的定义以及初始化

例如:

1

2

float a,b,c; //定义a,b,c为单精度实型变量

double m=3.5,n=5.6; //定义m,n为双精度实型变量,并分别赋值3.5和5.6

(3)字符型数据

字符常量是用一对单引号括起来的一个字符

如:‘b’、‘z’、‘=’、‘” />

ASCII码

ASCII码表示American Standrd Code for Information Interchange。ASCII编码能表示数据范围是00000000~11111111共2^8即256个数据

标准的ASCII码有128个字符,其中:

1.0-31为控制字符,例如,回车换行、文件结束标志、字符串结束标志

2.10个阿拉伯‘0’~‘9’的码值是连续的

3.26个大写字母‘A’-‘Z’是连续的,26和大小写字母‘a’-‘z’是连续的

4.字符常量也可以参与各种运算,如:‘B’-‘A’值为1(字符‘B’的ASCII码值减去66字符‘A’的ASCII码值65结果为1)

字符型变量

1.字符型变量在内存中占用1个字节,只能存放一个字符,并以该字符的ASCII码的值的形式存放

2.在C语言中,一个字符型数据可以按照它的ASCII码进行数据运算

字符型数据储存空间和值范围

类型字节数取值范围
char1-128~127
unsigned char10~255

例程:给字符变量赋整数值

1

2

3

4

5

6

7

#include

int main()

{

char ch1=65,ch2=66;

printf("%c,%c\n",ch1,ch2);

printf("%d,%d\n",ch1,ch2);

}

转义字符字符

转义字符:是由一个反斜杠“”后跟规定,具有特定含义的字符

常用转义字符如下表

转义字符意义ASCLL码值(十进制)
\a响铃(BEL)007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) (跳到下一个TAB位置)009
\v垂直制表(VT)011
\’代表一个单引号039
\”代表一个双引号字符034
\代表一个反斜线字符”’092
?代表一个问号063
\0空字符(NUL)000
\ddd1到3位八进制数所代表的任意字符三位八进制
\xhh十六进制所代表的任意字符十六进制

转义字符使用如下:

1

2

3

4

5

6

7

#include

int main()

{

printf("\"china\"\n");

printf("My \tCountry.\n");

printf("I am hap\160\x79.\n");

}

字符串常量

字符串常量是简称字符串,是用一对双撇号(西方双引号英文)括起来的一串字符,包含字符的个数和字符长度
例如:“Hello World”。“a”,“C语言”都是字符串常量。

字符串常量和字符常量区别:

1.字符常量是右边单引号括起来的字符,而字符串常量是由双引号括起来的字符。尽管‘a’与“a”都包含一个字符,但在C程序中,它们都具有不同的含义

2.字符常量只能是一个字符,字符串常量可以是多个字符

3.可以把一个字符串常量赋值一个字符变量,但不能把一个字符常量赋值一个字符变量。

字符串变量

在C语言中没有专门的字符串类型,我们只能使用数组或者指针来间接地存储字符串。

1

2

char str1[] = "Hello World!"

char *str2 = "你好世界!"

str1 和 str2 是字符串的名字,后边的[]和前边的*是固定的写法。初学者暂时可以认为这两种存储方式是等价的,它们都可以通过专用的 puts 函数和通用的 printf 函数输出。

1

2

3

4

5

6

7

8

9

10

#include

int main()

{

char web_url[] = "hHello World!";

char *web_name = "你好世界";

puts(web_url);

puts(web_name);

printf("%s\n%s\n", web_url, web_name);

return 0;

}