函数的参数、返回值总结
(一)参数
函数分:
有参函数:函数名(实参列表)
无参函数:函数名()
有参函数调用语句中的实参应与被调函数中的形参在个数、类型、顺序上一致
参数传递时,实参向形参一一对应进行单向的传递。值:可是数值(变量或数组元素)数值的地址值(指针或数组名)
(二)返回值
函数的返回值即为函数调用后的结果,可有如下返回结果的方法:
1)通过return语句返回一个值;
2)利用地址做参数返回一个或多个值;
3)利用全局变量返回一个或多个值。
(三)例
1170页实验内容(1):打印由正三角和倒三角组成的图形。
有一个参数,无返回值。实参向形参传递一个数值。
#include <stdio.h>
/* 有一个参数,无返回值的函数,打印正三角 */
void f1(int n)            /* 形参只能是变量,用来接收实参传来的数值 */
{ int i,j,k;
    for(k=1;k<=n;k++)
    {for(i=1;i<=10-k;i++)
        printf(" ");
    for(j=1;j<=k;j++)
        printf(" *");
    printf("\n");}
}
/* 有一个参数,无返回值的函数,打印倒三角*/
void f2(int n)       
{int i,j,k;
    for(k=n;k>=1;k--)
    {for(i=1;i<=10-k;i++)
        printf(" ");
    for(j=1;j<=k;j++)
        printf(" *"); /*双引号内应为“空格加半角星号”*/
    printf("\n");}
}
main()
{ int n;
scanf("%d",&n);   
f1(n);            /* 实参可以是常量、变量或表达式,将一个确定的数值传给形参 */
f2(n-1);         /* 无返回值函数的调用形式 */
printf("\n");
f2(n);
f1(n);
}
2171页实验内容(2):调用两个函数,求两个整数的最大公约数与最小公倍数。
有两个参数,有一个返回值。实参向形参传递两个数值。
#include <stdio.h>
/* 有两个参数,有返回值的函数,求两个整数的最大公约数 */
int f1(int a,int b)            /* 形参只能是变量,用来接收实参传来的数值 */
{    int t,k=1;
    if(b>a){t=a;a=b;b=t;}
    while(k!=0)
    {    k=a%b;
        a=b;
        b=k;  }
    return a;
}
int f2(int a,int b)
{    int i;
    for(i=1;i<b;i++)
        if(i*a%b==0)break;
    return i*a;
}
main()
{ int a,b,c;
scanf("%d,%d",&a,&b);   
/*有返回值函数调用形式1:结果直接输出 */
printf("%d%d的最大公约数是%d\n",a,b, f1(a,b));   
/*有返回值函数调用形式2:结果赋给变量 */
c=f2(a,b);           
printf("%d%d的最小公倍数是%d\n",a,b, c);
}
3.编写一函数:求两个整数的和及平均值,并返回调用函数。
有三个参数,ab用于传递要处理的两个数,指针p用于返回平均值;
有两个返回值,一个返回值通过return语句返回,另一个返回值通过指针返回。
#include <stdio.h>
int fun(int a,int b,float *p)
{    int sum;
    sum=a+b;
    *p=(a+b)/2.0;
    return sum;
}
main()
{ int a,b,c;
    float avg;
scanf("%d,%d",&a,&b);   
/* 传递变量avg的地址,使指针p指向avg,带回平均值 */
c=fun(a,b,&avg);           
printf("%d%d的和是:%d,平均值为:%f\n",a,b,c,avg);
}
4171页实验内容(3):编写一函数,用来计算具有10数的一维数组中元素的最大值,最小值与平均值。
平均值通过return语句返回,最大值和最小值通过全局变量返回。
通过数组名做参数,使实参和形参数组中元素一一对应。
#include <stdio.h>
int max,min;
float func(int a[],int n)    /* 形参也应该是数组,名+[] */
{    int i,sum=a[0];
    float avg;
    max=a[0];min=a[0];
    for (i=1;i<n;i++)
      {if (a[i]>max)max=a[i];
        if (a[i]<min)min=a[i];
        sum=sum+a[i];}
    avg=sum/n;
    return(avg);
}
void main()
{    float average;
    int i,b[10];
    for (i=0;i<10;i++)
        scanf("%d",&b[i]);
    average=func(b,10);      /* 实参数组名,不带[] */
    printf("max=%d,min=%d,average=%.2f",max,min,average);
}
5、函数m的功能是:求出MN列二维数组每列元素中的最小值,并计算它们的和,和通过形参传回主函数输出。
参数为地址时的两种形式
#define M 2
#define N 4
#nclude <stdio.h>
void sm(int a[M][N],int *sum)
{int i,j,k,s=0;
for(i=0;i<N;i++)
{ k=0;
  for(j=1;j<M;j++)
        if(a[k][i]>a[j][i])k=j;
  s+=a[k][i];}
  *sum=s;}
void main()
{  int x[M][N]={3,2,5,1,4,1,8,3},s;
  sm(x,&s);    /* 实参均为地址:数组的首地址和变量的地址float()函数 */
  printf("%d\n",s);}
6172页实验内容(4):在主函数中由键盘输入一字符串,编写一函数求字符串的长度。
1)书上代码:用数组名做实参和形参,传递字符串。
#include <stdio.h>
int len(char s[])
{ int i,n=0;
  for(i=0;s[i]!='\0';i++)
    n=n+1;     
  return (n);         
}
void main()
{char a[20]="I love China!";
int lenth;
lenth=len(a);
printf("%s,lenth=%d\n",a,lenth);
}
2)修改代码:用指针做实参和形参,传递字符串。可有多种组合。
组合1:一数组名,一指针
#include <stdio.h>
int len(char *s)
{ int i,n=0;
  for(i=0;s[i]!='\0';i++)
    n=n+1;     
  return (n);         
}
void main()
{char a[20]="I love China!";
int lenth;
lenth=len(a);
printf("%s,lenth=%d\n",a,lenth);
}
组合2:两指针
#include <stdio.h>
int len(char *s)
{ int i,n=0;
  for(i=0;s[i]!='\0';i++)
    n=n+1;     
  return (n);         
}
void main()
{char a[20]="I love China!",*p=a;
int lenth;
lenth=len(p);
printf("%s,lenth=%d\n",a,lenth);
}
组合3:一指针,一数组
#include <stdio.h>
int len(char s[])
{ int i,n=0;
  for(i=0;s[i]!='\0';i++)
    n=n+1;     
  return (n);         
}
void main()
{char a[20]="I love China!",*p=a;
int lenth;
lenth=len(p);
printf("%s,lenth=%d\n",a,lenth);
}
3)修改代码:用指针处理字符串。
#include <stdio.h>
int len(char *s)
{ int i,n=0;
  for(;*s++!='\0';)        /* 该句可改为:while(*s++!='\0')  */
    n=n+1;     
  return (n);         
}
void main()
{char a[20]="I love China!";
int lenth;
lenth=len(a);
printf("%s,lenth=%d\n",a,lenth);
}
7、请编写一个函数fun,它的功能是:将pp所指字符串中所有下标为偶数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
例如,若输入”abc4EFg”,则应输出”aBc4EFg”。
#include <stdio.h>
#include <string.h>
void  fun  ( char *pp )
{ int i;
  for(i=0;i<strlen(pp);i+=2)
    if(pp[i]>='a'&&pp[i]<='z')
      pp[i]-=32;
}
main( )
{ char tt[81] ;
  printf( "\nPlease enter an string within 80 characters:\n" );
gets( tt );
  fun( tt );
  printf( "\nbecomes\n  \"%s\"\n",  tt  );

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。