第五章函数

一、函数

1、习题

(1)设置一个函数计算输入的整数位数


注:data=0时会自动结束循环

(2)设计一个函数,检验一个数是否为质数

define _CRT_SECURE_NO_DEPRECATE

include <stdio.h>

include <stdlib.h>

int zhi(int data)//是质数返回1,否则返回0
{
if (data <= 1)
{
return data=0;
}
else if (data == 2 || data == 3)
{
return 1;
}
else
{
int flag = 1;
for (int i = 2; i < data; i++)
{
if (data%i == 0)
{
flag = 0;
break;
}
}
return flag;
}
}
void main()
{
int num;
scanf("%d", &num);
int flag = zhi(num);
if (flag == 1)
{
printf("质数");
}
else
{
printf("不是质数");
}
system("pause");
}

(3)实现1+2+3+……+100的递归函数

2、简单函数

(1)自定义函数


函数的别称是方法,函数也就是完成某一特定功能的模块首先自定义一个函数print ,实现的功能是打印一段话,并等待输入一个字符

在main函数中调用print函数:

运行结果:

图解分析一下这段代码的运行过程:
程序的执行从main函数开始,调用print函数,然后开始顺序执行print函数内部的程序,调用库函数printf和getchar,然后返回到main函数。

函数的执行流程:

①函数的顺序调用

定义三个函数print1、print2、print3,每个函数分别调用两次printf



在main函数中顺序调用print1,print2,print3

运行结果如下:
顺序打印出print1,print2,print3 函数的内容

程序的执行过程图:
首先从入口函数main开始执行,然后顺序调用print1,print2,print3。最后执行getchar函数

②函数的嵌套调用

在print2中的调用print1,在print3中调用print2



在main函数中直接调用print3函数.

运行结果:
首先执行main函数,顺序执行main的函数体,调用print3函数,然后打印 33333---shang,调用print2,执行print2函数体,打印22222---shang,然后调用print1,执行print1函数体,打印11111---shang,11111---xia,然后返回到print2继续执行,打印出22222—xia,返回到print3继续执行打印出33333---xia。(函数调用必须等待当前函数调用完成以后,才执行下一步)

嵌套函数的执行流程图:

(2)带参数的函数

①无参函数


Main函数中调用后,打印出printf函数中字符串的内容

②带参函数


printadd的参数是两个int类型的参数
例:在main中调用printadd(10,12);则打印出10+12=22

③带参函数的应用

printf("calc"); //则是把calc字符串输出到屏幕上sprintf(str, "calc"); //则是把字符串calc字符串输出到str中。for /l %i in (1,1,5) do start notepad 则是在屏幕上 打开5个记事本。 (在DOS命令下输入: for /l %i in (1,1,5) do start notepad)

在main函数中调用open.
%i 等价于%d , 打印有符号十进制数据。
%%i 打印 的时候,%%映射一个% ,打印一个%,需要两个%

运行结果则是 打开5个记事本。

(3)函数的返回值

定义一个函数add ,返回值类型为int类型。

在main函数中调用add,并且把调用函数的结果作为函数的参数(函数调用可以嵌套)

运行结果:
打印出13,14

(4)函数的形参和实际参数

①在main函数中调用godata函数,则打印出n1、n2、n3、n4

②在main函数中调用godata函数,则打印出n1、n2

③在main函数中调用Windows.h头文件中的Sleep函数

在main函数或者其他函数中,如果没有return,函数执行完成以后会自动退出

(5)形参和实际参数类型

函数调用之前,形式参数,也就是函数定义时()里的参数,值都不确定,不确定的值,不会分配内存,只有调用函数的时候,才会分配内存新建一个变量,接受实际参数的值,当函数调用结束的时候,形参占据的内存会被回收。
实际参数是函数调用的时候,函数传递的确切值就是实际参数
实际参数可以是常量,变量或者表达式。
int num是一个形式参数,只有调用的时候,才分配内存。
num的地址和实参的地址是不同的

函数调用的时候形参分配内存。新建一个变量,存储传递过来的实际参数的值,等价于实际参数给形式参数赋值,赋值会自动进行数据类型转换,会自动完成数据类型转换。

(6)局部变量

局部变量,调用完成以后会被回收。
局部变量是为块语句服务,块语句执行结束,局部变量就会被回收。
函数内部定义的变量,还有函数的参数都是局部变量。

(7)全局变量

全局变量,不属于任何一个函数。可以被任何一个函数调用。
创建全局变量比main函数还要早,全局变量会一直占内存,而局部变量,用完就扔。
需要谁都可以访问的场合就需要全局变量。全局变量可以用于函数的通信

(8)全局变量的用途以及好处好坏处

(9)作用域

(10)输出函数

(11)输入函数

(12)字符输入,输出

(13)字符串输入,输出

(14)函数定义与声明

原文地址:https://www.cnblogs.com/liang-xp/p/10398061.html