程序控制g课件_第1页
程序控制g课件_第2页
程序控制g课件_第3页
程序控制g课件_第4页
程序控制g课件_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章程序控制主要内容:for语句do/while语句switch语句多重循环break和continue的使用逗号表达式逻辑运算符第4章程序控制主要内容:14.1逗号运算符和逗号表达式逗号运算符:“,”也叫顺序求值运算符。逗号表达式:用“,”把两个表达式连接起来形式的表达式,叫逗号表达式。基本格式:表达式1,表达式2例如:400+500,600*y逗号表达式的值:最后一个表达式的值。逗号运算符的优先级:最低。但()可以改变其运算顺序。扩展的逗号表达式:表达式1,表达式2,表达式3,……4.1逗号运算符和逗号表达式逗号运算符:“,”也叫顺序求2逗号表达式例子: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表达式的值18逗号表达式例子:注意:并不是所有出现逗号的地方都是逗号运算符34.2逻辑运算及其表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。4.2.1逻辑运算及其优先次序1.逻辑运算符及其运算规则(1)逻辑运算符。C语言提供三种逻辑运算符:①&&逻辑与(相当于“同时”)②‖逻辑或(相当于“或者”)③!逻辑非(相当于“否定”)其中,“&&”和“‖”是双目运算符,要求有两个运算量;而“!”是单目运算符,只要求有一个运算量。(2)逻辑运算符的运算规则。4.2逻辑运算及其表达式42.逻辑运算符的运算优先级(1)在三个逻辑运算符中,逻辑非的优先级最高,逻辑与次之,逻辑或最低。即:!(非)→&&(与)→‖(或)(2)与其他种类运算符的优先关系如下:!(非)算术运算关系运算&&(与)‖(或)赋值运算高低4.2.2逻辑表达式1.逻辑表达式的概念逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。例如,(year%4==0)&&(year%100!=0)‖(year%400==0)就是一个判断一个年份是否是闰年的逻辑表达式。2.逻辑运算符的运算优先级52.逻辑量的真假判定——0和非0(1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其他任何类型的数据,如实型、字符型等。(2)在计算逻辑表达式时,只有必须执行的表达式时,才求解该表达式(即并不是所有的表达式都被求解)。2.逻辑量的真假判定——0和非06

在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套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语句在编写程序时,经常会碰到按不同情况分转的多7switch语句(开关分支语句)一般形式:switch表达式语句组1语句组2语句组n语句组…...E1E2EndefaultcaseE1-En里的语句组末尾需要break;否则执行顺序不一样。switch语句(开关分支语句)switch表达式语句组1语8说明:E1,E2,…En是常量表达式,且值必须互不相同必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句如:……case‘A’:case‘B’:case‘C’:case‘D’:printf(“score>60\n”);break;……..说明:如:……9例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}运行结果:score为5时,输出:Verygood!Good!Pass!Fail!dataerror!例switch(score)运行结果:score为510上面程序的输出结果是:

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);}上面程序的输出结果是:例voidmain()11计算表达式(形如3+5,9/3的四则运算式)的值#include<stdio.h>#include<ctype.h>main(){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;}计算表达式(形如3+5,9/3的四则运算式)的值12if(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;}}if(flage==1)131.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);}1.do-while语句一般格式:语句表达式真假用d14for语句for语句的一般格式:

for(表达式1;表达式2;表达式3)语句

100例如:求∑i

1for(i=1;i<=100;i++)sum+=i;表达式1表达式2语句表达式3假真

