# 超详细C语言学习Demo(适合零基础)
这个Demo将带你从最基本的C语言概念开始,逐步构建一个包含多种功能的小程序。每个部分都有详细注释和解释说明。
## 完整代码
```c
/*
* 文件名:c_learning_demo.c
* 作者:Your Name
* 描述:一个全面的C语言学习示例程序
* 包含:变量、运算符、控制流、函数、数组、指针、结构体等核心概念
*/
#include <stdio.h> // 标准输入输出
#include <stdbool.h> // 布尔类型支持
#include <stdlib.h> // 随机数和系统函数
#include <time.h> // 时间函数
#include <math.h> // 数学函数
#include <string.h> // 字符串处理
// 宏定义常量
#define PI 3.1415926
#define MAX_STUDENTS 3
// 结构体定义
typedef struct {
char name[50];
int age;
float score;
} Student;
// 函数声明
void basic_concepts();
void control_flow_demo();
void function_demo(int num);
void array_and_string_demo();
void pointer_demo();
void struct_demo();
int factorial(int n);
bool is_prime(int num);
void swap(int *a, int *b);
int main() {
printf("\n========== C语言全面学习Demo ==========\n\n");
// 1. 基础概念
basic_concepts();
// 2. 控制流
control_flow_demo();
// 3. 函数
function_demo(5);
// 4. 数组和字符串
array_and_string_demo();
// 5. 指针
pointer_demo();
// 6. 结构体
struct_demo();
printf("\n========== 程序结束 ==========\n");
return 0;
}
// 1. 基础概念:变量、数据类型、运算符
void basic_concepts() {
printf("\n=== 1. 基础概念 ===\n");
// 变量声明和初始化
int integer_var = 10; // 整型
float float_var = 3.14; // 单精度浮点
double double_var = 3.1415926; // 双精度浮点
char char_var = 'A'; // 字符
bool bool_var = true; // 布尔
// 输出变量值
printf("整型变量: %d\n", integer_var);
printf("浮点变量: %.2f\n", float_var); // %.2f表示保留两位小数
printf("双精度变量: %.7lf\n", double_var);
printf("字符变量: %c\n", char_var);
printf("布尔变量: %d\n", bool_var); // true=1, false=0
// 运算符演示
int a = 15, b = 4;
printf("\n运算符演示:\n");
printf("%d + %d = %d\n", a, b, a + b);
printf("%d - %d = %d\n", a, b, a - b);
printf("%d * %d = %d\n", a, b, a * b);
printf("%d / %d = %d (整数除法)\n", a, b, a / b);
printf("%d / %d = %.2f (浮点除法)\n", a, b, (float)a / b);
printf("%d %% %d = %d (取模运算)\n", a, b, a % b);
// 宏常量使用
printf("\n宏常量PI的值: %.4f\n", PI);
}
// 2. 控制流:条件语句和循环
void control_flow_demo() {
printf("\n=== 2. 控制流 ===\n");
// if-else语句
int age = 18;
printf("\nif-else语句:\n");
if (age < 13) {
printf("儿童\n");
} else if (age < 18) {
printf("青少年\n");
} else {
printf("成人\n");
}
// switch语句
char grade = 'B';
printf("\nswitch语句:\n");
switch (grade) {
case 'A':
printf("优秀\n");
break;
case 'B':
printf("良好\n");
break;
case 'C':
printf("及格\n");
break;
default:
printf("不及格\n");
}
// for循环
printf("\nfor循环打印1-5:\n");
for (int i = 1; i <= 5; i++) {
printf("%d ", i);
}
printf("\n");
// while循环
printf("\nwhile循环计算1-10的和:\n");
int sum = 0, j = 1;
while (j <= 10) {
sum += j;
j++;
}
printf("1到10的和: %d\n", sum);
// do-while循环
printf("\ndo-while循环:\n");
int k = 5;
do {
printf("%d ", k);
k--;
} while (k > 0);
printf("\n");
}
// 3. 函数:定义和调用
void function_demo(int num) {
printf("\n=== 3. 函数 ===\n");
// 调用函数计算阶乘
printf("\n计算%d的阶乘:\n", num);
printf("%d! = %d\n", num, factorial(num));
// 调用函数判断素数
printf("\n判断素数:\n");
for (int i = 2; i <= 10; i++) {
if (is_prime(i)) {
printf("%d 是素数\n", i);
} else {
printf("%d 不是素数\n", i);
}
}
}
// 4. 数组和字符串
void array_and_string_demo() {
printf("\n=== 4. 数组和字符串 ===\n");
// 一维数组
int numbers[5] = {3, 1, 4, 1, 5};
printf("\n一维数组:\n");
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
// 二维数组
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
printf("\n二维数组:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
// 字符串
char greeting1[] = "Hello"; // 自动计算长度
char greeting2[10] = "World";
printf("\n字符串:\n");
printf("%s %s\n", greeting1, greeting2);
printf("字符串长度: %lu, %lu\n", strlen(greeting1), strlen(greeting2));
// 字符串操作
strcat(greeting1, " ");
strcat(greeting1, greeting2);
printf("连接后的字符串: %s\n", greeting1);
}
// 5. 指针
void pointer_demo() {
printf("\n=== 5. 指针 ===\n");
int var = 20;
int *ptr = &var; // ptr指向var的地址
printf("\n指针基础:\n");
printf("变量var的值: %d\n", var);
printf("变量var的地址: %p\n", &var);
printf("指针ptr存储的地址: %p\n", ptr);
printf("通过指针访问的值: %d\n", *ptr);
// 指针和数组
int arr[3] = {10, 20, 30};
int *arr_ptr = arr; // 指向数组第一个元素
printf("\n指针和数组:\n");
for (int i = 0; i < 3; i++) {
printf("arr[%d] = %d (通过指针: %d)\n",
i, arr[i], *(arr_ptr + i));
}
// 指针作为函数参数
int x = 5, y = 10;
printf("\n交换前: x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("交换后: x = %d, y = %d\n", x, y);
}
// 6. 结构体
void struct_demo() {
printf("\n=== 6. 结构体 ===\n");
// 创建结构体实例
Student students[MAX_STUDENTS] = {
{"张三", 20, 85.5},
{"李四", 19, 92.0},
{"王五", 21, 78.5}
};
printf("\n学生信息:\n");
for (int i = 0; i < MAX_STUDENTS; i++) {
printf("学生%d: 姓名=%s, 年龄=%d, 成绩=%.1f\n",
i+1, students[i].name, students[i].age, students[i].score);
}
// 结构体指针
Student *stu_ptr = &students[0];
printf("\n通过指针访问:\n");
printf("第一个学生: %s, 年龄: %d\n", stu_ptr->name, stu_ptr->age);
}
// 函数定义:计算阶乘
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
}
return n * factorial(n - 1); // 递归调用
}
// 函数定义:判断素数
bool is_prime(int num) {
if (num <= 1) return false;
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
// 函数定义:交换两个变量的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
```
## 如何编译和运行
1. **保存代码**:将上面的代码复制到一个文本编辑器中,保存为`c_learning_demo.c`
2. **编译程序**:
- 在Linux/Mac终端:
```bash
gcc c_learning_demo.c -o c_learning_demo -lm
```
注意:`-lm`是链接数学库的必要参数
- 在Windows命令提示符:
```cmd
gcc c_learning_demo.c -o c_learning_demo.exe -lm
```
3. **运行程序**:
- Linux/Mac:
```bash
./c_learning_demo
```
- Windows:
```cmd
c_learning_demo.exe
```
## 学习路径说明
这个Demo按照以下顺序组织C语言核心概念:
1. **基础概念**:变量、数据类型、运算符、宏定义
2. **控制流**:条件语句(if-else, switch)、循环(for, while, do-while)
3. **函数**:定义、调用、参数传递、返回值
4. **数组和字符串**:一维数组、二维数组、字符串操作
5. **指针**:指针基础、指针与数组、指针作为函数参数
6. **结构体**:定义、初始化、访问成员、结构体指针
## 扩展练习建议
1. 修改`basic_concepts()`函数,尝试更多运算符(如位运算符)
2. 在`control_flow_demo()`中添加一个打印九九乘法表的循环
3. 为`Student`结构体添加更多字段(如学号、性别)
4. 尝试使用指针遍历字符串并统计元音字母数量
5. 添加文件I/O操作,将学生信息写入文件
这个Demo涵盖了C语言最基础也是最重要的概念,适合作为学习起点。建议先理解每一部分的代码,然后尝试修改和扩展。