当前位置:文档之家› C语言程序设计第7章函数进阶和结构化编程

C语言程序设计第7章函数进阶和结构化编程


q(0)=1 (边界条件,一刀不切只有一块)
#include<stdio.h> #include<conio.h> #define N 100 void main() { int i,q[101]; q[0]=1; for(i=1;i<=N;i++)
int fish[6]={1,1,1,1,1,1}, i
fish[5]=fish[5]+5 for(i=4; i>0; i--)
Y
fish[i+1]%5==1
N
fish[i]=fish[i+1]*5/4+1
break
当fish[1]==1||fish[1]%5!=1 输出计算结果fish[1]~fish[5]
#include<stdio.h> #include<math.h> #define PI 3.141592654 void calculate(int); void main(void) { int sel;
/* 循环选择计算圆形体的体积,直到输入非1~3数字为止 */ while(1) { printf("\t\t%s","1--ball\n");
#include<stdio.h> double fun(double); void main( ) { double eps=1e-10,sum;
sum=fun(eps); printf("\nPI=%.8lf",sum); } double fun(double eps) { double sum=0.5,t,t1,t2,t3; int odd=1,even=2; t=t1=t2=1.0; t3=0.5; while(t>1e-10) { t1=t1*(even-1)/even;
break; } }while(fish[1]==1||fish[1]%5!=1); for(i=1;i<=5;i++) printf("%10d",fish[i]); printf("\n"); }
7.3.2 递推数列
如果一个数列从某一项起,它的任何一项都可以用它前 面的若干项来确定,这样的数列被称为递推数列,表 示某项与其前面的若干项的关系就称为递推公式。例 如Fibonacci数列如下:
/* cylind : v=PI*r*r*h */ double vol_cylind() { double r,h;
printf("Please input r&h:"); scanf("%lf%lf",&r,&h); return PI*r*r*h; } /* cone : v=PI*r*r*h/3.0 */ double vol_cone() { double r,h; printf("Please input r&h:"); scanf("%lf%lf",&r,&h); return PI*r*r*h/3.0; }
7.3 递推
7.3.1 递推的一般概念 递推也称为迭代,思路是通过数学推导,将一个复杂的运算 化解为若干简单运算的重复执行。
例:通过公式:
… 1 1 1 1 3 1 3 1 1 5 1 3 5 1 1 7
6 22 3 2 24 5 2 246 7 2
计算的近似值,计算过程在所加项的值小于10-10时终止。
例:王小二自夸刀工不错,有人放一张大的煎饼在砧板上, 问他:“饼不许离开砧板,切100刀最多能分成多少 块?”
q(1)=1+1=2
q(2)=1+1+2=4
q(3)=1+1+2+3=7
q(4)=1+1+2+3+4=11切1刀 用归纳法不难得出:切2刀源自切3刀切饼问题示意图
切4刀
q(n)= q(n-1)+n(通项公式)
7.1.3 结构化编码
经模块化设计后,每个模块都可以独立编码。编程时应 选用顺序、选择和循环3种控制结构,并使程序具有良 好的风格。
1.见名知义命名对象名 2.使用注释 3.使程序结构清晰 4.使程序具有良好的交互性
例: 读入一组整数存入一个整型数组中,要求显示出计数、当前 整数、当前数为止的所有整数之和、当前数为止的最小整数以及 当前数为止的最大整数。除此之外,假设必须要显示如下所示的 标题及标题下方分列显示的信息。
break; case 2: printf("cylind:%.2lf\n",vol_cylind());
break; case 3: printf("cone:%.2lf\n",vol_cone());
break; } }
/* ball:v=4/3*PI*r*r*r */ double vol_ball() { double r; printf("Please input r:"); scanf("%lf",&r); return 4.0/3*PI*r*r*r; }
{ sum+=a[i]; smallest=min(a[i],smallest); biggest=max(a[i],biggest); printf("%5d%12d%12d%12d%12d\n",i+1,a[i],sum,smallest,biggest);
} }
7.2 函数的嵌套调用
main函数
第7章 函数进阶和结构化编程
学习目标
1.掌握源程序结构中函数的组织方法;
2.理解结构化程序设计思想,并能利用它来解 决问题;
3. 理解函数嵌套调用的概念,并能熟练利用函 数的嵌套调用来解决问题;
4.理解递推、递归及其算法实现;
5.理解编译预处理的概念,能熟练应用宏定义 和文件包含;
6.了解用户自定义库模块。
7.1 结构化编程
结构化程序设计(Structured Programming)是一种良 好的程序设计技术,它由著名计算机科学家E·W·Dijkst ra于1969年提出
7.1.1 自顶向下分析问题
自顶向下分析问题就是把一个较大的复杂问题分解成几 个小问题后再解决。
待解决的问题
模块1 模块2 模块3
void main(void)
{ prn_banner();
prn_headings();
read_and_prn_data();
}
显示标题函数: void prn_banner(void) {printf("\n***************************************************"); printf("\n running sums, minimums, and maximums "); printf("\n***************************************************\n");} 显示各列上部的标题函数: void prn_headings(void) { printf("%5s%12s%12s ","Count","Item","Sum");
a函数
b函数
调用a函数
调用b函 数
结束
a函数结束
b函数结

函数嵌套调用结构示意图
例:求组合数。
#include<stdio.h>
void main()
float fac(int n)
{ int m,n;
{ int i;
float t;
float f=1;
printf("Input m&n:");
for(i=2;i<=n;i++)
******************************************************* running sums, minimums, and maximums
******************************************************* Count Item Sum Minimum Maximum
1,1,2,3,5,8,13,…,
令fib(n)表示Fibonacci数列的第n项,依据数列中项与 项之间的关系可写出如下Fibonacci数列的递推公式:
fib(n)=fib(n-1)+fib(n-2) n=3,4,… (通项公式)
fib(1)=fib(2)=1
(边界条件)
7.3.3 递推算法的程序实现
printf("%12s%12s\n\n","Minimum","Maximum"); } 初始化数据并按要求显示函数: void read_and_prn_data(void) { int i,sum,smallest,biggest;
int a[10]={1,2,6,7,0,-6,19,52,10,-10}; sum=0;smallest=biggest=a[0]; for(i=0;i<10;i++)
printf("\t\t%s","2--cylind\n"); printf("\t\t%s","3--cone\n"); printf("\t\t%s","other--exit\n"); printf("\t\tPlease input your selete: "); scanf("%d",&sel); if(sel<1||sel>3)
相关主题