C语言程序设计与实践 第3版 课件 第5章 C程序结构_第1页
C语言程序设计与实践 第3版 课件 第5章 C程序结构_第2页
C语言程序设计与实践 第3版 课件 第5章 C程序结构_第3页
C语言程序设计与实践 第3版 课件 第5章 C程序结构_第4页
C语言程序设计与实践 第3版 课件 第5章 C程序结构_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第5章C程序结构5.1C语言C语言的语句分类:1、控制语句

if()~else~(条件语句)for()~(循环语句)while()~(循环语句)do~while()(循环语句)continue(结束本次循环语句)break(中止执行switch或循环语句)switch(多分支选择语句)goto(转向语句)/*不建议使用*/return(从函数返回语句)2、函数调用语句

例如:printf(“ThisisaCstatement.”);

3、表达式语句

a=3;/*一个语句必须在最后出现分号*/4、空语句

;5、复合语句

{z=x+y;

t=z/100;

printf(“%f”,t);

}复合语句中最后一个语句中最后的分号不能忽略不写。5.2程序设计基础程序设计过程一般步骤:(1)明确问题(2)分析问题,建立数学模型(3)确定处理方案,即进行算法设计(4)绘制流程图(5)编写程序(6)调试和测试程序(7)编写文档资料(8)程序的运行和维护5.3结构化程序设计的三种基本结构图5.1顺序结构

顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的。结构特点程序从入口点a开始,按顺序执行所有操作,直到出口点b处。S1S2ab5.3.1顺序结构5.3.2选择结构图5-2单选择结构图5-3双选择结构选择结构有单选择、双选择和多选择三种形式。条件S1ab条件S1abYNYS2N图5.4多选择结构多选择结构是指程序流程中遇到如图5.4所示的S1、S2、……、Sn等多个分支,程序执行方向将根据条件确定。条件S1S2Snab12n…5.3.3循环结构

循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。条件a块abYa)当型循环结构条件a块abYa)直到型循环结构NN5.4if选择结构if选择结构单分支双分支多分支if(表达式)语句if(表达式)语句1else语句2if(表达式1)语句1elseif(表达式2)语句2

…elseif(表达式m)语句melse

语句nP62页5.4if分支语句图5.6if语句第一种形式流程图if (<表达式>) <语句>

例如:if(x>y) printf(“%d”,x);当x>y时,执行printf语句,否则就执行下一

语句条件语句非0=05.4.1if语句的第一种形式例5-1输入一个整数,利用if语句编写取该数绝对值的程序并输出其绝对值。#include<stdio.h>intmain(){inta;scanf("%d",&a);if(a<0)a=-a;printf("%d",a);return0;}5.4.2第二种if语句形式

if(<表达式>)<语句1>else<语句2>图5.7if语句第二种形式流程图例如:if(x>y)

printf(“%d”,x);elseprintf(“%d”,y);当x>y时,显示x的值,否则显示y的值。条件语句语句非0=0[例5-2]已知三角形的三条边,求三角形的面积。键盘输入三条边的值,输出该三角形的面积。#include<stdio.h>#include<math.h>intmain(){floata,b,c,s,area; scanf("%f%f%f",&a,&b,&c); if(a+b>c&&b+c>a&&a+c>b) {

s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("%f\n",area); } else printf("输入的三条边不能构成三角形\n");return0;}5.4.3第三种if语句形式

例如:if(number>500) cost=0.15;elseif(number>300) cost=0.10;elseif(number>100) cost=0.075;elseif(number>50) cost=0.05;elsecost=0;if(<表达式1>)

<语句1>elseif(<表达式2>)

<语句2>elseif(<表达式3>)

<语句3>……elseif(<表达式m>)

<语句m>else

<语句m+1>

图5.8if语句的第三种形式表达式1表达式2表达式3语句1语句2语句3语句m+1非0非0非0=0=0=0……说明三种形式的if语句中,在if后面都有(<表达式>),一般为逻辑表达式或关系表达式,但也可以是算术表达式和赋值表达式等。第二、三种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。[例5-3]输入一个整数,判断其是否为7、11的倍数。#include<stdio.h>intmain(){inta;scanf("%d",&a);if(a%7==0&&a%11==0)printf("a既为7的倍数,又是11的倍数。\n");elseif(a%7==0)printf("a为7的倍数。\n");elseif(a%11==0)printf("a为11的倍数。\n");elseprintf("a不是7的倍数,也不是11的倍数。\n");return0;}5.4.4if语句的嵌套

