ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C语言入门第一天:环境搭建、基础语法与经典练习题全攻略

C语言入门第一天:环境搭建、基础语法与经典练习题全攻略 1. 第一天学C语言到底先学什么如果你今天刚把C语言列入学习计划相信我你并不孤单。搜一下“C语言”就能看到一大堆人在问“C语言基础”“C语言入门”“C语言常见错误”这些词这说明每年都有成千上万的人坐到你现在的这个位置。而第一天最关键的事情不是背语法不是刷题而是把三件事搞清楚你的开发环境能不能跑起来、第一个程序能不能跑通、以及C语言这门课的整体地图到底长什么样。很多人第一天就栽在“兴奋期”上——装了一堆软件跟着视频抄了一下午代码结果连一个编译错误都没看懂第二天就不想碰了。所以我这篇不是来给你灌鸡汤的而是用我自己当年踩过的坑帮你把第一天过得有收获、不劝退。先说清楚这篇文章适合谁适合完全零基础、今天刚决定学C语言的人也适合学过一点Python或者其他语言、想回头补C语言底子的人。C语言是几乎所有计算机专业课程的“地基”操作系统、嵌入式、单片机、驱动开发、网络协议栈底层全是C。你第一天学的东西看起来只是“printf打印一句话”但实际上你在学的是“如何跟计算机说人话”——这是后面所有高级语言都绕不开的底层逻辑。第一天的学习节奏我也帮你排好了环境搭建1小时内搞定、第一个程序30分钟、基础语法扫盲2小时、三个经典入门题练手2小时、最后花30分钟整理“第一天错题本”。按这个节奏走下来你睡觉前回头看会发现自己已经摸到了C语言的门把手。2. 第一天先把“跑道”铺好开发环境搭建2.1 很多人纠结的编译器选择其实可以一句话决定打开热搜列表你会发现大家都在搜“C语言安装”“vscode配置c语言环境”“虚拟机(ubuntu)配置c语言环境”“C语言学习环境推荐”。说明环境搭建是第一天最大的拦路虎之一。这块我直接给你一个决策路径不用再纠结。你只需要记住一句话学习C语言核心是三个东西——编译器、编辑器、终端。编译器负责把C语言代码翻译成计算机能执行的机器指令。Windows下最常用的是MinGW-w64里的GCC或者Visual Studio自带的MSVCMac和Linux系统自带或可以很方便地安装GCC/Clang。编辑器负责写代码推荐VS Code轻量、插件多、免费。终端负责运行编译后的可执行文件Windows的CMD或者PowerShell都行。很多新手去下Visual StudioVS结果被那庞大的界面和一堆概念搞晕了。其实VS是挺好的IDE但对一个第一天学C语言的人来说太沉了。VS Code加一个MinGW20分钟就能跑起来。2.2 Windows环境搭建VS Code MinGW-w64 完全版先下载MinGW-w64你可以搜“MinGW-w64 GCC”找官网或者靠谱的镜像站点注意选64位版本。下载完成后解压到一个没有空格的路径比如C:\mingw64。然后把C:\mingw64\bin加入系统的环境变量Path里。加完环境变量后打开一个新终端输入gcc --version如果能看到类似gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project)这样的输出恭喜你编译器已经装好了。这一步很关键我见过不少人卡在“输命令没反应”上八成是Path没配好或者终端没重启。接下来装VS Code打开后装两个插件一个是C/C微软官方出的那个作者是Microsoft一个是Code Runner后者可以让你一键运行代码不需要每次手动敲命令。装完插件新建一个文件夹作为你的代码工作区比如D:\C-LearningCtrlN新建文件保存为hello.c。到这里环境其实已经就绪了。VS Code里按Ctrl拉出终端待会儿编译命令就在那里敲。记住这几个常用命令的格式gcc hello.c -o hello意思是用GCC编译器编译hello.c输出一个名为hello的可执行文件。然后运行它hello.exe2.3 Ubuntu/Linux环境比Windows还简单但坑也不少边搜词里还有“虚拟机(ubuntu)配置c语言环境”一条这里给你一个快速通道。如果你已经装好了Ubuntu虚拟机打开终端输入sudo apt update sudo apt install gcc make vim然后写代码vim hello.c在vim里按i进入插入模式写代码按Esc输入:wq保存退出。编译运行gcc hello.c -o hello ./helloLinux环境的好处是gcc几乎是“系统标配”坏处是新手常常卡在vim上。我的建议是如果你用Linux环境第一周别折腾vim直接安装VS Code的Linux版或者用gedit、nano这种简单编辑器等入门了再折腾vim不迟。2.4 一个容易被忽略的坑中文输入法导致的问题讲一个第一天最容易遇到的玄学问题你在代码里输入了中文符号比如中文分号“”代替英文分号的“;”编译的时候报一堆错。这不是编译器傻是你输入法的锅。我建议第一天写代码的时候把输入法切换到英文模式或者记住一个原则代码里的所有标点包括括号、分号、逗号、引号全部用英文输入法录入。这个坑几乎人人都会踩一次早踩早长记性。3. 第一个程序与第一段底气Hello World逐行拆解3.1 手写你的第一个C语言程序环境搭好之后我们来看C语言世界里的“通关第一张图”。在hello.c里敲入下面这五行代码#include stdio.h int main() { printf(Hello, World!\n); return 0; }保存编译运行。屏幕上打印一行Hello, World!恭喜你你的C语言之路正式点亮了。但这里有个关键提醒第一天不宜只满足于“跑通”一定要把这五行代码的每一行都看懂因为它们是后面几百个小时的基础。3.2 为什么第一行是 #include stdio.h#include是预处理指令作用是“把某个文件的内容原封不动地拿过来”。stdio.h是C语言标准库里的“标准输入输出头文件”printf、scanf这些函数就是在这里声明的。简单理解你叫外卖之前得知道商家的菜单编译器在编译printf之前也得先知道这个函数长什么样所以你要把这个“菜单”塞给编译器。有人可能会问那我不用printf是不是就不用包含stdio.h了理论上是的但你连printf都不会用那写C语言就没意义了。顺便说一句热搜里出现的“使用stdio.h和limits.h用C语言解决计算5×5鞍点问题”那个limits.h也是类似的思路——它定义了很多跟数据类型取值范围有关的常量比如INT_MAX表示int类型能表示的最大值。后面学到溢出问题的时候你会感谢这个头文件的存在。3.3 int main 到底是什么main是程序的入口函数程序运行时操作系统第一个找的就是它。int表示这个函数最终要返回一个整数给操作系统return 0;就是返回0代表程序正常退出。这个“返回给操作系统”的概念新手上手阶段知道即可不用深抠。有人第一眼会疑惑为什么main前面要写int为什么不能直接写main你记住这是C语言标准规定的函数声明格式返回类型 函数名 参数列表。main函数比较特殊它在C99标准之后写int main()是规范做法写void main()在一些编译器上也能跑但是不规范考试和面试时容易踩坑。3.4 printf和转义字符\nprintf是“格式化输出”函数括号里是输出内容。\n是换行符它是一个转义字符告诉终端“输出完这句话后换行”。第二行如果还有一句printf就会出现在下一行不会挤在一起。第一天你可以多玩几次这个程序把文字改一改、去掉\n试试输出效果、用\t看看制表符对齐效果。这些看似无聊实际是在帮你建立“代码里写的每一个字符都有它的意义”这个意识。4. 第一天必须拎清的语法基础变量、数据类型、格式化输入输出4.1 数据类型金字塔从char到doubleC语言是强类型语言每个变量都必须声明类型。第一天你至少需要认识这几种常见类型类型中文名典型字节数取值范围以常见32位平台为例典型用法char字符型1字节-128 ~ 127 或 0 ~ 255存单个字符如 Aint整型4字节-2147483648 ~ 2147483647存整数如 100float单精度浮点型4字节约 ±3.4E38存小数如 3.14double双精度浮点型8字节约 ±1.7E308存更高精度小数为了更精确地看到取值范围你可以用到limits.h头文件里的常量。比如#include stdio.h #include limits.h int main() { printf(int最大值: %d\n, INT_MAX); printf(int最小值: %d\n, INT_MIN); printf(char最大值: %d\n, CHAR_MAX); return 0; }这里%d是printf的格式占位符表示以十进制整数的形式输出对应变量的值。运行一下你会对“数据类型到底限制了什么”有一个非常直观的感受。这也是热搜词里“limits.h”被很多人搜的原因——它让你看到C语言跟Python这种“啥类型都能装”的语言在“内存管理”层面上的本质差异。4.2 变量定义与命名让编译器和你自己都舒服定义变量的语法很简单类型名 变量名;。比如int age; double price; char grade;但命名这件事第一天就要养成好习惯。C语言变量名只能用英文字母、数字和下划线而且不能以数字开头。int 2age;是错的int age_2;是对的。变量名也不能跟C语言的关键字撞车比如int int;会直接编译报错因为int是保留字。我给你的建议是变量名要有意义。写int n;虽然能编译但你第三天回头看代码根本不知道n是什么。写int student_count;就清楚多了。第一天就养成“见名知义”的习惯后面调试程序的痛苦会少一半。还有一点C语言区分大小写。int Age;和int age;是两个完全不同的变量。很多新手栽在这里编译报错“undefined identifier”的时候先检查一下是不是大小写写错了。4.3 scanf和printf第一天最容易出错的两个函数printf负责输出scanf负责输入。热搜词里“C语言学习之scanf”赫然在列说明几乎每个新手都在scanf上翻过车。我们先看一个连续踩坑的例子#include stdio.h int main() { int num; printf(请输入一个整数: ); scanf(%d, num); printf(你输入的是: %d\n, num); return 0; }注意scanf这一行num前面有一个符号。这个意思是“取地址”也就是告诉scanf把读到的整数存到变量num对应的内存地址里去。很多新手第一次都会不自觉地漏掉然后程序运行时行为诡异甚至会崩溃报错提示还不明显让人一脸懵。再看%d这个占位符它表示scanf要读入的是一个十进制整数。如果你输入了一个字母scanf会读入失败num的值仍然保持原样后台也不会报错给你看——这是C语言对新手最不友好的地方之一scanf输入类型不匹配时不会像Python一样抛异常而是默默失败。另外scanf读整数时它在输入缓冲区里会跳过空格、Tab和换行。你用空格隔开多个整数输入是没问题的但新手如果用scanf(%d\n, num)这种写法给自己加戏多写了一个\n那程序就会一直等输入仿佛死循环。这个坑据说十个人里有六个会踩我现在提醒你一次希望你能避开。5. 用三个经典入门题把第一天的知识串成串光看不练假把式。很多人的困惑是“书看了好多代码一点不会写”那是因为缺少“把知识变成肌肉记忆”的训练。下面三道题是C语言入门题里的“老三样”难度从一颗星到三颗星递增建议今天至少亲手敲完前两题。5.1 九九乘法表循环的第一次实战要求输出下面这样的九九乘法表1*11 1*22 2*24 1*33 2*36 3*39 ...这道题的核心是嵌套for循环。外层循环控制行从1到9内层循环控制每行的列从1到当前行数#include stdio.h int main() { for (int i 1; i 9; i) { for (int j 1; j i; j) { printf(%d*%d%-4d, j, i, i * j); } printf(\n); } return 0; }这里%-4d表示输出整数时左对齐占4个字符宽度。这个细节是让表格看起来整齐的关键。i等价于i i 1是C语言里的自增运算符。第一天看到i如果有点晕可以把它理解为“让i的值加1”。写九九乘法表的意义是让你亲自体会“循环嵌套”到底是在做什么事。外循环每走一步内循环从头到尾跑一遍。你可以把内层循环想象成“超市排队结账”外层循环是“逛不同货架”每逛一个货架都要把排队结账这件事完整做一遍。5.2 输入日期计算天数条件判断的综合演练第二题是热搜词里的“输入一个日期的年、月、日计算并输出这天是该年的第几天”。这道题的特点是综合了数据类型、scanf输入、if-else判断、switch分支、运算符优先级、还要稍微动一点算法脑筋。参考思路是先定义一个天数累加变量sum把输入月之前的所有月份天数加起来最后再加上“日”的天数。核心难点是闰年的判断闰年则2月有29天平年2月只有28天。判断闰年的C语言逻辑if ((year % 4 0 year % 100 ! 0) || (year % 400 0)) { // 是闰年 }这里%是取余运算符是逻辑与||是逻辑或。整套条件翻译成人话就是能被4整除但不能被100整除或者能被400整除的年份是闰年。然后你可以用switch语句按月累加也可以用数组保存每个月的天数。第一天如果觉得switch有点绕用if-else一层一层判断也行只要算得对。关键是这道题能让你把“选择结构”“循环结构”“算术运算”真正组合起来用相当于C语言的第一场“综合演习”。5.3 5×5鞍点问题这题能过说明你第一天就没白过热搜词里有一条特别显眼“使用stdio.h和limits.h用C语言解决计算5×5鞍点问题”。鞍点问题是个非常经典的二维数组题目它的定义是在一个二维矩阵中如果某个元素是它所在行的最大值同时也是它所在列的最小值那么它就是鞍点。名字听起来唬人其实意思是“这个点在横着看和竖着看都挺特别”。题目一般会给5×5的矩阵要求输出鞍点的位置和数值。解题思路分两步第一步找每一行的最大值及其列位置。 第二步检查这个最大值是否是它那一列的最小值。代码如下带注释版#include stdio.h int main() { int a[5][5]; int i, j, k, flag; for (i 0; i 5; i) { for (j 0; j 5; j) { scanf(%d, a[i][j]); } } for (i 0; i 5; i) { // 找到第i行的最大值 int max_col 0; for (j 1; j 5; j) { if (a[i][j] a[i][max_col]) { max_col j; } } // 检查这个位置是否是该列的最小值 flag 1; for (k 0; k 5; k) { if (a[k][max_col] a[i][max_col]) { flag 0; break; } } if (flag) { printf(鞍点: a[%d][%d] %d\n, i, max_col, a[i][max_col]); return 0; } } printf(未找到鞍点\n); return 0; }这里用到了二维数组的声明和遍历、数组下标从0开始、以及break跳出循环等概念。如果今天能把这题独立写出来恭喜你你第一天的C语言水平已经超过了绝大多数“只会在B站看视频不自己动手敲”的学习者了。5.4 刷题平台推荐把“做完”变成“做对”很多热搜词指向PTA程序设计类实验辅助教学平台和PAT考试浙大翁恺老师的C语言课程配套题目也都在这类平台上。你第一天学完基础后建议去PTA注册一个账号搜“C语言基础”相关题目集从第一题开始一道一道做。平台的好处是它有在线评测能自动告诉你“答案正确”还是“答案错误”这比你自己闷头写、写完也不知道对不对要高效得多。注意在线评测平台对输出格式非常严格多一个空格、少一个换行都可能判错。很多人第一次被“Presentation Error”这种提示吓到了其实意思就是答案内容对了但输出格式不对。这时候仔细看题目描述里的输出格式要求把空格、换行对齐再提交一次。6. 第一天最常踩的坑编译错误与逻辑错误排查速查表下面这张表是我见过的新手第一天最常踩的坑整理成速查表遇到报错可以对照排查报错信息片段含义常见原因快速解决error: expected ; before ...少了分号上一行末尾忘了加分号在报错行前一行末尾补分号error: xxx undeclared变量未声明变量名拼写错误、大小写不一致检查变量名是否一致error: stray \xxx in program非法字符中文引号、中文分号混入代码把中文标点换成英文标点warning: implicit declaration of function printfprintf未声明忘记#include stdio.h加上头文件编译通过但执行后闪退程序异常可能scanf漏了检查scanf的取地址符输出结果差1边界条件出错循环的起止条件写错检查i n还是i n第一条“expected ;”真的可以说是新手第一天最常看到的一条错误。编译器告诉你第几行出错了但有时候真正缺分号的是上一行这是因为C语言编译器对语句结尾的检测机制导致报错位置滞后。所以排查这类错误时别死盯报错那一行往上看看。除了编译错误逻辑错误更隐蔽——程序能编译、能运行但结果就是不对。比如九九乘法表打出来是上三角而不是下三角或者日期计算总差一天。遇到这种情况推荐一个小技巧在关键变量处临时加printf打印中间值把程序运行到每一步时变量是什么值打出来看到哪个值不对就能锁定哪行逻辑有问题。还有一个思路一定要建立把问题分解成小块。比如日期计算题可以先单独写一个判断闰年的程序测试一下2000、2024、1900的闰年判断对不对再拿去合到主程序里。小步验证比一次写完一个很长的程序然后调试半天要轻松得多。7. 第一天晚上建议做的事给自己“建档”到这里你的第一天学习内容基本完成。但我觉得第一天最值得做的一件事不是多刷题而是给你的学习过程“建档”——也就是建一个自己的错题本。具体操作很简单在你放代码的文件夹里新建一个notes.md或者错题本.txt把今天遇到的问题、报错信息、你当时的解决方法、以及这个问题的原因都记下来。比如“scanf里忘了加导致程序异常原因是不带无法把值写回变量”。以后每学一个新知识把遇到的坑都记进去这个文件会成为你整个C语言学习生涯里最宝贵的资产。为什么会强烈建议这件事因为我见过太多人每天刷题几十道但同一个错误改了三次还没记住。错题本的意义在于你把每次踩过的坑做了一次“复盘”下次再碰到这个问题时你的记忆会被立刻唤醒而不是又花一下午去查资料。另外如果你是在校学生第一周建议去搜一下“翁恺C语言”的视频课来配合学习。翁恺老师讲课风趣特别会讲原理C语言入门这块的口碑一直很好。配合题库练习和错题本形成一个“听课 — 做题 — 复盘”的闭环。最后再分享我一个个人习惯第一天别急着学指针别问“我什么时候才能学会指针”先把环境、基本语法、循环、数组、函数这些地基打牢。指针是C语言的灵魂但它属于第二周的内容。第一天就想着指针和内存管理只会徒增挫败感。先把今天这篇里的每个代码都亲手敲一遍跑通一遍再睡前花10分钟回想“结构化编程的基本流程”你的第一天就已经比90%的人含金量高了。C语言这条路很长但第一天你只需要赢下今天。
返回列表