热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

详细讲解C语言2(C语言系列)

目录前言:选择结构:while:for:dowhile:结束语:前言࿱

目录

前言:

选择结构:

while:

 for:

do...while:

结束语:




前言:

        在前面小编与大家一起学习了分支语句中的选择结构,接下来就和小编一起来学习分支语句中的循环结构吧!


选择结构:

选择结构主要分为三种:while,do...while,for。


while:

语法结构:

while (表达式)循环语句;

简单的一个while的代码如下所示:

#include
int main() {while (1)printf("hehe\n");return 0;
}//该代码会使得代码结果进入一个死循环中

使用while循环在屏幕上打印1~10代码如下所示:

#include
int main() {int i &#61; 1;//初始化while (i <&#61; 10)//判断部分 {printf("%d ", i);i&#43;&#43;;//调整部分}return 0;
}

代码结果截图如下所示&#xff1a;

在while中break用于永久的终止循环&#xff1a;

代码如下所示&#xff1a;

#include
int main() {int i &#61; 1;while (i <&#61; 10){if (i &#61;&#61; 5)break;printf("%d ", i);i&#43;&#43;;}return 0;
}

 结果如下截图所示&#xff1a;

在while中continue的作用是跳过本次循环continue后面的代码&#xff0c;直接进入判断部分看是否进行下一次循环。

代码如下所示&#xff1a;

#include
int main() {int i &#61; 1;while (i <&#61; 10){if (i &#61;&#61; 5)continue;//使得程序进入死循环printf("%d", i);//当i &#61;&#61; 5的时候直接跳过下面两条返回到上面while的判断部分i&#43;&#43;;}
}

 结果如下截图所示&#xff1a;

while循环的小练习&#xff1a;
在屏幕上获取一个字符之后&#xff0c;再在屏幕上把这个字符给打印出来。

具体代码如下所示&#xff1a;

#include
int main() {int ch &#61; 0;while ((ch &#61; getchar()) !&#61; EOF){putchar(ch);}return 0;//ctrl&#43;z退出循环
}

其中getchar是获取一个字符&#xff0c;putchar是输出一个字符。

如果getchar获取字符失败则返回的是EOF。

其中EOF文件结束的标志(end of file)相当于-1

代码结截图如下所示&#xff1a;

如果要退出程序则需要输入ctrl&#43;z即可。

那么我们来思考一下getchar是如何获取这个字符的呢&#xff1f;

其实getchar是通过电脑中的缓冲区来获取字符的&#xff0c;键盘在输入字符后将它们存储在缓冲区中&#xff0c;然后getchar通过缓冲区在来读取字符&#xff0c;一次只读取一个字符。

 先读取A在读取\n。

示例代码如下所示&#xff1a;

#define _CRT_SECURE_NO_WARNINGS 1
#include
int main() {char password[20] &#61; { 0 };printf("请输入密码:>");scanf("%s", password);//数组名即地址printf("请确认密码(Y/N&#xff09;:>");//清理缓冲区//getchar();//处理&#39;\n&#39;//清理缓冲区中的多个字符int tmp &#61; 0;while ((tmp &#61; getchar()) !&#61; &#39;\n&#39;){;}int ch &#61; getchar();if (ch &#61;&#61; &#39;Y&#39;){printf("确认成功\n");}else{printf("不成功\n");}return 0;
}

结果如下截图所示&#xff1a;

其中我们要在确定密码的时候清理缓冲区&#xff0c;否则getchar会直接在缓冲区中拿到“\n”&#xff0c;直接返回不成功&#xff1a;

清理多个字符的缓冲区我们用的代码是&#xff1a;

int tmp &#61; 0;while ((tmp &#61; getchar()) !&#61; &#39;\n&#39;){;}

注意&#xff1a;getchar的返回值是整形&#xff0c; 它读取虽然是字符&#xff0c;但是字符是以ASCII码值存储的&#xff0c;故返回的是整形。

代码如下所示&#xff1a;

#include
int main() {int ch &#61; 0;while ((ch &#61; getchar()) !&#61; EOF){if (ch <&#39;0&#39; || ch > &#39;9&#39;)continue;putchar(ch);}return 0;
}

结果如下截图所示&#xff1a;


 for&#xff1a;

 语法结构&#xff1a;

其中初始化只执行一次

打印1~10代码如下所示&#xff1a;