for(循环变量初始化;循环条件;循环变量增量)语句for语句for语句的一般格式:表达式1表达式2语句表15voidmain(){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(i>100)break;

}printf(“sum=%d\n”,sum);}voidmain()voidmain()voidmai16for()语句的其他形式: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);没有语句(循环体)任意表达式逗号表达式for()语句的其他形式:没有语句任意逗号17break和continue语句break语句:结束循环,执行循环后的下个语句。#definePI3.1415926main(){floatarea;intr;for(r=1;r<=10;r++){area=PI*r*r;if(area>100)break;printf(“r=%d,area=%f\n”,r,area);}printf(“Theend.Pressanykeytogoon..”);}结束循环,执行下一个语句break和continue语句brea18continue语句:结束本次循环,继续下一次循环。例把100~200不能被3整除的数输出。main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf(“%d\n”,n);}}continue语句:结束本次循环,继续下一次循环。例把191.统计输入一篇文章中的字符个数。2.统计输入一篇文章中的的行数3.统计输入一篇文章中的的行数、单词数与字符数4.统计一篇文章中的数字、空白符及字符。示例1.统计输入一篇文章中的字符个数。示例20#include<stdio.h>/*e2.c*//*countcharactersininput;1stversion*/main(){longnc;nc=0;while(getchar()!=EOF)++nc;printf("nc=%ld\n",nc);}1.统计一篇文章中输入的字符个数。#include<stdio.h>/*e2.c*/1.21#include<stdio.h>/*countlinesininput*/main(){intc,nl;nl=0;while((c=getchar())!=EOF)if(c=='\n')++nl;printf("n1=%d\n",nl);}2.统计一篇文章中输入的行数。#include<stdio.h>2.统计一篇文章中22#include<stdio.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.统计一篇文章中输入的行数,单词个数及字符个数。#include<stdio.h>3.统计一篇文章中23#include<stdio.h>voidmain(){intc,i,nwhite,nother;intndigit[10];nwhite=nother=0;for(i=0;i<10;++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;i<10;++i)printf("%d,",ndigit[i]);printf("\nwhitespace=%d\n",nwhite);printf("other=%d\n",nother);}4.统计一篇文章中的数字、空白符及字符。#include<stdio.h>4.统计一篇文章中的24循环的嵌套一个循环体内包含另一个循环,叫循环嵌套。循环嵌套必须是完全嵌套。while(){……while(){……}}do{……do{……}while();……}while();for(;;){……for(;;){……}}for(;;){……}for(;;){……}while(){……}循环的嵌套一个循环体内包含另一个循环,叫循环嵌套。whi25[例1]编程打印如下图案*********分析:1.外循环控制行数(i=1~3)2.内循环控制空格数k=2,1,03.内循环控制“*”个数(j=1,3,5)

#include<stdio.h>voidmain(){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”);}}[例1]编程打印如下图案*分析:#include<stdio26[例2]编程打印如下图案ijk113232351470551632713#include<stdio.h>#include<math.h>voidmain(){inti,j,k;for(i=1;i<=7;i++){for(k=1;k<=abs(4-i);k++)printf(““);for(j=1;j<=7-2*abs(4-i);j++)printf(“*”);printf(“\n”);}}*************************j=7-2*abs(i-4)k=abs(4-i)[例2]编程打印如下图案ijk27abbbcccccdddddddcccccbbba上机实验:输出如下图案1223334444

***************a上机实验:输出如下图案128

例:输出10~100之间的全部素数。所谓素数n是指,除1和n之外,不能被2~(n-1)之间的任何整数整除。算法设计要点:(1)显然,只要设计出判断某数n是否是素数的算法,外面再套一个for循环即可。(2)判断某数n是否是素数的算法:根据素数的定义,用2~(n-1)之间的每一个数去整除n,如果都不能被整除,则表示该数是一个素数。判断一个数是否能被另一个数整除,可通过判断它们整除的余数是否为0来实现。例:输出10~100之间的全部素数。所谓素29程序举例t=1,s=0,b=1.0,a=1当|t|1e-6s=s+tb=b+2a=-at=a/bs=s*4输出s分子:1,-1,1,-1…分母:1,3,5,7,...程序举例t=1,s=0,b=1.0,a=1当|t|1e-630例求Fibonacci数列:1,1,2,3,5,8,……的前40个数f1=1,f2=1fori=1to20输出f1,f2f1=f1+f2f2=f2+f11534233159710946750255142293524578241578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155例求Fibonacci数列:1,1,2,3,5,8,……31ABCDEFGHIJKLMNOPQRSTUVWXYZch=ch+3;

