您的位置:首页 > 编程语言 > C语言/C++

C语言基本教程 第5课:语句和表达式

2016-08-18 15:19 531 查看
从这一课开始,终于可以愉快地编码了.首先 学习: C语言输入和输出 .C语言是一种编程语言,就像其他语言一样,也是一句一句的表达.C语言习惯用小写字母,大小写敏感,不使用行号,无程序行概念,可使用空行和空格,常用锯齿形书写格式.
int main(int argc, char *argv[] )
{
int  i=0,j=0,sum=0;
sum=10;
for(i=1; i<10;i++)
{
for(j=1;j<10;j++)
{
sum+=i*j ;
}
}
printf(“%d\n”,sum);
return 0;
}
•C语言结构特点•程序由一个或多个函数组成
•必须有且只能有一个主函数main(),可以放在程序中任一位置
•程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。•C程序由语句组成
•用“;”作为语句终止符
•注释
•/* */为注释,不能嵌套,不产生编译代码
========================================================
在C语言中,共有三大常用的程序结构:顺序结构:代码从前往后执行,没有任何“拐弯抹角”;
选择结构:也叫分支结构,重点要掌握 if else、switch 以及条件运算符;
循环结构:重复执行同一段代码。顺序结构<一> 空语句只有分号“;”组成的语句称为空语句。 空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。适用的场合是语法上要求出现一个完整的语句,但并不需要执行任何任务的情况.<二>
表达式语句
赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为: 变量=表达式; 赋值语句的功能和特点都与
赋值表达式相同。
int a=3;//变量定义并初始化
a=100;//赋值语句,将变量a赋值为100以上都是顺序结构,也就是说代码一句一句自上而下开始执行.选择结构:if
和 else 是两个新的关键字,if 意为“如果”,else 意为“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。总结起来,if else 的结构为:if(判断条件){语句块1}else{语句块2}
意思是,如果判断条件成立,那么执行语句块1,否则执行语句块2 。其执行过程可表示为下图:所谓语句块(Statement
Block),就是由
{
}
包围的一个或多个语句的集合。如果语句块中只有一个语句,也可以省略
{
}
,例如:
if(age>=18) printf("恭喜,你已经成年!\n");
else printf("抱歉,你还未成年!\n");
由于if else 语句可以根据不同的情况执行不同的代码,所以也叫分支结构或选择结构,上面的代码中,就有两个分支。求两个数中的较大值:
#include <stdio.h>
int main()
{
int a, b, max;
printf("输入两个整数:");
scanf("%d %d", &a, &b);
if(a>b) max=a;
else max=b;
printf("%d和%d的较大值是:%d\n", a, b, max);
return 0;
}
运行结果:输入两个整数:34 28↙34和28的较大值是:34本例中借助变量max,用max来保存较大的值,最后将max输出。


只使用if语句

有的时候,我们需要在满足某种条件时进行一些操作,而不满足条件时就不进行任何操作,这个时候我们可以只使用 if 语句。也就是说,if else 不必同时出现。单独使用 if 语句的形式为:if(判断条件){语句块}
意思是,如果判断条件成立就执行语句块,否则直接跳过。其执行过程可表示为下图:只使用 if 语句来求两个数中的较大值:
#include <stdio.h>
int main()
{
int a, b, max;
printf("输入两个整数:");
scanf("%d %d", &a, &b);
max=b;  // 假设b最大
if(a>b) max=a;  // 如果a>b,那么更改max的值
printf("%d和%d的较大值是:%d\n", a, b, max);
return 0;
}
运行结果:输入两个整数:34 2834和28的较大值是:34本例程序中,输入两个数a、b。把b先赋予变量max,再用 if 语句判别max和b的大小,如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。


多个if else语句

if else 语句也可以多个同时使用,构成多个分支,形式如下:if(判断条件1){语句块1} else if(判断条件2){语句块2}else if(判断条件3){语句块3}else if(判断条件m){语句块m}else{语句块n}
意思是,从上到下依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳到整个 if else 语句之外继续执行其他代码。如果所有判断条件都不成立,则执行语句块n,然后继续执行后续代码。也就是说,一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行。例如,使用多个 if else 语句判断输入的字符的类别:
#include <stdio.h>
int main(){
char c;
printf("Input a character:");
c=getchar();
if(c<32)
printf("This is a control character\n");
else if(c>='0'&&c<='9')
printf("This is a digit\n");
else if(c>='A'&&c<='Z')
printf("This is a capital letter\n");
else if(c>='a'&&c<='z')
printf("This is a small letter\n");
else
printf("This is an other character\n");
return 0;
}
运行结果:Input a character:e↙This is a small letter本例要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于32的为控制字符。在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,
在“a”和“z”之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,用多个 if else 语句编程,判断输入字符ASCII码所在的范围,分别给出不同的输出。例如输入为“e”,输出显示它为小写字符。在使用 if 语句时还应注意以下两点:在 if 语句中,判断条件必须用括号括起来。
语句块由
{ }
包围,但要注意的是在
}
之后不需要再加分号
;
(当然加上也没错)。


