版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4C程序流程设计C语句概述程序的三种基本结构
选择型程序设计
循环型程序设计
辅助控制语句4.1C语句概述
C语句:以“;”作分隔符,编译后产生机器指令.C语句分类表达式语句:表达式加分号构成。空语句:;程序控制语句(9种):if()~else~switchfor()~while()~do~while()continuebreakgotoreturn分支循环辅助控制如total=total+limit;a=3;func();printf(“Hello,world!\n”);:用{…}括起来的一组语句一般形式:
{[数据说明部分;]
执行语句部分;
}说明:“}”后不加分号语法上和单一语句相同复合语句可嵌套复合语句结构化程序设计基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto)结构化程序:由三种基本结构反复嵌套构成的程序优点:结构清晰,易读,提高程序设计质量和效率三种基本结构顺序结构ABAB流程图N-S图4.2
程序的三种基本结构
PAB真假PBA真假kA1A2AiAnk=k2k=k1k=knk=ki......二分支选择结构多分支选择结构选择结构当型循环结构直到型循环结构PA假真当P为真AAP真假A直到P为真注:A,B,A1….An可以是一个简单语句,也可以是一个基本结构循环结构if语句(条件选择语句)if语句的三种形式形式一:格式:if(expression)statement执行过程:exprstatement非0=0例:if(x>y)
printf(“%d”,x);exprstatement1statement2非0=0形式二:格式:if(expression)statement1elsestatement2执行过程:例:if(x>y)max=x;elsemax=y;4.3
选择型程序设计if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0执行过程:
例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;选择程序设计形式三格式如:if(a==b&&x==y) printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);if后面的表达式类型任意语句可以是复合语句
if(x)if(x!=0)if(!x)if(x==0)例考虑下面程序的输出结果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!说明::一般形式:if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4内嵌if内嵌ifif(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1)if(expr2)statement1elsestatement3
内嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4内嵌ifif语句嵌套/*ch4_4.c*/#include<stdio.h>main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);if(x!=y)
if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");}运行:Enterintegerx,y:12,23X<YEnterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Y例输入两数并判断其大小关系#include<stdio.h>
main()
{floata,b,t;
scanf("%f,%f",&a,&b);
if(a>b)
{t=a;a=b;b=t;}
printf("%5.2f,%5.2f",a,b);
}例
输入两个实数,按代数值由小到大次序输出这两个数。运行情况如下:
3.6,–3.2–3.20,3.60例
输入三个数,按大小顺序输出。#include<stdio.h>
main()
{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",a,b,c);
}运行情况如下:3,7,1
1.00,3.00,7.00缺省{}时,else总是和它上面离它最近的未配对的if配对if(……)if(……)if(……)else…...else…...else…...if~else配对原则:例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);实现if~else正确配对方法:加{}实现if~else正确配对方法一般形式:switch(表达式){caseE1:
语句组1;
break;caseE2:
语句组2;
break;…….caseEn:
语句组n;
break;[default:
语句组;
break;]}执行过程:switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcaseswitch语句(开关分支语句):E1,E2,…En是常量表达式,且值必须互不相同语句标号作用,必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个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!例子(1)/*ch4_5.c*/#include<stdio.h>main(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}}例子(2)根据输入字母输出字符串4.4条件运算符
C语言提供了一个简单的条件赋值语句或条件表达式。问题:当判断条件不论是“真”是“假”,均给同一变量赋值时。简化条件语句运算符书写方式:?:属三目运算符。功能:
先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。一般形式:表达式1?表达式2:表达式3
max=a>b?a:b;当a>b.maxa.否则maxb注意:1.
条件运算符优先于赋值运算符.
例:max=(a>b?a:b)可去掉()
2.
条件运算符低于关系运算符和算术运算符。
3.
条件运算符结合性为从右至左。例:max=a>b?a:b+1
max=a>b?a:(b+1)并不是
max=(a>b?a:b)+1如:a>b?a:c>d?c:d
相当于a>b?a:(c>d?c:d)4.
条件表达式不能取代一般的if语句,只有当if的两个分支为给同一变量赋值时才可替代if.if(a>b)
printf("%d",a);else
printf("%d",b);可写成:printf("%d",a>b?a:b);如:5.
表达式1、表达式2、表达式3的类型可以不同。
#include<stdio.h>
main()
{charch;
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
printf("%c",ch);
}例4
输入一个字符,判别它是否大写字母,如果是,
将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。运行结果如下:
A
a概述C语言可实现循环的语句:用goto和if构成循环while语句do~while语句for语句goto语句及用goto构成循环goto语句一般格式:
goto语句标号;
….…..标号:语句;4.5
循环型程序设计功能:无条件转移语句说明:不能用整数作标号只能出现在goto所在函数内,且唯一只能加在可执行语句前面限制使用goto语句4.5
循环型程序设计(1)/*ch5_1.c*/#include<stdio.h>main(){inti,sum=0;i=1;loop:if(i<=100){sum+=i; i++; gotoloop;}printf("%d",sum);}sum=0+1sum==1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050循环初值循环终值循环变量增值循环条件循环体例用if和goto语句构成循环一般形式:while(表达式)
循环体语句;执行流程:expr循环体假(0)真(非0)whilewhile语句形式和执行流程特点:先判断表达式,后执行循环体说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)
循环体;While语句特点和说明用while循环求/*ch5_2.c*/#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体例子/*ch5_21.c*/#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100例显示1~10的平方一般形式:do
循环体语句;
while(表达式);执行流程:do循环体expr假(0)真(非0)whiledo~while语句特点:先执行循环体,后判断表达式说明:至少执行一次循环体do~while可转化成while结构expr循环体假(0)真(非0)循环体While循环do~while语句特点和说明一般形式: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=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++));}例:#include<stdio.h>main(){inti=0;
for(;i<10;putchar(‘a’+i),i++);}例子三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}内循环外循环内循环嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环向上跳转循环的嵌套
i<10printf假(0)真(非0)i=1j++j=1j<10真(非0)假(0)i++for(i=1;i<10;i++)
for(j=1;j<10;j++)
printf((j==9)?"%4d\n":"%4d",i*j);外循环内循环循环的嵌套(图解)
4.5
辅助控制语句break语句功能:在循环语句和switch语句中,终止并跳出循环体或开关体说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中4.5
辅助控制语句(图解1)expr……break;……假(0)真(非0)whiledo……break;…...expr假(0)真(非0)whileexpr2……break;…...假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;…...const1const2constndefaultcase4.5
辅助控制语句(图解2)功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中expr……continue;……假(0)真(非0)while真(非0)do……continue;…...expr假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3continue语句程序举例例1:
求Fibonacci数例:1,1,2,3,5,8,…前20个数。规律:F1=1,F2=1
Fn=Fn–1+Fn–2(n>2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度艺人经纪合同(全新)3篇
- 2024年节能高效果汁浓缩设备项目投资申请报告代可行性研究报告
- 园地出租合同
- 2024年度二手船舶交易合伙协议2篇
- 关于手机网络营销策划方案
- 《地图测绘》课件
- 2024年沙参行业竞争分析:沙参行业竞争格局复杂
- 2024年度特许经营合同特许经营标的及经营区域具体规定3篇
- 2024年度区块链技术研发合同数字货币研发与交易平台3篇
- 二零二四年度农业产品订购合同标的及订购数量3篇
- 批判与创意思考学习通超星期末考试答案章节答案2024年
- 高中语文《荷塘月色》教学课件-新人教版必修2
- 《第八课 摆脱依赖的襁褓》教学设计
- 2024-2030年中国蓝宝石材料市场经营形势与应用趋势预测研究报告
- 2024年秋一年级上册第七单元 口语交际 用多大的声音 课件
- 2024至2030年中国洗浴服务行业市场竞争态势及发展战略研究预测报告
- 三菱FX3u-PLC应用实例教程全套课件配套课件完整版电子教案
- 辽宁省大连市2023-2024学年高二上学期1月期末考试化学试题(解析版)
- 2024届语文复习高考作文主题性素材(人物篇)
- 2024年英语专业八级汉译英试题真题
- 2024年全国研究生考试数学试卷及参考答案(三)
评论
0/150
提交评论