目录
- 引言
- [1. 标准库与头文件](#1. 标准库与头文件)
- [2. 语句](#2. 语句)
- [3. 表达式](#3. 表达式)
-
- [3.1 表达式在赋值语句中](#3.1 表达式在赋值语句中)
- [3.2 表达式在控制结构中](#3.2 表达式在控制结构中)
- [3.3 表达式作为函数参数](#3.3 表达式作为函数参数)
- [3.4 表达式和语句的区别](#3.4 表达式和语句的区别)
- [4. 语句块](#4. 语句块)
- [5. 空格](#5. 空格)
- [6. 注释](#6. 注释)
- [7. printf() 函数](#7. printf() 函数)
-
- [7.1 基本用法](#7.1 基本用法)
- [7.2 占位符](#7.2 占位符)
- [7.3 输出格式](#7.3 输出格式)
引言
cpp
#include <stdio.h>
int main(void) {
int a = 8888;
printf("Hello World, %d\n", a);
return 0;
}
这是一个非常简单的入门程序,但也是一个完整的C程序,麻雀虽小五脏俱全,包含了众多C语言基本语法知识:
- 头文件
- 主函数
- 语句
- 变量
- 表达式
- 数据类型
- 标准库函数
1. 标准库与头文件
简单的说,C程序员在编写C程序时,只要干两件事:
- ①自己编写函数
- ②调用别人写的函数
为什么要调用别人写的函数呢?
主要是为了提高效率,如果每个程序都从0到1开始写,很多基础、通用的功能被实现多次,即降低效率,又使代码变得臃肿不便于维护。
C语言提供了大量的函数来完成各种基础、通用的任务,这些函数的集合称为标准库 ,使用这些函数前需要声明这些函数,即让编译器知道这些函数是存在的,函数声明包含在一类特殊的文件中,称之为头文件。
例如, 要使用标准库中的输出函数 printf()
,这个函数的声明在头文件studio.h
头中,需要在代码文件最前面指定,指定头文件的语句包含两部分:
- ①预处理指令
#include
- ②尖括号包围的头文件名
例如,要包含标准输出库的头文件,语法如下:
c
#include <stdio.h>
2. 语句
在C语言中,语句是构成程序的基本单位,用于执行特定的操作。每个语句以分号;
结束。例如,一个简单的赋值语句:
c
int a = 5; // 将整数5赋值给变量a
语句以逗号为结束标志,一行可以有多个语句,如:
c
int a = 5; int b = 6;
实际上,把一条语句写成多行,也是没有问题的:
c
int
a
=
5
;
编译器始终会以逗号作为当前语句结束的标志。
逗号可以成为一个单独的语句,称之为空语句
,空语句没有任何意义。
3. 表达式
表达式是计算得到一个值的任何合法的C代码片段。它可以是简单的变量引用,如 a
,也可以是复杂的数学运算,如 a + b * 3
。
表达式可以出现在赋值语句中、控制结构中或作为函数参数。
3.1 表达式在赋值语句中
在C语言中,赋值语句通常涉及一个表达式计算结果赋给一个变量。表达式可以是简单的常量、变量,也可以是复杂运算的结果。
c
#include <stdio.h>
int main() {
int a = 5, b = 3;
int sum = a + b; // 这里 "+ b" 是一个表达式
printf("Sum: %d\n", sum);
return 0;
}
在这个例子中,a + b
就是一个表达式,计算结果为8,然后这个结果被赋值给了变量sum
。
3.2 表达式在控制结构中
控制结构(如if语句、循环语句)中常常使用表达式来决定程序的控制流程。表达式的真假(非零值视为真,零值视为假)会影响代码的执行路径。
c
#include <stdio.h>
int main() {
int age = 18;
if (age >= 18) { // 这里的 "age >= 18" 是一个布尔表达式
printf("You are an adult.\n");
} else {
printf("You are not an adult yet.\n");
}
return 0;
}
这里的age >= 18
是比较表达式,判断年龄是否达到或超过18岁,从而决定了输出哪条消息。
3.3 表达式作为函数参数
函数调用时,传递给函数的可以是直接的值,也可以是表达式的结果。
c
#include <stdio.h>
void printSum(int x, int y) {
printf("Sum: %d\n", x + y);
}
int main() {
int num1 = 10, num2 = 20;
printSum(num1, num1 + num2); // "num1 + num2" 作为函数参数的表达式
return 0;
}
在printSum(num1, num1 + num2)
中,num1 + num2
是一个表达式,计算结果30作为第二个参数传递给了printSum
函数。
3.4 表达式和语句的区别
表达式是任何可以计算出一个值的代码片段,表达式的核心在于"计算",它关注于产生一个结果,可能是语句的一个部分。
语句是程序执行的一个基本单位,代表了一个完整的执行动作。
二者的区别:
- 语句包含表达式,表达式是语句的一部分
- 表达式一定有返回值,语句不一定有
4. 语句块
语句块是一组由花括号 {}
括起来的语句集合。它们通常用来组织相关的操作,形成逻辑上的单元,比如函数体或者if、for等控制结构的主体。
c
{
int x = 1;
printf("Value of x: %d\n", x);
}
5. 空格
虽然C语言对空格的要求较为宽松,但良好的空格使用习惯能显著提升代码的可读性。例如,在运算符两边添加空格,或在不同逻辑块之间使用空行。
6. 注释
注释是程序员与代码之间的沟通桥梁,帮助理解代码的功能和意图。C语言支持两种注释方式:
- 单行注释:以
//
开头,直到行尾,整行都是注释,有效代码不能同行
c
#include <stdio.h>
int main() {
int a = 5, b = 3;
// 这里 "+ b" 是一个表达式
int sum = a + b;
printf("Sum: %d\n", sum);
return 0;
}
- 多行注释:以
/*
开始,以*/
结束,二者之间的所有内容都是注释,可以包含多行,多行注释可以与有效代码同行,因为其有明确的开始、结束标志
c
#include <stdio.h>
/*
主函数
打印加法计算结果
*/
int main() {
int a = 5, b = 3;
// 这里 "+ b" 是一个表达式
int sum = a/* 多行注释可以插在代码中间 */ + b;
printf("Sum: %d\n", sum);
return 0;
}
7. printf() 函数
printf()
是C语言中最常用的输出函数,属于标准输入输出库的一部分。
7.1 基本用法
c
#include <stdio.h> // 引入标准输入输出库
int main() {
printf("Hello, World!\n"); // 输出简单的字符串
return 0;
}
7.2 占位符
占位符用于在字符串中指定位置插入变量值。
c
int age = 25;
printf("I am %d years old.\n", age); // %d 用于整数
C语言的占位符列表:
- %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类型。
- %%:输出一个百分号。
7.3 输出格式
printf()
支持多种格式化选项来控制输出的格式,如宽度、对齐、精度等。
c
float pi = 3.14159;
printf("Value of Pi: %.2f\n", pi); // 输出小数点后两位