IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:12:48  更:2021-12-04 13:12:56 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码