函数

发布时间 2023-07-16 23:02:58作者: huxiaofeng

函数

1. 函数基本格式

举个例子:

void main(){
 void printstar();  // 函数必须先声明.再去调用
 void print_message();  // 函数必须先声明.再去调用

 printstar();
 print_message();
 printstar();
}

void printstar(){
 printf("*************\n");
}

void print_message(){
 printf("I am you father!!!")
}

函数声明时需要加上形参和实参

输入两个整数. 比较大小:

#include <stdio.h>

void main(){
 int max(int x, int y);  // 形参要加上数据类型
 int a, b, c;

 scanf("%d, %d", &a, &b);
 c = max(a, b);
 printf("Max is %d", c);
}

int max(int x, int y){
 int z;
 z = x > y ? x : y;
 return z;
}


2. 函数的嵌套

举个例子: 使用程序求出 2和3平方的阶乘之和

#include <stdio.h>

// 一般函数都在开头声明
long square(int p);
long factorical(int q);

void main(){
 int i;
 long s = 0;
 for (i=2; i<=3; i++){
     s = s + square(i);
 }
 printf("%d\n", s);
}

long square(int p){
 int k;
 long r;
 // 求平方
	k = p * p;
 r = factorical(k);
 return r;
}

long factorical(int q){
 long c = 1;
 int i;
 // 求阶乘
 for (i=1; i<=q; i++){
     c *= i;
 }
 return c;
}

3. 递归

举个例子: Hanoi

// hanoi问题
void hanoi(int n, char one, char two, char three){
 // 整体法移动
 void move(char x, char y);  // 对函数声明
 if(n == 1){
     move(one, three)
 }else{
     hanoi(n-1, one, three, two);
     move(one, three);
     hanoi(n-1, two, one, three);
 }
}

void move(char x, char y{
 printf("%c-->%c\n", x, y);
}

4.数组名作为函数参数

来个例子: 有一个数组. 里面放置这10个学生的成绩. 写一个函数. 求出平均值. 最高分和最低分.

#include <stdio.h>
float Max = 0, Min = 0;  // 全局变量

void main(){
 float average(float array[], int n);  // 声明
 float ave, score[10];

 int i;
 for (i=0; i<10; i++){
     scanf("%f", &score[i]);
 }
 ave = average(score, 10);
 printf("Max = %6.2f\nmin = %6.2f\naverage = %6.2f\n", Max, Min, ave);  // 宽度6. 精度2
}

float average(float array[], int n){  // 形参为数组
 int i;
 float ave, sum = array[0];  // ave和上面的变量名字相同也没关系. 因为定义的是局部变量
 Max = Min = array[0];
 for (i=1; i<n; i++){
     if (array[i] > Max){
         Max = array[i];
     }
     else if (array[i] < Min){
         Min = array[i];
     }
     sum += array[i];
 }
 ave = sum / n;
 return ave;  // Min. Max不需要返回.因为开头定义成了全局变量
}

5. static

使用static定义局部变量

举个例子: 考察静态局部变量的值

#include <stdio.h>
int f(int a){
 auto b = 0;
 static  c = 3;  // 不会删除缓存. 下一次就会变成4
 b += 1;
 c += 1;
 return a + b + c;
}

void main(){
 int a = 2, i;
 for (i=0; i<3; i++){
     printf("%d\n", f(a));
 }
}

6. extern

extern声明外部变量

{{uploading-image-77491.png(uploading...)}}

举个例子: 使用extern声明外部变量, 拓展程序文件中的作用域

#include <stdio.h>

int max(int x, int y){
 int z;
 z = x > y ? x : y;
 return z;
}

void main(){
 extern A, B;  // 定义了全局变量
 printf("%d\n", max(A, B));
}
int A = 13, B = -8;  // 程序从上往下定义. 如果前面没有extern这个程序就会报错