9.1用户函数的定义和调用用户编写程序时,可以将程序中相对独立的程序段定义为一个单独的函数在包含多个函数的程序中,如果一个函数要调用另一个函数,则称之为主调函数;而被另一个函数调用的函数称之为被调函数
9.1 用户函数的定义和调用 用户编写程序时,可以将程序中相对独立的 程序段定义为一个单独的函数。 在包含多个函数的程序中,如果一个函数要 调用另一个函数,则称之为主调函数;而被另一 个函数调用的函数称之为被调函数
1.无参函数的定义#include <stdio.h>格式:main()类型说明符函数名()int i,j;函数体printf("The first one:In):for(i=1;i<=4;i++)for(j=1;j<=i;j++)#include <stdio.h>printf("*");void starprintf("\n");int i,j;printf("The second one: In");for(i=1;i<=4;i++)for(i=1;i<=4;i++)Yfor(j=1;j<=i;j++)for(j=1;j<=i;j++)printf("*");printf("");printf("n");printf("n");return;
1. 无参函数的定义 格式: 类型说明符 函数名( ) { 函数体 } 【例9.2】编写程序,打印出如下图形。 The first one: * ** *** **** The second one: * ** *** **** #include <stdio.h> main( ) { int i,j; printf("The first one:\n"); for(i=1;i<=4;i++) { for(j=1;j<=i;j++) printf("*"); printf("\n"); } printf("The second one:\n"); for(i=1;i<=4;i++) { for(j=1;j<=i;j++) printf("*"); printf("\n"); } } #include <stdio.h> void star() { int i,j; for(i=1;i<=4;i++) { for(j=1;j<=i;j++) printf("*"); printf("\n"); } return; }
#include <stdio.h>void star0int i,j;总是从主函数开始执行,for(i=1;i<=4;i++)当遇到函数调用时,则转向被3调函数的函数体中执行for(j=1;j<=i;j++)printf("*");在被调函数中,执行到printf("\n");return语句时,则返回到主!调函数中继续执行。return;main0printf("The first one:In"):starO;printf("The second one: In");star(;
2 无参函数的调用 用户自定义函数可以像调用库函数那样调用它。 无参函数的调用格式: 函数名( ) 由多个函数构成的程序,其执行流程是怎样的呢? main() { printf("The first one:\n"); star(); printf("The second one:\n"); star(); } #include <stdio.h> void star() { int i,j; for(i=1;i<=4;i++) { for(j=1;j<=i;j++) printf("*"); printf("\n"); } return; } 总是从主函数开始执行, 当遇到函数调用时,则转向被 调函数的函数体中执行。 在被调函数中,执行到 return语句时,则返回到主 调函数中继续执行
m!3.有参函数的定义和调用n!(m-n)!【例9.3】已知m、n是正整数,编写程序求m中取n的组合数#include<stdio.h>k=n:main()p=1;int m,n,i,k:for(i=1;i<=k;i++)p=p*i;long p,c,c1,c2,c3;/*n的阶乘*printf("请输入m与n的值:");c2=p;k=m-n;scanf("%d%d",&m,&n);k=m:p=1;p=1;for(i=1;i<=k;i++)p=p*i;for(i=1;i<=k;i++)/*m-n的阶乘*p=p*i;c3=p;c1=p;/*m的阶乘*/c=c1/(c2*c3);printf("组合数=%ld\n",c);
3 . 有参函数的定义和调用 【例9.3】已知m、n是正整数,编写程序求m中取n的组合数。 #include <stdio.h> main() { int m,n,i,k; long p,c,c1,c2,c3; printf("请输入m与n的值:"); scanf("%d%d",&m,&n); k=m; p=1; for(i=1;i<=k;i++) p=p*i; c1=p; /*m的阶乘*/ k=n; p=1; for(i=1;i<=k;i++) p=p*i; c2=p; /*n的阶乘*/ k=m-n; p=1; for(i=1;i<=k;i++) p=p*i; c3=p; /*m-n的阶乘*/ c=c1/(c2*c3); printf("组合数=%ld\n",c); } m! n! (m-n)!
long fac()longfac(intk)Y主long p;nlong p;的int i,k;p=1;int i;量for(i=1;i<=k;i++)plp=1;p=p*i;c2return;for(i=l;i<=k;i++)p=p*i;return p;①将被调函数中用于从主移到函数首部的括号中,②将被调函数中用于向主调函数传递数据的变量(或表达式)置于return之后,称为被调函数的返回值
long fac( ) { long p; int i,k; p=1; for(i=1;i<=k;i++) p=p*i; return; } 一是变量m、n的值显然应该在 主调函数中输入,如何将m、n及m-n 的值传递给变量k呢? 二是如何将求得的阶乘(即变量 p的值)传递给主调函数中的变量c1、 c2与c3呢? ①将被调函数中用于从主调函数接受数据的变量的定义 移到函数首部的括号中,称为被调函数的参数。 p=1; for(i=1;i<=k;i++) p=p*i; return p; } long fac(int k) { long p; int i; ②将被调函数中用于向主调函数传递数据的变量(或表达式) 置于return之后,称为被调函数的返回值