很多人学不好C语言根本不是天赋不够而是只看知识点、不敲代码、缺少实战沉淀。C语言作为编程入门的基石、操作系统、嵌入式、底层开发的核心语言语法看似简单但指针、内存、结构体、文件操作等核心知识点抽象难懂单纯背知识点、看网课完全无法掌握。绝大多数初学者的现状是知识点一看就懂提笔写代码就废做题、实战全程卡壳。我初学C语言时踩过无数坑循环逻辑混乱、指针越界、数组使用不当、结构体参数传参报错、文件读写操作失败。后来彻底醒悟C语言是敲出来的不是看出来的。只有通过大量精简、经典、针对性极强的小Demo实战才能把零散的知识点串联起来吃透底层逻辑形成编程思维。为了帮大家快速夯实C语言基础我熬夜整理了20个全覆盖C语言核心的实战小Demo难度从入门到进阶循序渐进覆盖基础语法、循环分支、数组字符串、函数、指针、结构体、动态内存、文件操作所有必考、高频核心知识点。每个Demo都做到完整可运行代码逐行思路解析运行结果展示核心知识点总结常见坑点提醒无需额外配置复制即可编译运行。全文超6000字全程干货无废话认真练完这20个案例彻底告别C语言基础薄弱问题轻松应对考试、作业、面试入门笔试前言为什么这20个Demo能吃透C基础市面上绝大多数C语言案例要么过于复杂、嵌套过多知识点要么过于零散、不成体系初学者练完一头雾水。本次整理的20个Demo经过精细化筛选具备三大核心特点1.循序渐进梯度分明从最简单的语法输出、分支循环到难点指针、文件操作由浅入深零基础也能看懂吃透。2.针对性极强每个Demo只聚焦1-2个核心知识点精准突破薄弱点避免多知识点混淆方便针对性练习纠错。3.实用性拉满所有案例都是面试、笔试、课程设计高频考点贴合实战开发逻辑不仅练基础还能积累实战代码经验。第一阶段基础语法与流程控制Demo1-Demo6本阶段6个Demo聚焦C语言最基础的输出输入、变量运算、if分支、for/while循环、嵌套循环是所有复杂代码的基础零基础必练重点培养代码手感和逻辑思维。Demo1HelloWorld进阶格式化输出实战很多人觉得HelloWorld过于简单直接跳过实则printf格式化输出是C语言的基础核心所有后续日志打印、结果输出都依赖它。本Demo实战常用格式化输出规则掌握整数、浮点数、字符、字符串标准化输出。#include stdio.hintmain(){// 定义不同类型变量 int age20;float score95.5f;char sexM;char name[]C语言学习者;// 标准格式化输出 printf(姓名%s\n, name);printf(年龄%d\n, age);printf(性别%c\n, sex);printf(成绩%.2f\n, score);// %.2f 保留两位小数return0;}运行结果姓名C语言学习者年龄20性别M成绩95.50核心知识点总结%d整型输出、%f浮点型输出、%c字符输出、%s字符串输出%.2f可精准控制浮点数小数位数是开发、作业中最常用的格式化技巧。Demo2两数加减乘除计算器变量与运算符实战聚焦变量定义、输入函数scanf、算术运算符实现简易计算器掌握C语言数据输入输出与基础运算逻辑。#include stdio.hintmain(){float a, b;printf(请输入两个数字用空格分隔);scanf(%f %f,a,b);printf(相加结果%.2f\n, a b);printf(相减结果%.2f\n, a - b);printf(相乘结果%.2f\n, a * b);// 防止除数为0报错if(b!0){printf(相除结果%.2f\n, a / b);}else{printf(除数不能为0\n);}return0;}核心坑点提醒scanf读取变量必须加取地址符浮点数运算不会丢失小数精度整数相除会自动向下取整。Demo3判断奇偶数if-else分支经典案例最基础的分支结构实战掌握取余运算符、if-else条件判断逻辑是分支结构入门必写案例。#include stdio.hintmain(){int num;printf(请输入一个整数);scanf(%d,num);if(num %20){printf(%d 是偶数\n, num);}else{printf(%d 是奇数\n, num);}return0;}核心原理整数对2取余余数为0即为偶数否则为奇数。重点掌握**判断相等**区别于赋值符号。Demo4分数等级判定多分支if-else if模拟学生成绩评级实战多条件分支判断解决多层逻辑判断混乱问题。#include stdio.hintmain(){int score;printf(请输入学生成绩0-100);scanf(%d,score);if(score90){printf(成绩等级优秀\n);}elseif(score75){printf(成绩等级良好\n);}elseif(score60){printf(成绩等级及格\n);}else{printf(成绩等级不及格\n);}return0;}Demo51-100累加求和for循环核心实战经典for循环案例掌握循环初始化、循环条件、步进逻辑理解循环累加思想。#include stdio.hintmain(){int i,sum0;// for(初始化;循环条件;步进运算)for(i1;i100;i){sumi;// 等价于sumsum i}printf(1到100的累加和为%d\n,sum);return0;}运行结果1到100的累加和为5050Demo6九九乘法表嵌套循环经典天花板九九乘法表是C语言嵌套循环的必练案例彻底吃透双层for循环执行逻辑解决绝大多数循环嵌套难题。#include stdio.hintmain(){int i, j;// 外层循环控制行数for(i1;i9;i){// 内层循环控制列数for(j1;ji;j){printf(%d*%d%-2d , j, i, i * j);}printf(\n);// 每行结束换行}return0;}核心解析外层循环遍历1-9行内层循环根据行数动态控制列数%-2d实现左对齐排版整齐。第二阶段数组与字符串Demo7-Demo10数组和字符串是C语言数据存储的核心也是后续指针、结构体的基础4个实战Demo覆盖数组遍历、最值查找、字符串长度、字符串反转高频场景。Demo7数组最大值最小值查找实战一维数组遍历、数值对比掌握数组的基础操作逻辑。#include stdio.hintmain(){// 定义整型数组 int arr[]{12,45,7,89,23,56,3};int lensizeof(arr)/ sizeof(arr[0]);// 计算数组长度 int maxarr[0], minarr[0];// 遍历数组for(int i0;ilen;i){if(arr[i]max){maxarr[i];}if(arr[i]min){minarr[i];}}printf(数组最大值%d\n, max);printf(数组最小值%d\n, min);return0;}核心技巧sizeof(数组)/sizeof(数组元素)是通用计算数组长度的方法。Demo8数组冒泡排序经典排序算法冒泡排序是C语言必考排序算法通过双层循环实现数组升序排序吃透数组交换、循环嵌套逻辑。#include stdio.hintmain(){int arr[]{32,15,98,23,66,41};int lensizeof(arr)/ sizeof(arr[0]);int temp;// 冒泡排序核心双层循环for(int i0;ilen -1;i){for(int j0;jlen -1- i;j){// 前一个数大于后一个数则交换if(arr[j]arr[j1]){temparr[j];arr[j]arr[j1];arr[j1]temp;}}}// 遍历输出排序后数组 printf(升序排序结果);for(int i0;ilen;i){printf(%d , arr[i]);}return0;}Demo9自定义实现字符串长度计算不调用strlen库函数手动遍历字符串理解字符串结束符\0的核心作用。#include stdio.hintmain(){char str[]C语言实战Demo;int len0;// 遇到字符串结束符\0停止遍历while(str[len]!\0){len;}printf(字符串长度%d\n, len);return0;}核心知识点C语言字符串默认以\0作为结束标志不计入有效长度所有字符串操作均依赖此特性。Demo10字符串反转实战字符串数组取值、首尾交换是字符串高频面试笔试题。#include stdio.hintmain(){char str[]Hello C Language;int len0;char temp;// 计算字符串长度while(str[len]!\0){len;}// 首尾对称交换for(int i0;ilen /2;i){tempstr[i];str[i]str[len -1- i];str[len -1- i]temp;}printf(反转后的字符串%s\n, str);return0;}第三阶段函数与指针难点核心 Demo11-Demo16函数和指针是C语言的重中之重、最大难点也是区分入门和进阶的核心标志。6个精准Demo从函数封装、参数传递、指针取值、指针数组、函数指针逐一突破。Demo11自定义函数实现两数最大值掌握函数封装、形参实参、返回值逻辑学会将独立功能封装为函数优化代码结构。#include stdio.h// 自定义函数返回两个数的最大值 int getMax(int a, int b){returnab ? a:b;// 三目运算符简化写法}intmain(){int x, y;printf(请输入两个整数);scanf(%d %d,x,y);printf(最大值为%d\n, getMax(x, y));return0;}Demo12函数交换两个变量值传递VS地址传递90%初学者踩坑的知识点彻底搞懂值传递无法修改原变量指针地址传递可以修改原变量。#include stdio.h// 值传递无法修改主函数变量无效交换 void swap1(int a, int b){int tempa;ab;btemp;}// 地址传递通过指针修改原变量有效交换 void swap2(int *a, int *b){int temp*a;*a*b;*btemp;}intmain(){int x10, y20;swap1(x, y);printf(值传递交换后x%d,y%d\n, x, y);swap2(x,y);printf(地址传递交换后x%d,y%d\n, x, y);return0;}核心总结值传递仅传递变量副本修改不影响原数据指针传递传递变量内存地址可直接操作原变量。Demo13指针遍历数组掌握指针偏移、数组指针的核心逻辑理解数组名本质是数组首元素地址。#include stdio.hintmain(){int arr[]{11,22,33,44,55};int lensizeof(arr)/ sizeof(arr[0]);int *parr;// 指针指向数组首地址 printf(指针遍历数组结果);for(int i0;ilen;i){printf(%d , *(p i));// 指针偏移取值}return0;}关键知识点arr[i]等价于*(arri)数组遍历的两种底层实现方式。Demo14指针实现字符串拷贝不调用strcpy库函数用指针手动实现字符串拷贝吃透指针遍历字符串逻辑。#include stdio.hvoid strCopy(char *src, char *dest){// 逐指针赋值直到源字符串结束while(*src!\0){*dest*src;src;dest;}*dest\0;// 追加字符串结束符}intmain(){char str1[]C语言指针实战;char str2[100];strCopy(str1, str2);printf(拷贝后的字符串%s\n, str2);return0;}Demo15二级指针基础使用突破二级指针难点理解「指针存放指针地址」的核心逻辑。#include stdio.hintmain(){int num100;int *pnum;// 一级指针存放变量地址 int **ppp;// 二级指针存放一级指针地址 printf(变量值%d\n, num);printf(一级指针取值%d\n, *p);printf(二级指针取值%d\n, **pp);return0;}Demo16指针数组存储字符串掌握指针数组用法区别于二维字符数组高效存储多组字符串。#include stdio.hintmain(){// 指针数组每个元素为字符串指针 char *strArr[]{C语言,Java,Python,Go};int lensizeof(strArr)/ sizeof(strArr[0]);for(int i0;ilen;i){printf(第%d门语言%s\n, i1, strArr[i]);}return0;}第四阶段结构体与动态内存Demo17-Demo18结构体用于自定义数据类型动态内存malloc是开发常用核心两个Demo覆盖学生信息管理、动态数组创建贴合课程设计、实战开发场景。Demo17结构体实现学生信息录入与打印结构体最经典实战掌握自定义结构体、结构体变量赋值、结构体数组使用。#include stdio.h// 定义学生结构体 struct Student{char name[20];int age;float score;};intmain(){struct Student stu;// 录入学生信息 printf(请输入学生姓名、年龄、成绩);scanf(%s %d %f, stu.name,stu.age,stu.score);// 打印学生信息 printf(学生姓名%s\n, stu.name);printf(学生年龄%d\n, stu.age);printf(学生成绩%.2f\n, stu.score);return0;}Demo18malloc动态内存分配掌握动态内存申请、使用、释放解决静态数组固定长度的局限性避免内存泄漏。#include stdio.h#include stdlib.h // malloc、free头文件intmain(){int n;printf(请输入数组长度);scanf(%d,n);// 动态申请n个整型内存空间 int *arr(int *)malloc(n * sizeof(int));if(arrNULL){printf(内存申请失败\n);return1;}// 赋值并输出for(int i0;in;i){arr[i]i 1;printf(%d , arr[i]);}free(arr);// 释放动态内存必须操作 arrNULL;// 置空指针防止野指针return0;}核心规范malloc申请的动态内存必须手动free释放否则会造成内存泄漏。第五阶段文件操作实战Demo19-Demo20文件操作是C语言收尾核心也是课程设计高频考点两个Demo覆盖文件写入、文件读取彻底掌握文件指针、读写、关闭全套流程。Demo19C语言文件写入操作实现创建文件、写入文本内容掌握w写入模式。#include stdio.hintmain(){// 定义文件指针 FILE *fp;// 以写入模式打开文件不存在则创建存在则覆盖 fpfopen(test.txt,w);if(fpNULL){printf(文件打开失败\n);return1;}// 向文件写入内容 fprintf(fp,C语言实战Demo\n);fprintf(fp,20个核心案例吃透C基础);printf(文件写入成功\n);fclose(fp);// 关闭文件 fpNULL;return0;}Demo20C语言文件读取操作读取本地文件内容掌握r读取模式、逐行读取文件逻辑。#include stdio.hintmain(){FILE *fp;char buf[1024];// 缓冲区存储读取内容 // 以只读模式打开文件 fpfopen(test.txt,r);if(fpNULL){printf(文件不存在或打开失败\n);return1;}printf(文件内容\n);// 逐行读取文件内容到缓冲区while(fgets(buf, sizeof(buf), fp)!NULL){printf(%s, buf);}fclose(fp);fpNULL;return0;}文件模式总结w写入覆盖、a追加不覆盖、r只读、r读写是所有文件操作的核心模式。文末总结以上20个C语言实战Demo完整覆盖了入门语法、流程控制、数组字符串、函数、指针、结构体、动态内存、文件操作全部核心知识点从零基础入门到进阶难点全覆盖。C语言的学习核心在于多敲、多改、多排错不要死记硬背知识点每个Demo建议亲手敲一遍尝试修改参数、调整逻辑、排查报错在实战中理解底层原理。认真练完这20个案例你会彻底摆脱「看懂不会写」的困境扎实掌握C语言全部基础核心为后续C、数据结构、嵌入式、底层开发打下坚实的基础
熬夜整理的20个C语言小Demo,从指针到文件操作,练完基础直接吃透
很多人学不好C语言根本不是天赋不够而是只看知识点、不敲代码、缺少实战沉淀。C语言作为编程入门的基石、操作系统、嵌入式、底层开发的核心语言语法看似简单但指针、内存、结构体、文件操作等核心知识点抽象难懂单纯背知识点、看网课完全无法掌握。绝大多数初学者的现状是知识点一看就懂提笔写代码就废做题、实战全程卡壳。我初学C语言时踩过无数坑循环逻辑混乱、指针越界、数组使用不当、结构体参数传参报错、文件读写操作失败。后来彻底醒悟C语言是敲出来的不是看出来的。只有通过大量精简、经典、针对性极强的小Demo实战才能把零散的知识点串联起来吃透底层逻辑形成编程思维。为了帮大家快速夯实C语言基础我熬夜整理了20个全覆盖C语言核心的实战小Demo难度从入门到进阶循序渐进覆盖基础语法、循环分支、数组字符串、函数、指针、结构体、动态内存、文件操作所有必考、高频核心知识点。每个Demo都做到完整可运行代码逐行思路解析运行结果展示核心知识点总结常见坑点提醒无需额外配置复制即可编译运行。全文超6000字全程干货无废话认真练完这20个案例彻底告别C语言基础薄弱问题轻松应对考试、作业、面试入门笔试前言为什么这20个Demo能吃透C基础市面上绝大多数C语言案例要么过于复杂、嵌套过多知识点要么过于零散、不成体系初学者练完一头雾水。本次整理的20个Demo经过精细化筛选具备三大核心特点1.循序渐进梯度分明从最简单的语法输出、分支循环到难点指针、文件操作由浅入深零基础也能看懂吃透。2.针对性极强每个Demo只聚焦1-2个核心知识点精准突破薄弱点避免多知识点混淆方便针对性练习纠错。3.实用性拉满所有案例都是面试、笔试、课程设计高频考点贴合实战开发逻辑不仅练基础还能积累实战代码经验。第一阶段基础语法与流程控制Demo1-Demo6本阶段6个Demo聚焦C语言最基础的输出输入、变量运算、if分支、for/while循环、嵌套循环是所有复杂代码的基础零基础必练重点培养代码手感和逻辑思维。Demo1HelloWorld进阶格式化输出实战很多人觉得HelloWorld过于简单直接跳过实则printf格式化输出是C语言的基础核心所有后续日志打印、结果输出都依赖它。本Demo实战常用格式化输出规则掌握整数、浮点数、字符、字符串标准化输出。#include stdio.hintmain(){// 定义不同类型变量 int age20;float score95.5f;char sexM;char name[]C语言学习者;// 标准格式化输出 printf(姓名%s\n, name);printf(年龄%d\n, age);printf(性别%c\n, sex);printf(成绩%.2f\n, score);// %.2f 保留两位小数return0;}运行结果姓名C语言学习者年龄20性别M成绩95.50核心知识点总结%d整型输出、%f浮点型输出、%c字符输出、%s字符串输出%.2f可精准控制浮点数小数位数是开发、作业中最常用的格式化技巧。Demo2两数加减乘除计算器变量与运算符实战聚焦变量定义、输入函数scanf、算术运算符实现简易计算器掌握C语言数据输入输出与基础运算逻辑。#include stdio.hintmain(){float a, b;printf(请输入两个数字用空格分隔);scanf(%f %f,a,b);printf(相加结果%.2f\n, a b);printf(相减结果%.2f\n, a - b);printf(相乘结果%.2f\n, a * b);// 防止除数为0报错if(b!0){printf(相除结果%.2f\n, a / b);}else{printf(除数不能为0\n);}return0;}核心坑点提醒scanf读取变量必须加取地址符浮点数运算不会丢失小数精度整数相除会自动向下取整。Demo3判断奇偶数if-else分支经典案例最基础的分支结构实战掌握取余运算符、if-else条件判断逻辑是分支结构入门必写案例。#include stdio.hintmain(){int num;printf(请输入一个整数);scanf(%d,num);if(num %20){printf(%d 是偶数\n, num);}else{printf(%d 是奇数\n, num);}return0;}核心原理整数对2取余余数为0即为偶数否则为奇数。重点掌握**判断相等**区别于赋值符号。Demo4分数等级判定多分支if-else if模拟学生成绩评级实战多条件分支判断解决多层逻辑判断混乱问题。#include stdio.hintmain(){int score;printf(请输入学生成绩0-100);scanf(%d,score);if(score90){printf(成绩等级优秀\n);}elseif(score75){printf(成绩等级良好\n);}elseif(score60){printf(成绩等级及格\n);}else{printf(成绩等级不及格\n);}return0;}Demo51-100累加求和for循环核心实战经典for循环案例掌握循环初始化、循环条件、步进逻辑理解循环累加思想。#include stdio.hintmain(){int i,sum0;// for(初始化;循环条件;步进运算)for(i1;i100;i){sumi;// 等价于sumsum i}printf(1到100的累加和为%d\n,sum);return0;}运行结果1到100的累加和为5050Demo6九九乘法表嵌套循环经典天花板九九乘法表是C语言嵌套循环的必练案例彻底吃透双层for循环执行逻辑解决绝大多数循环嵌套难题。#include stdio.hintmain(){int i, j;// 外层循环控制行数for(i1;i9;i){// 内层循环控制列数for(j1;ji;j){printf(%d*%d%-2d , j, i, i * j);}printf(\n);// 每行结束换行}return0;}核心解析外层循环遍历1-9行内层循环根据行数动态控制列数%-2d实现左对齐排版整齐。第二阶段数组与字符串Demo7-Demo10数组和字符串是C语言数据存储的核心也是后续指针、结构体的基础4个实战Demo覆盖数组遍历、最值查找、字符串长度、字符串反转高频场景。Demo7数组最大值最小值查找实战一维数组遍历、数值对比掌握数组的基础操作逻辑。#include stdio.hintmain(){// 定义整型数组 int arr[]{12,45,7,89,23,56,3};int lensizeof(arr)/ sizeof(arr[0]);// 计算数组长度 int maxarr[0], minarr[0];// 遍历数组for(int i0;ilen;i){if(arr[i]max){maxarr[i];}if(arr[i]min){minarr[i];}}printf(数组最大值%d\n, max);printf(数组最小值%d\n, min);return0;}核心技巧sizeof(数组)/sizeof(数组元素)是通用计算数组长度的方法。Demo8数组冒泡排序经典排序算法冒泡排序是C语言必考排序算法通过双层循环实现数组升序排序吃透数组交换、循环嵌套逻辑。#include stdio.hintmain(){int arr[]{32,15,98,23,66,41};int lensizeof(arr)/ sizeof(arr[0]);int temp;// 冒泡排序核心双层循环for(int i0;ilen -1;i){for(int j0;jlen -1- i;j){// 前一个数大于后一个数则交换if(arr[j]arr[j1]){temparr[j];arr[j]arr[j1];arr[j1]temp;}}}// 遍历输出排序后数组 printf(升序排序结果);for(int i0;ilen;i){printf(%d , arr[i]);}return0;}Demo9自定义实现字符串长度计算不调用strlen库函数手动遍历字符串理解字符串结束符\0的核心作用。#include stdio.hintmain(){char str[]C语言实战Demo;int len0;// 遇到字符串结束符\0停止遍历while(str[len]!\0){len;}printf(字符串长度%d\n, len);return0;}核心知识点C语言字符串默认以\0作为结束标志不计入有效长度所有字符串操作均依赖此特性。Demo10字符串反转实战字符串数组取值、首尾交换是字符串高频面试笔试题。#include stdio.hintmain(){char str[]Hello C Language;int len0;char temp;// 计算字符串长度while(str[len]!\0){len;}// 首尾对称交换for(int i0;ilen /2;i){tempstr[i];str[i]str[len -1- i];str[len -1- i]temp;}printf(反转后的字符串%s\n, str);return0;}第三阶段函数与指针难点核心 Demo11-Demo16函数和指针是C语言的重中之重、最大难点也是区分入门和进阶的核心标志。6个精准Demo从函数封装、参数传递、指针取值、指针数组、函数指针逐一突破。Demo11自定义函数实现两数最大值掌握函数封装、形参实参、返回值逻辑学会将独立功能封装为函数优化代码结构。#include stdio.h// 自定义函数返回两个数的最大值 int getMax(int a, int b){returnab ? a:b;// 三目运算符简化写法}intmain(){int x, y;printf(请输入两个整数);scanf(%d %d,x,y);printf(最大值为%d\n, getMax(x, y));return0;}Demo12函数交换两个变量值传递VS地址传递90%初学者踩坑的知识点彻底搞懂值传递无法修改原变量指针地址传递可以修改原变量。#include stdio.h// 值传递无法修改主函数变量无效交换 void swap1(int a, int b){int tempa;ab;btemp;}// 地址传递通过指针修改原变量有效交换 void swap2(int *a, int *b){int temp*a;*a*b;*btemp;}intmain(){int x10, y20;swap1(x, y);printf(值传递交换后x%d,y%d\n, x, y);swap2(x,y);printf(地址传递交换后x%d,y%d\n, x, y);return0;}核心总结值传递仅传递变量副本修改不影响原数据指针传递传递变量内存地址可直接操作原变量。Demo13指针遍历数组掌握指针偏移、数组指针的核心逻辑理解数组名本质是数组首元素地址。#include stdio.hintmain(){int arr[]{11,22,33,44,55};int lensizeof(arr)/ sizeof(arr[0]);int *parr;// 指针指向数组首地址 printf(指针遍历数组结果);for(int i0;ilen;i){printf(%d , *(p i));// 指针偏移取值}return0;}关键知识点arr[i]等价于*(arri)数组遍历的两种底层实现方式。Demo14指针实现字符串拷贝不调用strcpy库函数用指针手动实现字符串拷贝吃透指针遍历字符串逻辑。#include stdio.hvoid strCopy(char *src, char *dest){// 逐指针赋值直到源字符串结束while(*src!\0){*dest*src;src;dest;}*dest\0;// 追加字符串结束符}intmain(){char str1[]C语言指针实战;char str2[100];strCopy(str1, str2);printf(拷贝后的字符串%s\n, str2);return0;}Demo15二级指针基础使用突破二级指针难点理解「指针存放指针地址」的核心逻辑。#include stdio.hintmain(){int num100;int *pnum;// 一级指针存放变量地址 int **ppp;// 二级指针存放一级指针地址 printf(变量值%d\n, num);printf(一级指针取值%d\n, *p);printf(二级指针取值%d\n, **pp);return0;}Demo16指针数组存储字符串掌握指针数组用法区别于二维字符数组高效存储多组字符串。#include stdio.hintmain(){// 指针数组每个元素为字符串指针 char *strArr[]{C语言,Java,Python,Go};int lensizeof(strArr)/ sizeof(strArr[0]);for(int i0;ilen;i){printf(第%d门语言%s\n, i1, strArr[i]);}return0;}第四阶段结构体与动态内存Demo17-Demo18结构体用于自定义数据类型动态内存malloc是开发常用核心两个Demo覆盖学生信息管理、动态数组创建贴合课程设计、实战开发场景。Demo17结构体实现学生信息录入与打印结构体最经典实战掌握自定义结构体、结构体变量赋值、结构体数组使用。#include stdio.h// 定义学生结构体 struct Student{char name[20];int age;float score;};intmain(){struct Student stu;// 录入学生信息 printf(请输入学生姓名、年龄、成绩);scanf(%s %d %f, stu.name,stu.age,stu.score);// 打印学生信息 printf(学生姓名%s\n, stu.name);printf(学生年龄%d\n, stu.age);printf(学生成绩%.2f\n, stu.score);return0;}Demo18malloc动态内存分配掌握动态内存申请、使用、释放解决静态数组固定长度的局限性避免内存泄漏。#include stdio.h#include stdlib.h // malloc、free头文件intmain(){int n;printf(请输入数组长度);scanf(%d,n);// 动态申请n个整型内存空间 int *arr(int *)malloc(n * sizeof(int));if(arrNULL){printf(内存申请失败\n);return1;}// 赋值并输出for(int i0;in;i){arr[i]i 1;printf(%d , arr[i]);}free(arr);// 释放动态内存必须操作 arrNULL;// 置空指针防止野指针return0;}核心规范malloc申请的动态内存必须手动free释放否则会造成内存泄漏。第五阶段文件操作实战Demo19-Demo20文件操作是C语言收尾核心也是课程设计高频考点两个Demo覆盖文件写入、文件读取彻底掌握文件指针、读写、关闭全套流程。Demo19C语言文件写入操作实现创建文件、写入文本内容掌握w写入模式。#include stdio.hintmain(){// 定义文件指针 FILE *fp;// 以写入模式打开文件不存在则创建存在则覆盖 fpfopen(test.txt,w);if(fpNULL){printf(文件打开失败\n);return1;}// 向文件写入内容 fprintf(fp,C语言实战Demo\n);fprintf(fp,20个核心案例吃透C基础);printf(文件写入成功\n);fclose(fp);// 关闭文件 fpNULL;return0;}Demo20C语言文件读取操作读取本地文件内容掌握r读取模式、逐行读取文件逻辑。#include stdio.hintmain(){FILE *fp;char buf[1024];// 缓冲区存储读取内容 // 以只读模式打开文件 fpfopen(test.txt,r);if(fpNULL){printf(文件不存在或打开失败\n);return1;}printf(文件内容\n);// 逐行读取文件内容到缓冲区while(fgets(buf, sizeof(buf), fp)!NULL){printf(%s, buf);}fclose(fp);fpNULL;return0;}文件模式总结w写入覆盖、a追加不覆盖、r只读、r读写是所有文件操作的核心模式。文末总结以上20个C语言实战Demo完整覆盖了入门语法、流程控制、数组字符串、函数、指针、结构体、动态内存、文件操作全部核心知识点从零基础入门到进阶难点全覆盖。C语言的学习核心在于多敲、多改、多排错不要死记硬背知识点每个Demo建议亲手敲一遍尝试修改参数、调整逻辑、排查报错在实战中理解底层原理。认真练完这20个案例你会彻底摆脱「看懂不会写」的困境扎实掌握C语言全部基础核心为后续C、数据结构、嵌入式、底层开发打下坚实的基础