编程:其作用是把一行用大小写字符写出的电文(明文)转换成密文,其转换规律是把A到W的字母依次下移3个字母,把X,Y,Z分别换成A,B,C。小写同样。ABCDEFGHIJKLMNOPQRSTUVWXYZ32#include"stdio.h"voidmain(){charch;clrscr();while((ch=getchar())!='\n'){if(ch>='A'&&ch<=‘W'||ch>='a'&&ch<=‘w')ch=ch+3;if(ch>=‘X’&&ch<=‘Z’||ch>=‘x’&&ch<=‘z’)ch=ch-23;printf("%c",ch);}}#include"stdio.h"33解法二:#include"stdio.h“#include<ctype.h>voidmain(){charch;while(ch=getchar())!='\n'){if(isupper(ch))ch=(ch+3-'A')%26+'A';elseif(islowwer(ch))ch=(ch+3-'a')%26+'a';putchar(ch);}}解法二:34例.以下程序的输出结果是A)#*#*#B)#####C)*****D)*#*#*main(){inti;for(i=1;i<6;i++){if(i%2){printf(“#”);continue;}printf("*");}printf("\n");}例.以下程序的输出结果是35例.以下程序的输出结果是A)编译不通过,无输出B)acegC)acegiD)abcdefghi#include<stdio.h>voidmain(){inti;for(i='A';i<'I';i++,i++)printf("%c",i+32);printf("\n");}例.以下程序的输出结果是36[例]分析下列程序的输出结果.#include<stdio.h>voidmain(){inti=1,a=0;for(;i<=5;i++){do{i++;a++;}while(i<3);i++;}printf(“%d,%d\n”,a,i);}3,83,837(1)以下程序的输出结果是A)10192B)9876C)10990D)101091main(){intx=10,y=10,i;for(i=0;x>8;y=++i)printf("%d,%d",x--,y);}(2)以下程序的输出结果是

A)20B)31C)321D)210main(){intn=4;while(n--)printf("%d",--n);}(1)以下程序的输出结果是38voidmain(){intx=18,i;for(i=2;i<9;i++)if(x%i==0){printf("%d,",i);x=x/i--;if(x==0)break;}}2,3,3,voidmain()2,3,3,39穷举搜索法作业将A,B,C,D,E,F,G,H这8个变量排成如图所示的一个大梯形和四个小梯形,这8个变量分别取[1,8]上的整数,且均不相同,求使如图所示的一个大梯形和四个小梯形四个角上的变量之和全相等的全部解。图2所示就是一个解。ACEABDFGH78146523穷举搜索法作业将A,B,C,D,E,F,G,H这8个变量排成40#include<stdio.h>voidmain(){inta,b,c,d,e,f,g,h,i,j,count=0;intx[5]={0},flage=1;for(a=1;a<=8;a++){for(b=1;b<=8;b++){if(a==b)continue;for(c=1;c<=8;c++){if(c==a||c==b)continue;for(d=1;d<=8;d++){if(d==a||d==b||d==c)continue;for(e=1;e<=8;e++){if(e==a||e==b||e==c||e==d)continue;for(f=1;f<=8;f++){if(f==a||f==b||f==c||f==d||f==e)continue;for(g=1;g<=8;g++){if(g==a||g==b||g==c||g==d||g==e||g==f)continue;for(h=1;h<=8;h++){if(h==a||h==b||h==c||h==d||h==e||h==f||h==g)continue;

#include<stdio.h>41flage=1;x[0]=a+b+c+d;x[1]=a+e+c+g;x[2]=e+f+g+h;x[3]=h+d+f+b;x[4]=a+b+e+f;for(i=0;i<=4;i++)for(j=i+1;j<=4;j++)if(x[i]!=x[j]){flage=0;break;}if(flage==1) {count++; printf("%d*******%d**********%d********%d\n",c,g,h,d);printf("****\n");printf("****\n");printf("*%d****%d*\n",e,f);printf("****\n");printf("****\n");printf("*%d******%d**\n",a,b);printf("___________%d_______________\n\n\n",count);}}}}}}}}}}flage=1;42良好的源程序书写风格──注释必要的注释,可有效地提高程序的可读性,从而提高程序的可维护性。在C语言源程序中,注释可分为三种情况:(1)在函数体内对语句的注释;(2)在函数之前对函数的注释;(3)在源程序文件开始处,对整个程序的总体说明。函数体内的语句,是由顺序结构、选择结构和循环结构等三种基本结构构成的。在什么地方加以注释的原则是:如果不加注释,理解起来就会有困难,或者虽无困难、但浪费时间。

