C语言之循环结构
程序结构:
- 顺序结构
- 条件结构(分支结构)
if结构,if…else结构 ,多重if分支结构,switch结构
- 循环结构:做重复的事情
while循环,do..while循环和for循环。
写循环结构主要注意两点:循环条件(做多少遍)和循环体(重复做的事情)。
while结构语法:
while(条件){
//循环体;
}
特点:先判断,后执行,条件不满足一次都不执行。
注意:检查循环条件是否恒成立,如果循环条件恒成立将造成死循环。
示例1:
int i=1; while(i<=5){ printf("第%d遍:我是最棒的!\n",i); i++;//i=i+1; } |
示例2:
int num=1,result; while(num<=10){ result = num*10; printf("%d*10=%d\n",num,result); num++; } |
示例3:
int realPrice=1600; int price,i=1; while(i<=5){ printf("第%d次,输入商品的价格",i); scanf("%d",&price); if(price<realPrice){ printf("低了\n"); }else if(price==realPrice){ printf("中了\n"); break;//跳出循环 //i=10; }else{ printf("高了\n"); } i++; } printf("您一共猜了%d次\n",i); |
do…while循环结构:
语法:do{
循环体;
}while(条件);
特点:先执行,后判断, 至少执行1次
示例1:
//计算100以内所有3的倍数和个位或十位带3数字之和。 int i=0,sum=0,ge,shi; do{ ge = i%10; //获取个位 shi = i/10%10;//获取十位 if(i%3==0||ge==3||shi==3){ sum+=i; } i++; }while(i<=100); printf("100以内所有3的倍数和带3数字之和为:%d",sum); |
示例2:
//猜数游戏。要求猜一个介于1~10之间的数字,并统计用户所用的次数。 int number=8,guess; int count=0;//用于统计用户猜的次数 do{ printf("请输入一个1~10之间的整数:\n"); scanf("%d",&guess); if(guess>number){ printf("大了\n"); }else if(guess<number){ printf("小了\n"); } count++;//更加次数 }while(guess!=number); printf("您一共用了%d次猜到了答案%d\n",count,number); |
循环嵌套: 一个循环结构中包含其他循环结构
循环嵌套的特点:只要当内层循环结束之后,才会执行下一趟外层循环。
while(条件){
while(条件){
}
}
示例1:打印矩形
//打印4行8列的矩形 int i=0,j; //外层循环控制行数 while(i<4){ j=0; while(j<8){ //内层循环控制每行打印星号的个数 printf("*"); j++; } printf("\n");//换行 i++; } |
示例2: 打印直角三角形
*
**
***
****
*****
int i=0,j; while(i<5){//外层循环控制打印的行数 j=0; while(j<=i){//内层循环控制打印星号的个数 printf("*"); j++; } printf("\n"); i++; } |
示例3: 倒直角三角形
*****
****
***
**
*
int i=0,j; while(i<5){//外层循环控制行数 j=0; while(j<5-i){//内层循环控制星号的个数 printf("*"); j++; } printf("\n");//换行 i++; } |
示例4: 打印平行四边形(倒直角三角形+矩形)
********
********
********
********
实现思路: 外层循环控制行数,内层循环控制星号或空格的个数
每一行有两部分:空格+星号
i=0,第一行:3个空格+8个星号
i=1,第二行:2个空格+8个星号
i=2,第三行:1个空格+8个星号
i=3,第四行:0个空格+8个星号
int i=0,j,k; while(i<4){//外层循环控制行数 j=0; k=0; //控制空格的循环 while(j<3-i){ printf(" "); j++; } //控制星号的循环 while(k<8){ printf("*"); k++; } printf("\n"); i++; } |
示例5: 使用do...while嵌套打印奇数班直角三角形
*
***
*****
*******
分析:
i=0,第一行:1个星号
i=1,第二行:3个星号
i=2,第三行:5个星号
i=3,第四行:7个星号
int i=0,j; //外层循环控制打印的行数 do{ //内层循环控制打印星号的个数 j=0; do{ printf("*"); j++; }while(j<2*i+1); printf("\n");//换行 i++; }while(i<4); |
示例6:打印倒直角三角形
*******
*****
***
*
i=0;打印7个星号
i=1;打印5个星号
i=2;打印3个星号
i=3;打印1个星号
int i=0,j; do{ j=0; do{ printf("*"); j++; }while(j<7-2*i); printf("\n"); i++; }while(i<4); |
示例7: 正等腰三角形:
*
***
*****
*******
分析:
外层循环控制行数:4行
内层循环控制每行打印的内容: 空格+星号
i=0,第一行: 3个空格+1个星号
i=1,第二行: 2个空格+3个星号
i=2,第三行: 1个空格+5个星号
i=3,第四行: 0个空格+7个星号
int i=0,j,k; while(i<4){//外层循环控制行数 //空格部分 j=0; while(j<3-i){ printf(" "); j++; } //星号部分 k=0; while(k<2*i+1){ printf("*"); k++; } printf("\n"); i++; } |
示例8: 倒等腰三角形
*****
***
*
分析:每行有空格和星号组成
i=0;第一行: 0个空格+5个星号
i=1;第二行: 1个空格+3个星号
i=2;第三行: 2个空格+1个星号
int i=0,j,k; while(i<3){ //空格 j=0; while(j<i){ printf("$"); j++; } k=0; //星号 while(k<5-2*i){ printf("*"); k++; } printf("\n"); i++; } |
示例9: 打印菱形
*
***
*****
*******
*****
***
*
分析:正的等腰三角形+倒的等腰三角形
int i=0,j,k; while(i<4){//外层循环控制行数 //空格部分 j=0; while(j<3-i){ printf(" "); j++; } //星号部分 k=0; while(k<2*i+1){ printf("*"); k++; } printf("\n"); i++; } //倒等腰三角形 i=0; while(i<3){ //空格 j=0; while(j<=i){ printf(" "); j++; } k=0; //星号 while(k<5-2*i){ printf("*"); k++; } printf("\n"); i++; } |
for循环结构: 当明确知道循环次数时,for循环更加简洁。
语法:
for(表达式1;表达式2;表达式3){
//循环体;
}
执行顺序: 1.第一步执行表达式1,表达式1代表循环变量的初始化,只会执行1次.
2. 第二步执行表达式2, 表达式2代表循环条件.
3. 第三步:执行循环体
4. 第四步:执行表达式3,表达式3:更改循环变量。
注意:从语法上表达式1,表达式2和表达式3都可以缺少。但是如果缺少表达式2(条件)或表达式3(更改循环变量)经常会导致死循环发生。从语法上说for中的分号(;)不能缺少。
示例1:
int i; for(i=0;i<10;i++){ printf("我是徐晓东,我冤枉!\n"); } |
示例2: 计算阶乘: 5!=5*4*3*2*1
int i,number,fact=1; printf("请输入一个正整数:\n"); scanf("%d",&number); for(i=1;i<=number;i++){ fact=fact*i; } printf("%d的阶乘为%d",number,fact); |
示例3: 输出所有水仙花数
分析:水仙花数是一个三位数: 个位^3+十位^3+百位^3=这个数
1.获取所有的三位数
2.从三位数中获取个位,十位,百位
3.判断这个数是否为水仙花数:个位^3+十位^3+百位^3==这个数
4.将水仙花数输出
int i,ge,shi,bai; for(i=100;i<1000;i++){ ge = i%10;//个位 shi = i/10%10;//十位 bai = i/100;//百位 if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai){ printf("%d\t",i); } } |
示例4: 打印99乘法表:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
int i,j; //外层循环控制行数 for(i=1;i<=9;i++){ //内层循环控制每行的列数 for(j=1;j<=i;j++){ printf("%d*%d=%d\t",i,j,i*j); } printf("\n"); } |
示例5: 打印正等腰三角形
*
***
*****
*******
int i,j,k; //外层循环控制行数 for(i=0;i<4;i++){ //空格 for(j=0;j<3-i;j++){ printf(" "); } //星号 for(k=0;k<2*i+1;k++){ printf("*"); } printf("\n"); } |
break和continue关键字:
break:
1.如果使用在switch结构中case语句中,跳出当前的case语句
2.如果使用循环结构中,跳出当前循环。
continue:如果使用在循环结构中,代表跳过本次循环,开始下一次循环
while(条件){
…
break;
….
}
while(条件){
…
continue;
….
}
示例1:
int i; for(i=0;i<10;i++){ if(i%3==0){ //break;//跳出循环 continue;//跳过本次循环 } printf("%d\t",i); } |
示例2:
//逢"3"过小游戏 int i; for(i=1;i<=50;i++){ //i%3==0:3的倍数; i%10==3:个位带3; i/10==3:十位带3 if(i%3==0||i%10==3||i/10==3){ printf("过\t"); continue; //break; } printf("%d\t",i); } |
示例3:输出100~200之间所有素数(只能被1和本身整除的数)
分析:1.获取100~200之间的数
2.将这个数从2开始除到(数值-1),如果中间除的过程中出现除尽情况,跳出
int i,j,flag; for(i=100;i<=200;i++){ flag=0;//flag代表是否能除尽 for(j=2;j<i;j++){ if(i%j==0){ flag=1;//除了1和他本身之外有能除尽的数 //break; } } if(flag==0){ printf("%d\t",i); } } |
C语言之循环结构的更多相关文章
- 【C语言】-循环结构-for语句
for语句: for (表达式1;表达式2;表达式3) { 循环语句 } 表达式1 给循环变量赋初值 表达式2 为循环条件 表达式3 用来修改循环变量的值,称为循环步长. for语句的执行流程: 例: ...
- C语言基础-循环结构
循环结构while while循环-图例 while循环-格式 while ( 条件 ) { 语句1; 语句2; .... } 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号 ...
- 【C语言】-循环结构-while语句
while语句: while循环可实现"当型"循环,即当条件成立时,执行循环体.适合无法确定循环执行次数的情况. while (表达式) { 循环语句 } 注意: 表达式为循环控制 ...
- 【学习笔记】【C语言】循环结构-for
1.使用: for (语句1; 条件; 语句2) { 循环体 } 语句1:初始化语句 语句2:增量语句(执行完循环体后再执行的语句) 1.for一开始就会执行一次语句1(整个for循环 ...
- 【学习笔记】【C语言】循环结构-while
1. 简单使用 while ( 条件 ) { 语句1; 语句2; .... } 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号{}中的内容).然后再次 ...
- C语言之循环结构 for(二)
一 for循环的嵌套使用 for循环的嵌套语法: for(int i =0;i<10;i++){ for(int j=0;j<5;j++){ } } 一般用来打印平面,或者控制平面,或者说 ...
- C语言之循环结构 for(一)
一 for循环的介绍 语法: for(表达式1;表达式2;表达式3){ 循环体; } 循环步骤: A.执行表达式1,执行完毕跳转到B B.判断表达式2的结果是否为真,如果为真,跳转到C,否则跳转到E ...
- C语言--单层循环结构
一.PTA实验作业 题目1:最佳情侣身高 1.实验代码 int N, i; float height; char sex; printf("输入用户个数:\n"); scanf(& ...
- 【学习笔记】【C语言】循环结构-do while
用法: while (条件) { } do { } while(条件); while和do-while的区别 1.很多情况下,while和do while可以互换 2.while特 ...
随机推荐
- NPOI操作类
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- 【Spark2.0源码学习】-1.概述
Spark作为当前主流的分布式计算框架,其高效性.通用性.易用性使其得到广泛的关注,本系列博客不会介绍其原理.安装与使用相关知识,将会从源码角度进行深度分析,理解其背后的设计精髓,以便后续 ...
- Web性能优化工具WebPageTest(三)——本地部署(Windows 7版本)
这次先能够使用PC端的浏览器测试,首先需要下载官方的发布版本"WebPageTest 3.0". 1. agent:浏览器代理软件 2. mobile:移动端参数相关代码 3. w ...
- 架构设计之Spring-Session分布式集群会话管理
前言 通常在web开发中,回话管理是很重要的一部分,用于存储与用户相关的一些数据.对于JAVA开发者来说,项目中的session一般由Tomcat或者jetty容器来管理. 特点介绍 尽管使用特定的容 ...
- 使用wcf编写坐标字符串生成shapefile文件,在iis发布供前端调用
项目有一需求,需要由坐标字符串(格式:x,y,点名)生成shapefile,由于在前台开发类似功能比较麻烦而且也不适用,最终决定使用WCF来实现,不借助现有GIS软件,基于GDAL实现. 实现过程如下 ...
- 利用GDB进行多线程调试
一.多线程调试 多线程调试重要就是下面几个命令: info thread 查看当前进程的线程. thread <ID> 切换调试的线程为指定ID的线程. break file.c:100 ...
- TFS下载文件已损坏问题
近日在把一个数千人使用的TFS环境进行机房迁移时,从现有的服务器集群中整体迁移到另外一个服务器集群中,经过周密的设计迁移方案,充分验证方案中的各个关键过程,最终在几乎对数千人用户完全透明,没有任何感知 ...
- 自动化运维:使用psutil和paramiko读取远程主机信息
1.前言 今天大致看了下自动化运维的东西,里面介绍到了psutil模块,其封装了linux 下的大部分shell命令,用起来比较方便.但是基本都是介绍在本地如何使用,而实际情况大家很少这样使用,一般 ...
- WebGIS开源解决方案之开发环境搭建(一)
工欲善其事,必先利其器,本文主要讲述WebGIS开源解决方案之环境搭建--geoserver的安装 安装方式一:tomcat环境下安装 从tomcat官网下载tomcat环境,下载链接:http:// ...
- 在ASP.NET Core 中使用Cookie中间件
在ASP.NET Core 中使用Cookie中间件 ASP.NET Core 提供了Cookie中间件来序列化用户主题到一个加密的Cookie中并且在后来的请求中校验这个Cookie,再现用户并且分 ...