一、🧱 基本程序结构
每个C程序都有一个基本的框架,这是程序执行的起点。
#include <stdio.h> // 包含标准输入输出头文件,这样我们才能使用 printf 等函数
int main() { // main 函数是程序的入口,程序从这里开始执行
// 你的代码写在这里
printf("Hello, World!\n"); // 打印 Hello, World! 到屏幕,\n 表示换行
return 0; // 返回 0 通常表示程序成功执行完毕
}
要点说明:
#include是预处理器指令,用于包含其他文件(通常是头文件.h)。stdio.h包含了输入输出函数的声明,如printf和scanf。main()函数是必须的,它是C程序的入口点。程序执行从这里开始。return 0;表示程序正常退出。非零值通常表示错误。
二、🔢 数据类型、变量与常量
程序需要存储和操作数据,这就需要变量和常量。
1. 基本数据类型
C语言提供了几种基本数据类型来存放不同类型的数据:
| 数据类型 | 含义 | 示例 | 说明 |
|---|---|---|---|
int | 整型 | int age = 25; | 存储整数,如 100, -5 |
float | 单精度浮点型 | float pi = 3.14f; | 存储小数,精度较低 |
double | 双精度浮点型 | double e = 2.71828; | 存储小数,精度比 float 高 |
char | 字符型 | char grade = 'A'; | 存储单个字符,用单引号括起 |
示例代码:变量定义与初始化
#include <stdio.h>
int main() {
int age = 30; // 定义整型变量并初始化
float height = 1.75f; // 定义浮点型变量并初始化,'f' 表示 float 类型
char grade = 'A'; // 定义字符型变量并初始化
double weight = 65.5; // 定义双精度浮点变量
// 打印变量值
printf("Age: %d\n", age); // %d 用于输出整数
printf("Height: %.2f meters\n", height); // %.2f 表示保留两位小数
printf("Grade: %c\n", grade); // %c 用于输出字符
printf("Weight: %.1f kg\n", weight); // %.1f 表示保留一位小数,double也可以用%f输出
return 0;
}
要点说明:
- 变量命名规则:只能由字母、数字和下划线组成,且不能以数字开头。C语言区分大小写。
- 初始化:好的编程习惯是在定义变量时就赋予初始值,避免使用未初始化的变量导致不可预知的结果。
2. 常量
常量是其值在程序运行期间不可改变的量。
const修饰的变量:表示变量是只读的。const double PI = 3.14159; // PI 的值之后不能再修改#define宏常量:在编译前进行文本替换。#define MAX_SIZE 100 // 注意没有分号,且通常用大写字母命名
三、📥 输入与输出
程序需要与用户交互,接收输入和显示输出。
1. 格式化输出 printf()
printf() 函数用于将格式化的数据输出到标准输出(通常是屏幕)。
常用格式说明符:
| 格式符 | 含义 |
|---|---|
%d | 输出有符号十进制整数 |
%f | 输出浮点数 |
%c | 输出单个字符 |
%s | 输出字符串 |
你可以使用精度控制输出格式,例如 %.2f 表示保留两位小数。
2. 格式化输入 scanf()
scanf() 函数用于从标准输入(通常是键盘)读取格式化的数据。
重要: 在使用 scanf 读取变量时,必须在变量名前加上 & 符号(取地址运算符),表示将输入的值存储到该变量所在的内存地址中。
#include <stdio.h>
int main() {
int num1, num2;
float price;
char ch;
printf("请输入两个整数,用空格隔开:");
scanf("%d %d", &num1, &num2); // 读取两个整数,注意 & 符号
printf("请输入一个浮点数:");
scanf("%f", &price); // 读取一个浮点数
printf("请输入一个字符:");
scanf(" %c", &ch); // 注意 %c 前面的空格,用于消耗之前输入留下的换行符
printf("你输入的数字是:%d 和 %d\n", num1, num2);
printf("你输入的价格是:%.2f\n", price);
printf("你输入的字符是:%c\n", ch);
return 0;
}
四、🧮 运算符与表达式
运算符用于对变量和常量进行各种操作。
| 类型 | 运算符 | 示例 | 说明 |
|---|---|---|---|
| 算术运算符 | +, -, *, /, % (取模/求余) | c = a % b; | 计算余数 |
| 关系运算符 | >, <, ==, !=, >=, <= | if (a == b) {...} | 判断相等 |
| 逻辑运算符 | && (与), ` | (或),!` (非) | |
| 赋值运算符 | =, +=, -=, *=, /= | a += 5; // 等价于 a = a + 5; |
示例代码:
#include <stdio.h>
int main() {
int a = 10, b = 3;
float result;
result = a / (float)b; // 将b强制转换为float,使除法变为浮点除法
printf("a / b = %.2f\n", result); // 输出 3.33
printf("a %% b = %d\n", a % b); // 输出 1,%% 用于输出一个百分号
if (a > 5 && b < 5) { // 逻辑与运算
printf("Both conditions are true.\n");
}
a += 20; // 等价于 a = a + 20;
printf("a is now %d\n", a); // 输出 30
return 0;
}
五、🎛️ 控制流语句
控制程序执行的流程,是实现复杂逻辑的关键。
1. 条件语句 if - else
根据条件的真假执行不同的代码块。
#include <stdio.h>
int main() {
int score;
printf("请输入你的分数 (0-100): ");
scanf("%d", &score);
if (score >= 90) {
printf("成绩优秀!\n");
} else if (score >= 70) { // 注意是 else if
printf("成绩良好。\n");
} else if (score >= 60) {
printf("成绩及格。\n");
} else {
printf("成绩不及格,需要努力。\n");
}
return 0;
}
2. 选择语句 switch - case
当一个变量有多种可能的取值时,switch 语句比多个 if-else 更清晰。
#include <stdio.h>
int main() {
int day;
printf("请输入星期数字 (1-7): ");
scanf("%d", &day);
switch (day) { // switch 后的表达式必须是整型或字符型
case 1: // case 后的值必须是整型常量或常量表达式
printf("星期一\n");
break; // break 至关重要,用于跳出整个 switch 块
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
// ... 可以继续写 case 4, 5, 6
case 7:
printf("星期日\n");
break;
default: // 当所有 case 都不匹配时,执行 default
printf("输入错误!请输入 1-7 之间的数字。\n");
}
return 0;
}
⚠️ 注意:忘记写 break 会导致“穿透”现象,即程序会继续执行下一个 case 的语句,直到遇到 break 或 switch 结束。
3. 循环语句
用于重复执行一段代码。
for循环:适合已知循环次数的场景。#include <stdio.h> int main() { // for (初始化; 循环条件; 增量表达式) for (int i = 0; i < 5; i++) { // 循环5次,i从0到4 printf("i = %d\n", i); } return 0; }while循环:适合循环次数不确定,但循环条件明确的场景。#include <stdio.h> int main() { int count = 0; while (count < 3) { // 只要条件为真,就继续循环 printf("Hello while loop! Count: %d\n", count); count++; // 不要忘记改变循环条件,否则可能成为死循环 } return 0; }do-while循环:先执行一次循环体,再判断条件。至少执行一次。#include <stdio.h> int main() { int num; do { printf("请输入一个正数:"); scanf("%d", &num); } while (num <= 0); // 条件检查在循环体之后 printf("你输入的是: %d\n", num); return 0; }
4. 循环控制 break 和 continue
break:立即终止整个循环或switch语句。continue:跳过本次循环中剩余的代码,立即开始下一次循环。
#include <stdio.h>
int main() {
// 示例:break
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当 i 等于 5 时,跳出整个循环
}
printf("%d ", i); // 输出: 0 1 2 3 4
}
printf("\nBreak example ended.\n");
// 示例:continue
for (int j = 0; j < 6; j++) {
if (j == 3) {
continue; // 当 j 等于 3 时,跳过下面的打印,直接进行 j++
}
printf("%d ", j); // 输出: 0 1 2 4 5
}
printf("\nContinue example ended.\n");
return 0;
}
六、📝 注释
注释用于解释代码,提高可读性,编译器会忽略它们。
- 单行注释:以
//开始,到行尾结束。// 这是单行注释 int age; // 声明一个年龄变量 - 多行注释:以
/*开始,以*/结束。/* 这是一个多行注释, 可以跨越多行 */
1198

被折叠的 条评论
为什么被折叠?



