学习C语言第五天第五讲

📅 2026/8/11 2:35:09
学习C语言第五天第五讲
前言今天是学习C语言的第五天刚刚过完第五讲的课程一如既往的仅仅3个小时的课程信息量巨大。随着学习的不断深入各种上机实操接踵而来课程难度也在不断增加……但同时也带来了很多可能。今天老师带我们做了两款非常有趣的小程序——“关机小程序和猜数字游戏”让我第一次真切感受到原来学到的语法真的能组合出好玩的东西。如果你也对C语言感兴趣不妨继续往下读相信我你也能一同感受C语言的魅力所在。虽然现在说这话可能有点早这才哪到哪啊hehe:)while 循环if和 while 一样如果要控制多条语句得要加大括号#define_CRT_SECURE_NO_WARNINGS#includestdio.hintmain(){intnum0;scanf(%d,num);while(num){printf(%d ,num%10);numnum/10;}return0;}(首次引入确实感觉是要比只copy图片要好一点for循环可以这么理解表达式1 初始化表达式2 判断部分表达式3 调整部分具体举例#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestdlib.h#includestring.h//在屏幕上打印1~10的值intmain(){inti1;//初始化while(i10)//判断部分{printf(%d,i);i;//调整部分}return0;}for循环图例 (初始化部分只循环一次依旧具体示例要求生成1~10这个是我在老师之前自己一个个敲的虽然下面的报错我也留了但是读者朋友们也可以说仔细看看我错在哪里看看你是否能察觉出来很显然我的printf被我打成了printup猪在小时候学过一点Python的皮毛深受“其害”我也无法了。#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestdlib.h#includestring.h//在屏幕上打印1~10的值intmain(){inti1;//初始化while(i10)//判断部分{printf(%d,i);i;//调整部分}return0;}以上为正确答案在C99中也可以这样写但是一旦要想将num拿出来打印却不行在循环里被定义的赋值只能在循环里使用可以类比全局变量和局部变量while和 for 循环辨析在不知道要循环多少次建议用while循环在知道要循环多少次建议用for两者边际不明确两者也可以互相转化所以随机应变#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestdlib.h#includestring.hintmain(){intnum0;intall0;//初始化 判断 调整 三个部分可以省略不写//但判断部分如果被省略掉就意味判断恒成立for(;num100;num3){allnum;}printf(%d,all);return0;}补充//初始化 判断 调整 三个部分可以省略不写//但判断部分如果被省略掉就意味判断恒成立代码陷入死循环。do while循环#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestdlib.h#includestring.hintmain(){inti1;do{printf(%d,i);i;}while(i10);return0;}do while流程图do while 语句至少被循环一次换言之只有至少要被循环一次才用do while循环像下面的例子假设给个0它也是一位数程序至少要循环一次练习数这个数有多少位数例如1234就有4位数intmain(){//赋值intnum0;intcount0;//输入scanf(%d,num);//计算有多少位数do{num/10;count;}while(num);printf(%d,count);return0;}三种循环for循环用的最多while循环其次do while 比较少break和 continue (在上面的流程图都有提到break 的作⽤是⽤于永久的终⽌循环只要 break 被执⾏直接就会跳出循环继续往后执⾏。continue 的作⽤是跳过本次循环中 continue 后边的代码在 for 循环和 while 循环中有所差异的。当发生某种条件你不希望他执行后面的指令就用continue可以联想《三国杀》里的“无懈可击”不让他执行指令循环中的break和continue#includestdio.hintmain(){inti1;while(i10){if(i5)continue;//当i等于5后就执⾏continue直接跳过continue的代码去循环的判断的地⽅//因为这⾥跳过了i i1所以i⼀直为5程序陷⼊和死循环printf(%d ,i);ii1;}return0;}到这⾥我们就能分析出来 continue 可以帮助我们跳过某⼀次循环 continue 后边的代码直接到循环的判断部分进⾏下⼀次循环的判断如果循环的调整是在 continue 后边的话可能会造成死循环。运行结果1~11没有5continue举例运行结果1~10没有5循环的嵌套题目拆分要从100到200之间找出素数⾸先得有100到200之间的数这⾥可以使⽤循环解决。假设要判断i是否为素数需要拿2~i-1之间的数字去试除i需要产⽣2到i-1之间的数字也可以使⽤循环解决。如果2~i-1之间有数字能整除i则i不是素数如果都不能整除则i是素数。#define_CRT_SECURE_NO_WARNINGS#includestdio.hintmain(){// int i 0;//循环产⽣100~200的数字for(i100;i200;i){//判断i是否为素数//循环产⽣2~i-1之间的数字intj0;intflag1;//假设i是素数for(j2;ji;j){if(i%j0){flag0;break;}}if(flag1)printf(%d ,i);}return0;}即使已经分析的那么清晰了这也是目前为止我遇到的一个小坎吧就是第一次系统的将任务拆解细分然后组织代码。我也有一点感悟就是说其实计算机科学与技术主要学的除了零碎的函数语法…其实最需要学的就是拆分任务的能力有了这个才能知道说我具体往哪里走而不是东拼西凑Goto 语句例子goto 语句如果使⽤的不当就会导致在函数内部随意乱跳转打乱程序的执⾏流程所以我们的建 议是能不⽤尽量不去使⽤但是 goto 语句也不是⼀⽆是处在多层循环的代码中如果想快速跳出使⽤ goto 就⾮常的⽅便了。真正的用武之地随机函数rand 函数srandtime关机小程序#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestdlib.h#includestring.hintmain(){//字符数组charinput[20]{0};system(shutdown -s -t 60);again:printf(请注意你的电脑将在一分钟后关机如果输入我是猪就可以取消关机\n);scanf(%s,input);//两个字符串比较相等使用strcmpif(strcmp(input,我是猪)0){system(shutdown -a);printf(你很乖,给你取消关机了);}else{gotoagain;}return0;}个人申明此代码仅供图一乐大家发给朋友使注意别玩太过祝大家使用愉快猜数字小游戏#includestdio.h#includestdlib.h#includetime.hvoidgame(){intrrand()%1001;intguess0;while(1){printf(请猜数字:);scanf(%d,guess);if(guessr){printf(猜⼩了\n);}elseif(guessr){printf(猜⼤了\n);}else{printf(恭喜你猜对了\n);break;}}}voidmenu(){printf(***********************\n);printf(****** 1. play ******\n);printf(****** 0. exit ******\n);printf(***********************\n);}intmain(){intinput0;srand((unsignedint)time(NULL));do{menu();printf(请选择:);scanf(%d,input);switch(input){case1:game();break;case0:printf(游戏结束\n);break;default:printf(选择错误重新选择\n);break;}}while(input);return0;}祝愿大家游玩愉快总结今天的学习内容确实不少从三种循环到break/continue再到循环嵌套、goto语句最后还有随机函数和两个小游戏信息量相当大。说实话个人感觉今天的学习有点跟不上了尤其是循环嵌套那部分第一次系统地把任务拆解、细分再组织成代码确实是个不小的坎。所以明天我打算先把前五天所学的知识好好复盘一遍巩固一下基础。如果你也在学C语言欢迎关注明天的博客我会把复习的要点和心得整理出来分享给大家。苔花如米小也学牡丹开。一起加油