C语言----函数(基础篇七)

  好久没有撸博客了,落下好多东西。近期回来老家了,换了个工作,有点时间正好系统性的学习完C吧。今天是比较重要的函数。

  库函数 

  我们平时使用的printfscanf都是库函数,除此之外还有常用的求平方根函数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\n", 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("\n你猜这次是正面还是反面?(0:正面,1:反面)\n");
13             scanf_s("%d", &n);
14             m = rand() % 2;  //硬币只需要0和1数字表示两个面,这里除以2的余数即可
15 
16             //数字转化成文字显示在屏幕上
17             if (m == 0)printf("答案是:正面\n");
18             else printf("答案是:反面\n");
19 
20             //判断用户是否猜对啦
21             if (n == m) printf("你猜对了\n");
22             else printf("你猜错了\n");
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\n", 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\n",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\n", 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\n", a);
 9     else printf("%d\n", 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

 

posted @ 2021-08-25 15:38  httpcc  阅读(280)  评论(0编辑  收藏  举报