if语句的嵌套

if 语句也可以嵌套使用,例如:
#include <stdio.h>
int main(){
int a,b;
printf("Input two numbers:");
scanf("%d %d",&a,&b);
if(a!=b){  //!=表示不等于
if(a>b) printf("a>b\n");
else printf("a<b\n");
}else{
printf("a=b\n");
}
return 0;
}
运行结果:Input two numbers:12 68a<bif 语句嵌套时,要注意 if 和 else 的配对问题。C语言规定,else
总是与它前面最近的 if 配对,例如:
纯文本复制
if(a!=b)  // ①
if(a>b) printf("a>b\n");  // ②
else printf("a<b\n");  // ③
③和②配对,而不是和①配对。C语言虽然没有限制
if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况。例如,输入一个整数,输出该整数对应的星期几的英文表示:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
if(a==1){
printf("Monday\n");
}else if(a==2){
printf("Tuesday\n");
}else if(a==3){
printf("Wednesday\n");
}else if(a==4){
printf("Thursday\n");
}else if(a==5){
printf("Friday\n");
}else if(a==6){
printf("Saturday\n");
}else if(a==7){
printf("Sunday\n");
}else{
printf("error\n");
}
return 0;
}
运行结果:Input integer number:3↙Wednesday对于这种情况,实际开发中一般使用 switch 语句代替,请看下面的代码:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
运行结果:Input integer number:4↙Thursdayswitch 是另外一种选择结构的语句,用来代替简单的、拥有多个分枝的
if else 语句,基本格式如下:switch(表达式){case 整型数值1: 语句 1;case 整型数值2: 语句 2;......case 整型数值n: 语句 n;default: 语句 n+1;}
它的执行过程是:1) 首先计算“表达式”的值,假设为 m。2) 从第一个 case 开始,比较“整型数值1”和 m,如果它们相等,就执行冒号后面的所有语句,也就是从“语句1”一直执行到“语句n+1”,而不管后面的
case 是否匹配成功。3) 如果“整型数值1”和 m 不相等,就跳过冒号后面的“语句1”,继续比较第二个 case、第三个 case……一旦发现和某个整型数值相等了,就会执行后面所有的语句。假设
m 和“整型数值5”相等,那么就会从“语句5”一直执行到“语句n+1”。4) 如果直到最后一个“整型数值n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。需要重点强调的是,当和某个整型数值匹配成功后,会执行该分支以及后面所有分支的语句。例如:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n");
case 2: printf("Tuesday\n");
case 3: printf("Wednesday\n");
case 4: printf("Thursday\n");
case 5: printf("Friday\n");
case 6: printf("Saturday\n");
case 7: printf("Sunday\n");
default:printf("error\n");
}
return 0;
}
运行结果:Input integer number:4↙ThursdayFridaySaturdaySundayerror输入4,发现和第四个分支匹配成功,于是就执行第四个分支以及后面的所有分支。这显然不是我们想要的结果,我们希望只执行第四个分支,而跳过后面的其他分支。为了达到这个目标,必须要在每个分支最后添加
break;
语句。break 是C语言中的一个关键字,专门用于跳出
switch 语句。所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。使用 break 修改上面的代码:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
运行结果:Input integer number:4↙Thursday由于 default 是最后一个分支,匹配后不会再执行其他分支,所以也可以不添加
break;
语句。最后需要说明的两点是:1) case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。请看下面的例子:
case 10: printf("..."); break;  //正确
case 8+9: printf("..."); break;  //正确
case 'A': printf("..."); break;  //正确,字符和整数可以相互转换
case 'A'+19: printf("..."); break;  //正确,字符和整数可以相互转换
case 9.5: printf("..."); break;  //错误,不能为小数
case a: printf("..."); break;    //错误,不能包含变量
case a+10: printf("..."); break;  //错误,不能包含变量
2) default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。在上边例子中,if
的判断条件中使用了
<=
>
!=
等符号,它们专门用在判断条件中,让程序决定下一步的操作,称为关系运算符(Relational
Operators)。关系运算符在使用时,它的的两边都会有一个表达式,比如变量、数值、加减乘除运算等,关系运算符的作用就是判明这两个表达式的大小关系。注意,是判明大小关系,不是其他关系。C语言提供了以下关系运算符:
关系运算符含 义数学中的表示
<小于<
<=小于或等于
>大于>
>=大于或等于
==等于=
!=不等于
关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。在C语言中,有的运算符有两个操作数,例如 10+20,10和20都是操作数,+ 是运算符。我们将这样的运算符称为双目运算符。同理,将有一个操作数的运算符称为单目运算符,将有三个操作数的运算符称为三目运算符。常见的双目运算符有 +、-、*、/ 等,单目运算符有 ++、-- 等,三目运算符只有一个,就是 ? :,我们将在《C语言条件运算符》中详细介绍。关系运算符的两边可以是变量、数据或表达式,例如:1) a+b > c-d2) x > 3/23) 'a'+1 < c4) -i-5*j == k+1关系运算符也可以嵌套使用,例如:1) a > (b > c)2) a != (c == d)关系运算符的运算结果只有 0 或 1。当条件成立时结果为 1,条件不成立结果为 0。例如:5>0 成立,其值为 1;
34-12>100 不成立,其值为 0;
(a=3)>(b=5) 由于3>5不成立,故其值为 0。我们将运算结果 1 称为“真”,表示条件成立,将 0 称为“假”,表示条件不成立。下面的代码会将关系运算符的结果输出:
#include <stdio.h>
int main(){
char c='k';
int i=1, j=2, k=3;
float x=3e+5, y=0.85;
int result_1 = 'a'+5<c, result_2 = x-5.25<=x+y;
printf( "%d, %d\n", result_1, -i-2*j>=k+1 );
printf( "%d, %d\n", 1<j<5, result_2 );
printf( "%d, %d\n", i+j+k==-2*j, k==j==i+5 );
return 0;
}
运行结果:1, 01, 10, 0对于含多个关系运算符的表达式,如 k==j==i+5,根据运算符的左结合性,先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故表达式值为0。需要提醒的是,
==
才表示等于,而
=
表示赋值,大家要注意区分,切勿混淆。
&&
是一个新的运算符,称为逻辑运算符,表示
age>=18
score>=60
两个条件必须同时成立才能执行
if 后面的代码,否则就执行 else 后面的代码。在高中数学中,我们就学过逻辑运算,例如p为真命题,q为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。在C语言中,也有类似的逻辑运算:
运算符说明结合性举例
&&与运算,双目,对应数学中的“且”左结合1&&0、(9>3)&&(b>a)
||或运算,双目,对应数学中的“或”左结合1||0、(9>3)||(b>a)
!非运算,单目,对应数学中的“非”右结合!a、!(2<5)


