函数的范例

来源:互联网 发布:软件资质 公司 编辑:程序博客网 时间:2024/05/16 08:10
#include <stdio.h>#include <string.h>int main(){    gets(s);    f(s); }void f(char *s){    i = strlen(s);    for (j = i; j >= 0; j--)        printf("%c",s[j]);}

函数的范例

9.1 定义一个函数,从键盘上输入两个数,求两个数中的大者。

#include <stdio.h>#include<conio.h>int main(){    int max(int n, int m);//自定义函数的函数原型声明    int n1, n2;    printf("输入两个数: ");    scanf("%d%d",&n1,&n2);//调用max函数并将n1,n2作为实参传递给函数    printf("the max is %d\n",max(n1,n2));    getch();}//自定义max()函数,比较两个数的大小,返回两个数中的较大者。int max(int n, int m){    if (n > m)        return n;    else        return m;}

范例9.4 从键盘输入5个学生的成绩,编写一个函数计算这5名学生成绩的最高分和最低分平均分

#include <stdio.h>float max;  //全局变量float f(float a[], int n){    int i;    float x, sum;    max = a[0];//把a[0]赋值给变量max    for (i=0;i<n;i++)    {        if (a[i] > max)//若a[i]大于max将            max = a[i];        sum = sum + a[i];//计算各个元素的累加和    }    x = sum / n;//求其平均分    return(x);}void main(){    float x, s[5];    int i;    for (i = 0; i < 5; i++)    {        scanf("%f", &s[i]);        x = f(s, 5);//调用自定义函数        printf("the average is %f\n",x);        printf("the max is %f\n",max);    }}

范例9.5输入圆形的半径,求圆形的面积和周长,要求利用全局变量进行计算

#include <stdio.h>float s, z;//全局变量,保存圆的周长和面积void f(float r)//自定义函数计算圆的面积和周长{    s = 3.14*r*r;    z = 2 * 3.14*r;}int main(){    float r;    printf("输入圆的半径:");    scanf("%f", &r);    f(r);//调用函数,r作为实参传递给函数    printf("圆的周长为%f\n",s);    printf("圆的面积为%f\n",z);}

9.3 函数的实参和形参

函数的参数分为实参和形参。在函数的调用的过程中,实参的值会传递给函数的形参,相反,形参的值不能传递给实参。

9.3.1 传值方式

当要将常量、变量传递给函数时,即可采用传值方式。传值方式形参值的改变不会影响实参的值。其中形参的类型和个数应与实参一致。

范例9.6 编写一个函数,通过传值方式引用函数

分析:传值方式是直接将实参(变量)传递给函数中的形参(另一个变量),然后通过函数中的变量进行操作计算得出结果。

#include <stdio.h>void f(int m, int n){    int t;//通过变量t交换m和n的值    t = m;    m = n;    n = t;    printf("m=%d,n=%d\n",m,n);//输出交换后的值}void main(){    int m = 30, n = 40;    f(m,n);//调用f()函数,其中m和n作为实参传递给函数    printf("m=%d,n=%d\n",m,n);}m=40,n=30m=30,n=40自定义函数的功能为交换两个数的数值并输出交换后的结果,其中m和n作为函数的形参用来接收实参的值

注意:

  • 传值方式是将实参的值传递给形参。形参可以和实参同名,形参值的变化不会影响实参值的变化
  • 传值方式中的return语句只能返回一个值

9.3.2 传址方式

传址方式是将实参的地址传递给形参。函数将会对这个地址进行操作,因此形参的变化会影响实参的值

1、变量的地址

范例 9.7 编写一个函数,通过传址方式交换两个数的数值

分析:传址方式是指将变量的地址传递给形参,对变量的地址进行操作。因此传址方式中形参值的变化会影响实参的值。

#include<stdio.h>void f(int *m, int *n){    int t;    t = *m;    *m = *n;    *n = t;    printf("m=%d,n=%d\n", *m, *n);}void main(){    int m = 30, n = 40;    f(&m, &n);    printf("m=%d,n=%d\n",m,n);}
  • 自定义函数的功能是交换传入函数的两个数,
  • 其中指针m和n作为函数形参用来接收实参的地址。
  • 调用自定义函数将其中的变量m和n的地址作为实参传递给函数

2、一维数组名作实参
一维数组名表示数组的首地址,因此可以作为实参传递给函数

范例9.8 从键盘输入两个字符串,比较这两个字符串是否相等。若两个字符串相等则输出“相等”,否则输出“不相等”。
分析:用两个字符数组来保存输入的字符串。

#include <stdio.h>void f(char s1[], char s2[]){    int i = 0;    //循环比较两个字符串是否相等    while (s1[i] == s2[i] && s1[i] != 0)        i++;    if (s1[i] == '\0'&&s2[i] == '\0')        printf("相等\n");    else        printf("不相等\n");}void main(){    char s1[30], s[30];    printf("输入两个字符串\n");    gets(s1);//从键盘上读取字符串保存至数组s1    gets(s2);    f(s1, s2);}
  • 数组名用作实参引用函数
  • 自定义函数的功能是通过逐个字符的比较两个字符串是否相等
  • 通过gets_s()函数从键盘上获取字符串
  • 输入的字符个数一定要在定义的范围之内

3、字符串做实参
字符串做实参,形参应为字符型的指针变量。

编写一个程序,计算一个字符串中s字符出现的次数

分析:计算一个字符中的s字符出现的次数,可以设置一个计算器,计算器初始值为0,将字符与字符串中的字符逐个的比较,相等则计数器加1,否则,计数器的数值不变

#include <stdio.h>void f(char *s){    char c = 's';    int i = 0, m = 0;    while (s[i] != '\0')    {        if (s[i] == 's')        m++;        i++;    }    printf("the num is %d\n",m);}void main(){    char s[50];    gets[s];    f(s);}

本例将字符串作为实参引用函数
自定义函数的功能是判断一个字符串中的s个数。

范例 9.12
编写一个函数,计算两个数的差值并将结果输出。

#include <stdio.h>int f(int a, int b){    int c;    c = a - b;    return(c);}int main(){    int x, y, z;    printf("输入两个数: ");    scanf("%d%d",&x,&y);    z = f(x, y);    printf("两个数的差值为%d\n",z);}

范例 9.13 从键盘输入一个十进制 数,将其转换为二进制输出结果至屏幕。

分析:将一个十进制数转换为二进制,可以采用除以2取余的方式,直到不能整除为止,将十进制除以2的余数保存至一个数组中,最后输出该数组即为十进制对应的二进制数。

#include <stdio.h>void s(int x){    int i = 0, j, s[100];    while (1)    {        s[i++] = x % 2;        x = x / 2;        if (x == 0)            break;    }    for (j = i; j >= 0; j--)        printf("%d",s[j]);}void main(){    int a;    printf("输入要转换的十进制数: ");    scanf("%d",&a);    s(a);    printf("\n");}
0 0
原创粉丝点击