从if语句的格式可以看出,当条件成立或不成立时将执行某一语句,而该语句本身也可以是一个if语句。在if语句中又包含一个或多个if语句的现象称为if语句的嵌套。嵌套的一种形式if(条件1)

if(条件2)语句1else

语句2else/*内嵌if*/if(条件3)语句3else

语句4if~else配对原则:缺省{}时,else总是和它上面离它最近的未配对的if配对if(……)if(……)if(……)else…else…else…例:if(a==b)

if(b==c)

printf(“a==b==c”);

else

printf(“a!=b”);修改:if(a==b)

{

if(b==c)

printf(“a==b==c”);

}

else

printf(“a!=b”);实现if~else正确配对方法:加{}例考虑下面程序输出结果:main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)

if(b!=15)

if(!v1)

x=1;

else

if(v2)x=10;

x=-1;

printf(“%d”,x);}结果:-1#include<stdio.h>intmain(){inta;scanf("%d",&a);if(a%7==0){

if(a%11==0)printf("a既为7的倍数,又是11的倍数。\n");elseprintf("a为7的倍数。\n");}else{

if(a%11==0)printf("a为11的倍数。\n");elseprintf("a不是7的倍数,也不是11的倍数。\n");}return0;}例5-4利用if语句的嵌套改写例5-3程序。5.4.5程序举例[例5-5]区间平移,输入一个整数,如果该整数位于区间[5,15]内,将其按顺序移动到区间:[22,32]。如果该整数位于区间[51,58]内,将其按顺序移动到区间:[61,68]。如果输入的整数不在要求的区间内,输出“输入的整数不在要求的区间内。”#include<stdio.h>intmain(){inta;scanf("%d",&a);if(a>=5&&a<=15){a=a+17;printf("%d\n",a);}elseif(a>=51&&a<=58){a=a+10;printf("%d\n",a);}elseprintf("输入的整数不在要求的区间内。\n");return0;}switch语句(开关分支语句)一般形式:switch(表达式){caseE1:

语句组1;break;caseE2:

语句组2;break;…….caseEn:

语句组n;

break;[default:

语句组;

break;]}执行过程:switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase说明:E1,E2,…En是常量表达式,且值必须互不相同语句标号作用,必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套switch语句(开关分支语句)另两种形式:switch(表达式){caseE1:

语句组1;

caseE2:

语句组2;…….

case

En:

语句组n;

[default:

语句组;

]}switch(表达式){caseE1:

语句组1;

caseE2:

语句组2;break;…….

caseEn:

语句组n;

[default:

语句组;

]}多个case可共用一组执行语句:……case‘A’:case‘B’:case‘C’:printf(“score>60\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!voidmain(){intk;scanf(“%d”,&k);switch(k){case1:printf(“I’minthecase1\n”);case2:printf(“I’minthecase2\n”);case3:printf(“I’minthecase3\n”);default:printf(“I’minthedefault\n”);}I’minthecase1I’minthecase2I’minthecase3I’minthedefaultvoidmain(){intk;scanf(“%d”,&k);switch(k){case1:printf(“I’minthecase1\n”);break;case2:printf(“I’minthecase2\n”);break;case3:printf(“I’minthecase3\n”);break;default:printf(“I’minthedefault\n”);break;}I’minthecase1大家做一下:

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);

}运行结果:a=2,b=1[例5-6]某零食店批发零食,达到不同的额度将会给予顾客不同的折扣,总价达到50块及以上打9折、150及以上打8折、300及以上打7折、400及以上打6折、500及以上打5折。据此编写程序,输入总价后得出最终价格(注意,总价取整数,最终价格取小数点后2位。)#include<stdio.h>intmain(){ inta,b,d; floatp; scanf("%d",&a); b=a/50; switch(b) {

case0:d=10;break; case1: case2:d=9;break; case3: case4: case5:d=8;break; case6: case7:d=7;break; case8: case9:d=6;break; case10:d=5;break; } if(a>500) d=5; p=(float)a*(float)d/10; printf("%.2f\n",p);return0;}程序while语句一般形式:while(表达式)

循环体语句;执行流程:expr循环体假(0)真(非0)while特点:先判断表达式,后执行循环体说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)

循环体;例用while循环求