逻辑运算的结果

在编程中,我们一般将零值称为“假”,将非零值称为“真”。逻辑运算的结果也只有“真”和“假”,“真”对应的值为 1,“假”对应的值为 0。


1) 与运算(&&)

参与运算的两个表达式都为真时,结果才为真,否则为假。例如:5&&0
5为真,0为假,相与的结果为假,也就是 0。(5>0) && (4>2)
5>0 的结果是1,为真,4>2结果是1,也为真,所以相与的结果为真,也就是1。


2) 或运算(||)

参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。例如:10 || 0
10为真,0为假,相或的结果为真,也就是 1。(5>0) || (5>8)
5>0 的结果是1,为真,5>8 的结果是0,为假,所以相或的结果为真,也就是1。


3) 非运算(!)

参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。例如:!0
0 为假,非运算的结果为真,也就是 1。!(5>0)
5>0 的结果是1,为真,非运算的结果为假,也就是 0。逻辑运算符和其它运算符优先级从低到高依次为:赋值运算符(=) < &&和|| < 关系运算符 < 算术运算符 < 非(!)
&& 和 || 低于关系运算符,! 高于算术运算符。按照运算符的优先顺序可以得出:a>b && c>d 等价于 (a>b)&&(c>d)
!b==c||d<a 等价于 ((!b)==c)||(d<a)
a+b>c&&x+y<b 等价于 ((a+b)>c)&&((x+y)<b)另外,逻辑表达式也可以嵌套使用,例如
a>b
&& b || 9>c
a
|| c>d &&  !p
循环结构
所谓循环(Loop),就是重复地执行同一段代码,例如要计算
1+2+3+……+99+100 的值,就要重复进行99次加法运算。


while循环