(1)顺序结构在每个顺序程序段(由若干条语句构成)之前,用注释说明其功能。除很复杂的处理外,一般没有必要每条语句都加以注释。良好的源程序书写风格──注释必要的注释,可有效地提高程序的可43(2)选择结构在C语言中,选择结构是由if语句和switch语句来实现的。一般地说,要在前面说明其作用,在每个分支条件语句行的后面,说明该分支的含义,如下所示:

1)if语句

/*……(说明功能)*/if(条件表达式) /*条件成立时的含义*/

{……}

else /*入口条件含义*/

{……}

2)switch语句

/*……(说明功能)*/switch(表达式)(2)选择结构44

{case常量表达式1: /*该入口值的含义*/

语句组;

……

case常量表达式n: /*该入口值的含义*/

语句组;

default: /*该入口值的含义*/

语句组;

}

如果条件成立时(或入口值)的含义,已经很明确了,也可不再加以注释。

{case常量表达式1: /*该45打印日历的算法算法分析:打印日历的算法必需解决两个问题:1.这年是否闰年(闰年的二月份有29天,平年的二月份有28天)2.这年的元旦是星期几。确定某年是否闰年的算法为:如果能够被4整除同时不能被100整除的肯定是闰年。如果能被400整除的是也是闰年,否则是平年。打印日历的算法算法分析:打印日历的算法必需解决两个问题:46#defineYES1 //定义符号常数"是"#defineNO0 //定义符号常数"否"//函数isleap():判断某年是否闰年intisleap(intyear){ intleap=NO; if(year%4==0&&year%100!=0||year%400==0) leap=YES; returnleap;}

#defineYES1 //定义符号常数"是"47确定某年的元旦是星期几可以这样考虑:我们知道,平年一年有365天,而一年大约有52个星期。实际上,52个星期共有52×7=364天,这也就是说,如果某年的元旦是星期一,则第二年的元旦整整过了52个星期又一天,因此应该是星期二。当然如果这一年是闰年,则在2月份多了一天,所以下一年的元旦也会顺延到星期三。因此,如果知道了某个基准年份的元旦是星期几,就可以用这种方法推算出其后任何一年的元旦是星期几来。例如,我们恰好知道1900年的元旦是星期一,因此如果year是1900年之后的某个年份,则其元旦是星期几可以按如下方法计算:计算出year和1900年之间所差的年数:n=year-1900;因为每年都是52个整星期多1天,因此n年多出的天数还是n天;在n天上再加上1900年到year年之间因闰年多出来的天数:n=n+闰年数;将多出来的天数n用7除,求其余数,即星期几:n=n%7;再加上1900年元旦的星期序号(1):n=n+1;如果n≥7则再减去7即为year年元旦的星期序号(0表示星期日):n=n%7。在上面的算法中“闰年数”可以简单地用(n-1)/4计算。由于2000年正好是闰年(为什么?),所以这个简化公式可以一直用到2099年!确定某年的元旦是星期几可以这样考虑:我们知道,平年一年有3648函数week_of_newyears_day():求元旦是星期几intweek_of_newyears_day(intyear){ intn=year-1900; n=n+(n-1)/4+1; n=n%7; returnn;}函数week_of_newyears_day():int49c语言里怎么获取系统时间用到#inlcude

<time.h>头文件里的一个time()函数和localtime()函数

函数原型:

time_t

time(time_t

*timer)

函数用途:

得到机器的日历时间或者设置日历时间

件:

time.h

输入参数:

timer:=NULL时,得到机器日历时间,=时间数值时用于设置日历时间;

time_t是一个long类型

函数原型:

struct

tm

*localtime(const

time_t

*timer)

函数用途:

返回一个以tm结构表达的机器时间信息

件:

time.h

输入参数:

timer:使用time()函数获得的机器时间;

c语言里怎么获取系统时间用到#inlcude

<tim50结构tm的定义为:

struct

tm

{

inttm_sec;/*

Seconds:

0-59

(K&R

says

0-61?)

*/

inttm_min;/*

Minutes:

0-59

*/

inttm_hour;/*

Hours

since

midnight:

0-23

*/

inttm_mday;/*

Day

of

the

month:

1-31

*/

inttm_mon;/*

Months

*since*

january:

0-11

*/

inttm_year;/*

Years

since

1900

*/

inttm_wday;/*

Days

since

Sunday

(0-6)

*/

inttm_yday;/*

Days

since

Jan.

1:

0-365

*/

inttm_isdst;/*

+1

Daylight

Savings

Time,

0

No

DST,*/

};