#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体例显示1~5的平方#include<stdio.h>main(){inti=1;while(i<=5){printf("%d*%d=%d\n",i,i,i*i);i++;}}运行结果:1*1=12*2=43*3=94*4=165*5=25do~while语句一般形式:do

循环体语句;while(表达式);执行流程:do循环体expr假(0)真(非0)while特点:先执行循环体,后判断表达式说明:至少执行一次循环体do~while可转化成while结构expr循环体假(0)真(非0)循环体While循环例用do~while循环求

#include<stdio.h>main(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);printf("%d",sum);}for语句一般形式:for([expr1];[expr2];[expr3])

循环体语句;执行流程:expr2循环体假(0)真(非0)forexpr1expr3for语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值){

循环体语句;}说明:for语句中expr1,expr2,expr3类型任意,都可省略,但分号;不可省无限循环:for(;;)for语句可以转换成while结构expr1;while(expr2){

循环体语句;

expr3;}例用for循环求

#include<stdio.h>main(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}例:#include<stdio.h>main(){inti=0;

for(i=0;i<10;i++)putchar(‘a’+i);

}运行结果:abcdefghij例:#include<stdio.h>main(){inti=0;

for(;i<10;i++)

putchar(‘a’+i);

}例:#include<stdio.h>main(){inti=0;

for(;i<10;)putchar(‘a’+(i++));

}课堂上机练习编写一个程序。该程序读取整数,直到输入0.输入终止后,程序应该报告输入的偶数(不包括0)的总个数,以及偶数的平均值。

功能:在循环语句和switch语句中,终止并跳出循环体或开关体说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中5.9.1break语句

expr……break;……假(0)真(非0)whiledo……break;…...expr假(0)真(非0)whileexpr2……break;…...假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;…...const1const2constndefaultcase[例5-17]利用break语句找出1到5000之间第二个既能被5整除,又能被11整除,且被14除余1的整数。#include<stdio.h>intmain(){intflag=0,i;for(i=1;i<=5000;i++){ if(i%5==0&&i%11==0&&i%14==1&&flag==0) flag=1; elseif(i%5==0&&i%11==0&&i%14==1&&flag==1) break;}printf("%d\n",i);return0;}5.9.2continue语句continue语句的一般形式为:

continue;该语句作用是提前结束本次循环,即跳出循环体中continue语句后面的语句,接着执行表达式3(在for语句中),进行下一次是否循环的判定。5.9.2continue语句功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中expr……continue;……假(0)真(非0)while真(非0)do……continue;…...expr假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3[例5-19]利用continue语句,将1到5000之间既能被5整除,又能被11整除,且被14除余1的整数全部输出。程序如下:#include<stdio.h>intmain() {inti;for(i=1;i<=5000;i++){ if(!(i%5==0&&i%11==0&&i%14==1))continue;

printf("%d\n",i);}return0;}5.10多重循环的嵌套

一个循环体内又包含另一个循环结构,称为循环的嵌套。内嵌循环中又可以再嵌循环,这就是多层循环。每种循环都可以进行嵌套,三种循环(for循环、while循环、dowhile循环)也可以相互嵌套。三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}内循环外循环内循环嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环向上跳转5.10多重循环的嵌套[例5-21]利用嵌套for循环输出九九乘法表。#include<stdio.h>intmain(){inti,j;for(i=1;i<10;i++){

for(j=1;j<=i;j++)printf("%dx%d=%d",j,i,i*j);

printf("\n");}return0;}

5.11程序举例[例5-22]

编程输出6位分段和平方数。可以将一个6位整数分解为前后两个3位数,由它的前三位构成第一个三位数,由它的后三位构成第二个三位数,如果这个6位数等于分解所得的前后两个三位数和的平方,则将该6位数称为6位分段和平方数,编写程序输出所有的6位分段和平方数。5.11程序举例程序如下:#include<stdio.h>intmain(){inta,x,y;for(a=100000;a<=999999;a++){x=a/1000;y=a%1000;if((x+y)*(x+y)==a)printf("%10d",a);}return0;}改进1:#include<stdio.h>#include<math.h>intmain(){inta,x,y,b;for(a=100000;a<=999999;a++){b=(int)sqrt(a);if(a==b*b){x=a/1000;y=a%1000;if(x+y==b)printf("%10d",a);}}return0;}5.11程序举例改进2:#include<stdio.h>#include<math.h>intmain(){intb,t,x,y,a;t=(int)sqrt

温馨提示

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

评论

0/150

提交评论