C语言基本语法

C语言基本语法

语句

C语言规定,语句必须使用分号结尾,除非有明确规定不写分号。

1
int x = 1;

声明了整数变量 x, 并且赋值为 1.
多个语句写一行的:

1
int x; x = 1;

单个分号称为“空语句”,虽然毫无作用

表达式

表达式是一个计算式,用来获取值。C语言的各种计算,主要通过表达式完成

1
1 + 2 

上述代码就是一个表达式,用来获取1+2的算数结果
表达式加上分号,也可以成为语句,但是没有实际作用

1
2
3+4;
9;

表达式与语句的区别主要是以下两点:

1. 语句可以包含表达式,但是表达式本身不构成语句。
2. 表达式都有返回值,语句不一定有。语句用来执行某个命令,很多时候不需要返回值,比如变量声明语句(int x = 1)就没有返回值。

语句块

C语言允许多个语句使用一对大括号 {}, 组成一个块,也称为复合语句。在语法上,语句块可以视为多个语句组成的一个复合语句。

1
2
3
{
int x = 1;
}

上面大括号形成了一个语句块,大括号结尾不需要添加分号。

空格

C语言里面的空格,主要用来帮助编译器区分语法单位。如果语法单位不用空格就能区分,空格就不是必须的,只是为了增加代码的可读性。

1
2
3
int x = 1;
// 等同于
int x=1;

空格还用来表示缩进。多层级的代码有没有缩进,其实对于编译器来说并没有差别,没有缩进的代码也是可以运行的。强调代码缩进,只是为了增强代码的可读性,便于区分代码块。

注释

注释是对代码的说明,编译器会忽略注释,也就是说, 注释对实际代码没有影响。

1
2
3
4
5
/* 注释 */

/*
这是一行注释
*/

这种注释可以插在行内:

1
int open(char *s /* file name */, int mode);

双斜杠也是注释, //属于行级注释

1
2
3
// 这是一行注释

int x = 1; // 这是一行注释
1
printf("// hello /* world */ ");

双引号里面的注释符号,都会被视为普通字符,没有注释作用。

printf()

基本用法

printf()的作用是将参数文本输出到屏幕。它名字里面的f 代表 format (格式化),表示可以定制输出文本格式
printf() 不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行,为了让光标移动到下一行的开头,可以在输出文本的结束,添加一个换行符 \n 。

1
printf("Hello \n World \n");

printf() 是标准库的头文件 stdio.h 定义的。 使用这个函数之前,必须在源码文件头部引入这个头文件。

1
2
3
4
5
#include <stdio.h>

int main(void) {
printf("Hello World \n");
}
占位符
1
2
3
4
5
6
7
8
9
// 输出整数类型
printf("this int %i \n",3);

// 字符串类型
printf("this string %s \n", "str");

// 多个占位符
printf("%s, %d\n", "zkep", 18);

printf() 占位符:

  • %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 类型
  • %llu: unsigned long long int 类型
  • %Le: 科学计数法表示的 long double 类型浮点数
  • %Lf: long double 类型浮点数
  • %n: 已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中
  • %o:八进制整数
  • %p: 指针
  • %s: 字符串
  • %u: 无符号整数
  • %x: 十六进制整数
  • %zd: size_t 类型
  • %%: 输出一个百分号
输出格式

printf() 可以限定占位符的最小宽度

1
printf("%-5d\n",123); // 输出为 "123  "

对于小数,这个限定符会限制所有数字的最小显示宽度

1
2
// 输出 "  123.450000"
printf("%12f\n",123.45);

%12f表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以123.45输出结果的头部会添加2个空格

显示正负号

默认情况下,printf() 不对整数显示 + 号, 只对负数显示 - 号。 如果想让整数也输出 + 号, 可以在占位符的 % 后加一个 + 。

1
2
printf("%+d\n", 12); // 输出 +12
printf("%+d\n", -12); // 输出 -12

%+d 可以确保输出的数值,总是带有正负号。

限定小数位数
小数点后保留2位,占位符可以写成 %2.f

1
2
// 输出为 "0.50"
printf("%2.f\n", 0.5);

输出部分字符串
%s 占位符用来输出字符串,默认是全部输出,如果只需输出开头部分,就可以使用%.[m]s 指定输出的长度,其中 [m] 代表一个数字,表示所要输出的长度。

1
2
// 输出 hello
printf("%.5s\n", "hello world");

上述示例中,占位符 %.5s 表示只输出字符串 “hello world” 的前5个字符串 “hello”

标准库,头文件

C语言已经内置了许多的功能,printf() 函数就是其中的一个, 这些C语言自带的所有功能,统称为 “标准库”,
因为它们是写入标准的,怎么样使用,有哪些功能,都是规定好的,这样就保证了代码的规范和可移植

不同功能的定义在不同的头文件里,这些文件统称为“头文件”,(header file)。如果系统自带一个功能,就一定还会
自带描述这个功能的头文件,比如printf() 的头文件就是系统自带的 stdio.h 。 头文件通常的后缀是 .h

如果要使用某个功能,就必须先加载对应的头文件,加载使用的是 #include 命令。 这就是为什么使用printf()
之前,必须要先加载 stdio.h

1
#include <stdio.h>