while循环的一般形式为:while(表达式){语句块}
意思是,先计算“表达式”的值,当值为真(非0)时, 执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”……这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行
while 后面的代码。我们通常将“表达式”称为循环条件,把“语句块”称为循环体,整个循环的过程就是不停判断循环条件、并执行循环体代码的过程。用 while 循环计算1加到100的值:
#include <stdio.h>
int main(){
int i=1, sum=0;
while(i<=100){
sum+=i;
i++;
}
printf("%d\n",sum);
return 0;
}
运行结果:5050代码分析:1) 程序运行到 while 时,因为 i=1,i<=100 成立,所以会执行循环体;执行结束后 i 的值变为 2,sum 的值变为 1。2) 接下来会继续判断 i<=100是否成立,因为此时 i=2,i<=100 成立,所以继续执行循环体;执行结束后 i 的值变为 3,sum 的值变为3。3) 重复执行步骤 2)。4) 当循环进行到第100次,i 的值变为 101,sum 的值变为5050;因为此时 i<=100 不再成立,所以就退出循环,不再执行循环体,转而执行while循环后面的代码。while 循环的整体思路是这样的:设置一个带有变量的循环条件,也即一个带有变量的表达式;在循环体中额外添加一条语句,让它能够改变循环条件中变量的值。这样,随着循环的不断执行,循环条件中变量的值也会不断变化,终有一个时刻,循环条件不再成立,整个循环就结束了。如果循环条件中不包含变量,会发生什么情况呢?1) 循环条件成立时的话,while 循环会一直执行下去,永不结束,成为“死循环”。例如:
#include <stdio.h>
int main(){
while(1){
printf("1");
}
return 0;
}
运行程序,会不停地输出“1”,直到用户强制关闭。2) 循环条件不成立的话,while 循环就一次也不会执行。例如:
#include <stdio.h>
int main(){
while(0){
printf("1");
}
return 0;
}
运行程序,什么也不会输出。再看一个例子,统计从键盘输入的一行字符的个数:
#include <stdio.h>
int main(){
int n=0;
printf("Input a string:");
while(getchar()!='\n') n++;
printf("Number of characters: %d\n", n);
return 0;
}
运行结果:Input a string:c.biancheng.net↙Number of characters: 15本例程序中的循环条件为
getchar()!='\n'
,其意义是,只要从键盘输入的字符不是回车就继续循环。循环体
n++;
完成对输入字符个数计数。


do-while循环

除了while循环,在C语言中还有一种 do-while 循环。do-while循环的一般形式为:do{语句块}while(表达式);
do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while
循环至少要执行一次“语句块”。用do-while计算1加到100的值:
#include <stdio.h>
int main(){
int i=1, sum=0;
do{
sum+=i;
i++;
}while(i<=100);
printf("%d\n", sum);
return 0;
}
运行结果:5050注意
while(i<=100);
最后的分号
;
,这个必须要有。
while循环和do-while各有特点,大家可以适当选择,实际编程中使用while循环较多。
除了while循环,C语言中还有 for 循环,它的使用更加灵活,完全可以取代
while 循环。上节我们使用 while 循环来计算1加到100的值,代码如下:
#include <stdio.h>
int main(){
int i, sum=0;
i = 1;  //语句①
while(i<=100 /*语句②*/ ){
sum+=i;
i++;  //语句③
}
printf("%d\n",sum);
return 0;
}
可以看到,语句①②③被放到了不同的地方,代码结构较为松散。为了让程序更加紧凑,可以使用 for 循环来代替,如下所示:
#include <stdio.h>
int main(){
int i, sum=0;
for(i=1/*语句①*/; i<=100/*语句②*/; i++/*语句③*/){
sum+=i;
}
printf("%d\n",sum);
return 0;
}
在 for 循环中,语句①②③被集中到了一起,代码结构一目了然。for 循环的一般形式为:for(表达式1; 表达式2; 表达式3){语句块}
它的运行过程为:1) 先执行“表达式1”。2) 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。3) 执行完循环体后再执行“表达式3”。4) 重复执行步骤 2) 和 3),直到“表达式2”的值为假,就结束循环。上面的步骤中,2) 和 3) 是循环条件,会重复判断“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。for循环的执行过程可用下图表示:我们再来分析一下“计算从1加到100的和”的代码:
#include <stdio.h>
int main(){
int i, sum=0;
for(i=1; i<=100; i++){
sum+=i;
}
printf("%d\n",sum);
return 0;
}
运行结果:5050代码分析:1) 执行到 for 语句时,先给 i 赋初值1,判断 i<=100 是否成立;因为此时 i=1,i<=100 成立,所以执行循环体。循环体执行结束后(sum的值为1),再计算
i++。2) 第二次循环时,i 的值为2,i<=100 成立,继续执行循环体。循环体执行结束后(sum的值为3),再计算 i++。3) 重复执行步骤 2),直到第101次循环,此时 i 的值为101,i<=100 不成立,所以结束循环。由此我们可以总结出for循环的一般形式:for(初始化语句; 循环条件; 自增或自减){语句块}


