C语言----函数(基础篇七)
分类:
IT文章
•
2023-10-29 14:36:54
好久没有撸博客了,落下好多东西。近期回来老家了,换了个工作,有点时间正好系统性的学习完C吧。今天是比较重要的函数。
库函数
我们平时使用的printf和scanf都是库函数,除此之外还有常用的求平方根函数sqrt,做游戏用的rand等等也是库函数。使用库函数时要使用#include宏命令来包含有库函数的文件。
程序1
求2的平方根。
1 /* 7_1: 求2的平方根 */
2 #include <stdio.h>
3 #include <math.h>
4
5 /* 主函数(父函数) */
6 main()
7 {
8 double a;
9 a = sqrt(4); /*调用库函数求平方根*/
10 printf("%lf
", a);
11 }
View Code
程序2
“随机”表示没有规律,随机函数就表示一种没有规律的函数,这种函数可以模拟很多现实的事务,比如洗扑克牌,摸奖,很多MP3播放器的随机播放模式等等。
要在C语言中使用随机函数,需要调用srand和rand这两个函数。srand是随机种子,rand表示在0~32767之间产生一个随机整数。
1 #include <stdio.h>
2 #include <math.h>
3 #include <time.h> //time 函数头文件
4 #include <stdlib.h> //rand 函数头文件
5
6 main()
7 {
8 int i, n, m; //循环变量,用户猜的面,电脑随机产生的面
9 srand(time(0));
10 for ( i = 0; i < 5; i++)
11 {
12 printf("
你猜这次是正面还是反面?(0:正面,1:反面)
");
13 scanf_s("%d", &n);
14 m = rand() % 2; //硬币只需要0和1数字表示两个面,这里除以2的余数即可
15
16 //数字转化成文字显示在屏幕上
17 if (m == 0)printf("答案是:正面
");
18 else printf("答案是:反面
");
19
20 //判断用户是否猜对啦
21 if (n == m) printf("你猜对了
");
22 else printf("你猜错了
");
23 }
24 }
View Code
函数的作用
1、减少重复代码的编写。
2、将一个大项目按功能分解成函数,让多个程序员分别设计。也就是分工合作,增加效率。
自定义函数
自定义函数的格式:
返回值的类型 函数名(类型名 形式参数1,类型名 形式参数2,…)
{
若干语句
…
return 表达式;
}
程序3
1 // 7-3 简单的自定义函数
2 #include <stdio.h>
3 /*
4 1,初学者最好将自定义函数放在前面
5 2,v1 和 v2 在这里叫“形式参数”,fun 前面的int 表示会返回一个整数
6 */
7
8
9 double fun(double v1, double v2)
10 {
11 double d = v1 - v2;
12 return d;
13 }
14
15
16
17 //主函数
18 main()
19 {
20 double a = 7.5, b = 4.7, c;
21 c = fun(a, b); //调用函数时,1和2叫实际参数
22 printf("%lf
", c);
23 }
View Code
程序4
求 的和 ? 题意: 求1 + 100 的和 500 + 501 + ...... +600 的和 300 + 301 + ......+350 的和。
1 //求 1加到 100, 500加到600,300加到350的和。
2 #include <stdio.h>
3
4 int add(int begin,int end)
5 {
6 int sum = 0; //总和初始化为0.
7 for (; begin<=end; begin++)
8 sum = sum + begin;
9 return sum; //返回值
10 }
11
12 //主函数(父函数)
13 main()
14 {
15 int a1, a2, a3,num;
16 a1 = add(1, 100);
17 a2 = add(500, 600);
18 a3 = add(300, 350);
19 num = a1 + a2 + a3;
20 printf("%d
",num);
21 }
View Code
※函数形参的定义与普通变量定义不同的是:同时定义2个普通变量可以用int a,b; 而函数形参只能用int a,int b
※父函数在调用子函数后,会在调用点等待子函数返回,子函数永远不返回,父函数就永远不会往下执行。
※不能调用main函数
函数声明
※如果子函数在父函数之后定义,就要对子函数先进行“声明”,否则父函数会认不到子函数。
※函数声明的格式就是自定义函数的首部加上分号。
※如果函数返回值为整型,不需要声明也可编译通过,但是不提倡使用这种方式。
数据传递
※父函数调用子函数时,通过“实际参数”将数据传给子函数的“形式参数”。
※父函数将数据传给子函数加工时,子函数不会改变父函数中的数据,它加工的只是实际参数的副本。
※子函数通过return将加工好的数据传回父函数,这时子函数中所有的数据寿终正寝。
※父子函数中如果有变量重名,这两个变量之间不会互相影响
程序5
父子函数变量重名示例
1 // 7 -5 父子函数变量重名示例
2 #include <stdio.h>
3
4 int fun(int a, int b) //与父函数变量重名
5 {
6 a = 2;
7 b = 2;
8 }
9
10
11 main()
12 {
13 int a, b;
14 a = 1;
15 b = 1;
16 fun(a, b);
17
18 printf("a= %d,b=%d
", a, b);
19
20 }
View Code
函数返回值
格式:
return 表达式; 或 return (表达式);
※表达式最后的运算结果要与函数定义时的类型相同。如上面的代码,fun定义为double类型,return m中的m也必须是double类型。
※每个函数只能通过return返回一个值。
※如果函数头部没有返回类型标识,默认返回类型为int
※函数中无论有多少个return,只有一个return会执行,return一旦执行,函数马上就会跳出,后面的代码不再执行。
无返回值的函数:
※无返回值的函数,类型定义为void。函数体中若没有return语句,或是有单独一个return;后面不带表达式,均符合void函数的条件。这时的return功能有点类似break语句。
※无返回值函数也称“功能函数”,主函数不需要它返回什么结果,只需要它做完某件事。
1 // 7-6 无返回值函数
2 #include <stdio.h>
3
4
5 //子函数功能,输出两数中的大数
6 void fun(int a , int b)
7 {
8 if (a > b)printf("%d
", a);
9 else printf("%d
", b);
10 }
11
12 void main()
13 {
14 int i1, i2;
15 scanf_s("%d%d", &i1, &i2);
16 fun(i1, i2);
17 }
View Code