#include
int main() {int i &#61; 0;for (i &#61; 1; i <&#61; 10; i&#43;&#43;) {printf("%d ", i);}return 0;
}

结果如下图所示&#xff1a;

for中的break也是终止循环

代码如下所示&#xff1a;

#include
int main() {int i &#61; 0;for (i &#61; 1; i <&#61; 10; i&#43;&#43;){if (i &#61;&#61; 5)break;printf("%d\n", i);}return 0;
}

 结果截图如下所示&#xff1a;

for中的break跳过本次循环

代码如下所示&#xff1a;

#include
int main() {int i &#61; 0;for (i &#61; 1; i <&#61; 10; i&#43;&#43;){if (i &#61;&#61; 5)continue;//当i&#61;&#61;5的时候跳过下面的代码进行下一次循环printf("%d\n", i);}return 0;
}

结果截图如下所示&#xff1a;

for中的continue和while中的continue的区别&#xff1a;

for中的continue跳到了调整部分&#xff0c;不会使得代码死循环。

while中的continue可能会跳过调整部分使得代码陷入死循环。

 在for中调整部分可以放在大括号内代码如下所示&#xff1a;

#include
int main() {int i &#61; 0;for (i &#61; 1; i <&#61; 10; ){printf("%d\n", i);i&#43;&#43;;}return 0;
}

结果如下截图所示&#xff1a;

建议&#xff1a;
1.不可在for循环体内修改循环变量&#xff0c;防止for失去控制。

代码如下所示&#xff1a;

#include
int main() {int i &#61; 0;for (i &#61; 1; i <&#61; 10; i&#43;&#43;){printf("%d\n", i);i &#61; 5;//改变循环变量}return 0;
}

结果如下截图所示

2.建议for语句的循环控制变量的语句采用“前闭后开区间”的写法。

代码如下所示&#xff1a;

#include
int main() {int arr[10] &#61; { 0 };int i &#61; 0;for (i &#61; 0; i <10; i&#43;&#43;)//前闭后开{printf("%d\n", arr[i]);}return 0;
}

结果截图如下所示&#xff1a;

在for中初始化、判断、调整部分均可以省略。

判断部分省略后&#xff0c;恒为真值会导致死循环&#xff0c;具体代码如下所示&#xff1a;

#include
int main() {//判断部分的省略&#xff0c;判断部分恒为真for (;;){printf("hehe\n");}return 0;
}

 结果截图如下所示&#xff1a;

注意判断部分是“&#61;”还是“&#61;&#61;”

“&#61;”为赋值号 “&#61;&#61;”才是判断号

代码如下所示&#xff1a;

#include
int main() {int i &#61; 0;int k &#61; 0;for (i &#61; 0, k &#61; 0; k &#61; 0; i&#43;&#43;, k&#43;&#43;)k&#43;&#43;;printf("%d\n", k);return 0;
}

该代码的执行次数为0次


do...while&#xff1a;

语法结构&#xff1a;

do循环语句;
while (表达式)

while和do...while的区别&#xff1a;

while是先判断再执行而do...while是先执行再判断。

打印1~10代码如下所示&#xff1a;

#include
int main() {int i &#61; 1;do{printf("%d ", i);i&#43;&#43;;} while (i <&#61; 10);return 0;
}

结果如下截图所示&#xff1a;

do...while中的break&#xff1a;

代码如下所示&#xff1a;

#include
int main() {int i &#61; 1;do{if (i &#61;&#61; 5)break;printf("%d ", i);i&#43;&#43;;} while (i <&#61; 10);return 0;
}

结果截图如下所示&#xff1a;

do...while中的continue&#xff1a;

具体代码如下所示&#xff1a;

#include
int main() {int i &#61; 1;do{if (i &#61;&#61; 5)break;printf("%d ", i);i&#43;&#43;;} while (i <&#61; 10);return 0;
}

 结果如下截图所示&#xff1a;

这与while中的continue一致。

do...while的特点是&#xff1a;代码至少执行一次。


结束语&#xff1a;

        这次的分享就到这里啦&#xff01;我们这次主要和大家一起学习了分支语句中的循环结构&#xff0c;下一次小编将针对于这次的学习进行一次习题练习&#xff0c;想要学习的同学记得关注小编和小编一起学习吧&#xff01;如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津&#xff08;在此小编先谢过各位大佬啦&#xff01;&#xff09;


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
author-avatar
老鼠爱上毛ee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有