版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1、2章回顾C程序结构:C程序由main函数和若干个其他子函数(标准函数和自定义函数等)构成。函数包括函数头和函数体,C程序语句以分号作为结束标志。语法单位(单词):关键字、标识符、分隔符、常量、变量、运算符。数据类型的规定以及表达式运算规则。输入输出函数getchar,putchar,scanf,printf的使用。第1、2章回顾C程序结构:C程序由main函数和若干个其他第3章程序和流程控制3.1C语言程序的版式及语句3.2结构化程序设计和流程控制3.3if语句3.4switch多分支选择语句3.5循环控制3.6辅助控制语句3.7典型程序编写方法举例3.8小结C语言流程控制语句第3章程序和流程控制3.1C语言程序的版式及语句C语言3.1C语言程序的版式及语句3.1.1C语言程序的版式3.1.2C语言的语句3.1C语言程序的版式及语句3.1.1C语言程序的版例3.1/*求二整数之和的程序*/#include<stdio.h>//预处理voidmain()//函数定义{inta,b;//变量说明intsum;scanf("%d%d",&a,&b);//数据输入
sum=a+b;//执行部分
printf("sum=%d",sum);//信息输出}该程序的运行结果为:78//输入sum=153.1.1C语言程序的版式特征程序设计主要任务输入处理输出例3.1/*求二整数之和的程序*/3.1.1C语编写C语言程序一般应包含如下几个部分(1)注释部分:格式为"/*注释内容*/"或"//注释内容";在函数的最上端,一般都应有一段注释信息,主要说明函数的功能,输入、输出及其限制;如是商品软件还应包含版权信息,在程序的其他部分也可加注释。编程者要养成一边编程序、一边加注释的习惯。一般长段的注释用"/*注释内容*/形式,短段的注释用"//注释内容"形式。(2)预处理块、全局变量说明等。(参见后面章节)(3)函数定义部分,包括函数类型,函数名及参数表,由于只有一个函数故取名main(),由于无返回值故类型为void,无参数输入时,main()内参数表为空。(4)变量说明部分,对所用的变量进行说明;(5)数据输入部分,对要使用的变量赋初值,可直接或间接输入,有些是在第(4)部分完成(即变量直接初始化);(6)执行部分,它是整个程序的核心,一般是对程序算法用结构化程序设计方法进行描述,然后将其转化成对应的C语言语句;(7)信息输出部分,根据要求输出所求的信息或返回结果;有些是在第(6)部分一边执行一边输出。编写C语言程序一般应包含如下几个部分如上述程序的执行部分采用函数调用则上述程序应为例3.2/*求二整数之和的程序*/#include<stdio.h>//预处理intadd(intx,inty);//函数声明voidmain()//函数定义{inta,b;//变量说明intsum;scanf("%d%d",&a,&b);//数据输入
sum=add(a,b);//执行部分
printf("sum=%d",sum);//信息输出}/*求和函数,输入参数为二整数,返回值为其和*/intadd(intx,inty)//函数定义{intz;//变量说明z=x+y;//执行部分returnz;//返回结果}输入:78该程序的运行结果为:sum=15如上述程序的执行部分采用函数调用则上述程序应为/*求和函数,语句是C语言程序的基本元素,语句以分号为结束标志。程序中的各函数模块都是由一定含义的语句组成的。
例:charch=‘H’;/*分号为语句结束标志*/inty=7;
c=a+b;
printf(“hello!”);语句的分类:说明语句
用来对程序中所使用的各种类型变量及属性进行说明,按其所起作用有时也称为定义语句。执行语句包括表达式语句、流程控制语句、函数调用语句等完成一定运算操作功能的语句。3.1.2C语言的语句语句是C语言程序的基本元素,语句以分号为结束标志。程序中的各说明语句
用来对程序中所使用的各种类型变量进行说明,也称为定义语句。
说明语句的格式:<存储类型>数据类型变量名列表;
例:inti,j;//说明了两个整型变量i和j说明语句同时也可以进行初始化赋值,如:charch=‘H’;unsignedlongy=0x35847412;执行语句中所使用的每一个变量都必须在此前说明过。说明语句2.执行语句。一般包含四大类:
表达式语句(包括空语句)复合语句流程控制语句辅助控制语句(1)表达式语句
任何一个表达式加上一个分号就是一条表达式语句;//表达式语句,通常是赋值表达式或函数调用表达式。例:c=a+b;sum=add(a,b);//赋值语句printf(“hello!”);//函数调用语句;//空语句2.执行语句。一般包含四大类:(2)复合语句将若干语句用一对大括号{}括起来就构成了复合语句。复合语句的一般格式为:{说明语句;可执行语句;}复合语句在程序结构上是以整体出现,相当于程序块(BLOCK),当一个功能必须用多条语句才能完成时,就需要使用复合语句。采用{}可以清晰地表达程序的层次结构。(2)复合语句3.2结构化程序设计和流程控制3.2.1
结构化程序设计3.2.2
C语言的流程控制语句和辅助控制语句3.2结构化程序设计和流程控制3.2.1结构化程序设3.2.1结构化程序设计
结构化程序设计的基本思想,任何程序都可以用三种基本结构表示:
顺序结构选择结构循环结构。
采用这三种基本结构编写程序的设计风格称为结构化程序设计。3.2.1结构化程序设计结构化程序设计的基本思想图3.1顺序结构示意图顺序结构:按语句顺序依次执行。//通过语句书写顺序自然实现
inta,b;//变量说明intsum;scanf(“%d%d”,&a,&b);//输入sum=a+b;//执行运算printf(“sum=%d”,sum);//输出
图3.1顺序结构示意图顺序结构:按语句顺序依次执行。选择结构根据条件选择两支或多支程序中的一支执行。
图3.2选择结构示意图由两分支选择结构可以派生出另一种基本结构,多分支选择结构。//if,switch语句,选择运算符实现if(a>=0){printf("comein!");}else{printf("goaway!");}选择结构图3.2选择结构示意图由两分支选择结构可以派生出另一循环结构
在判断条件成立的情况下,反复执行某个程序段。图3.3循环结构示意图//while,dowhile以及//for语句来实现while(i<=100){sum=sum+i;i++;}循环结构图3.3循环结构示意图//while,do3.2.2C语言的流程控制语句
和辅助控制语句3.2.2C语言的流程控制语句
和辅助控制语句3.3条件选择语句:if语句if条件选择语句的三种形式双路分支选择执行语句if…else…单路分支选择执行语句if…多路分支选择执行语句if…elseif…else...3.3条件选择语句:if语句if条件选择语句的三种形式1
if语句的标准形式if…else…双路分支1if语句的标准形式if…else…双路分支
例:if(a==b){mark++;printf(“youareright!");}else{printf(“youarewrong!");}注意:对于某分支包含多行语句时,必须采用{}括起来构成复合语句形式,初学者书写程序时尤其要注意此问题。
例a:if(a==b)
n++;printf("youareright!");
else
mark--;printf("youarewrong!");
易犯错误!①Sample-3-1.c例:注意:对于某分支包含多行语句时,必须采用{}括起来构对于分支只有单行语句则可以不用{}.如:if(a>=90&&a<=100)printf(“GradeA!");elseprintf(“GradeB!");还可以写成:
if(a>=90&&a<=100)printf(“A!");elseprintf(“b!");对于分支只有单行语句则可以不用{}.2if单路分支形式(选择性执行语该分支)scanf(“%f”,&i);if(i<60){
printf(“不及格”);}printf(“%f”,i);2if单路分支形式(选择性执行语该分支)在C语言程序中,还常用如下书写形式:if(x)等价于if(x!=0)if(!x)等价于if(x==0)
如变量x为float或double实型变量,则与0比较的if语句建议如下:if(fabs(x)<=1e-6)在C语言程序中,还常用如下书写形式:图3.7多路分支if语句if(表达式1)语句1;elseif(表达式2)语句2elseif(表达式n)语句nelse语句n+1图3.7多路分支if语句if(表达式1)算法1:
……;
floati;//定义i表示学生成绩,chargrade;//grade表示等级。
scanf(“%f”,&i);//输入学生成绩if(i>=90) grade='A'; elseif(i>=70)grade='B'; elseif(i>=60)grade='C'; elseif(i>=0)grade='D';putchar(grade);//输出该生成绩等级也可用printf(“%c/n”,grade);90~100分A70~90分B60~70分C0~60分D例3.3给某班学生的一次考试成绩分等级.90分以上的为A,70分到90分之间的为B,60分到70分之间的为C,60分以下的得D。②Sample-3-3-1.c算法1:……;90~100分A70~9算法2:
……;
floati;//定义i表示学生成绩,chargrade;//grade表示等级。
scanf(“%f”,&i);//输入学生成绩if(i<60) grade=‘D'; elseif(i<70)grade=‘C'; elseif(i<90)grade=‘B'; elsegrade=‘A';putchar(grade);//输出该生成绩等级也可以用printf(“%c/n”,grade);0~60分D60~70分C70~90分B90~100分A例3.3给某班学生的一次考试成绩分等级.90分以上的为A,70分到90分之间的为B,60分到70分之间的为C,60分以下的得D。算法2:……;0~60分D60~70分例:小灵通服务语音提示内部程序处理流程:话费查询请按1,小灵通充值请按2,挂失请按3。……;
printf(“话费查询请按1,小灵通充值请按2,挂失请按3”);scanf(“%d”,&i);if(i==1) {...//话费查询处理
} elseif(i==2)
{...//小灵通充值处理}elseif(i==3)
{...//挂失处理}else
{...//输入错误提示及处理}
多分支语句的应用:例:小灵通服务语音提示内部程序处理流程:……;多分支语句的应小灵通充值服务内部处理流程
printf(“话费查询请按1,小灵通充值请按2,挂失请按3”);scanf(“%d”,&i);
if(i==2)//小灵通充值处理
{
printf(“为本机充值按1,为其他小灵通充值按2,回到上级指令”);scanf(“%d”,a);
if(a==1){...//为本机充值操作}elseif(a==2){...//为其他小灵通充值操作处理}
else
{...//回到上一级指令}} ...
条件语句嵌套的应用:小灵通充值服务内部处理流程printf(“话费查VC6调试程序方法程序编写时静态测试;直接运行检查结果是否正确;单步调试功能F10;调试程序F5,退出调试状态shift+F5;设置断点(取消断点)F9;调试过程中,通过variable窗口查看变量值VC6调试程序方法程序编写时静态测试;3.3条件选择语句:if语句if条件选择语句的三种形式双路分支选择执行语句if…else…单路分支选择执行语句if…多路分支选择执行语句if…elseif…else...3.3条件选择语句:if语句if条件选择语句的三种形式图3.7多路分支if语句if(表达式1)语句1;elseif(表达式2)语句2elseif(表达式n)语句nelse语句n+1图3.7多路分支if语句if(表达式1)算法1:
……;
floati;//定义i表示学生成绩,chargrade;//grade表示等级。
scanf(“%f”,&i);//输入学生成绩if(i>=90) grade='A'; elseif(i>=70)grade='B'; elseif(i>=60)grade='C'; elseif(i>=0)grade='D';putchar(grade);//输出该生成绩等级也可用printf(“%c/n”,grade);90~100分A70~90分B60~70分C0~60分D例3.3给某班学生的一次考试成绩分等级.90分以上的为A,70分到90分之间的为B,60分到70分之间的为C,60分以下的得D。②Sample-3-3-1.c算法1:……;90~100分A70~9
例3.4求一元二次方程ax2+bx+c=0的根,实系数a,b,c从终端输入。
算法分析:先判断输入的系数是否满足方程是二次方程,判断a是否为0。接着应考虑两个不同实根,相同实根,和复根三种情况讨论:当b2-4ac>0时,有两个不同的实根,其中x1,x2为其两个根;当b2-4ac=0时,有两个相同的实根,其中x1,x2为其两个等根;当b2-4ac<0时,有两个共轭的虚根;我们把虚根的实部x3和虚部x4分成两部份分开计算,后来再组合在一起。例3.4求一元二次方程ax2+bx+c=0的根,实
程序如下:
#include<stdio.h>#include<math.h>voidmain(){floata,b,c;floatx1,x2;floatx3,x4;printf("inputnumbers:a,b,c:");
scanf("%f%f%f",&a,&b,&c);
if(a==0)
{
if(b==0)printf("errorinput\n");
else
printf(“x=%.2f\n",-c/b);//return;
}
elseif(b*b>4*a*c)
{x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);printf("x1=%.2f,x2=%.2f\n",x1,x2);}
elseif(b*b==4*a*c){x1=x2=(-b+sqrt(b*b-4*a*c))/(2*a);printf("x1=x2=%.2f\n",x1);}
else{x3=-b/(2*a);x4=sqrt(4*a*c-b*b)/(2*a);printf("x1=%.2f+%.2fi\n",x3,x4);printf("x2=%.2f-%.2fi\n",x3,x4);}}③Sample-3-4.c程序如下:{③Sample-3-该程序的运行结果(分5种情况)为:(1)014//输入x=-4//输出(2)004//输入theinputiserror//输出(3)143//输入x1=-1.00,x2=-3.00//输出(4)144//输入x1=x2=-2.00//输出(5)124//输入x1=-1+1.73i//输出x2=-1-1.73i该程序的运行结果(分5种情况)为:if多条件分支下的流程控制if语句的不足条件表达式的结果只有真或假两种结果,由一个条件语句只能提供两个分支供选择。多重if语句可以实现多重分支,但程序结构显得繁琐,欠清晰,执行效率也比较低。if多条件分支下的流程控制if语句的不足图3.8switch语句的流程控制3.4switch多分支选择语句switch分支选择语句,它可以结构清晰地直接表达多分支选择,执行效率更高。图3.8switch语句的流程控制3.4switch多switch(表达式){case判断值1:
语句组1;break;case判断值2:
语句组2;break;case判断值n:
语句组n;
default:
语句组n+1;break;}printf(“theend”);使用switch语句注意事项
1.switch()后面圆括号中的表达式要求结果是整数,各个case判断值要求是整形常量;switch语句比较表达式的值与某个case后常量值相等,则从该case后面的第一个语句开始依次执行2.各个case和及其下面的语句组的顺序是任意的,但各个case后面的判断值必须是不同值,default后无判断值,其功能相当与if语句中的else。
switch语句形式switch(表达式)使用switch语句注意事项switcswitch(表达式){case判断值1:
语句组1;break;case判断值2:语句组2;break;……
case判断值n-1:case判断值n:语句组n;default:
语句组n+1;break;}printf(“theend”);switch语句使用注意事项3.break语句起着退出switch-case结构的作用,若无此语句,程序将顺序执行下一个case语句组。当表达式的结果值与所有的case的判断值都不一致时,程序才执行default部分的语句组。default部分不是必须的。5.对于表达式的多个结果值执行相同语句组时,程序的形式是多个case重叠。switch语句形式switch(表达式)switch语句使用注意事项switc#include<stdio.h>voidmain(){floata,b,c;intn;printf(“请输入两数据:”);scanf(“%f%f”,&a,&b);printf(“请选择运算种类:1加法;2减法;3乘法;4除法”);scanf(“%d”,&n);switch(n){case1:c=a+b;break;
case2:c=a-b;break;
case3:c=a*b;break;case4:if(b!=0)c=a/b;elseprintf(“dataerror”);break;default:printf(“选择无效”);}
printf(“结果为:%.2f”,c);}例3.5.0编程实现:用户输入两个数据,选择执行某种四则运算,输出结果。④Sample3-5-0.c#include<stdio.h>case2:#defineESC0x11b;#defineF10x3b00//F1键的键值为0x3b00#defineF20x3c00#defineF30x3d00#defineF40x3e00#defineF50x3f00#defineF60x4000#include<stdio.h>#include<bios.h>voidmain(){unsignedintkey_value;key_value=bioskey(0);switch(key_value){caseF1:F1功能处理程序;break;
caseF2:F2功能处理程序;break;
caseF3:caseF4:F3,F4相同功能处理程序;break;caseF5:F5功能处理程序;break;caseF6:F6功能处理程序;break;……default:默认处理程序;break;}}例3.5编一示意性的菜单处理程序,按下一功能键,执行响应的功能处理。caseF2:F2功能处理程序;例3.5例3.6分段函数计算,输入变量数值x,计算结果。注意:面对问题,应按计算机程序设计的方式来思考对问题的描述和解决方案:考虑变量的定义(几个变量,数据类型),流程控制语句的选用,再编程实现.例3.6分段函数计算,输入变量数值x,计算结果。注意:#include<stdio.h>voidmain(){floatx,y;printf("inputthenumberx=");scanf("%f",&x);
if(x>=0&&x<2)y=x+1;elseif(x>=2&&x<4)y=2*x+2;elseif(x>=4&&x<6)y=3*x+3;
elseif(x>=6&&x<8)
y=4*x+4;
elseprintf("errorininputdata\n");printf("y=%.2f",y);}该程序的运行结果为:1.00//输入2.00//输出分析:利用多分支的if语句形式来编写:#include<stdio.h>elseif(#include<stdio.h>voidmain(){floatx,y;printf("inputthenumberx=");scanf("%f",&x);switch((int)x){
case0:case1: y=x+1;
break;
case2:case3: y=2*x+2;
break;
case4:case5: y=3*x+3;
break;
case6:case7: y=4*x+4;
break;
default: printf("errorinputdata\n");}printf("y=%.2f",y);}Sample3-6-2.cpp利用switch语句同样可以实现上述功能://输入学生成绩,判别所属等级Sample-3-3-2.c#include<stdio.h>case4:利用#include<stdio.h>voidmain(){floatx,y;printf("inputthenumberx=");scanf("%f",&x);switch((int)x/2){
case0: y=x+1;
break;
case1: y=2*x+2;
break;
case2: y=3*x+3;
break;
case3: y=4*x+4;
break;
default: printf("errorinputdata\n"); break;}printf("y=%.2f",y);}更精巧的程序:#include<stdio.h>case2:更精3.5循环语句3.5.1while语句3.5.2for语句3.5.3do-while语句3.5.4循环语句的嵌套(多重循环)循环控制结构是在条件成立时,反复执行循环体内的程序段.C语言中三种循环流程控制语句:3.5循环语句3.5.1while语句循环控制结构是3.5.1while语句while循环语句是首先判断循环执行条件,当其成立(非0值)时,则反复执行循环体内的程序段.图3.9while语句的流程及语句形式3.5.1while语句while循环语句是首先判断循环while循环的表达式是循环进行的条件。当条件表达式值为真(非零)时,执行循环体,为假(等于0)则循环结束;while(x)等价于while(x!=0);while(!x)等价于while(x==0);条件表达式中一般包括一个能够改变表达式的变量,这个变量称为循环变量。对于循环变量的初始化应在while()语句之前进行。3.当循环体不需要实现任何功能时,可用空语句作为循环体。while((ch=getchar())!=’A’);4.循环语句应有出口。(通过循环语句的条件判断或循环体中break语句退出循环)。6.while语句中条件表达式与if语句中条件表达式都可以为各种表达式。inti,sum;sum=0;i=1;while(i<=100){sum=sum+i;i++;}While语句使用注意事项while循环的表达式是循环进行的条件。当条件表达式值为真(例3.7用while循环语句编写一求和程序#include<stdio.h>voidmain(){inti,sum;sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("sum=%d\n",sum);}该程序的运行结果为:sum=5050要求1..n之和?奇数之和?十位数为3的数之和?并输出这些数?⑤Sample-3-7例3.7用while循环语句编写一求和程序要求1..n之和3.5.3do-while语句图3.11do-while语句的流程与语句形式先执行一次循环体再判断是否循环下一次!3.5.3do-while语句图3.11do-whi例:inti=0;do{printf("%3d",i++);}while(i<5);输出:01234while语句:inti=0;while(i<5);{printf("%3d",i++);}输出:01234当inti=6;while语句do..while语句分别输出:?例:inti=0;while语句:当inti=6;(1)do-while循环类似于while循环,区别在于循环条件判断位置不同。do-while是在执行一次循环体结束时判断是否继续循环。(2)能用while循环和for循环描述的程序大多数情况下都能用do-while循环描述,比如上节中的例子也可用do-while来编写。(3)能用do-while循环描述的程序一定能用while和for循环描述。do-while语句与while的比较(1)do-while循环类似于while循环,区别在于循环例3.9利用do-while循环编写求和程序#include<stdio.h>voidmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("sum=%d\n",sum);}该程序的运行结果为:sum=5050例3.9利用do-while循环编写求和程序3.5.2for语句图3.10for语句的流程和语句形式使用说明:for(i=0;i<100;i+=5){printf("%d\n",i);}等价于:i=0;for(;i<100;){printf("%d\n",i);i+=5;}3.5.2for语句图3.10for语句的流程和语句for循环通常用于描述循环范围比较明确。循环变量变化满足“初值、终值、步长”型变化规律.如:for(i=0;i<100;i+=5)printf("%d\n",i);for循环中表达式1和表达式3还可包含逗号运算表达式。如:for(a=0,b=10;a<100;a+=b)printf("%d\n",a);for循环通常用于描述循环范围比较明确。循环变量变化满足“for(表达式1;表达式2;表达式3)语句注意事项:表达式1,表达式2和表达式3可以全部或部分省掉,但是分号不能省,当省略表达式2时相当于永真条件(条件永远成立),即for(;;)等同于for(;1;),此种情况下,只有通过循环体中使用break或return语句来控制循环的结束。当for语句省略了表达式1和3时,等效于while(表达式2)循环.(2)循环体也可以为空语句,起延迟一段时间的作用;如:for(inti=0;i<10000;i++);或for(inti=0;i<10000;i++){}(3)在for循环体内一般不要操作循环变量,以防for循环失控。(4)注意for语句循环量取值区间以及条件表达式2的终止循环条件。⑤Sample-3-7for(表达式1;表达式2;表达式3)语句注意事项:如下2种写法功能是相同的,都是循环N次,。for(x=0,a=0;x<N;x++){a+=x;}for(x=0,a=0;x<=N-1;x++){a+=x;}示例(a)循环变量属于半开半闭区间
示例(b)循环变量属于闭区间for(x=1,a=0;x<=N;x++){a+=x;}循环语句编程注意:条件表达式的初始状态和终止条件,在编写程序时应仔细推敲,验算程序执行到此处时各有关参数取值情况.如下2种写法功能是相同的,都是循环N次,。for(x=0,例3.8我们还是用上一节的例子,利用for循环语句编写程序求1到100的和;#include<stdio.h>voidmain(){inti;intsum;
for(i=1,sum=0;i<=100;i++){sum+=i;}printf("sum=%d\n",sum);}i=1,sum=0;for(;i<=100;){sum+=i;i++;}i=1,sum=0;while(i<=100){sum+=i;i++;}⑤Sample-3-7.cpp修改得例3.8我们还是用上一节的例子,利用for循环语句编写程循环体部分又包含循环结构时,就形成了多重循环.例如while循环语句如下:
while(条件表达式){循环体部分;}多重循环:while(条件表达式1){……
while(条件表达式2){循环体部分2;}}3.5.4循环语句的嵌套-多重循环循环体部分又包含循环结构时,就形成了多重循环.3.5.4循环语句组合形成二重循环的几种形式:(1)while(…)(2)while(){{……while(…)for(…;…;…){{……}}……}}
(3)for(…;…;…)(4)for(…;…;…){{……for(…;…;…)while(…){{……}}……}}循环语句组合形成二重循环的几种形式:编写多重循环时应注意以下问题:(1)对于多重循环,特别要注意循环有关的变量赋初值的位置:只需执行一次的赋初值操作应放在最外层循环开始执行之前。(2)内外循环变量不应该同名,否则将造成循环控制混乱,导致死循环或计算结果错误。(3)正确地区分内外循环体,在内循环执行的所有语句必须用{}括起来组成复合语句作为内层循环体;属于外循环的语句应放在内层循环体之外,外循环之中。(4)不应该在循环中执行的操作应放在最外层循环进入之前或最外层循环结束后。
编写多重循环时应注意以下问题:例:输出下列由*组成的图案***********************************************************************************************⑥Sample3-10-0例:输出下列由*组成的图案**************例3.10编程显示输出如下所示的三角形的程序 ************************************算法分析:输出6行’*’,循环i=1~6逐行输出字符个数2*i-1字符前空格数6-i例3.10编程显示输出如下所示的三角形的程序 算法分析:#include<stdio.h>voidmain(){
inti,j;for(i=0;i<6;i++)//共输出n行*字符{printf(“\n”);//回车换行for(j=0;j<5-i;j++)//每行先输出n-i个空格{printf("");}for(j=0;j<2*i+1;j++)//输出2i+1个字符*{printf("*");}}}⑦Sample3-10#include<stdio.h>⑦Sample3-10例3.11打印九九乘法表page77
⑧Sample3-11例3.11打印九九乘法表page77
⑧Sample3-3.6辅助控制语句3.6.1break语句3.6.2continue语句goto语句和标号return语句3.6辅助控制语句3.6.1break语句3.6.1break语句break语句用于循环语句和switch语句。可使流程跳出switch结构或循环体,执行后面的语句。break语句只能跳出一层循环。break语句不能用于循环体语句和switch语句之外的任何其它语句。for(inti=1;i<=5;i++){
sum2=0
for(intj=i;j<i+100;j++)
{sum2+=j;if(sum2>32767)
break;
}sum1+=sum2;if(sum2>32767||sum1>32767)
break;}3.6.1break语句break语句用于循环语句和sw3.6.2continue语句结束本次循环,即跳过循环体后续的语句,进行下一次的循环判定。continue语句和break语句的区别是:continue语句只结束本次循环体后续语句的执行,而不是跳出循环。break语句则是结束整个循环语句,执行程序中后续语句。for(inti=1;i<=5;i++){sum2++;sum1+=sum2;
if(sum2>32767)break;}printf(“End”);for(inti=1;i<=5;i++){sum2++;sum1+=sum2;
if(sum2>32767)
{sum2=0;continue;}}printf(“End”);3.6.2continue语句结束本次循环,即跳过循环体例3.13把0-100之间能被5整除的数输出。
voidmain(){intn;for(n=0;n<=100;n++)//n从数字0到100逐个进行测试{
if(n%5!=0)
//是否能整除
continue;
//不能整除则执行下一次循环
printf("%d\t",n);}printf(“\ntheend");}if(n%5==0)printf("%d\t",n);⑨Sample3-13例3.13把0-100之间能被5整除的数输出。if(n%5
例3.14.输入一个圆的半径,输出圆的面积。要求:(1).允许反复的输入半径,计算并显示圆的面积,直到输入的半径是0时为止;(2).对输入的半径进行检查,若发现是负数将提示操作者重新输入。例3.14.输入一个圆的半径,输出圆的面积。#include<stdio.h>#include<math.h>#definePI3.1415926voidmain(){
doubler,area;
while(1){
printf("inputtheradius:"); scanf("%lf",&r); if(fabs(r)<1e-5) break; elseif(r<0) {printf("theinputiserror\n"); continue; }
area=PI*r*r; printf("theareais:%lf\n",area);}}该程序的运行结果为:inputtheradius:-1//输入theinputiserrorinputtheradius:13.1415926inputtheradius:0//退出整个do-while循环。Sample3-14.cpp#include<stdio.h>areagoto语句和标号page81
程序中使用goto语句时要求和标号配合,一般形式:goto标号;…………标号:语句;goto语句的功能是,把程序控制转移到标号指定的语句处。既执行goto语句之后,程序从指定标号处的语句继续执行。注意:goto语句常用的用法是用它退出多重循环。用goto语句设计程序存在的问题:1.破坏结构化设计风格。2.goto语句经常带来错误或隐患。所以不提倡使用goto语句goto语句和标号page81程序中使用got3.7典型问题程序设计举例程序设计宗旨:结构化程序设计是通过三种流程控制语句的组合来解决将各种问题.算法设计灵活多样,要熟练掌握和应用C语言规则。具体编程思路:分析问题中涉及的数据信息,设计数据输入接口定义所需变量;再设计数据处理程序流程,选择合适的语句书写程序;最后输出处理结果.定义变量时注意数据类型取值范围,运算处理过程也要注意数据类型的自动转换等规则,算法设计要灵活运用三种流程结构的组合、嵌套。3.7典型问题程序设计举例程序设计宗旨:结构化程序设计是[一]典型问题1-(求数列和)例3.151,3,5,7,9..前二十项之和。算法分析:循环求和运算规律:第1项已知,第i+1项=第i项+2循环条件:前20项,适合用for语句实现.#include<stdio.h>voidmain(){inti,sum,t;//sum代表和,t代表某项sum=0;t=1;
for(i=1;i<=20;i++){sum+=t;//累加t+=2;//求下一项}printf("sum=%d",sum);}该程序的运行结果为:sum=400Sample3-15[一]典型问题1-(求数列和)for(i
例3.16求序列:1!,2!,3!,4!………..的前八项之和.算法分析:
循环求和运算数列项变化规律:第i+1项=第i项*(i+1);循环条件:适合采用for语句,8项例3.16求序列:#include<stdio.h>voidmain(){
inti;longsum,t;//sum代表和,t代表某项,注意数据类型sum=0;t=1;for(i=1;i<=8;i++){sum+=t;//求和t*=(i+1);//求下一项t=(i+1)!}printf("sum=%ld",sum);}该程序的运行结果为:sum=46233Sample3-16.c#include<stdio.h>Sample3-16.c用for语句双重循环实现:inti;longsum,t;//sum代表和,t为某项阶乘sum=0;for(i=1;i<=8;i++){t=1;for(intj=1;j<=i;j++)t*=j;sum+=t;}
程序和流程控制编程及应用教材课件
例3.17求序列:……,所有>=1e-6的数据项之和。算法分析:数列求和数列项变化规律:
第i项分子:ai=ai-1+2;分母:bi=bi-1*2;循环条件:数据项>=1e-6,适合采用while语句例3.17求序列:#include<stdio.h>voidmain(){inti;floatsum=0,a,b; //sum代表和,a为分子,b为分母a=1,b=2; //分子、分母赋初值while(a/b>=1e-6){ sum=sum+a/b;//累加一项 a=a+2; //求下一项的分子 b=b*2; //求下一项的分母}
printf("sum=%f",sum);}该程序的运行结果为:sum=2.999999(浮点数的舍入误差造成的现象)#include<stdio.h>
例3.18计算
并使最后一项的绝对值小于1e-6为止。分析:本数列的项变化包括分子、分母以及符号。算法分析:循环求和数列项变化规律:第i项分子:ai=x2i-1=ai-1*x*x;分母:bi=(2i+1)!=bi-1*2i*(2i+1);符号:s=s*(-1);循环条件:数据项>=1e-6,可采用for语句也可采用while语句例3.18计算用for语句相应程序如下:#include<stdio.h>#include<math.h>voidmain(){inti;//sum代表和,a为分子,b为分母floatx,sum,a,b;chars;//s代表符号printf("pleaseinputx:");scanf("%f",&x);s=1;sum=0;a=x; //分子赋初值b=1; //分母赋初值for(i=1;a/b>=1e-6;i++){
sum=sum+s*a/ba=a*x*x; b=b*2*i*(2*i+1);s*=-1;//改变符号位}printf("sum=%f\n",sum);}该程序的运行结果为:pleaseinputx:2sum=0.9092974用for语句相应程序如下:for(i=1;a用while语句相应程序如下:#include<stdio.h>#include<math.h>voidmain(){inti;//sum代表和,a为分子,b为分母floatx,sum,a,b;chars;//s代表符号printf("pleaseinputx:");scanf("%f",&x);s=1;sum=0;a=x; //分子赋初值b=1; //分母赋初值
i=1;//数列项数while(a/b>=1e-6){ sum=sum+s*a/ba=a*x*x; b=b*2*i*(2*i+1);s*=-1;i++;}printf("sum=%f\n",sum);}该程序的运行结果为:pleaseinputx:2sum=0.9092974用while语句相应程序如下:while(a/b二典型问题二(试数法)给定了数据区间,求符合条件的数,可以采用逐个数据进行测试是否符合条件,称为试数法。例3.19求100-999之间所有水仙花数。算法分析:从100到999之间循环判断是否符合水仙花数条件#include<stdio.h>voidmain(){inti,a,b,c;for(i=100;i<=999;i++){a=i/100;//求百位数b=(i-a*100)/10;//求十位数c=i%10;//求个位数
if(a*a*a+b*b*b+c*c*c==i){printf("%6d",i);}}}该程序的运行结果为:153370371407二典型问题二(试数法)if(a*a*
例3.20加法算式abc+cba1333a,b,c为一位数,试编程求所有可能a,b,c的值算法分析:算法1:可将abc整体代表的数i作为目标来求符合条件的解;则i的取值范围为100~999,(根据特征可定更小范围300~999);算法2:将a,b,c作为运算目标来求符合条件的各值,取值范围为0~9,根据算式特征可确定更小范围a(3~9),b(1~6),c3~9)例3.20加法算式算法1:整数i=abc作为关键运算对象voidmain(){
inti;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年建筑安装工程项目合同
- 力课件教学课件
- 2024年广告代理合作协议
- 2024年工程咨询与技术服务合作协议
- 2024年度公司用车管理协议
- 2024年度建筑工程设计、施工购销合同
- 2024年度35kv高压线路施工合同
- 2024年度某影视公司与某投资公司关于某电影项目融资的合同
- 公司年会的演讲稿模板八篇
- 为世界无车日活动宣传标语(155句)
- 疼痛科整体规划和发展方案
- 2024年中国南水北调集团水网水务投资限公司及下属单位社会招聘高频难、易错点500题模拟试题附带答案详解
- (新版)食品生产企业食品安全员理论考试题库500题(含答案)
- 七年级语文上册第13课《纪念白求恩》公开课一等奖创新教案
- 统编版语文六年级上册第八单元大单元整体教学设计
- 教师个人业务学习笔记(41篇)
- 2025年高考语文复习备考复习策略讲座
- 数学史上的三次数学危机
- 2024年水电暖安装承包合同
- 缺乳(乳汁淤积)产妇的中医护理
- 2024北师大版新教材初中数学七年级上册内容解读课件(深度)
评论
0/150
提交评论