for 循环中的三个表达式

for 循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或自减)”都是可选项,都可以省略(但分号
;
必须保留)。1) 修改“从1加到100的和”的代码,省略“表达式1(初始化条件)”:
int main(){
int i = 1, sum = 0;
for( ; i<=100; i++){
sum+=i;
}
可以看到,将
i=1
移到了
for 循环的外面。2) 省略了“表达式2(循环条件)”,如果不做其它处理就会成为死循环。例如:
for(i=1; ; i++) sum=sum+i;
相当于:
i=1;
while(1){
sum=sum+i;
i++;
}
所谓死循环,就是循环条件永远成立,循环会一直进行下去,永不结束。死循环对程序的危害很大,一定要避免。3) 省略了“表达式3(自增或自减)”,就不会修改“表达式2(循环条件)”中的变量,这时可在循环体中加入修改变量的语句。例如:
for( i=1; i<=100; ){
sum=sum+i;
i++;
}
4) 省略了“表达式1(初始化语句)”和“表达式3(自增或自减)”。例如:
for( ; i<=100 ; ){
sum=sum+i;
i++;
}
相当于:
while(i<=100){
sum=sum+i;
i++;
}
5) 3个表达式可以同时省略。例如:for( ; ; ) 语句
相当于:while(1) 语句6) “表达式1”可以是初始化语句,也可以是其他语句。例如:
for( sum=0; i<=100; i++ )  sum=sum+i;
7) “表达式1”和“表达式3”可以是一个简单表达式也可以是逗号表达式。
for( sum=0,i=1; i<=100; i++ )  sum=sum+i;
或:
for( i=0,j=100; i<=100; i++,j-- )  k=i+j;
8) “表达式2”一般是关系表达式或逻辑表达式,但也可是数值或字符,只要其值非零,就执行循环体。例如:
for( i=0; (c=getchar())!='\n'; i+=c );
又如:
for( ; (c=getchar())!='\n' ; )
printf("%c",c);
使用while或for循环时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用break或continue关键字。


break关键字

当 break 关键字用于 while、for 循环时,会终止循环而执行整个循环语句后面的代码。使用 while 循环计算1加到100的值:
#include <stdio.h>
int main(){
int i=1, sum=0;
while(1){  //循环条件为死循环
sum+=i;
i++;
if(i>100) break;
}
printf("%d\n", sum);
return 0;
}
运行结果:5050while 循环条件为 1,是一个死循环。当执行到第100次循环的时候,计算完
i++;

i 的值为 101,此时 if 语句的条件 i> 100 成立,执行
break;
语句,结束循环。在多层循环中,一个 break 语句只向外跳一层。例如,输出一个4*4的整数矩阵:
#include <stdio.h>
int main(){
int i=1, j;
while(1){ // 外层循环
j=1;
while(1){ // 内层循环
printf("%-4d", i*j);
j++;
if(j>4) break; //跳出内层循环
}
printf("\n");
i++;
if(i>4) break; // 跳出外层循环
}return 0;
}
运行结果:
1   2   3   4
2   4   6   8
3   6   9   12
4   8   12  16

当 j>4 成立时,执行
break;
,跳出内层循环;外层循环依然执行,直到
i>4 成立,跳出外层循环。内层循环共执行了4次,外层循环共执行了1次。


continue语句

continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。来看一个例子:
#include <stdio.h>
int main(){
char c = 0;
while(c!='\n'){  //回车键结束循环
c=getchar();
if(c=='4' || c=='5'){  //按下的是数字键4或5
continue;  //跳过当次循环,进入下次循环
}
putchar(c);
}
return 0;
}
运行结果:0123456789↙01236789程序遇到while时,变量c的值为
'\0'
,循环条件
c!='\n'
成立,开始第一次循环。getchar()
使程序暂停执行,等待用户输入,直到用户按下回车键才开始读取字符。本例我们输入的是 0123456789,当读取到4或5时,if 的条件
c=='4'||c=='5'
成立,就执行
continue 语句,结束当前循环,直接进入下一次循环,也就是说
putchar(c);
不会被执行到。而读取到其他数字时,if
的条件不成立,continue 语句不会被执行到,
putchar(c);
就会输出读取到的字符。break与continue的对比:break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。
goto
语句,  好多人都是主张慎用,禁用的,这里就不讲了,基本上也用不到.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: