C语言函数的基本使用,【C语言基础系列】C语言函数基本使用

写在前面:学习的第一门语言是Java,之前对C也了解一点,也只是了解一点,在加上长时间没有接触了,基本就只会一个Hello World了。现在由于准备升本考试,不得不从头开始学C。这里从零开始,记录C语言学习点滴。欢迎正在学习C语言的小伙伴一起学习,未来可期,一起加油!

函数定义

函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数两种。例如:scanf(),printf()等为库函数,由于C语言系统提供定义,使用时直接调用即可。自定义函数就需要自己定义后才可以使用。函数定义的一般形式为:

函数类型 函数名(形式参数表){     /* 函数首部 /

函数实现过程     / 函数体 */

}

函数首部

函数首部由函数类型、函数名和形式参数表组成,位于函数定义的第一行。函数首部中,函数名是函数整体的称谓,需要用一个合法的标识符表示。函数类型指函数结果返回的类型,一般与return语句中表达式的类型一致。形式参数表中给出函数计算所要用到的相关已知条件,以类似变量定义的形式输出,其格式为:

类型1   形参1, 类型2   形参2,…,类型n   形参n

各个形参之间用逗号分隔,每个形参前面的类型必须分别写明。函数的形参的数量可以是一个,也可以是多个,或者没有形参。

【注】函数首部后面不能加分号,它和函数体一起构成完整的函数定义。

函数体

函数体体现函数的实现过程,有一对大括号内的若干条语句组成,用以计算,或完成特定的工作,并用return语句返回运算的结果(返回的结果类型必须和函数首部定义的类型一致)。

函数的定义案例如下:

/* 定义函数首部 */

int sum(int a, int b){

/* 函数体部分 */

return 10; /* 返回结果 */

}

函数的调用

定义个函数后,就可以在程序中调用这个函数。在C语言中,调用标准库函数时,只需要在程序的最前面用#include命令包含相应的头文件;调用自定义函数时,程序中必须有与调用函数相对应的函数定义。

函数调用的形式

函数调用的一般形式为:

函数名(实际参数)

实际参数(简称实参)可以是常量、变量和表达式。对一函数调用通常出现两种情况:

① 赋值语句

volume = sum(10, b);

② 输出函数的实参

printf("%d", sum(10, b));

参数传递

函数定义时,位于其首部的参数被称为形参,如a和b。调用函数的参数被称为实参,如10和b。形参除了能接受实参的值外,使用方法与普通变量类似。形参和实参必须一一对应,两者数量相同,类型一致。程序运行遇到函数调用时,实参的值依次传递给形参。

函数的形参必须是变量,用于接受实参传递过来的值;而实参可以是常量、变量或表达式,其作用是把常量、变量或表达式的值传递给形参。如果实参是变量,它与所对应的形参是两个不同的变量。实参是主调函数的,形参是自定义函数,这两者可以同名,也可以不同名。

【注】在参数参数传递过程中,将实参的值复制给形参。这种参数传递是单向的,只允许实参把值复制给形参,形参的值即使在函数中改变了,也不会反过来影响实参。

函数结果返回

函数结果返回一般为:return 表达式;

先需要求解表达式的值,在返回其值。一般情况下表达式的类型与函数类型应一致,如果两者不一致,一函数类型为准。return语句的作用有两个:一是结束函数的运行;二是带着运行结果(表达式的值)返回主调函数。

函数原型声明

C语言要求函数先定义后调用,就像变量先定义后使用一样。如果自定义函数被放在主调函数的后面,就需要在函数调用前,**加上函数原型声明(或成为函数声明)。**函数声明的一般格式为:

函数类型     函数名(参数表);

即与函数定义中的第一行(函数首部)相同,并以分号结束。

函数的使用

上述了解了函数的定义,下面通过一个小案例来进一步了解函数的使用。

例:使用函数输出1~100以内的全部素数。代码如下:

#include#include/* 声明函数 */

int prime(int m);

int main(){

int i, count = 0;

printf("1~100以内的素数有:\n");

/* 循环1~100 */

for(i = 1; i <= 100; i++){

/* 调用prime判断i是否为素数 */

if(prime(i) != 0){

printf("%d\t", i); /* 输出素数 */

count++;

/* 每行显示10个数 */

if(count % 10 == 0){

printf("\n");

}

}

}

return 0;

}

/* 判断是否为素数的函数 */

int prime(int m){

if(m == 1){ /* 1不是素数,返回0 */

return 0;

}

int i, n = sqrt(m);

for(i = 2; i < n; i++){

if(m % i == 0){

return 0; /* 如果m不是素数,返回0 */

}

}

return 1; /* 是素数返回1 */

}

输出结果为:

C语言函数的基本使用,【C语言基础系列】C语言函数基本使用_第1张图片

不返回结果的函数

上述中说到了函数返回的问题,其实有时候程序设计时也不可以不需要返回运算结果。不返回结果的函数定义:

void 函数名(形参表){      /* 函数首部 /

函数实现过程     / 函数体 */

}

函数类型为void,表示不返回结果,函数体内不需要写return语句。void不能省略;否则函数类型被默认定义为int类型。

例:输出一个数字金字塔,代码如下:、

#include/* 声明函数 */

void pyramid(int n);

int main(){

pyramid(5); /* 调用函数 */

return 0;

}

/* 定义函数,输出n行数字金字塔 */

void pyramid(int n){

int i, j;

for(i = 1; i <= n; i++){ /*循环需要输出的行数*/

for(j = 1; j <= n-i; j++){ /* 输出每行左边的空格 */

printf(" ");

}

for(j = 1; j <= i; j++){

printf("%d ", i);

}

printf("\n");

}

}

运行效果如下:

C语言函数的基本使用,【C语言基础系列】C语言函数基本使用_第2张图片

局部变量和全局变量

上述中定义变量都是在函数的内部定义的,它们只限于所在的函数内使用。因此主调函数只有通过参数传递,才能把实参数据传递给函数使用;同样形参的改变也不会影响到实参变量。这种称为局部变量。下面来看看全局变量的定义,与使用。

定义在函数外面而不属于任何函数的变量称为全局变量。全局变量的作用范围是从定义开始到程序所在文件的结束,它作用范围内所用的函数都起作用。

【注】一般情况下会把全局变量定义在程序的最前面,即第一个函数的前。由于全局变量和局部变量的作用范围不同,允许它们同名。但某函数的局部变量与全局变量同名时,在该函数调用变量,调用的为局部变量。

全局变量的定义:

#include/* 定义全局变量x */

int x;

/* 声明函数 */

int f();

int main(){

int a = 1;

x = a; /* 对全局变量x赋值为1 */

a = f();

printf("x = %d, a = %d", x, a);

return 0;

}

int f(){

int x = 4; /* 定义一个与全局变量名相同的局部变量 */

return x; /* 返回的为局部变量x为4 */

}

运行结果如下:

C语言函数的基本使用,【C语言基础系列】C语言函数基本使用_第3张图片

可以看出输出的x为全局变量的值,a为返回的局部变量值。

由于初学C语言,上述内容如有错误地方,恳请各位大佬指出!

你可能感兴趣的:(C语言函数的基本使用)