夏令时的定义:夏令时比标准时快一个小时结构tm的定义为:

struct

tm

51//VC下取系统时间:#include<time.h>#include<stdio.h>voidmain(){structtm*tp;time_tt;t=time(NULL);tp=localtime(&t);printf("%d/%d/%d\n",tp->tm_mon+1,tp->tm_mday,tp->tm_year+1900);printf("%2d:%2d:%2d\n",tp->tm_hour,tp->tm_min,tp->tm_sec);}//VC下取系统时间:52作业4.144.194.264.274.284.36作业4.144.194.264.274.53演讲完毕,谢谢观看!演讲完毕,谢谢观看!54第4章程序控制主要内容:for语句do/while语句switch语句多重循环break和continue的使用逗号表达式逻辑运算符第4章程序控制主要内容:554.1逗号运算符和逗号表达式逗号运算符:“,”也叫顺序求值运算符。逗号表达式:用“,”把两个表达式连接起来形式的表达式,叫逗号表达式。基本格式:表达式1,表达式2例如:400+500,600*y逗号表达式的值:最后一个表达式的值。逗号运算符的优先级:最低。但()可以改变其运算顺序。扩展的逗号表达式:表达式1,表达式2,表达式3,……4.1逗号运算符和逗号表达式逗号运算符:“,”也叫顺序求56逗号表达式例子: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表达式的值18逗号表达式例子:注意:并不是所有出现逗号的地方都是逗号运算符574.2逻辑运算及其表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。4.2.1逻辑运算及其优先次序1.逻辑运算符及其运算规则(1)逻辑运算符。C语言提供三种逻辑运算符:①&&逻辑与(相当于“同时”)②‖逻辑或(相当于“或者”)③!逻辑非(相当于“否定”)其中,“&&”和“‖”是双目运算符,要求有两个运算量;而“!”是单目运算符,只要求有一个运算量。(2)逻辑运算符的运算规则。4.2逻辑运算及其表达式582.逻辑运算符的运算优先级(1)在三个逻辑运算符中,逻辑非的优先级最高,逻辑与次之,逻辑或最低。即:!(非)→&&(与)→‖(或)(2)与其他种类运算符的优先关系如下:!(非)算术运算关系运算&&(与)‖(或)赋值运算高低4.2.2逻辑表达式1.逻辑表达式的概念逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。例如,(year%4==0)&&(year%100!=0)‖(year%400==0)就是一个判断一个年份是否是闰年的逻辑表达式。2.逻辑运算符的运算优先级592.逻辑量的真假判定——0和非0(1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其他任何类型的数据,如实型、字符型等。(2)在计算逻辑表达式时,只有必须执行的表达式时,才求解该表达式(即并不是所有的表达式都被求解)。2.逻辑量的真假判定——0和非060

在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套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语句在编写程序时,经常会碰到按不同情况分转的多61switch语句(开关分支语句)一般形式:switch表达式语句组1语句组2语句组n语句组…...E1E2EndefaultcaseE1-En里的语句组末尾需要break;否则执行顺序不一样。switch语句(开关分支语句)switch表达式语句组1语62说明:E1,E2,…En是常量表达式,且值必须互不相同必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句如:……case‘A’:case‘B’:case‘C’:case‘D’:printf(“score>60\n”);break;……..说明:如:……63例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}运行结果:score为5时,输出:Verygood!Good!Pass!Fail!dataerror!例switch(score)运行结果:score为564上面程序的输出结果是:

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);}上面程序的输出结果是:例voidmain()65计算表达式(形如3+5,9/3的四则运算式)的值#include<stdio.h>#include<ctype.h>main(){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;}计算表达式(形如3+5,9/3的四则运算式)的值66if(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;}}if(flage==1)671.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);}1.do-while语句一般格式:语句表达式真假用d68for语句for语句的一般格式:

for(表达式1;表达式2;表达式3)语句

100例如:求∑i

1for(i=1;i<=100;i++)sum+=i;表达式1表达式2语句表达式3假真

for(循环变量初始化;循环条件;循环变量增量)语句for语句for语句的一般格式:表达式1表达式2语句表69voidmain(){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(i>100)break;

}printf(“sum=%d\n”,sum);}voidmain()voidmain()voidmai70for()语句的其他形式: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);没有语句(循环体)任意表达式逗号表达式for()语句的其他形式:没有语句任意逗号71break和continue语句break语句:结束循环,执行循环后的下个语句。#definePI3.1415926main(){floatarea;intr;for(r=1;r<=10;r++){area=PI*r*r;if(area>100)break;printf(“r=%d,area=%f\n”,r,area);}printf(“Theend.Pressanykeytogoon..”);}结束循环,执行下一个语句break和continue语句brea72continue语句:结束本次循环,继续下一次循环。例把100~200不能被3整除的数输出。main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf(“%d\n”,n);}}continue语句:结束本次循环,继续下一次循环。例把731.统计输入一篇文章中的字符个数。2.统计输入一篇文章中的的行数3.统计输入一篇文章中的的行数、单词数与字符数4.统计一篇文章中的数字、空白符及字符。示例1.统计输入一篇文章中的字符个数。示例74#include<stdio.h>/*e2.c*//*countcharactersininput;1stversion*/main(){longnc;nc=0;while(getchar()!=EOF)++nc;printf("nc=%ld\n",nc);}1.统计一篇文章中输入的字符个数。#include<stdio.h>/*e2.c*/1.75#include<stdio.h>/*countlinesininput*/main(){intc,nl;nl=0;while((c=getchar())!=EOF)if(c=='\n')++nl;printf("n1=%d\n",nl);}2.统计一篇文章中输入的行数。#include<stdio.h>2.统计一篇文章中76#include<stdio.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.统计一篇文章中输入的行数,单词个数及字符个数。#include<stdio.h>3.统计一篇文章中77#include<stdio.h>voidmain(){intc,i,nwhite,nother;intndigit[10];nwhite=nother=0;for(i=0;i<10;++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;i<10;++i)printf("%d,",ndigit[i]);printf("\nwhitespace=%d\n",nwhite);printf("other=%d\n",nother);}4.统计一篇文章中的数字、空白符及字符。#include<stdio.h>4.统计一篇文章中的78循环的嵌套一个循环体内包含另一个循环,叫循环嵌套。循环嵌套必须是完全嵌套。while(){……while(){……}}do{……do{……}while();……}while();for(;;){……for(;;){……}}for(;;){……}for(;;){……}while(){……}循环的嵌套一个循环体内包含另一个循环,叫循环嵌套。whi79[例1]编程打印如下图案*********分析:1.外循环控制行数(i=1~3)2.内循环控制空格数k=2,1,03.内循环控制“*”个数(j=1,3,5)

#include<stdio.h>voidmain(){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”);}}[例1]编程打印如下图案*分析:#include<stdio80[例2]编程打印如下图案ijk113232351470551632713#include<stdio.h>#include<math.h>voidmain(){inti,j,k;for(i=1;i<=7;i++){for(k=1;k<=abs(4-i);k++)printf(““);for(j=1;j<=7-2*abs(4-i);j++)printf(“*”);printf(“\n”);}}*************************j=7-2*abs(i-4)k=abs(4-i)[例2]编程打印如下图案ijk81abbbcccccdddddddcccccbbba上机实验:输出如下图案1223334444

***************a上机实验:输出如下图案182

例:输出10~100之间的全部素数。所谓素数n是指,除1和n之外,不能被2~(n-1)之间的任何整数整除。算法设计要点:(1)显然,只要设计出判断某数n是否是素数的算法,外面再套一个for循环即可。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论