第四章程序基本结构.docx
- 文档编号:12746941
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:14
- 大小:38.23KB
第四章程序基本结构.docx
《第四章程序基本结构.docx》由会员分享,可在线阅读,更多相关《第四章程序基本结构.docx(14页珍藏版)》请在冰点文库上搜索。
第四章程序基本结构
第四章程序基本结构
中央电大工学院崔林
4.6循环结构的程序设计
循环结构又称作重复结构。
重复是计算机解题的一个重要特征,计算机运算速度快,最善于进行重复型的工作。
在程序设计时,许多问题的求解也都归结为重复执行某一动作或计算。
例如输入全班学生的成绩;求若干数之和;迭代求根等。
因此循环结构在程序设计中十分重要。
有两种循环结构:
“当”型和“直到”型。
C语言中提供3种语句:
while,do-while,for语句来实现循环结构。
4.6.1while语句
while语句用于实现“当”型循环结构。
1、一般形式:
while(表达式)
循环语句;
其中:
表达式为控制循环是否继续执行的条件,循环语句为需要重复执行的部分,称为循环体。
2、执行过程:
先计算表达式的值,若表达式的值为真(非0)时,则执行循环体,并不断重复直到表达式的值为假(0)时,停止执行循环体,转向循环体外的第一条语句。
执行过程如图所示。
while语句执行过程
while语句特点:
先判断,后执行。
例4-41:
用while语句求:
1+2+3+……+100的值。
main()
{inti,sum;/*i为循环变量,sum为累加和变量*/
i=1;sum=0;/*循环变量i赋初值1*/
while(i<=100)/*i的终值为100*/
{sum+=i;
i++;/*i加1*/
}
printf(“1+2+3+…+100=%d\n”,sum);
}
运行结果为:
1+2+3+…+100=5050
循环程序的几个要点:
(1)定义循环变量。
(2)确定循环变量的初值、终值、增量(步长)。
(3)每执行一次循环体,循环控制变量要按增量变化一次,使循环变量的值趋向终值,即循环为有限次数循环。
如上例中,变量i为循环控制变量,i的初值为1,步长为1,循环结束的条件为i>100,循环次数为100次。
4.6.2do—while语句
do-while语句用来实现“直到”型循环结构。
1.一般形式:
do
循环语句;
while(表达式);
其中表达式、循环语句含义同while语句。
2、执行过程:
先执行循环语句一次,再判别表达式的值,若表达式的值为真,则继续循环,否则终止循环。
执行过程如图所示。
do-while语句执行过程
其特点:
先执行,后判断。
例4-42:
用do-while语句求:
n!
=1*2*3*…*(n-1)*n。
main()
{inti,n;longs;/*i为循环变量,s为累乘变量*/
s=1;i=1;/*循环变量i赋初值1*/
scanf(“%d”,&n);
do
{s*=i;
i++;/*i加1*/
}
while(i<=n);/*i的终值为n*/
printf(“%d!
=%ld\n”,n,s);
}
4.6.3for语句
for语句几乎是所有高级语言都提供的循环控制结构。
但C语言中的for语句使用最为灵活,它不仅可以用于循环次数确定的情况,而且可以用于循环次数不能确定而只能给出循环条件的情况,因而完全可以代替while语句和do-while语句。
1、一般形式:
for(表达式1;表达式2;表达式3)
循环语句
其中:
(1)表达式1一般为赋值表达式,用于在进入循环之前给循环变量赋初值。
(2)表达式2一般为关系表达式或逻辑表达式,用于执行循环条件的判定,它与while、do-while循环中的表达式作用完全相同。
(3)表达式3一般为赋值表达式或自增、自减表达式,用于修改循环变量的值。
2、执行过程:
(1)、先计算表达式1的值;
(2)、再计算表达式2的值,若其值为真(非0),则执行循环语句(即循环体)一次,然后执行第3步。
若其值为假(0),则结束循环,转到第5步。
(3)、计算表达式3的值(一般为对循环变量进行改变)。
(4)、转回第2步继续执行。
(5)、执行for语句下面的语句。
for语句的执行流程如图所示。
for语句的执行流程图
例4-43:
用for语句求:
1+2+3+……+100的值。
main()
{inti,sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf(“sum=%d\n”,sum);
}
说明:
for循环的三个表达式可以省略一个,省略两个,甚至省略三个,但分号间隔不能少。
如上例中程序段:
sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
可以有以下几种等价表达方式:
表达方式1(省略表达式1):
i=1;sum=0;
for(;i<=100;i++)
sum=sum+i;
表达方式2(省略表达式3):
sum=0;
for(i=1;i<=100;)
{sum=sum+i;i++;
}
表达方式3(省略表达式1和表达式3):
i=1;sbum=0;
for(;i<=100;)
{sum=sum+i;i++;
}
当然,这里所谓的“省略”,只是在for语句中省略。
实际上是把所需表达式挪到for的循环体中或for的语句前去了。
4.6.4break语句与continue语句
在循环过程中,有时候不一定要执行完所有的循环后才终止,每次循环也不一定要执行完循环体中所有语句,可能在一定的条件下跳出循环或进入下一轮循环。
为了方便对程序流程的控制,除了前面介绍的控制结构外,C语言还提供了2种转移控制语句:
break和continue语句。
1、break语句
一般形式:
break;
作用:
(1)终止它所在的switch语句。
(2)跳出循环结构,结束整个循环。
2、continue语句
一般形式:
continue;
作用:
用于循环体内结束本次循环,接着进行下一次循环的判定。
例4-44:
求其平方数小于1000的所有整数。
main()
{inti,j;
for(i=1;;i++)/*省略表达式2*/
{j=i*i;
if(j>=1000)
break;
printf(“%d\n”,j);
}
printf(“end”);
}
例4-45:
求1—200之间不能被3整除的数。
main()
{inti;
for(i=1;i<=200;i++)
{if(i%3==0)
continue;
printf(“%d\n”,i);
}
}
4.6.5循环的嵌套
1、循环嵌套
所谓循环嵌套是指一个循环体内又包含另一个完整的循环语句。
形如:
for(i=1;i<=10;i++)
{……
for(j=1;j<=10;j++)
{……
for(k=1;k<=10;k++)
{
循环语句
}
……
}
……
}
这是一个嵌套层次为3层的循环,最外层是由循环控制变量i控制的循环,中间层次是由循环控制变量j控制的循环,最内层是由循环控制变量k控制的循环。
注意:
(1)循环嵌套可以形成多重循环;
(2)内外循环的循环变量不应相同;
(3)内外循环不应交叉;
(4)只能从循环体内转移到循环体外,反之不行。
例4-47:
利用双层循环打印9×9乘法表
main()
{inti,j;
for(i=1;i<10;i++)
{for(j=1;j<=9;j++)
printf("%5d",i*j);
printf("\n");
}
}
运行结果:
123456789
24681012141618
……
91827364554637281
几种循环的比较
1、三种循环可相互替代处理同一问题。
2、do-while循环至少执行一次循环体,而while及for循环的循环体有可能一次都布执行。
3、while及do-while循环多用于循环次数不可预知的情况,而for循环多用于循环次数可以预知的情况。
4.7函数
C语言程序是由函数组成的。
函数是C语言的基本模块,相当于其他高级语言的子程序。
用C语言设计程序任务只有一项,就是编写函数,至少也要编写一个main函数。
C程序的执行都是从main函数开始,也在main函数中结束整个程序的运行。
其它函数只有在执行main函数的过程中被调用才能被执行。
4.7.1函数的概念及定义
一、函数的概念
1、函数
可以被其它程序调用的具有特定功能的一段相对独立的程序(模块),在C语言中称为函数。
引入函数的目的主要是解决两个问题:
一是为了解决代码的重复。
如果一个程序段需要在程序中出现多次,每次都写出来既麻烦又使得程序变长,此时可把该程序段定义成一个函数。
在需用该程序段的地方直接调用。
二是结构化模块化编程的需要。
如今编制一个大程序通常不是一个人能够胜任的,需要许多人共同完成。
为了便于协作,常把任务分成很多模块,一个程序员编制其中一个或多个模块。
项目联调时,调用该函数就完成了该模块的功能。
2、函数说明
(1)一个C源程序文件由一个或多个函数组成。
(2)一个C程序中必须且只能有一个main函数。
(3)C程序的执行从main函数开始,无论其在程序中的位置如何。
main函数可以调用其它函数,调用后程序执行流程最终回到main函数,在main函数中结束整个程序的运行。
其它函数不能调用主函数,
(4)所有函数在定义时是互相独立的,不能嵌套定义(但可以嵌套调用)。
二、函数定义
从函数的形式看,函数可以分为两类:
无参函数和有参函数。
1、无参函数的定义
一般形式:
类型标识符函数名()
{说明部分
执行部分
}
其中:
(1)类型标识符和函数名称为函数头。
类型标识符指明本函数的类型,也就是函数返回值的类型。
函数名是由用户定义的标识符。
(2){}中的内容称为函数体,是函数的核心。
函数体包括两部分,说明部分和执行部分。
说明部分用来定义函数内部所用变量,执行部分是函数功能的实现,通常由一系列的语句组成。
(3)若不要求函数有返回值,则函数类型可以写为void。
例4-48:
定义一个函数打印若干“*”号。
voidprint()/*函数头*/
{
printf(“************\n”);
}
2、有参函数的定义
一般形式:
类型标识符函数名(形式参数说明列表)
{说明部分
执行部分
}
其中,类型标识符、函数名、说明部分、执行部分的含义同无参函数的定义,另外:
(1)形式参数说明列表逐一列出形式参数的类型和名称,中间用逗号分开。
例如:
intx,floaty形式参数的类型决定函数可以接受的数据类型。
形式参数实际上是一种替身,代替实际参数在函数中的位置。
它有点像代数中的变量x,y。
(2)函数的返回就是函数执行结束,返回到调用它的函数。
函数返回可以有值带出,也可以没有。
如要想让函数返回一个确定的值,必须使用语句
return(表达式);
其中,表达式就是函数要返回的值。
如果不希望有返回值,则可不要return语句,且在定义函数时把“类型标识符”说明成void。
例4-50:
定义一个函数求两整型参数之和,并返回和值。
intsum(intx,inty)/*定义函数返回值的类型、函数名和形式参数*/
{intz;/*说明部分,说明函数体内用到的变量*/
z=x+y;/*以下是函数体的执行部分*/
return(z);/*通过return返回x,y的和值z*/
}
例4-51:
定义一个函数,求3个实形参中的最大值,并返回该值。
floatmax(floatx1,floatx2,floatx3)/*说明函数头*/
{floatm;/*说明部分,说明函数体内用到的变量*/
if(x1>x2)/*以下是函数体的执行部分*/
m=x1;
else
m=x2;
if(m m=x3; return(m);/*通过return返回x1,x2,x3中的最大值m*/ } 4.7.2函数的调用 调用函数就是使用已经定义的函数,通常通过对函数的调用来执行函数体。 函数调用的一般形式为: 函数名(实际参数列表) 注意,实际参数列表中的参数可以是常量、变量或表达式。 各实际参数之间用逗号分开,且实际参数个数应与对应形参个数一致,类型应与对应形参类型相匹配。 在C语言中,函数调用有三种方式: 1、函数表达式 函数作为表达式中的一项出现在表达式中,以函数返回参数参与表达式的运算,这种方式要求表达式是有返回值的。 如: k=max(a,b,c); 调用上例max函数,求实际参数a,b,c中最大值,并将该值赋予变量k。 2、函数语句 把函数作为一个语句,即其一般形式加上分号。 例如: printf(“%d”,a); scanf(“%d”,&a); 3、函数参数 函数作为另一个函数调用的实际参数出现,这种情况是把该函数的返回值作为实际参数对待,因此要求该函数必须有返回值。 printf(“%f”,max(a,b,c)); m=max(x,y,max(a,b,c)); 4.7.3函数声明 1、如果被调用函数是标准库函数时,必须在程序开头用#include命令将有关头文件包含到本程序中。 例如: #include“math.h” #include“stdio.h”等。 2、如果被调用函数是用户自定义函数,且被调函数已经定义,则可调用。 但一般还必须在主调函数中对被调用的函数加以声明。 主要声明被调用函数函数名、函数类型、形式参数的类型、个数及次序。 一般声明格式: 函数类型标识符函数名(形式参数说明列表); 但以下情况除外: (1)函数的返回值为整型或字符型; (2)被调函数的定义出现在主调函数之前; (3)在文件开头(主调函数之前)已声明。 函数的定义、调用及函数声明的比较如下: 函数定义: floatmax(floatx,floaty,floatz),后随函数体。 函数调用: 例c=max(a,b,z);或max(a,b,z); 函数声明: floatmax(floatx,floaty,floatz); 无论是函数调用还是函数声明,都以“;”结束,都不出现该函数的函数体。 4.8案例分析 给出了一些典型例题,请大家自己学习。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 章程 基本 结构