从零开始学编程---第一步-C语言(十二)
我们知道,循环条件不满足就会退出循环
那有没有可能我们在循环里中途就让它退出循环?答案是可能
我们需要break语句,这个语句我们已经接触过,用switch的时候用过
我想大家应该知道它的用法了
break不仅能跳出switch语句,也能跳出循环语句
不过break在循环语句里通常是和if语句一起的,换句话说,在循环里,if几乎是每个break的第一部分
下面程序是从1打印到10的程序
#include <stdio.h>
main()
{
int i;
for(i=1;i<=10;i++)
{
printf("%d ",i);
}
}
我们要它在打印5的时候就退出循环怎么弄,很简单
#include <stdio.h>
main()
{
int i;
for(i=1;i<=10;i++)
{
printf("%d ",i);
if(i==5)
{break;}
}
}
这个程序打印到5就会停止
有了break我们就可以让for括号里为空
#include <stdio.h>
main()
{
int i=1;
for(;;)
{
printf("%d ",i);
i++;
if(i>10)
{break;}
}
}
但是循环条件会有局限性
现在也许你还不知道循环中途跳出有什么用
等到了后面的程序你就会发现
掌握了break语句,我们接下来接触continue语句
continue是继续的意思
break是循环提前跳出,与之相反,continue就是强迫循环提前继续
continue也需要和if在一起
它的格式就是
continue;
很简单把,和break一样
continue强迫循环提前继续是个概念?
比如一个从1打印到10的程序
我要让程序循环到5时就让程序打印一句“找到了五”(不再显示数字5),然后跳出循环,进行下一周期循环
这样说你可能还不太懂,我举例子来说吧
看这个程序
#include <stdio.h>
main()
{
int i;
for(i=1;i<=10;i++)
{
if(i==5)
{
printf("找到了五 ");
}
printf("%d ",i);
}
}
没有continue
程序打印1 2 3 4 找到了五 5 6 7 8 9 10
这样的程序它多打印了一个5,我就是要让这个程序循环到5时,只打印找到了五,不再显示5的数字
用了continue后
#include <stdio.h>
main()
{
int i;
for(i=1;i<=10;i++)
{
if(i==5)
{
printf("找到了五 ");
continue;
}
printf("%d ",i);
}
}
程序就会打印 1 2 3 4 找到了五 6 7 8 9 10
continue的作用你应该明白了吧
当循环到5时,如果i=5 就打印“找到了五” 再continue
这里continue的作用是跳出此次循环(并不结束),然后返回for
也就是if语句(contuine)后面的所有语句不再执行,if后面的printf("%d ",i);就直接被忽略不执行了,也就不会打印数字5
然后直接返回for,开始6的循环
continue的功能就是强迫循环进入新的循环周期
break和continue也能在while语句中使用
两个语句的用法大家一定要多加使用
下面用程序来概括它们的功能
#include <stdio.h>
main()
{
int i;
for(i=1;i<=10;i++)
{
if(i==5)
{
printf("找到了五 ");
continue;
}
if(i==9)
{
printf("找到了九");
break;
}
printf("%d ",i);
}
}
break和continue的具体用处大家会在以后程序中看到
我们知道if语句可以包含if语句(俗称if语句嵌套)
其实循环语句也可以包含循环语句,就是循环嵌套
for,while,do-while可以相互包含,构成多重循环
例如:
1)for(){…
while()
{…}
…
}
(2)do{
…
for()
{…}
…
}while();
(3)while(){
…
for()
{…}
…
}
(4)for(){
…
for(){
…
}
}
等等。。。
来一个常用的题目,用循环打印下面的九九乘法表
这题怎么做?我们先用while语句来解吧
首先你得先找出要循环哪些
乘法表一共9行9列,我们要从第1行循环到第9行,从第1列循环到第9列
数字需要循环吗?不用,你可以发现 x*y=z x不正代表着列的数吗(第几列就显示第几个数字) 而y不正代表着行的数吗(第几行就显示第几行的数字)
结果就是x*y
既然是两层循环,怎么个循环法
先定义两变量x,y吧,x控制列循环,y控制行循环 x,y都必须小于等于9
x。y都需要每循环一次递增1
先从哪开始?是从行开始呢,还是从列开始
先从行开始,第一行开始 首先初始化y=1 y<=9
当y=1时 就打印x*1=1 并回车 我们发现x也需要循环,如何循环?
当y循环一次时(就是回车一次) x都要从1开始循环到y的列数
例如
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
当y=1 x就要循环1
当y=2 x就要从1循环到2
当y=3 x就要从1循环到3
。。。。。。
也就是说x的循环条件就是x<=y 不可以大于y
现在就明了了
从第1行开始
首先y=1
循环条件while(y<=9)
再初始化x=1
x的循环条件就是while(x<=y)
当y=1 while(x<=y)条件满足 x循环1 1*1=x*y y++ 回车
当y=2 初始化x=1 while(x<=y)条件满足 x循环1,2 1*2=x*y 2*2=x*y,y++ 回车
。。。。。。。。。。。。。
x每次循环开始都是从1开始,所以每次都需要初始化x为1
由y的循环控制x的循环
y每次循环一次 x初始化1 再X自己循环从1到y循环的次数
由此可见y循环在外,x循环在内 (y为外循环,x为内循环)
程序如下:
#include <stdio.h>
main()
{
int x,y;
y=1;
while(y<=9)
{
x=1;
while(x<=y)
{
printf("%d*%d=%d\t",x,y,x*y);
x++;
}
printf("\n");
y++;
}
}
while(x<=y)
{
printf("%d*%d=%d\t",x,y,x*y);
x++;
}
这里printf("%d*%d=%d\t",x,y,x*y); 里的\t是制表符 相当于TAB键
你用printf("%d*%d=%-4d",x,y,x*y); 也可以 %-4d是往右补4个空格 %4d则是往左补4的空格 (如果%d是两位数则补3个空格)
%4d的含义我以前说过了,这里在说一次,%d 前面加数字,例如%4d 表示按4位数输出,%d如果多于4位数,按4位输出,少于4位 按原样输出且靠右 即右对齐
扯远了,这里主要是打印格式美观,没特殊含义
用do-while来解这题
#include <stdio.h>
main()
{
int x,y;
y=1;
do
{
x=1;
do
{
printf("%d*%d=%d\t",x,y,x*y);
x++;
}while(x<=y);
printf("\n");
y++;
}
while(y<=9);
}
如果用while你还不太明白,那用for你应该比较容易理解
#include <stdio.h>
main()
{
int x,y; //x表示列,y表示行
for(y=1;y<=9;y++) 每循环一次回车
{
for(x=1;x<=y;x++) 从1到y循环打印x*y=x*y
{
printf("%d*%d=%d\t",x,y,x*y);
}
printf("\n");
}
}
你还可以反过来打印乘法表,只需改y的循环
#include <stdio.h>
main()
{
int x,y;
for(y=9;y>=1;y--)
{
for(x=1;x<=y;x++)
{
printf("%d*%d=%d\t",x,y,x*y);
}
printf("\n");
}
}
最新内容
热点内容
- QQ群
- 返回首页
- 返回顶部