一、注释(Comment)
格式:/* 注释内容 */
- 编译器忽略
/*和*/之间所有字符; - 可以放在空格、制表符、换行能出现的任意位置;
- 不支持嵌套注释;
/* 注释像这样嵌套 会报错/* 注释内容 */内容 */ - 作用:解释代码,提升可读性。
最早先出现多行注释,后来版本才有单行注释
C99 新增单行注释
//
单行注释,就是从 //开始 到这一行的行尾 都会被注释
示例
/* print Fahrenheit-Celsius table
for fahr = 0, 20, ..., 300 */
// int a = 12; 单行注释 Code language: C++ (cpp)
二、变量声明 Declaration
规则
- C语言变量必须先声明,后使用;
- 传统C:声明集中放在函数开头、所有执行语句之前;
- 声明格式:
类型 变量名1, 变量名2;
基础数据类型
| 类型 | 含义 | 简要说明 |
|---|---|---|
int | 整型 | 保存整数;常见16位 / 32位 |
float | 单精度浮点数 | 保存带小数的数值 |
char | 字符型 | 单字节字符 |
short | 短整型 | 占用空间 ≤ int |
long | 长整型 | 占用空间 ≥ int |
double | 双精度浮点数 | 精度高于float |
注意:各类类型占用字节依赖机器平台,没有统一固定大小。
示例
int age, num; // 声明两个整型变量
float lower,price,salary;// 声明浮点变量Code language: C++ (cpp)
三、赋值语句 Assignment
说明
=是赋值运算符,数学不等于;- 每条语句以分号
;结尾; - 作用:把右侧表达式的值存入左侧变量。
示例
num = 10;
price = 30;
salary = 2000;
age = num;Code language: C++ (cpp)
四、while 循环
语法
while(条件表达式) {
循环体语句;
}Code language: C++ (cpp)
执行流程
- 计算括号内条件;
- 条件为真:执行大括号内循环体;
- 条件为假:循环终止,执行循环后面代码;
- 重复1~3。
注意点
- 循环体多条语句必须加大括号
{}; - 只有一条语句时可以省略大括号:
while (i < j)
i = i * 2;Code language: C++ (cpp)
- 缩进仅方便人类阅读,编译器不关心空格,但工程必须规范缩进。
例子
下面是一个经典的例子,是一个温度的转换代码,是C语言创始人的书本中的例子
公式如下:
#include <stdio.h>
/* 华氏度转摄氏度 整数版本 */
int main()
{
// 变量声明
int fahr, celsius;
int lower, upper, step;
// 初始化
lower = 0;
upper = 300;
step = 20;
fahr = lower;
// while循环主体(你给出的代码段)
while (fahr <= upper) {
celsius = 5 * (fahr - 32) / 9;
printf("%d\t%d\n", fahr, celsius);
fahr = fahr + step;
}
return 0;
}Code language: C++ (cpp)
执行结果
假设你的源码放在C:\cdemo\hello.c里面
C:\cdemo>gcc hello.c -o hello.exe
C:\cdemo>hello
0 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148Code language: CSS (css)
五、算术表达式
1. 整数除法规则
两个int相除叫: 整数除法,直接截断小数部分(舍去小数,不是四舍五入)
5 / 9 // 两边都是int → 结果 0
9 / 5 // 结果 1Code language: C++ (cpp)
注意一点,除法的时候,要注意如果两边是整数,则结果可能和你不一样,C语言对于两边都是整数int的除法,会去掉结果的小数部分的。
celsius = 5 * (fahr - 32) / 9; // ✅可行
celsius = (5/9) * (fahr - 32); // ❌错误!5/9直接得到0Code language: C++ (cpp)
2. 浮点运算规则
常量带有小数点 5.0、9.0 : 浮点常量(float/double)
把5 和9 换成浮点数float类型,那么除法的结果就会保留小数部分,这就和我们预想的一样了,结果就更真实了。
5.0 / 9.0 // 浮点数除法,得到约0.55555Code language: C++ (cpp)
3. 隐式类型转换(混合运算)
当运算符一边int、一边float:
int 自动转换成浮点数,再进行浮点运算
fahr - 32;
// fahr是float,则32(int)自动转为32.0参与运算Code language: C++ (cpp)
浮点版本正确写法:
celsius = (5.0 / 9.0) * (fahr - 32.0);Code language: C++ (cpp)
六、printf 格式化输出函数
重点:
printf不属于C语言核心关键字,是标准库函数,需要#include <stdio.h>标准库是官方写好的代码,你可以直接使用。
printf("格式字符串", 参数1, 参数2, ...);Code language: JavaScript (javascript)
格式字符串内 % 是占位符,用来替换后面参数。
常用格式说明符
| 格式符 | 含义 | 例子输出效果 |
|---|---|---|
%d | 十进制整数 | printf("%d", 20) → 20 |
%3d | 占3字符宽度整数,右对齐 | 20 |
%f | 浮点数 | 默认输出6位小数 |
%3.0f | 总宽度3,0位小数 | 20 |
%6.1f | 总宽度6,1位小数 | -17.8 |
%6.2f | 宽度6,2位小数 | 20.50 |
%o | 八进制 | |
%x | 十六进制 | |
%c | 单个字符 | |
%s | 字符串 | |
%% | 输出一个 % |
示例
printf("%3.0f %6.1f\n", fahr, celsius);Code language: C++ (cpp)
注意事项
占位符数量、类型必须和后面参数一一匹配,否则输出错误结果。\t 制表符,\n 换行符。
七、两个版本温度转换
1:整数运算(精度丢失)
#include <stdio.h>
main()
{
int fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr-32) / 9;
printf("%3d %6d\n", fahr, celsius);
fahr = fahr + step;
}
}Code language: C++ (cpp)
缺点:整数除法截断,0°F 输出 -17,真实值 -17.8
执行结果
0 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148
2:浮点运算(精度更高)
#include <stdio.h>
main()
{
float fahr, celsius;
float lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = (5.0/9.0) * (fahr - 32.0);
printf("%3.0f %6.1f\n", fahr, celsius);
fahr = fahr + step;
}
}Code language: C++ (cpp)
执行结果
0 -17.8
20 -6.7
40 4.4
60 15.6
80 26.7
100 37.8
120 48.9
140 60.0
160 71.1
180 82.2
200 93.3
220 104.4
240 115.6
260 126.7
280 137.8
300 148.9Code language: CSS (css)
摄氏度转华氏度
转换公式:
#include <stdio.h>
main()
{
float celsius, fahr;
float lower, upper, step;
lower = 0;
upper = 100;
step = 10;
celsius = lower;
printf("Celsius Fahr\n");
while (celsius <= upper) {
fahr = celsius * 9.0 / 5.0 + 32.0;
printf("%3.0f %6.1f\n", celsius, fahr);
celsius = celsius + step;
}
}Code language: C++ (cpp)
