| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言学习——循环结构1 -> 正文阅读 |
|
[C++知识库]C语言学习——循环结构1 |
直接上菜看一下基本结构 //int main() //{ //????????int a = 1;//这叫初始化 //????????while (a <= 10) //括号内的叫判断表达式 //????????{ //????????????????printf("数字%d\n", a);//想打印数字加汉字,汉字放%d前面即可 //????????????????a++;//调整部分 //????????} //???????? //????????return 0 ; //}//打印数字1-10 C语言三步走:搭框架,用啥定义啥,开用 在这里主要是开用的环节,注意while()后面必自带括号{},不然会一直打印第一个数,还有就是如果想让一组数来循环,你得用++等让数字发生变化,不然会一直打印一个数,while()后面也别写;谢谢,这和if同理。 在while循环中,遇到break则立即停止跳出循环,不管还有多少没循环完。 在while循环中,continue的作用是跳过本次循环(continue后面的代码)去找while。 while能写特别重要的代码:读取键盘输入字符代码 它的作用,上大菜: //int main() //{ //????????// //????????char password[20] = { 0 }; //????????printf("请输入密码:>"); //????????scanf("%s", password);//123456 //????????//gets //????????printf("请确认密码(Y/N):>"); //????????int ch = getchar(); //????????if (ch == 'Y') //????????{ //????????????????printf("确认成功\n"); //????????} //????????else //????????{ //????????????????printf("确认失败\n"); //????????} //????????return 0; //} 输出结果,直接出了第二个的“确认失败” 那为什么会直接出第二个结果呢?我们键盘输入的时候是输入在缓冲区,会自带一个\n,后面的getchar一来,一看有东西,直接没停下来等你输入数据自己往后运行了,所以我们要清理缓冲区。 正确的代码是: //int main() //{ //????????// //????????char password[20] = { 0 }; //????????printf("请输入密码:>"); //????????scanf("%s", password);//123456 //????????printf("请确认密码(Y/N):>"); //????????//清理缓冲区 //????????//getchar();//处理'\n' //????????// //????????//清理缓冲区的中多个字符 //????????int tmp = 0; //????????while ((tmp = getchar()) != '\n') //????????{ //????????????????; //????????} // //????????int ch = getchar(); //????????if (ch == 'Y') //????????{ //????????????????printf("确认成功\n"); //????????} //????????else //????????{ //????????????????printf("确认失败\n"); //????????} //????????return 0; //} 那可能会有疑问了,我清理缓冲区直接自己再写一个getchar不就能抱走\n了么,为什么要特地写一个while呢? 因为如果密码输入的超多,还带字符abdhjwha的,一个getchar只能抱走一个字符,那仍然会出Bug,我们循环的意义就在于一次一次循环抱走多余的字符,一个循环彻底清理干净缓冲区。 for循环,格式为for(初始数值;循环范围;变化) 上菜: int main() { int i = 0; for (i = 1; i <= 10; i++) { printf("数字%d\n", i); } return 0; } 那for循环怎么带continue和break呢? break差不多,continue不太一样,不会死循环,因为上去找for能++一下。 ps:for循环内最好不要放另外的赋值或++,会破坏正常循环,而且for的循环区间最好写成前闭后开 for可以有很多自由发挥的地方: 比如for(;;),可以使循环死循环,因为判断部分恒为真。 那来一个省略造成的乌龙函数,上菜: //int main() //{ //????????int i = 0; //????????int j = 0; //????????for (; i < 3; i++) //????????{ //????????????????for (; j < 3; j++) //????????????????{ //????????????????????????printf("hehe\n"); //????????????????} //????????} // //????????return 0; //} 这就是省略带来的问题,仅仅打印了三个hehe,尽管i通过++会反复进到j中,可是j已经在第一轮变成3了,根本打印不了。 do while循环: do 循环语句 while(表达式); 啥都不管先上执行语句,再用while判断,上基础菜: //int main() //{ //????????int i = 1; //????????do //????????{ //????????????????printf("%d\n", i); //????????????????i++; //????????} while (i <= 10); // //????????return 0; //}//使用do while语句打印从1-10,这里的while后面必带;而且代码规范不另起一行,直接跟在do的括号{}后面 下面是应用题,要求输入n并打印n阶乘的结果,上菜: //int main() //{ //????????int a = 1; //????????int b = 0;//思维上的核心 //????????int c = 1;//因为发现阶乘都是从1开始乘 //????????scanf("%d", &b);//这一步仅仅就是为了输入一个循环最大范围 //????????for (a = 1; a <= b; a++) //????????{ //????????????????c *= a;//代码上的核心,这句话翻译过来就是c等于a的阶乘,十分重要,但难道这就是C语言中阶乘的固定写法吗?有没有可以理解的空间 //????????} //????????printf("%d", c);//放外面的好处是,只打印一个最终结果,因为for是自己在那循环,不满足循环条件了再跳出来,跳出来时得出的数就已经是要求的结果了 //????????return 0; //} 这个代码需要十分深刻的理解: 从变量a,b,c来看,b变量是这个程序的核心与灵魂,我们在研究阶乘时会发现,比如5*=5*4*3*2*1,8*=8*7*6*5*4*3*2*1,求谁的阶乘,谁就是整个相乘式子中的最大值,而要求还有“输入”,所以不妨让scanf的输入就是循环范围的“最大值”。至此,b的任务结束;a则是普普通通的循环目标,C的任务是承接a的值并将其打印,有的人可能会疑惑,那我直接打印a不就行了么?注意,a会循环多次,直接打印a会把循环过程中的a也打印,而我们只需要一个结果,所以我们创造了c来承接a的最后结果,并打印c。这是从变量上来看的。 从结构上看,C语言三步走基本架构不用说了,开局用谁我定义谁变量值也很常见,关键是 1.scanf键盘输入的是循环的最大值这一步,太妙了,然后是固定的for循环格式 2.for循环{}内部,有个c*=a,这个代码会表现出c=a的阶乘的效果,我不知道这是C语言固定格式还是可以理解 3.printf必不可能写在for{}里面,因为那样会打印“过程中的数”,那为什么写在外面就可以打印结果呢?原因是C语言的for,它一旦不满足循环条件(运行出来结果),会把结果跳出循环来,而那些满足条件的中间值自然会留在for中,因此我们把printf放在外面可以只打印循环的结果。 ? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 11:11:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |