程序控制结构教材课件_第1页
程序控制结构教材课件_第2页
程序控制结构教材课件_第3页
程序控制结构教材课件_第4页
程序控制结构教材课件_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计程序控制结构C语言程序设计程序控制结构1C语言的语句C语言中语句以分号“;”结束,语句分为:1.声明语句:在程序编译时处理,在程序运行时不产生相应的操作。2.执行语句:在程序运行时向计算机系统发出操作命令,使计算机执行特定的操作。voidmain(){inti;/*声明语句*/printf("%d\n",(i=1,++i));/*执行语句*/}C语言的语句C语言中语句以分号“;”结束,语句分为:void2C语言的执行语句表达式语句:表达式加分号“;”空语句:仅一个分号“;”构成的语句复合语句:用一对花括号{}括起来的多条语句控制语句:C语言提供9种控制语句,见P62#include<math.h>voidmain(){inti;i=abs(-2);;/*表达式语句(赋值语句)空语句*/printf("%d\n",i);/*表达式语句(函数调用语句)*/}C语言的执行语句表达式语句:表达式加分号“;”#includ3C语言的执行语句#include<stdio.h>voidmain(){inta,b;printf("Pleaseinputa,b:\n");scanf("%d,%d",&a,&b);if(a>b)/*控制语句(if语句)*/{intt;t=a;a=b;b=t;}/*复合语句*/printf("a=%d,b=%d\n",a,b);getch();}C语言的执行语句#include<stdio.h>4程序控制结构程序的三种基本结构顺序结构:程序执行按照代码书写顺序执行

选择结构:循环结构:if语句switch语句当型循环结构(for语句、while语句)直到型循环结构(do-while语句)程序控制结构程序的三种基本结构if语句当型循环结构(for5顺序结构 所谓顺序结构程序就是按代码书写顺序,自上而下执行的语句构成的程序段。一般顺序结构的流程图为:动作1动作2动作3顺序结构 所谓顺序结构程序就是按代码书写顺序,自上而下执行的6例:计算两个键盘输入的整数的平均值并输出。开始输入两个整数计算平均值定义三个变量输出平均值结束#include<stdio.h>main(){inta,b;floataverage;printf("Pleaseinputa,b:\n");scanf("%d,%d",&a,&b);average=(a+b)/2.0;printf("average=%f\n",average);getch();}例:计算两个键盘输入的整数的平均值并输出。开始输入两个整数计7选择结构C语言的选择控制语句有两条:条件选择语句:if语句开关分支语句:switch语句一、if语句的三种形式1、if(表达式)

语句表达式真(非0)语句序列假(0)选择结构C语言的选择控制语句有两条:一、if语句的三种形式表8例:输入一个字母,以小写形式输出该字母。#include<stdio.h>main(){charc;printf("Inputaletter:");c=getchar();if(c>='A'&&c<='Z')c=c+32;printf("%c\n",c);getch();}开始输入一个字母定义一个字符变量输出字母结束大写字母?转换为小写字母真(非0)假(0)例:输入一个字母,以小写形式输出该字母。#include<s9选择结构一、if语句的三种形式2、if(表达式)语句1else语句2表达式真(非0)语句序列2假(0)语句序列1选择结构一、if语句的三种形式表达式真(非0)语句序列2假(10例:输出实数x,y中的较大者。#include<stdio.h>main(){floatx,y;printf("Inputx,y:");scanf("%f,%f",&x,&y);if(x>y)printf("%f\n",x);elseprintf("%f\n",y);getch();}开始输入两个实数定义两个实型变量输出x结束x>y?输出y真(非0)假(0)例:输出实数x,y中的较大者。#include<stdio.11选择结构一、if语句的三种形式3、if(表达式1)语句1elseif(表达式2)语句2......elseif(表达式n)语句n[else语句n+1]表达式1真(非0)语句序列n假(0)语句序列1表达式2语句序列2真(非0)表达式n假(0)真(非0)语句序列n+1假(0)选择结构一、if语句的三种形式表达式1真(非0)语句序列n假12例:输入百分制成绩,要求输出相应的五级制成绩。百分制成绩与五级制成绩之间的转换标准为:90分以上为“A”;80~89分为“B”;70~79分为“C”;60~69分为“D”;60分以下为“E”。#include<stdio.h>main(){intscore;printf("Pleaseinputthescore(0~100):");scanf("%d",&score);

if(score>=90)printf("A\n");

elseif(score>=80)printf("B\n");elseif(score>=70)printf("C\n");elseif(score>=60)printf("D\n");elseprintf("E\n");getch();}例:输入百分制成绩,要求输出相应的五级制成绩。#includ13例:在一对/**/之间补充程序,使对其输入的一个月工资数额,求应交税款。设应交税款的计算公式如下:如:输入:4500输出:f(4500.00)=30.00输入:6500输出:f(6500.00)=195.00输入:9500输出:f(9500.00)=645.00#include<stdio.h>voidmain(){floatx;doubley;printf("Pleaseinputanumber:\n");scanf("%f",&x);/**//**/printf("f(%.2f)=%.2f\n",x,y);getch();}if(x<=3500)y=0;elseif(x<=5000)y=(x-3500)*0.03;elseif(x<=8000)y=(x-3500)*0.1-105;elseif(x<=12500)y=(x-3500)*0.2-555;例:在一对/**/之间补充程序,使对其输入的一个月工资数额,14if语句的嵌套if语句的嵌套:一个if语句的if分支、elseif分支或else分支中又完整地包含了另一个if语句。if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句4书写代码时,写出层次关系if语句的嵌套if语句的嵌套:一个if语句的if分支、els15例:有如下一函数,请判断以下哪个程序是正确的?程序1:main(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d",x,y);}例:有如下一函数,请判断以下哪个程序是正确的?程序1:16例:有如下一函数,请判断以下哪个程序是正确的?程序2:main(){intx,y;scanf("%d",&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;printf("x=%d,y=%d",x,y);}例:有如下一函数,请判断以下哪个程序是正确的?程序2:17例:有如下一函数,请判断以下哪个程序是正确的?程序3:main(){intx,y;scanf("%d",&x);y=-1;if(x!=0)if(x>0)y=1;elsey=0;printf("x=%d,y=%d",x,y);}y=-1;if(x!=0){if(x>0)y=1;}elsey=0;例:有如下一函数,请判断以下哪个程序是正确的?程序3:y=-18例:有如下一函数,请判断以下哪个程序是正确的?程序4:main(){intx,y;scanf("%d",&x);y=0;if(x>=0)if(x>0)y=1;elsey=-1;printf("x=%d,y=%d",x,y);}y=0;if(x>=0){if(x>0)y=1;}elsey=-1;例:有如下一函数,请判断以下哪个程序是正确的?程序4:y=019例:以下程序的输出结果是?#include<stdio.h>main(){inta,b,c,x;a=b=c=0;x=35;if(!a)x--;elseif(b);if(c)x=3;elsex+=4;printf("x=%d\n",x);}x=38例:以下程序的输出结果是?#include<stdio.h>20inta=1;switch(a){case1:a+=1;break;case2:a+=2;break;default:a+=0;}printf("%d\n",a);选择结构二、switch语句switch语句的一般形式:switch(表达式){case常量表达式1:语句组1;[break;]case常量表达式2:语句组2;[break;]……case常量表达式n:语句组n;[break;][default:语句组n+1;]}多分支选择结构:根据一个表达式的不同取值来实现对分支的选择。语句组1break计算表达式=常量1有语句组2=常量2无break无有语句组n=常量nbreak有无语句组n+1=其它inta=1;选择结构二、switch语句switch21#include<stdio.h>main(){chargrade;grade=getchar();grade=(grade>='a'&&grade<='z')?grade-32:grade;switch(grade){case'A':printf("90~100\n");break;case'B':printf("80~89\n");break;case'C':printf("70~79\n");break;case'D':printf("60~69\n");break;case'E':printf("<60\n");break;default:printf("Error\n");}}每个分支的常量的值必须互不相同各个分支允许内嵌多个语句,而且可以不用{}括起来最后一个分支可以不加break语句#include<stdio.h>每个分支的常量的值必须互不22#include<stdio.h>main(){chargrade;grade=getchar();switch(grade){default:printf("Error\n");break;case'A':case'a':printf("90~100\n");break;case'B':case'b':printf("80~89\n");break;case'C':case'c':printf("70~79\n");break;case'D':case'd':printf("60~69\n");break;case'E':case'e':printf("<60\n");break;}}无论default分支是否最后出现,它都是作为最后一个分支来考虑允许多个case共用一组执行语句#include<stdio.h>无论default分支是否23例:以下程序的输出结果是?main(){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("a=%d,b=%d\n",a,b);}a=2,b=1break;a=1,b=0例:以下程序的输出结果是?a=2,b=1break;a=1,24例:运行以下程序段,结果为:()intt=3;switch(t){case'1':printf("1");break;case'2':printf("2");break;case'3':printf("3");break;default:printf("Error!");}A)1B)2C)3D)Error!Dintt=49;A例:运行以下程序段,结果为:()Dintt=49;A25循环结构循环结构的特点是在给定的条件成立时,反复执行某程序段,直到条件不成立。循环条件:给定的条件循环体:反复执行的程序段C语言的循环控制语句有三种:while语句do-while语句for语句循环结构循环结构的特点是在给定的条件成立时,反复执行某程序段26循环结构(while)while(循环条件表达式){循环体}真(非0)假(0)表达式循环体main(){intn=1,sum=0;while(n<=100){sum+=n;++n;}printf("n=%d,sum=%d\n",n,sum);}去掉花括号{}?while(n<=100);?循环结构(while)while(循环条件表达式){循环27循环结构(do-while)do{循环体}while(循环条件表达式);真(非0)假(0)表达式循环体main(){intn=1,sum=0;do{sum+=n++;}while(n<=100);printf("n=%d,sum=%d\n",n,sum);}勿忘分号“;”循环结构(do-while)do{循环体}while(循环条28While与do-while的比较main(){intsum=0,n;scanf("%d",&n);while(n<=10){sum+=n;n++;}printf("%d\n",sum);}main(){intsum=0,n;scanf("%d",&n);do{sum+=n;n++;}while(n<=10);printf("%d\n",sum);}输入1时,结果相同,都是输出55输入11时,结果就不相同了,分别输出0和11While与do-while的比较main()main()输29循环结构(for)for(表达式1;表达式2;表达式3)循环体main(){intn,sum=0;for(n=1;n<=100;n++)sum+=n;printf("n=%d,sum=%d\n",n,sum);}

真(非0)假(0)表达式2循环体计算表达式1计算表达式3表达式1只执行一次,常用于对循环变量赋初值表达式2:循环条件表达式表达式3常用于循环变量的更新,每次执行完循环体后执行一次循环结构(for)for(表达式1;表达式2;表达式3)循30循环结构(for结构的变形)main(){intn,sum;for(n=1,sum=0;n<=100;sum+=n,n++);printf("n=%d,sum=%d\n",n,sum);}for(,;表达式2;,)循环体/*表达式1、3用逗号表达式*/for(;表达式2;表达式3)循环体/*表达式1缺省*/main(){intn=1,sum=0;for(;n<=100;n++)sum+=n;printf("n=%d,sum=%d\n",n,sum);}for(;表达式2;)循环体/*表达式1、3缺省*/main(){intn=1,sum=0;for(;n<=100;)sum+=n++;printf("n=%d,sum=%d\n",n,sum);}for(;;)循环体/*表达式1、2、3都缺省*/main(){intn=1,sum=0;for(;;){sum+=n++;if(n>100)break;}printf("n=%d,sum=%d\n",n,sum);}循环结构(for结构的变形)main()for(,;表达式231其它程序流程控制(break)break语句:在switch中退出switch结构;在循环中退出循环。

例:将数字512表示成两个数的和,这两个数分别为15和13的倍数。main(){inti;for(i=1;;i++)if(!((512-i*15)%13))break;printf("%d+%d=512\n",i*15,512-i*15);}inti;

for(i=1;(512-i*15)%13;i++);printf("%d+%d=512\n",i*15,512-i*15);其它程序流程控制(break)break语句:在switch32其它程序流程控制(continue)continue语句:结束本次循环,跳过循环体后面的语句,开始下一轮循环(循环的短路)。

例:输出100~200之间所有能被7或9整除的整数。main(){inti,n=0;for(i=100;i<=200;i++){if((i%7!=0)&&(i%9!=0))continue;printf("%5d",i);n++;if(n%5==0)printf("\n");}}for(i=100;i<=200;i++){if((i%7==0)||(i%9==0)){printf("%5d",i);n++;if(n%5==0)printf("\n");}}其它程序流程控制(continue)continue语句:结33break语句与continue语句的比较voidmain(){intsum=0,item=0;while(item<5){item++;sum+=item;if(sum>=6)break;}printf("%d\n",sum);}输出6break结束整个循环voidmain(){intsum=0,item=0;while(item<5){item++;if(item==2)continue;sum+=item;}printf("%d\n",sum);}输出13continue结束本次循环break语句与continue语句的比较voidmain34例:程序的输出结果是?voidmain(){inti,a=0,b=0,c=0,d=0;for(i=1;i<=4;i++){switch(i){case1:a=1;continue;case2:b=2;case3:c=3;break;case4:d=4;}printf("%d%d%d%d\n",a,b,c,d);}}123012301234例:程序的输出结果是?123035循环的嵌套循环嵌套:一个循环体中又包含循环结构。最常见的循环嵌套为for结构嵌套main(){inti,j;for(i=0;i<2;i++)/*外循环*/for(j=0;j<2;j++)/*内循环*/printf("i=%d,j=%d\n",i,j);}输出结果:i=0,j=0i=0,j=1i=1,j=0i=1,j=1循环的嵌套循环嵌套:一个循环体中又包含循环结构。main()36例:打印算术口诀表main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-3d",i,j,i*j);printf("\n");}}1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=25例:打印算术口诀表main()1*1=137例:以下程序是利用穷举法打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如153是一个水仙花数,因为153=13+53+33.

main(){inti,j,k,m1,m2;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++){m1=i*100+j*10+k;m2=i*i*i+j*j*j+k*k*k;if(m1==m2)printf("%4d",m1);}}例:以下程序是利用穷举法打印出所有的“水仙花数”。所谓“水仙38例:求解百马百担问题

:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马数可分别为多少?有多少种解决方案?voidmain(){intx,y,z,n=0;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++)if(x+y+z==100&&3*x+2*y+z/2.0==100){n++;

printf("%d:large:%d,middle:%d,small:%d\n",n,x,y,z);}printf("\nThereare%dsolutions.\n",n);getch();}例:求解百马百担问题:有100匹马,驮100担货,大马驮339例:程序的功能是求一堆零件的总数(100到200之间)。如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。

#include<stdio.h>voidmain(){inti;for(i=100;i<=200;i++)if(i%4==2&&i%7==3&&i%9==5)printf("%d\n",i);getch();}例:程序的功能是求一堆零件的总数(100到200之间)。如果40例:程序的功能是求满足等式xyz+yzz=520的x,y,z值(其中xyz和yzz分别表示一个三位数)。在一对/**/之间改错。

voidmain(){intx,y,z,i,result=520;for(x=1;x<10;x++)for(y=1;y<10;y++)/**/for(z=1;z<10;z++)/**/{i=100*x+10*y+z+100*y+10*z+z;/**/if(i=result)/**/printf("x=%d,y=%d,x=%d\n",x,y,z);}getch();}for(z=0;z<10;z++)i==result例:程序的功能是求满足等式xyz+yzz=520的x,y,z41例:程序的功能是输出用1元、2元和5元的纸币组成10元钱的所有组合。在一对/**/之间补充程序。

voidmain(){inti,j,k;intnum=0;printf("No.1yuan2yuan5yuan\n");for(k=0;k<=2;k++)for(j=0;j<=5;j++)for(i=0;/**//**/;i++) if(/**//**/) {num++; printf("%9d%9d%9d%9d\n",num,i,j,k); }}i<=10k*5+j*2+i==10例:程序的功能是输出用1元、2元和5元的纸币组成10元钱的所42例:在一对/**/之间补充程序,使其完成圆周率的计算。#include<math.h>voidmain(){inti=1,n;doublepi=0.0;printf("Inputaninteger:");scanf("%d",&n);while(i<=n){pi+=/**//**/;i++;}pi=sqrt(pi*6);printf("pi=%lf\n",pi);}1.0/(i*i)例:在一对/**/之间补充程序,使其完成圆周率的计算。#in43例:在一对/**/之间补充程序,使其完成圆周率的计算。#include<math.h>voidmain(){longints=1,n=1;doublet=1.0,pi=0;do{pi+=t;s=-s;n+=2;t=/**//**/;}while(fabs(t)>1e-6);pi*=4;printf("pi=%10.6f\n",pi);}1.0*s/n例:在一对/**/之间补充程序,使其完成圆周率的计算。#in44例:在一对/**/之间补充程序,使其完成以下多项式的计算。main(){floatsum,term,x;intn,k,sign;printf("Inputx,n:\n");scanf("%f,%d",&x,&n);sum=x;term=x;sign=1;for(k=2;k<=n;k++){term*=/**//**/;sign=-sign;sum+=sign*term;}printf("sum=%f\n",sum);}x*x/(2*k-2)/(2*k-1)例:在一对/**/之间补充程序,使其完成以下多项式的计算。m45例:在一对/**/之间补充程序,使其完成n!的计算。main(){inti,n;longs=1;printf("Inputn:");scanf("%d",&n);for(i=1;i<=n;i++)/**//**/;printf("%d!=%ld\n",n,s);}s*=i例:在一对/**/之间补充程序,使其完成n!的计算。main46例:编程求∑n!=1!+2!+3!…+n!的值。main(){inti,n;longs,t;printf("Inputn:");scanf("%d",&n);for(i=1,t=1,s=0;i<=n;i++){/**//**/;s+=t;}printf("s=%ld\n",s);}t*=i例:编程求∑n!=1!+2!+3!…+n!的值。main(47例:程序的功能是求1+12+123+1234+12345的值。在一对/**/之间补充程序。voidmain(){inti;intt=0,s=0;for(i=1;i<=5;i++){t=/**//**/;s+=t;}printf("1+12+123+1234+12345=%d\n",s);}t*10+i例:程序的功能是求1+12+123+1234+12345的值48例:编程输出Fibonacci(斐波拉契)数列的前20项。main(){inti,x1=1,x2=1;for(i=1;i<=10;i++){printf("%10d%10d",x1,x2);if(i%2==0)printf("\n");x1=x1+x2;x2=/**//**/;}}x2+x1例:编程输出Fibonacci(斐波拉契)数列的前20项。m49例:输入一个大于或等于3的整数,判断这个数是否为素数。素数定义:只能被1和本身整除的数#include<math.h>main(){inti,m;printf("Inputaninteger:");scanf("%d",&m);for(i=2;i<m;i++)if(m%i==0)break;if(i==m)printf("%disaprimenumber\n",m);elseprintf("%disnotaprimenumber\n",m);}例:输入一个大于或等于3的整数,判断这个数是否为素数。#in50例:打印3~234间所有的素数,每10个换一行。main(){inti,j,k=0;for(i=3;i<=234;i++){for(j=2;j<=i-1;j++)if(i%j==0)break;if(i==j)printf("%6d%c",i,++k%10==0?'\n':'');}printf("\n");}外循环:控制待判断数的区间变化for(i=3;i<=234;i++)内循环:作为外循环的一个核心语句,判断当前i是否素数例:打印3~234间所有的素数,每10个换一行。main(51例:在屏幕上输出如下图形。main(){inti,j,k;

for(i=1;i<=8;i++){for(j=1;j<=8-i;j++)printf("");for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}}****************************************************************例:在屏幕上输出如下图形。main()*52例:在屏幕上输出如下图形。main(){inti,j,k;for(i=8;i>=1;i--){for(j=1;j<=8-i;j++)printf("");for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}}****************************************************************例:在屏幕上输出如下图形。main()**********53例:在屏幕上输出如下图形。main(){inti,j,k;

for(i=1;i<=8;i++){for(j=1;j<=8-i;j++)printf("");for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}}****************************************************************

*************************************************for(i=7;i>=1;i--){for(j=1;j<=8-i;j++)printf("");for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}例:在屏幕上输出如下图形。main()*fo54作业P1214.12、4.19作业P12155C语言程序设计程序控制结构C语言程序设计程序控制结构56C语言的语句C语言中语句以分号“;”结束,语句分为:1.声明语句:在程序编译时处理,在程序运行时不产生相应的操作。2.执行语句:在程序运行时向计算机系统发出操作命令,使计算机执行特定的操作。voidmain(){inti;/*声明语句*/printf("%d\n",(i=1,++i));/*执行语句*/}C语言的语句C语言中语句以分号“;”结束,语句分为:void57C语言的执行语句表达式语句:表达式加分号“;”空语句:仅一个分号“;”构成的语句复合语句:用一对花括号{}括起来的多条语句控制语句:C语言提供9种控制语句,见P62#include<math.h>voidmain(){inti;i=abs(-2);;/*表达式语句(赋值语句)空语句*/printf("%d\n",i);/*表达式语句(函数调用语句)*/}C语言的执行语句表达式语句:表达式加分号“;”#includ58C语言的执行语句#include<stdio.h>voidmain(){inta,b;printf("Pleaseinputa,b:\n");scanf("%d,%d",&a,&b);if(a>b)/*控制语句(if语句)*/{intt;t=a;a=b;b=t;}/*复合语句*/printf("a=%d,b=%d\n",a,b);getch();}C语言的执行语句#include<stdio.h>59程序控制结构程序的三种基本结构顺序结构:程序执行按照代码书写顺序执行

选择结构:循环结构:if语句switch语句当型循环结构(for语句、while语句)直到型循环结构(do-while语句)程序控制结构程序的三种基本结构if语句当型循环结构(for60顺序结构 所谓顺序结构程序就是按代码书写顺序,自上而下执行的语句构成的程序段。一般顺序结构的流程图为:动作1动作2动作3顺序结构 所谓顺序结构程序就是按代码书写顺序,自上而下执行的61例:计算两个键盘输入的整数的平均值并输出。开始输入两个整数计算平均值定义三个变量输出平均值结束#include<stdio.h>main(){inta,b;floataverage;printf("Pleaseinputa,b:\n");scanf("%d,%d",&a,&b);average=(a+b)/2.0;printf("average=%f\n",average);getch();}例:计算两个键盘输入的整数的平均值并输出。开始输入两个整数计62选择结构C语言的选择控制语句有两条:条件选择语句:if语句开关分支语句:switch语句一、if语句的三种形式1、if(表达式)

语句表达式真(非0)语句序列假(0)选择结构C语言的选择控制语句有两条:一、if语句的三种形式表63例:输入一个字母,以小写形式输出该字母。#include<stdio.h>main(){charc;printf("Inputaletter:");c=getchar();if(c>='A'&&c<='Z')c=c+32;printf("%c\n",c);getch();}开始输入一个字母定义一个字符变量输出字母结束大写字母?转换为小写字母真(非0)假(0)例:输入一个字母,以小写形式输出该字母。#include<s64选择结构一、if语句的三种形式2、if(表达式)语句1else语句2表达式真(非0)语句序列2假(0)语句序列1选择结构一、if语句的三种形式表达式真(非0)语句序列2假(65例:输出实数x,y中的较大者。#include<stdio.h>main(){floatx,y;printf("Inputx,y:");scanf("%f,%f",&x,&y);if(x>y)printf("%f\n",x);elseprintf("%f\n",y);getch();}开始输入两个实数定义两个实型变量输出x结束x>y?输出y真(非0)假(0)例:输出实数x,y中的较大者。#include<stdio.66选择结构一、if语句的三种形式3、if(表达式1)语句1elseif(表达式2)语句2......elseif(表达式n)语句n[else语句n+1]表达式1真(非0)语句序列n假(0)语句序列1表达式2语句序列2真(非0)表达式n假(0)真(非0)语句序列n+1假(0)选择结构一、if语句的三种形式表达式1真(非0)语句序列n假67例:输入百分制成绩,要求输出相应的五级制成绩。百分制成绩与五级制成绩之间的转换标准为:90分以上为“A”;80~89分为“B”;70~79分为“C”;60~69分为“D”;60分以下为“E”。#include<stdio.h>main(){intscore;printf("Pleaseinputthescore(0~100):");scanf("%d",&score);

if(score>=90)printf("A\n");

elseif(score>=80)printf("B\n");elseif(score>=70)printf("C\n");elseif(score>=60)printf("D\n");elseprintf("E\n");getch();}例:输入百分制成绩,要求输出相应的五级制成绩。#includ68例:在一对/**/之间补充程序,使对其输入的一个月工资数额,求应交税款。设应交税款的计算公式如下:如:输入:4500输出:f(4500.00)=30.00输入:6500输出:f(6500.00)=195.00输入:9500输出:f(9500.00)=645.00#include<stdio.h>voidmain(){floatx;doubley;printf("Pleaseinputanumber:\n");scanf("%f",&x);/**//**/printf("f(%.2f)=%.2f\n",x,y);getch();}if(x<=3500)y=0;elseif(x<=5000)y=(x-3500)*0.03;elseif(x<=8000)y=(x-3500)*0.1-105;elseif(x<=12500)y=(x-3500)*0.2-555;例:在一对/**/之间补充程序,使对其输入的一个月工资数额,69if语句的嵌套if语句的嵌套:一个if语句的if分支、elseif分支或else分支中又完整地包含了另一个if语句。if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句4书写代码时,写出层次关系if语句的嵌套if语句的嵌套:一个if语句的if分支、els70例:有如下一函数,请判断以下哪个程序是正确的?程序1:main(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d",x,y);}例:有如下一函数,请判断以下哪个程序是正确的?程序1:71例:有如下一函数,请判断以下哪个程序是正确的?程序2:main(){intx,y;scanf("%d",&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;printf("x=%d,y=%d",x,y);}例:有如下一函数,请判断以下哪个程序是正确的?程序2:72例:有如下一函数,请判断以下哪个程序是正确的?程序3:main(){intx,y;scanf("%d",&x);y=-1;if(x!=0)if(x>0)y=1;elsey=0;printf("x=%d,y=%d",x,y);}y=-1;if(x!=0){if(x>0)y=1;}elsey=0;例:有如下一函数,请判断以下哪个程序是正确的?程序3:y=-73例:有如下一函数,请判断以下哪个程序是正确的?程序4:main(){intx,y;scanf("%d",&x);y=0;if(x>=0)if(x>0)y=1;elsey=-1;printf("x=%d,y=%d",x,y);}y=0;if(x>=0){if(x>0)y=1;}elsey=-1;例:有如下一函数,请判断以下哪个程序是正确的?程序4:y=074例:以下程序的输出结果是?#include<stdio.h>main(){inta,b,c,x;a=b=c=0;x=35;if(!a)x--;elseif(b);if(c)x=3;elsex+=4;printf("x=%d\n",x);}x=38例:以下程序的输出结果是?#include<stdio.h>75inta=1;switch(a){case1:a+=1;break;case2:a+=2;break;default:a+=0;}printf("%d\n",a);选择结构二、switch语句switch语句的一般形式:switch(表达式){case常量表达式1:语句组1;[break;]case常量表达式2:语句组2;[break;]……case常量表达式n:语句组n;[break;][default:语句组n+1;]}多分支选择结构:根据一个表达式的不同取值来实现对分支的选择。语句组1break计算表达式=常量1有语句组2=常量2无break无有语句组n=常量nbreak有无语句组n+1=其它inta=1;选择结构二、switch语句switch76#include<stdio.h>main(){chargrade;grade=getchar();grade=(grade>='a'&&grade<='z')?grade-32:grade;switch(grade){case'A':printf("90~100\n");break;case'B':printf("80~89\n");break;case'C':printf("70~79\n");break;case'D':printf("60~69\n");break;case'E':printf("<60\n");break;default:printf("Error\n");}}每个分支的常量的值必须互不相同各个分支允许内嵌多个语句,而且可以不用{}括起来最后一个分支可以不加break语句#include<stdio.h>每个分支的常量的值必须互不77#include<stdio.h>main(){chargrade;grade=getchar();switch(grade){default:printf("Error\n");break;case'A':case'a':printf("90~100\n");break;case'B':case'b':printf("80~89\n");break;case'C':case'c':printf("70~79\n");break;case'D':case'd':printf("60~69\n");break;case'E':case'e':printf("<60\n");break;}}无论default分支是否最后出现,它都是作为最后一个分支来考虑允许多个case共用一组执行语句#include<stdio.h>无论default分支是否78例:以下程序的输出结果是?main(){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("a=%d,b=%d\n",a,b);}a=2,b=1break;a=1,b=0例:以下程序的输出结果是?a=2,b=1break;a=1,79例:运行以下程序段,结果为:()intt=3;switch(t){case'1':printf("1");break;case'2':printf("2");break;case'3':printf("3");break;default:printf("Error!");}A)1B)2C)3D)Error!Dintt=49;A例:运行以下程序段,结果为:()Dintt=49;A80循环结构循环结构的特点是在给定的条件成立时,反复执行某程序段,直到条件不成立。循环条件:给定的条件循环体:反复执行的程序段C语言的循环控制语句有三种:while语句do-while语句for语句循环结构循环结构的特点是在给定的条件成立时,反复执行某程序段81循环结构(while)while(循环条件表达式){循环体}真(非0)假(0)表达式循环体main(){intn=1,sum=0;while(n<=100){sum+=n;++n;}printf("n=%d,sum=%d\n",n,sum);}去掉花括号{}?while(n<=100);?循环结构(while)while(循环条件表达式){循环82循环结构(do-while)do{循环体}while(循环条件表达式);真(非0)假(0)表达式循环体main(){intn=1,sum=0;do{sum+=n++;}while(n<=100);printf("n=%d,sum=%d\n",n,sum);}勿忘分号“;”循环结构(do-while)do{循环体}while(循环条83While与do-while的比较main(){intsum=0,n;scanf("%d",&n);while(n<=10){sum+=n;n++;}printf("%d\n",sum);}main(){intsum=0,n;scanf("%d",&n);do{sum+=n;n++;}while(n<=10);printf("%d\n",sum);}输入1时,结果相同,都是输出55输入11时,结果就不相同了,分别输出0和11While与do-while的比较main()main()输84循环结构(for)for(表达式1;表达式2;表达式3)循环体main(){intn,sum=0;for(n=1;n<=100;n++)sum+=n;printf("n=%d,sum=%d\n",n,sum);}

真(非0)假(0)表达式2循环体计算表达式1计算表达式3表达式1只执行一次,常用于对循环变量赋初值表达式2:循环条件表达式表达式3常用于循环变量的更新,每次执行完循环体后执行一次循环结构(for)for(表达式1;表达式2;表达式3)循85循环结构(for结构的变形)main(){intn,sum;for(n=1,sum=0;n<=100;sum+=n,n++);printf("n=%d,sum=%d\n",n,sum);}for(,;表达式2;,)循环体/*表达式1、3用逗号表达式*/for(;表达式2;表达式3)循环体/*表达式1缺省*/main(){intn=1,sum=0;for(;n<=100;n++)sum+=n;printf("n=%d,sum=%d\n",n,sum);}for(;表达式2;)循环体/*表达式1、3缺省*/main(){intn=1,sum=0;for(;n<=100;)sum+=n++;printf("n=%d,sum=%d\n",n,sum);}for(;;)循环体/*表达式1、2、3都缺省*/main(){intn=1,sum=0;for(;;){sum+=n++;if(n>100)break;}printf("n=%d,sum=%d\n",n,sum);}循环结构(for结构的变形)main()for(,;表达式286其它程序流程控制(break)break语句:在switch中退出switch结构;在循环中退出循环。

例:将数字512表示成两个数的和,这两个数分别为15和13的倍数。main(){inti;for(i=1;;i++)if(!((512-i*15)%13))break;printf("%d+%d=512\n",i*15,512-i*15);}inti;

for(i=1;(512-i*15)%13;i++);printf("%d+%d=512\n",i*15,512-i*15);其它程序流程控制(break)break语句:在switch87其它程序流程控制(continue)continue语句:结束本次循环,跳过循环体后面的语句,开始下一轮循环(循环的短路)。

例:输出100~200之间所有能被7或9整除的整数。main(){inti,n=0;for(i=100;i<=200;i++){if((i%7!=0)&&(i%9!=0))continue;printf("%5d",i);n++;if(n%5==0)printf("\n");}}for(i=100;i<=200;i++){if((i%7==0)||(i%9==0)){printf("%5d",i);n++;if(n%5==0)printf("\n");}}其它程序流程控制(continue)continue语句:结88break语句与continue语句的比较voidmain(){intsum=0,item=0;while(item<5){item++;sum+=item;if(sum>=6)break;}printf("%d\n",sum);}输出6break结束整个循环voidmain(){intsum=0,item=0;while(item<5){item++;if(item==2)continue;sum+=item;}printf("%d\n",sum);}输出13continue结束本次循环break语句与continue语句的比较voidmain89例:程序的输出结果是?voidmain(){inti,a=0,b=0,c=0,d=0;for(i=1;i<=4;i++){switch(i){case1:a=1;continue;case2:b=2;case3:c=3;break;case4:d=4;}printf("%d%d%d%d\n",a,b,c,d);}}123012301234例:程序的输出结果是?123090循环的嵌套循环嵌套:一个循环体中又包含循环结构。最常见的循环嵌套为for结构嵌套main(){inti,j;for(i=0;i<2;i++)/*外循环*/for(j=0;j<2;j++)/*内循环*/printf("i=%d,j=%d\n",i,j);}输出结果:i=0,j=0i=0,j=1i=1,j=0i=1,j=1循环的嵌套循环嵌套:一个循环体中又包含循环结构。main()91例:打印算术口诀表main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-3d",i,j,i*j);printf("\n");}}1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=25例:打印算术口诀表main()1*1=192例:以下程序是利用穷举法打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如153是一个水仙花数,因为153=13+53+33.

main(){inti,j,k,m1,m2;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++){m1=i*100+j*10+k;m2=i*i*i+j*j*j+k*k*k;if(m1==m2)printf("%4d",m1);}}例:以下程序是利用穷举法打印出所有的“水仙花数”。所谓“水仙93例:求解百马百担问题

:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马数可分别为多少?有多少种解决方案?voidmain(){intx,y,z,n=0;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++)if(x+y+z==100&&3*x+2*y+z/2.0==100){n++;

printf("%d:large:%d,middle:%d,small:%d\n",n,x,y,z);}printf("\nThereare%dsolutions.\n",n);getch();}例:求解百马百担问题:有100匹马,驮100担货,大马驮394例:程序的功能是求一堆零件的总数(100到200之间)。如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。

#include<stdio.h>voidmain(){inti;for(i=100;i<=200;i++)if(i%4==2&&i%7==3&&i%9==5)printf("%d\n",i);getch();}例:程序的功能是求一堆零件的总数(100到200之间)。如果95例:程序的功能是求满足等式xyz+yzz=520的x,y,z值(其中xyz和yzz分别表示一个三位数)。在一对/**/之间改错。

voidmain(){intx,y,z,i,result=520;for(x=1;x<10;x++)for(y=1;y<10;y++)/**/for(z=1;z<10;z++)/**/{i=100*x+10*y+z+100*y+10*z+z;/**/if(i=result)/**/printf("x=%d,y=%d,x=%d\n",x,y,z);}getch();}for(z=0;z<10;z++)i==result例:程序的功能是求满足等式xyz+yzz=520的x,y,z96例:程序的功能是输出用1元、2元和5元的纸币组成10元钱的所有组合。在一对/**/之间补充程序。

voidmain(){inti,j,k;intnum=0;printf("No.1yuan2yuan5yuan\n");for(k=0;k<=2;k++)for(j=0;j<=5;j++)for(i=0;/**//**/;i++) if(/**//**/) {num++; printf("%9d%9d%9d%9d\n",num,i,j,k); }}i<=10k*5+j*2+i==10例:程序的功能是输出用1元、2元和5元的纸币组成10元钱的所97例:在一对/**/之间补充程序,使其完成圆周率的计算。#include<math.h>voidmain(){inti=1,n;doublepi=0.0;printf("Inputaninteger:");scanf("%d",&n);while(i<=n){pi+=/**//**/;i++;}pi=sqrt(pi*6);printf("pi=%lf\n",pi);}1.0/(i*i)例:在一对/**/之间补充程序,使其完成圆周率的计算。#in98例:在一对/**/之间补充程序,使其完成圆周率的计算。#include<math.h>voidmain(){lo

温馨提示

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

评论

0/150

提交评论