基础语法
- 1、基本语法
- 1.1、语句
- 1.2、表达式
- 1.3、语句块
- 1.4、空格
- 1.5、注释
- 1.6、printf()
- 1.6.1、基本用法
- 1.6.2、占位符
- 1.6.3、常用占位符
- 1.6.4、输出格式
- 2、变量
- 2.1、变量名
- 2.2、变量的声明
- 2.3、变量的赋值
- 2.4、变量的作用域
1、基本语法
1.1、语句
C 语言的代码由一行行语句组成。语句就是程序执行的一个操作命令。C 语言规定,语句必须使用分号结尾
,除非有明确规定可以不写分号。
int x = 1; //声明整数变量x,并变量x的值设置为1
多个语句可以写在一行。一个语句也可以成多行
,这时就要依靠分号判断
语句在哪一行结束
。
int x; x = 1;//多个语句写在同一行
//一个语句写在多行
int x;
x
=
1
; //需要依靠分号来判断语句在哪一行结束
单个分号
也是有效语句,称为“空语句”
,没有实际作用。
1.2、表达式
C语言的各种计算,主要通过表达式完成。表达式
是一个计算式,用来获取值
。
1 + 2 //这就是一个表达式,用来获取 1+2 这个算式的结果
表达式与语句的区别:
- 语句可以包含表达式,但是表达式本身不构成语句。
- 表达式都有返回值,语句不一定有。因为语句用来执行某个命令,很多时候不需要返回值,比如变量声明语句
int x = 1
就没有返回值。
1.3、语句块
C 语言允许多个语句使用一对大括号{}
,组成一个块,也称为复合语句。在语法上,语句块
可以视为多个语句组成的一个复合语句
。
//下面示例中,大括号代表一个语句块,大括号结尾不需要添加分号
{
int x;
x = 1;
}
1.4、空格
C 语言里面的空格
,主要用来帮助编译器区分语法单位
。如果语法单位不用空格就能区分,空格就不是必须的,只是为了增加代码的可读性。
int x = 1;
// 等同于
int x=1;
语法单位之间的多个空格等同于单个空格。
int x = 1;
// 等同于
int x = 1;
空格
还用来表示缩进
。多层级的代码有没有缩进,其实对于编译器来说并没有差别。强调代码缩进,只是为了增强代码可读性
,便于区分代码块。大多数 C 语言的风格要求是,下一级代码比上一级缩进4个空格。
// 缩进四个空格
if (x > 0)
printf("positive\n");
// 缩进两个空格
if (x > 0)
printf("positive\n");
只包含空格的行被称为空白行
,编译器
会完全忽略
该行。
1.5、注释
注释
是对代码的说明
,编译器会忽略注释,也就是说,注释对实际代码没有影响。
C语言的注释有两种表示方法:
第一种
方法是将注释放在/*...*/
之间,内部可以分行。
/* 注释 */
/*
这是一行注释
*/
这种注释可以插在行内。
int open(char* s /* file name */, int mode);
// 上面示例中,/* file name */用来对函数参数进行说明,跟在它后面的代码依然会有效执行。
第二种
写法是将注释放在双斜杠//
后面,从双斜杠到行尾都属于注释。这种注释只能是单行,可以放在行首,也可以放在一行语句的结尾。
// 这是一行注释
int x = 1; // 这也是注释
不管是哪一种注释,都不能放在双引号里面
。双引号里面的注释符号,会成为字符串的一部分,解释为普通符号,失去注释作用。
printf("// hello /* world */ ");
1.6、printf()
1.6.1、基本用法
printf()
的作用是将参数文本输出到屏幕。它名字里面的f
代表format
(格式化),表示可以定制输出文本的格式。
printf("Hello World"); //该命令会在屏幕上输出一行文字“Hello World”
printf()
不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符\n
。
printf("Hello World\n");// 输出“Hello World”后换行
printf("Hello\nWorld\n");// 输出“Hello”后换行输出“World”再换行
printf()
是在标准库的头文件定义的。使用这个函数之前,必须在源码文件头部引入这个头文件。
#include <>
int main(void){
printf("Hello World\n");
}
1.6.2、占位符
printf()
可以在输出文本中指定占位符。所谓“占位符”,就是这个位置可以用其他值代入。
//输出 这里有3个苹果
printf("这里有%i个苹果\n", 3);// %i 表示这里代入的值必须是一个整数。
1.6.3、常用占位符
-
%a
:浮点数 -
%A
:浮点数 -
%c
:字符 -
%d
:十进制整数 -
%e
:使用科学计数法的浮点数,指数部分的e
为小写 -
%E
:使用科学计数法的浮点数,指数部分的E
为大写 -
%i
:整数,基本等同于%d
-
%f
:小数(包含float
类型和double
类型) -
%g
:6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的e
为小写 -
%G
:等同于%g
,唯一的区别是指数部分的E
为大写 -
%hd
:十进制 short int 类型 -
%ho
:八进制 short int 类型 -
%hx
:十六进制 short int 类型 -
%hu
:unsigned short int 类型 -
%ld
:十进制 long int 类型 -
%lo
:八进制 long int 类型 -
%lx
:十六进制 long int 类型 -
%lu
:unsigned long int 类型 -
%lld
:十进制 long long int 类型 -
%llo
:八进制 long long int 类型 -
%llx
:十六进制 long long int 类型 -
%llu
:unsigned long long int 类型 -
%Le
:科学计数法表示的 long double 类型浮点数 -
%Lf
:long double 类型浮点数 -
%n
:已输出的字符串数量,该占位符本身不输出,只将值存储在指定变量之中 -
%o
:八进制整数 -
%p
:指针 -
%s
:字符串 -
%u
:无符号整数(unsigned int) -
%x
:十六进制整数 -
%zd
:size_t
类型 -
%%
:输出一个百分号
1.6.4、输出格式
printf()
可以定制占位符的输出格式。
-
限定宽度
//默认输出 printf("%5d\n", 123); // 输出为 " 123" //左对齐输出 printf("%-5d\n",123);// 输出为"123 "
整数:
%5d
表示这个占位符的宽度至少为5位
。如果不满5位,对应的值的前面会添加空格。输出
值默认
为右对齐
,如果希望改为左对齐
,可以在占位符的%
的后面插入
一个-
号。printf("%12f\n", 123.45);// 输出 " 123.450000"
小数:
%12f
表示输出的浮点数最少要占据12位
。由于小数的默认显示精度是小数点后6位,所以123.45
输出结果的头部会添加2个空格。 -
总是显示正负号
默认情况下,
printf()
不对正数显示+
号,只对负数显示-
号。如果想让正数也输出+
号,可以在占位符的%
后面加一个+
。printf("%+d\n", 12); // 输出 +12 printf("%+d\n", -12); // 输出 -12
-
限定小数位数
希望小数点后面只保留两位,占位符可以写成
%.2f
。printf("%.2f\n", 1.4);// 输出 "1.40" //与限定宽度占位符,结合使用 printf("%6.2f\n", 1.4);// 输出为 " 1.40"
-
输出部分字符串
%s
占位符用来输出字符串,默认是全部输出。如果只想输出开头的部分,可以用%.[m]s
指定输出的长度,其中[m]
代表一个数字,表示所要输出的长度。printf("%.5s\n", "hello world");// 输出 hello
2、变量
变量可以理解成一块内存区域的名字
。通过变量名,可以引用这块内存区域,获取里面存储的值。由于值可能发生变化,所以称为变量,否则就是常量了
2.1、变量名
变量名在C语言里面属于标识符,命名有严格的规范:
- 只能由字母(包括大写和小写)、数字和下划线(
_
)组成 - 不能以数字开头
- 长度不能超过63个字符
2.2、变量的声明
C语言的变量,必须先声明后使用
。如果一个变量没有声明,就直接使用,会报错。每个变量都有自己的类型。声明变量时,必须把变量的类型告诉编译器。
int height; //声明了一个int类型的变量 height
如果几个变量具有相同类型,可以在同一行声明。
int height, width;
// 等同于
int height;//声明变量的语句必须以分号结尾
int width;
2.3、变量的赋值
C 语言会在变量声明时,就为它分配内存空间,但是不会清除内存里面原来的值。这导致声明变量以后,变量会是一个随机的值。所以,变量一定要赋值以后才能使用。
int num;//声明了一个整型变量
num = 42;//将数值42赋值给变量num
//多个相同类型变量的赋值,可以写在同一行
int x = 1, y = 2;
2.4、变量的作用域
作用域指的是变量生效的范围。C语言的变量作用域主要有两种:
-
文件作用域:在源码文件顶层声明的变量,从声明的位置到文件结束都有效
int x = 1; int main(void) { printf("%i\n", x); }
-
块作用域:由大括号(
{}
)组成的代码块,它形成一个单独的作用域。凡是在块作用域里面声明的变量,只在当前代码块有效,代码块外部不可见。int a = 12; if (a == 12) { int b = 99; printf("%d %d\n", a, b); // 12 99 } printf("%d\n", a); // 12 printf("%d\n", b); // 出错