您好,欢迎访问三七文档
第4章程序控制主要内容:for语句do/while语句switch语句多重循环break和continue的使用逗号表达式逻辑运算符4.1逗号运算符和逗号表达式逗号运算符:“,”也叫顺序求值运算符。逗号表达式:用“,”把两个表达式连接起来形式的表达式,叫逗号表达式。基本格式:表达式1,表达式2例如:400+500,600*y逗号表达式的值:最后一个表达式的值。逗号运算符的优先级:最低。但()可以改变其运算顺序。扩展的逗号表达式:表达式1,表达式2,表达式3,……逗号表达式例子:a=3*5,a*4/*a=15*/(a=3*5,a*4),a+5/*a=15*/x=(a=3,6*3)/*赋值表达式*/x=a=3,6*a/*逗号表达式*/注意:并不是所有出现逗号的地方都是逗号运算符。printf(“%d,%d,%d\n”,(a,b,c),b,c);逗号表达式非逗号表达式6020a=3,x=18x=3,a=3表达式的值184.2逻辑运算及其表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。4.2.1逻辑运算及其优先次序1.逻辑运算符及其运算规则(1)逻辑运算符。C语言提供三种逻辑运算符:①&&逻辑与(相当于“同时”)②‖逻辑或(相当于“或者”)③!逻辑非(相当于“否定”)其中,“&&”和“‖”是双目运算符,要求有两个运算量;而“!”是单目运算符,只要求有一个运算量。(2)逻辑运算符的运算规则。2.逻辑运算符的运算优先级(1)在三个逻辑运算符中,逻辑非的优先级最高,逻辑与次之,逻辑或最低。即:!(非)→&&(与)→‖(或)(2)与其他种类运算符的优先关系如下:!(非)算术运算关系运算&&(与)‖(或)赋值运算高低4.2.2逻辑表达式1.逻辑表达式的概念逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。例如,(year%4==0)&&(year%100!=0)‖(year%400==0)就是一个判断一个年份是否是闰年的逻辑表达式。2.逻辑量的真假判定——0和非0(1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其他任何类型的数据,如实型、字符型等。(2)在计算逻辑表达式时,只有必须执行的表达式时,才求解该表达式(即并不是所有的表达式都被求解)。在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套if-else-fi语句来实现,但if-else-if语句使用不方便,并且容易出错。对这种情况,TurboC2.0提供了一个开关语句。开关语句格式为:switch(变量){case常量1:语句1或空;break;case常量2:语句2或空;break;…....case常量n;语句n或空;break;default:语句n+1或空;}执行switch开关语句时,将变量逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default后面的语句。switch语句switch语句(开关分支语句)一般形式:switch表达式语句组1语句组2语句组n语句组…...E1E2EndefaultcaseE1-En里的语句组末尾需要break;否则执行顺序不一样。说明:E1,E2,…En是常量表达式,且值必须互不相同必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句如:……case‘A’:case‘B’:case‘C’:case‘D’:printf(“score60\n”);break;……..例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}运行结果:score为5时,输出:Verygood!Good!Pass!Fail!dataerror!上面程序的输出结果是:A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2例voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}计算表达式(形如3+5,9/3的四则运算式)的值#includestdio.h#includectype.hmain(){floata,b,d;intflage;charop,ch;while(1){flage=1;printf(Enteryourexpression:\n);scanf(%f%c%f,&a,&op,&b);switch(op){case'+':d=a+b;break;case'-':d=a-b;break;case'*':d=a*b;break;case'/':if(b==0)flage=0;elsed=a/b;break;default:flage=3;}if(flage==1)printf(%.0f%c%.0f=%.2f\n,a,op,b,d);elseif(flage==0)printf(Divisionbyzero!\n);elseprintf(Unknownoperator!\n);printf(continue(Y/N)?);flushall();scanf(%c,&ch);if(toupper(ch)=='N')break;}}1.do-while语句一般格式:do语句while(表达式);语句表达式真假•用do-while()求:s=1+2+3+……+100。main(){inti,sum;i=1;sum=0;do{sum+=i;i++;}while(i=100);printf(“%d”,sum);}for语句for语句的一般格式:for(表达式1;表达式2;表达式3)语句100例如:求∑i1for(i=1;i=100;i++)sum+=i;表达式1表达式2语句表达式3假真for(循环变量初始化;循环条件;循环变量增量)语句voidmain(){inti,sum=0;for(i=1;i=100;i++)sum+=i;printf(“sum=%d\n”,sum);}voidmain(){inti,sum=0;i=1;for(;i=100;i++)sum+=i;printf(“sum=%d\n”,sum);}voidmain(){inti,sum=0;i=1;for(;i=100;){sum+=i;i++;}printf(“sum=%d\n”,sum);}voidmain(){inti,sum=0;i=1;for(;;){sum+=i;i++;if(i100)break;}printf(“sum=%d\n”,sum);}for()语句的其他形式:1)charc;inti;for(i=0;(c=getchar())!=‘\n’;i+=c);printf(“sum=%d\n”,i);2)charc;for(;(c=getchar())!=‘\n’;)printf(“%c”,c);3)inti,j;for(i=0,j=100;i=j;i++,j--)printf(“%d%d\n”,i,j);没有语句(循环体)任意表达式逗号表达式break和continue语句break语句:结束循环,执行循环后的下个语句。#definePI3.1415926main(){floatarea;intr;for(r=1;r=10;r++){area=PI*r*r;if(area100)break;printf(“r=%d,area=%f\n”,r,area);}printf(“Theend.Pressanykeytogoon..”);}结束循环,执行下一个语句continue语句:结束本次循环,继续下一次循环。例把100~200不能被3整除的数输出。main(){intn;for(n=100;n=200;n++){if(n%3==0)continue;printf(“%d\n”,n);}}1.统计输入一篇文章中的字符个数。2.统计输入一篇文章中的的行数3.统计输入一篇文章中的的行数、单词数与字符数4.统计一篇文章中的数字、空白符及字符。示例#includestdio.h/*e2.c*//*countcharactersininput;1stversion*/main(){longnc;nc=0;while(getchar()!=EOF)++nc;printf(nc=%ld\n,nc);}1.统计一篇文章中输入的字符个数。#includestdio.h/*countlinesininput*/main(){intc,nl;nl=0;while((c=getchar())!=EOF)if(c=='\n')++nl;printf(n1=%d\n,nl);}2.统计一篇文章中输入的行数。#includestdio.h#defineIN1#defineOUT0/*countlines,words,andcharactersininput*/voidmain(){intc,nl,nw,nc,state;state=OUT;nl=nw=nc=0;while((c=getchar())!=EOF){++nc;if(c=='\n')++nl;if(c==''||c=='\n'||c=='\t')state=OUT;elseif(state==OUT){state=IN;++nw;}}printf(“lines=%d,words=%d,ch=%d\n,nl,nw,nc);}3.统计一篇文章中输入的行数,单词个数及字符个数。#includestdio.hvoidmain(){intc,i,nwhite,nother;intndigit[10];nwhite=nother=0;for(i=0;i10;++i)ndigit[i]=0;while((c=getchar())!=EOF)if(c='0'&&c='9')++ndigit[c-'0'];elseif(c==''||c=='\n'||c=='\t')++nwhite;else++nother;for(i=0;i10;++i)printf(%d,,ndigit[i]);printf(\nwhitespace=%d\n,nwhite);printf(other=%d\n,nother);}4.统计一篇文章中的数字、空白符及字符。循环的嵌套一个循环体内包含另一个循环,叫循环嵌套。循环嵌套必须是完全嵌套。while(){……while(){……}}do{……do{……}while();……}while();for(;;){……for(;;){……}}for(;;){……}for(;;){……}while(){……}[例1]编程打印如下图案*********分析:1.外循环控制行数(i=1~3)2.内循环控制空格数k=2,1,03.内循环控制“*”个数(j=1,3,5)#includestdio.hvoidmain(){inti,j,k;for(i=1;i=3;i++){for(k=1;k=3-i;k++)printf(““);for(j=1;j=2*i-1;j++)printf(“*”);printf(“\n”);}}[例2]编程打印如下图案ijk113232351470551632713#includestdio.h#includemath.hvoidmain(){inti,j,k;for(i=1;i=7;i++){for(k=1;k
本文标题:第4章程序控制g
链接地址:https://www.777doc.com/doc-599423 .html