版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计第三章3.1根本语句一个c程序可以有假设干个源程序文件组成一个源文件可以有假设干个函数和预处理命令以及全局变量声明局部组成一个函数有函数首部和函数体组成函数体由数据声明和执行语句组成C语句分为5类控制语句函数调用语句表达式语句空语句复合语句一、表达式语句有一个表达式加一个分号构成一个语句
a=3;例:分号赋值表达式表达式语句+=二、空语句只有一个分号的语句;〔什么也不做〕用来做流程的转向点用来作为循环语句中的循环体三、复合语句用一对{}括起来的语句
{ z=x+y; t=z/100; printf(“%f”,t); }例:一般格式:{[内部数据说明;]语句1;……语句n;}(1)复合语句的}之前的分号不可省略,}之后,分号可有可无。(2)在复合语句中说明的变量,仅在复合语句中有效。注意四、控制语句完成一定的控制功能 1if()~else条件语句 2for()~循环语句 3while()~循环语句 4do~while();循环语句 5continue继续语句6break间断语句7switch()开关语句8goto转向语句9return返回语句五、函数调用语句函数调用+语句例如:sin(0.5);scanf(“%d〞,&a);等等
本节要点关系运算符与关系表达式P27逻辑运算符与逻辑表达式P27选择结构程序设计循环的根本概念不同形式的循环控制多重循环问题3.2控制语句
主要内容一、关系运算符和关系表达式二、逻辑运算符和逻辑表达式三、if语句四、witch语句五、程序举例一、关系运算符和关系表达式1、关系运算符及其优先次序1)<(小于)2)<=(小于或等于)3)>(大于)4)>=(大于或等于)5)==(等于)6)!=(不等于)优先级相同(高)优先级相同(低)C语言中没有专用的逻辑值,1代表真,0代表假3、关系运算符的结合律C语言规定关系表达式采取左结合律。表达式中出现优先级别为同一级别的运算符时,那么按从左到右结合方向处理。
inta=2,b=3,c=1;a>b<c值:1先计算a>b,值是0,再计算0<c,值是16>3<2值:1先计算6>3,值是1,再计算1<2,值为1例如例、以下程序输出的结果是
。main(){inta=5,b=4,c=3,d;d=(a>b>c);printf("%d\n",d);}0二、逻辑运算符和逻辑表达式1、逻辑运算符及其优先次序1)&&(逻辑与)相当于其他语言中的AND2)||(逻辑或)相当于其他语言中的OR3)!(逻辑非)相当于其他语言中的NOT例:a&&b假设a,b为真,那么a&&b为真。a||b假设a,b之一为真,那么a||b为真。!a假设a为真,那么!a为假。2、逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑表达式的值应该是一个逻辑量“真〞或“假〞。真用1表示,假用0表示运算数据:0为假,而非0为真。运算规那么:0&&0=00&&1=01&&0=01&&1=10||0=00||1=01||0=01||1=1!0=1!1=0例:设a=4,b=5:!a的值为0a&&b的值为1a||b的值为1!a||b的值为14&&0||2的值为1例、当变量c的值不为2、4、6时,值也为“真〞的表达式是
〔〕A、(c==2)‖(c
==4)‖(c==6)
B、(c>=2&&c<=6)‖(c!=3)‖(c!=5)
C、(c>=2&&c<=6)&&!(c%2)
D、(c>=2&&c<=6)&&(c%2!=1)
〔2021年4月全国计算机等考试原题〕B3、逻辑运算符的结合律例:5>3&&8<4-!0
自左向右运算
1&&0逻辑值为08<3逻辑值为04-1值为3!0逻辑值为15>3逻辑值为1表达式值为0求解过程:求解表达式1求解表达式2结束,结果为假……结束,结果为假假假真真求解表达式n真在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。(1)a&&b&&c只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。(2)a||b||c只要a为真,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c对于式:如有式:表达式1&&表达式2……&&表达式n对于表达式1||表达式2……||表达式n其求应该如何求解?对于表达式1&&表达式2……&&表达式n其求应该如何求解?例、用逻辑表达式来表示闰年的条件能被4整除,但不能被100整除。能被4整除,又能被400整除。答(year%4==0&&year%100!=0)||year%400==0案值为真(1)是闰年,否那么为非闰年。例、计算分段函数计算x<0,如果结果为1:计算:y=3-x;否那么,计算:y=2*x;需要根据x的值进行流程选择〔分支〕。三、if语句例、求ax2+bx+c=0方程的根,需要判断有无实根。1、If语句的三种根本形式〔1〕单分支选择语句if〔表达式〕语句执行过程:首先先判断表达式的值假设为非0那么执行语句;假设为0那么跳过该语句。例:if(x>y)printf(“%d〞,x);表达式语句真(非0)假(0)#include<stdio.h>main(){floatx,y;scanf(“%f〞,&x);y=2*x;if(x<0)y=3-x;printf(“y=%6.2f〞,y);}(2)双分支选择语句格式:if(表达式)语句1else语句2
条件
语句1
语句2YN执行过程:首先先判断表达式的值假设为非0那么执行语句1。假设为0那么执行语句2例:if(x>y)printf(“%d〞,x);elseprintf(“%d〞,y);#include<stdio.h>main(){floatx,y;scanf(“%f〞,&x);if(x<0)y=3-x;elsey=2*x;printf(“y=%6.2f〞,y);}注意:不管是单分支还是多分支,如果语句由多个语句构成,必须要加上{}构成复合语句;否那么,要不程序存在语法错误,要不就结果错误。例、有以下程序〔2006年4月全国计算机二级考试原题〕main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf("%d,%d,%d,%d\n",a,b,c,d);}程序输出〔〕A、0,1,2,0B、0,0,0,3C、1,1,2,0D、编译有错例、假设变量已正确定义,有以下程序段
int
a=3,b=5,c=7;
if(a>b)
a=b;c=a;
if(c!=a)
c=b;
printf("%d,%d,%d\n",a,b,c);
其输出结果是〔〕
A、程序段有语法错
B、3,5,3
C、3,5,5
D、3,5,7
〔2021年4月全国计算机等考试原题〕DA说明:(1)2种形式的if语句中在if后面都有表达式,一般为逻辑表达式或关系表达式。(2)第一,第二种形式的if语句中,在每个else前面有一个分号,整个语句结束处有一个分号。(3)在if和else后面可以只含有一个内嵌的操作语句,也可以由多个操作语句,此时用花括号将几个语句括起来成为一个复合语句。C语言中条件运算符的优先级高于赋值运算符,但低于逻辑运算符。条件运算符要求有三个操作对象,称三目〔元〕运算符。条件运算符的结合方向为“自右至左〞。如条件表达式:y=x>10?x/10:x>0?x:-x;从右至左结合,等价于:y=x>10?x/10:(x>0?x:-x);它的功能是:当x>10时,y的值为x/10;当x<10时,y的值取决于表达式x>0?〔3〕条件运算符?:P28格式:表达式1?表达式2:表达式3
表达式1表达式2表达式3YN例、输入两个实数,按代数值由小到大的顺序输出这两个数。
#include<stdio.h>
voidmain()
{floata,b,t;
scanf(″%f,%f″,&a,&b);
if(a>b)
{t=a;
a=b;
b=t;
}
printf(″%5.2f,%5.2f\n″,a,b);}
yna>bt=aa=bb=t例、输入三个数a,b,c,要求按由小到大的顺序输出。Ifa>b将a和b对换Ifa>c将a和c对换Ifb>c将b和c对换a>ba>cb>ca和b交换a和c交换c和b交换yyynn
#include<stdio.h>
voidmain()
{floata,b,c,t;
scanf(″%f,%f,%f″,&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;}
printf("%5.2f,%5.2f,%5.2f\n",a,b,c);
}2、If语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。形式:If()
if()语句1 else语句2else
if()语句3 else语句4内嵌if内嵌if匹配规那么:else总是与它上面的,最近的,同一复合语句中的,未配对的if语句配对。例:If()
if()语句1else
if()语句2else语句3例:If() {if()语句1}else
if()语句2else语句3当if和else数目不同时,可以加花括号来确定配对关系。
-1(x<0)例、有一个函数y=0(x=0),编一程序,输入一个x1(x>0)值,输出y值。算法1:算法1:
输入x输入x 若x<0,则y=-1若x<0,则y=-1 若x=0,则y=0否则: 若x>0,则y=1若x=0,则y=0 输出y若x>0,则y=1输出y
#include<stdio.h>voidmain(){intx,y;scanf(“%d〞,&x);{程序段}printf(“x=%d,y=%d\n〞,x,y);}上例中的程序段有四个,请判断哪个是正确的?程序1:程序2:If(x<0)if(x>=0)Y=-1;if(x>0)y=1;Elseelsey=0;If(x==0)y=0;elsey=-1;Elsey=1;程序3:程序4:Y=-1;y=0;If(x!=0)if(x>=0)If(x>0)y=1;if(x>0)y=1;Elsey=0;Elsey=-1;正确正确例、输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。
#include<stdio.h>
voidmain()
{charch;
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
printf("%c\n",ch);
}
如果字符变量ch的值为大写字母,那么条件表达式的值为〔ch+32〕,即相应的小写字母。如果ch的值不是大写字母,那么条件表达式的值为ch,即不进行转换。3、多分支选择语句〔if语句的另一种嵌套方式〕执行时先判断表达式1的值非0就执行下面的语句为0就执行下一个判断一直这样做下去直到得出最后结果。多分支选择结构的语句形式:if(表达式)语句1
elseif(表达式)语句2
else…
表达式1真语句1假表达式2表达式3语句5语句3语句2真真假假多分支选择流程写一个程序完成以下功能:1输入一个分数score2score<60输出E360<=score<70输出D475<=score<80输出C580<=score<90输出B590<=score输出A多分支问题main(){intscore;sanf(“%d〞,&score);if(score<60)printf(“%c〞,’E’);elseif(score<70)printf(“%c〞,’D’);elseif(score<80)printf(“%c〞,’C’);elseif(score<90)printf(“%c〞,’B’);elseprintf(“%c〞,’A’);}程序二、switch语句switch语句的格式:switch〔表达式〕{case常量表达式1:语句1case常量表达式2:语句2…case常量表达式n:语句ndefault:语句n+1}
另一种多分支语句,根据表达式不同的值选择不同的语句。例:要求按照考试成绩的等级输出百分制分数段,用switch语句实现:switch〔grade〕{case′A′∶printf〔″85~100\n″〕;case′B′∶printf〔″70~84\n″〕;case′C′∶printf〔″60~69\n″〕;case′D′∶printf〔″<60\n″〕;default∶〔printf″error\n″〕;}说明:(1)switch后面括弧内的“表达式〞,ANSI标准允许它为任何类型。但一般C语言要求语句中的表达式可以是整型或字符型,表达式的值,称为开关值。(2)当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,假设所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。(3)每一个case的常量表达式的值必须互不相同,否那么就会出现互相矛盾的现象〔对表达式的同一个值,有两种或多种执行方案〕。(4)各个case和default的出现次序不影响执行结果。例如,可以先出现“default:…〞,再出现“case′D′:…〞,然后是“case′A′:…〞。(5)执行完一个case后面的语句后,流程控制转移到下一个case继续执行。“case常量表达式〞只是起语句标号作用,并不是在条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。应该在执行一个case分支后,可以用一个break语句来终止switch语句的执行。(6)多个可以共用一组执行语句。要求按照考试成绩的等级输出百分制分数段,用switch语句实现:switch〔grade〕{default∶〔printf″error\n″〕;case′A′∶printf〔″85~100\n″〕;case′B′∶printf〔″70~84\n″〕;case′C′∶printf〔″60~69\n″〕;case′D′∶printf〔″<60\n″〕;}switch〔i〕
{case1:printf〔″A\n″〕;
case2:printf〔″B\n″〕;
case3:printf〔″C\n″〕;case4:printf〔″D\n″〕;
default:printf〔″E\n″〕;
}假设i=3时,那么会从i=3时做起始语句。如果给每条语句加上break这样就只执行一条语句C
D
E看下面的例子运行结果break;break;break;break;C
例、有以下程序
#include
<stdio.h>
main()
{
int
x=1,y=0,a=0,b=0;
switch(x)
{
case1:
switch(y)
{
case
0:
a++;
break;
case
1:
b++;
break;
}
case2:
a++;
b++;
break;
case3:
a++;
b++;
}
printf(“a=%d,b=%d\n〞,a,b);
}
程序的运行结果是〔〕。
A、a=1,b=0
B、a=2,b=2
C、a=1,b=1
D、a=2,b=1
内层的break;只能跳出所在的层
〔2021年4月全国计算机等考试原题〕D三、选择结构程序举例例、写程序,判断某一年是否闰年。 用以下图来表示判断闰年的算法。#include<stdio.h>
voidmain()
{intyear,leap;
scanf("%d",&year);
if(year%4==0)
{if(year%100==0)
{if(year%400==0)leap=1;
elseleap=0;}
elseleap=1;}
elseleap=0;
if(leap)printf("%dis",year);
elseprintf("%disnot",year);
printf("aleapyear.\n");}if〔year%4!=0〕leap=0;elseif〔year%100!=0〕leap=1;elseif〔year%400!=0〕leap=0;elseleap=1;运行情况:
1989↙
1989isnotaleapyear.2000↙
2000isaleapyear.例、求ax2+bx+c=0方程的解。根本的算法:①a=0,不是二次方程。②-4ac=0,有两个相等实根。③-4ac>0,有两个不等实根。④-4ac<0,有两个共轭复根。#include<stdio.h>
#include<math.h>
voidmain()
{floata,b,c,disc,x1,x2,realpart,imagpart;
scanf("%f,%f,%f",&a,&b,&c);
printf("theequation");
if(fabs(a)<=1e-6)
printf("isnotaquadratic\\n");
else
{disc=b*b-4*a*c;
if(fabs(disc)<=1e-6)
printf("hastwoequalroots:%8.4f\n",-b/(2*a));
elseif(disc>1e-6)
{x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf(″hasdistinctrealroots:%8.4fand%8.4f\n″,x1,x2);
}
else
{realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf(″hascomplexroots∶\n″);
printf(″%8.4f+%8.4fi\n″,realpart,imagpart);
printf(″%8.4f-%8.4fi\n″,realpart,imagpart);
}
}}
例、运输公司对用户计算运费。路程〔s〕越远,每公里运费越低。标准如下:s<250km没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣设每公里每吨货物的根本运费为p,货物重为w,距离为s,折扣为d,那么总运费f的计算公式为:f=p*w*s*〔1-d〕分析折扣变化的规律性:折扣的“变化点〞都是250的倍数在横轴上加一种坐标c,c的值为s/250。c代表250的倍数。c<1,无折扣;1≤c<2,折扣d=2%;2≤c<4,d=5%;4≤c<8,d=8%;8≤c<12,d=10%;c≥12,d=15%。#include<stdio.h>
voidmain()
{intc,s;
floatp,w,d,f;
scanf("%f,%f,%d",&p,&w,&s);
if(s>=3000)c=12;
elsec=s/250;
switch(c){
case0:d=0;break;
case1:d=2;break;
case2:case3:d=5;break;
case4:case5:case6:case7:d=8;break;
case8:case9:case10:
case11:d=10;break;
case12:d=15;break;}
f=p*w*s*(1-d/100.0);
printf("freight=%15.4f\n",f);}思考:折扣标准如下:s<250km没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣怎样使用switch语句?第三章
本节要点循环的根本概念不同形式的循环控制多重循环问题
主要内容3.3.1概述3.3.2goto语句以及用goto语句构成循环3.3.3用while语句实现循环3.3.4用do-while语句实现循环3.3.5用for语句实现循环3.3.6循环的嵌套3.3.7几种循环的比较3.3.8break语句continue和语句3.3.9程序举例3.3.1概述什么是循环?为什么要使用循环?问题1:问题2:求学生平均成绩
分数相加后除以课数在许多问题中需要用到循环控制。循环结构是结构化程序设计的根本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的根本构造单元。计数法:预知循环的总次数。标志法:达到某目标,结束循环。穷举:逐一测试问题的所有可能状态,直到解答或测试过所有可能的状态为止。循环算法的两种根本方法例1、判断一个整数n是否是素数。所谓素数是只能被1和自身整除的数。算法:从2到n-1每个数都除一次,假设其中的某数能被n整除那么说明n不是素数,否那么假设每一个都不能被n整除那么说明n是素数。例2、百钱百鸡迭代:不断用新值取代旧值,或由旧值递推出变量的新值的过程。例1、求s=1+2+3+……+n算法:i=1到n,将每一个i加到累加和sum上,即:sum=sum+i例2、求斐波拉级数:f0=1,f1=1,fn=fn-1+fn-2
3.3.2goto语句以及用goto语句构成循环P57
goto语句——无条件转向语句格式:goto语句标号;语句标号用标识符表示,它的定名规那么与变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线。例如:gotolabel_1;合法;goto123;不合法.结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差。一般来说,可以有两种用途:(1)与if语句一起构成循环结构;(2)从循环体中跳转到循环体外。但是这种用法不符合结构化原那么,一般不宜采用,只有在不得已时(例如能大大提高效率)才使用。例、用if语句和goto语句构成循环,求1到100的和
voidmain()
{inti,sum=0;
i=1;
loop:if(i<=100)
{sum=sum+i;
i++;
gotoloop;
}
printf("%d\\n″,sum);
}说明:这里用的是“当型〞循环结构,当满足“i<=100〞时执行花括弧内的循环体。运行结果:5050
3.3.3while循环语句while语句用来实现“当型〞循环结构。一般形式:while(表达式)语句当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。例、求1到100的和
#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
while(i<=100)
{sum=sum+i;
i++;
}
printf(″%d\\n″,sum);
}说明:(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现.(2)在循环体中应有使循环趋向于结束的语句。
运行结果:5050注意:循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。在循环体中应有使循环趋向于结束的语句。如果无此语句,那么i的值始终不改变,循环永不结束。例、输入n,求n的各位数字。算法:1输入整数n;2判断n是否为0,假设不为0那么执行3;否那么转3输出n的个位数,n%10;4求出个位数以外的数n,n=n/10;5重复2;6结束。思考:1、求n的各位数字之和;2、求n的各位数字之积;3、求n的数字位数;4、判断n是否为水仙花数,所谓的水仙花数是:等于各位数字立方之和的三位数。
我们以上的算法是各位数字倒过来输出的。思考一下怎样顺过来(从高位到低位)输出。〔省07年春考题〕2021年9月全国计算机二级考试原题D
3.3.4do-while循环语句do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式:
do循环体语句
while(表达式);执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真〞)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。例、求1到100的和
#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
do
{sum=sum+i;
i++;
}
while(i<=100);
printf("%d\\n″,sum);
}运行结果:5050例〔2021年9月全国计算机等考试原题〕这是一个使用do-while的习题,具体分析见后面的习题2021年9月全国计算机二级考试原题5例、判断某数是否为素数。例、输出整数n的所质因子。例、求两数的最大公约数、最小公倍数。while语句和用do-while语句的比较:在一般情况下,用while语句和用do-while语句处理同一问题时,假设二者的循环体局部是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。例、while和do-while循环的比较
(1)#include<stdio.h>(2)#include<stdio.h>
voidmain()voidmain()
{intsum=0,i;{intsum=0,i;
scanf(“%d″,&i);scanf(〞%d″,&i);
while(i<=10)do
{sum=sum+I;{sum=sum+i;
i++;i++;
}while(i<=10);
printf(“sum=%d\\n″
,sum);
}printf(“sum=%d\\n〞,sum);
}运行结果:1↙sum=55再运行一次:11↙sum=0运行结果:1↙sum=55再运行一次:11↙sum=11说明:(1)当while后面的表达式的第一次的值为“真〞时,两种循环得到的结果相同。否那么,二者结果不相同。3.3.5for循环语句C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。一般形式:
for(表达式1;表达式2;表达式3)语句for语句的执行过程:(1)先求解表达式1。(2)求解表达式2,假设其值为真(值为非0),那么执行for语句中指定的内嵌语句,然后执行下面第(3)步。假设为假(值为0),那么结束循环,转到第(5)步。(3)求解表达式3。(4)转回上面第(2)步骤继续执行。(5)循环结束,执行for语句下面的一个语句
表达式2?执行语句成立不成立执行for循环之后的语句执行表达式3执行表达式1循环初始条件循环控制条件循环体for语句等价于以下语句:表达式1;while〔表达式2〕{语句;表达式3;}
for语句最简单的形式:for(循环变量赋初值;循环条件;循环变量增值)
例如:for(i=1;i<=100;i++)sum=sum+i;相当于:i=1;while(i<=100){sum=sum+i;i++;}
用for语句简单、方便。
说明:(1)for语句的一般形式中的“表达式1〞可以省略,此时应在for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如for(;i<=100;i++)sum=sum+i;执行时,跳过“求解表达式1〞这一步,其他不变。说明:(2)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始终为真。例如:for(i=1;;i++)sum=sum+i;
表达式1是一个赋值表达式,表达式2空缺。它相当于:
i=1;while(1){sum=sum+1;i++;}说明:(3)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。如:for(i=1;i<=100;){sum=sum+i;i++;}在上面的for语句中只有表达式1和表达式2,而没有表达式3。i++的操作不放在for语句的表达式3的位置处,而作为循环体的一局部,效果是一样的,都能使循环正常结束。
说明:(4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。如:
for(;i<=100;)while(i<=100){sum=sum+i;相当于{sum=sum+i;i++;}i++;}
在这种情况下,完全等同于while语句。可见for语句比while语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。说明:(5)3个表达式都可省略,如:for(;;)语句相当于while(1)语句即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。说明:(6)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如:
for(sum=0;i<=100;i++)sum=sum+i;表达式3也可以是与循环控制无关的任意表达式。
说明:表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:
for(sum=0,i=1;i<=100;i++)sum=sum+i;或
for(i=0,j=100;i<=j;i++,j--)k=i+j;表达式1和表达式3都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值.说明:
在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。如:
for(i=1;i<=100;i++,i++)sum=sum+i;相当于
for(i=1;i<=100;i=i+2)sum=sum+i;
说明:(7)表达式一般是关系表达式(如i<=100)或逻辑表达式(如a<b&&x<y),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。2021年9月全国计算机二级考试原题说明:在switch中default的位置一般在最后,但位置可以任意,但是总是在所有关case都不匹配时才执行它。答案为:A2021年9月全国计算机二级考试原题011233.3.5循环的嵌套一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。三种循环(while循环、do-while循环和for循环)可以互相嵌套。下面几种都是合法的形式:(1)
while()(2)do(3)for(;;){…{…{while()dofor(;;){…}{…}{…}}while();}}while();
(4)
while()(5)for(;;)(6)do{…{…{…do{…}while()for(;;){}while(){}…{…}…}}}while()
问题:输出图形
****************分析:一共4行,第i行输出的空格数为:(7-i+1)/2第i行输出i*2-1个‘*’,算法:当i<=7do{输出(7-i+1)/2个空格;输出i个‘*’换行;i+=2;}#include<stdio.h>main()
{
inti,j;
for(i=1;i<=7;i+=2)
{printf(“\n〞);
for(j=1;j<=(7-i+1)/2;j++)
putchar(‘’);/*输出(7-i+1)/2个空格*/
for(j=1;j<=i;j++)
putchar(’*’);/*输出i个‘*’*/}
getch();
}〔2021年9全国计算机等考试原题〕例D小结:几种循环的比较(1)四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用goto型循环。(2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i++,或i=i+1等)。
for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。
(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。(4)while循环、do-while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环(break语句和continue语句见下节)。而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。
3.3.6break语句和continue语句
一、break语句
break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句一般形式:
break;注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。
例:floatpi=3.14159;for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break;printf(″r=%f,area=%f\n″,r,area);}
程序的作用是计算r=1到r=10时的圆面积,直到面积area大于100为止。从上面的for循环可以看到:当area>100时,执行break语句,提前结束循环,即不再继续执行其余的几次循环。例、判断m是否素数。算法思想:让m被2到除,如果m能被2~之中任何一个整数整除,那么提前结束循环,此时i必然小于或等于k(即);如果m不能被2~k(即)之间的任一整数整除,那么在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环之后判别i的值是否大于或等于k+1,假设是,那么说明未曾被2~k之间任一整数整除过,因此输出“是素数〞。程序
#include<stdio.h>
#include<math.h>
voidmain()
{intm,i,k;
scanf(″%d″,&m);k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>k)printf("%disaprimenumber\n″,m);
elseprintf("%disnotaprimenumber\n″,m);
}
运行结果:
17↙17isaprimenumber
程序:求100~200间的全部素数。
#include<stdio.h>
#include<math.h>
voidmain()
{intm,k,i,n=0;
for(m=101;m<=200;m=m+2)
{k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1){printf("%d″,m);n=n+1;}
if(n%10==0)printf(″\n″);
}
printf("\n");}运行结果:101103107109113127131137139149151157163167173179181191193197199
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2021袁隆平先进个人主要事迹学习心得体会5篇
- 2027届陵县数学六上期末调研模拟试题含解析
- 出纳转正工作总结
- 水闸基础加固施工技术
- 2026年中国副机箱市场调查研究报告
- 2026年中国制动调整臂总成市场调查研究报告
- 临床用血试题及答案
- 实验室安全知识题库(含参考答案)
- 2026年老年医学科层级培训考核试题及答案
- 2026年中国切割式工业用变速宽Ⅴ带市场调查研究报告
- 购买土葬地协议书
- 合同收款方更改为另一个公司协议
- 国家电网有限公司输变电工程通 用设计(330~750kV输电线路绝缘子金具串通 用设计分册)2024版
- 运营部总监KPI考核
- 《PLC应用项目工单实践教程》课件 模块1 S7-1500 PLC初步使用
- 政协提案答复格式及范文
- 2024年员工薪酬调整补充协议
- 小岛经济学(中文版)
- 2024年广西各市统计局招聘统计协管员(协统员)历年(高频重点提升专题训练)共500题附带答案详解
- 列车运行-列车被迫停车后的处理与防护
- 四百字作文格子稿纸(可打印编辑)
评论
0/150
提交评论