精华内容
下载资源
问答
  • C语言main函数中嵌套定义函数

    千次阅读 多人点赞 2014-08-08 21:18:46
    第一次写博客啊,心情好激动。。。 ...今天看串口编程示例程序时,意外发现该程序竟然main函数嵌套定义了其他函数,调试了一下,...mian函数嵌套定义函数式GCC的编译器特性,与标准C无关。。。。

    第一次写博客啊,心情好激动。。。


     问题引入:

    今天在看串口编程示例程序时,意外发现该程序中竟然在main函数中嵌套定义了其他函数,调试了一下,居然通过了,然后我又写了个简单的测试程序,居然也通过了。

    下面是测试代码:

    这是运行结果:


    但是,不对啊,教材上明确讲过mian函数不能嵌套定义函数的啊!!这是为什么呢???

    于是,我把这段代码放在VC 6.0中调试,果然报错:


    这就有意思了,为什么会出现这种情况呢?有两种情况:

    1.C版本的问题:VC支持的可能是早期版本,例如C89版本,而我用的GCC是4.8.2,很新鲜的版本了,应该支持C99或更高版本了;

    2.编译器本身的问题。

    先对可能性1作出测试,VS2012也会报错;

    在测试可能性2,用GCC的早期版本,即指定用C89版本也能通过。

    综上,

    mian函数嵌套定义函数式GCC的编译器特性,与标准C无关。。。。


    展开全文
  • 函数在C语言中,各个函数定义都是相对独立的存在,在函数的内部可以调用其他的函数(这里面不包括main()函数)。这种调用过程叫做函数嵌套(函数定义部分不能嵌套)。例子:求两个整数的的最大公约数和最小公倍数。...

    函数的嵌套调用

    什么是函数的的嵌套?

    函数在C语言中,各个函数的定义都是相对独立的存在,在函数的内部可以调用其他的函数(这里面不包括main()函数)。这种调用过程叫做函数的嵌套(函数的定义部分不能嵌套)。

    例子:

    求两个整数的的最大公约数和最小公倍数。

    问题分析

    两个数的最小公倍数=两个数的乘积/两个数的最大公约数。

    所以key就是最大公约数.

    最大公约数求法思维图:

    32ae56f7cd6c58ff320d8fd53c9e200c.png

    代码实现

    #define _CRT_SECURE_NO_WARNINGS 1

    #include"stdio.h"

    #include"math.h"

    int gcd(int a, int b)

    {

    int c;

    if (a

    函数的实现:找出45和56两个整数的最小公倍数和最大公因数。

    67f5227bd39dfe1b5cf1064fe8ce5861.png

    函数的递归

    什么是函数的递归?

    在调用一个函数的过程中直接或者间接的调用函数的本身的过程,称为函数的递归调用。

    1.调用自己本身(main函数除外)

    2.有一个趋近于终止的条件。

    目的:将大问题转化为小问题的过程,分治思想。

    优势:代码少,简洁。

    例题:

    汉诺塔游戏的开发:

    1.游戏介绍:有三根相同的柱子,第一根柱子上有若干个盘子套在柱子上,他们由柱子下面自下而上由大到小依次排列,要求把第一根柱子上的所有盘子移动到第三根柱子上,期间大盘子不能放在小盘子的上面。

    b09a2de4595e6593f6995494ee44ac03.png

    2.开发思路

    我们假设A上面有三个盘子,为a,b,c。他的移动步骤为c到C,b到B,c到B,a到C,c到A,b到C,c到C。

    在面对多个盘子的时候我们可以把问题简化,把他简化为两个盘子的过程。,直接把b移动到从B,在把a移动到C,再将b移动到C的过程。B中的盘子

    b9024352611608b99429fbbd39fba5eb.png

    函数的实现

    #define _CRT_SECURE_NO_WARNINGS 1

    #include"stdio.h"

    void Move(char pose1, char pose2)

    {

    printf("%c->%c", pose1, pose2);

    }

    void hannuota(int n, char pose1, char pose2, char pose3)

    {

    if (n == 1)//终止条件

    {

    Move(pose1, pose3);

    }

    else

    {

    hannuota(n - 1, pose1, pose3, pose2);

    Move(pose1, pose3);

    hannuota(n - 1, pose2, pose1, pose3);//递归d的过程

    }

    }

    int main()

    {

    int i;

    printf("请输入一个值:");

    scanf("%d", &i);

    hannuota(i, 'a', 'b', 'c');

    printf("\n");

    return 0;

    }

    实现的结果

    i=6

    b3c14b2ccb096948c7590aa704a75e35.png

    展开全文
  • C语言中函数嵌套和递归

    千次阅读 2019-09-25 20:03:43
    函数在C语言中,各个函数定义都是相对独立的存在,在函数的内部可以调用其他的函数(这里面不包括main()函数)。这种调用过程叫做函数嵌套(函数定义部分不能嵌套)。 例子: 求两个整数的的最大公约数和最小公...

    函数的嵌套调用

    什么是函数的的嵌套?

    函数在C语言中,各个函数的定义都是相对独立的存在,在函数的内部可以调用其他的函数(这里面不包括main()函数)。这种调用过程叫做函数的嵌套(函数的定义部分不能嵌套)。
    例子:
    求两个整数的的最大公约数和最小公倍数。
    问题分析
    两个数的最小公倍数=两个数的乘积/两个数的最大公约数。
    所以key就是最大公约数.
    最大公约数求法思维图:
    在这里插入图片描述
    代码实现

    #define _CRT_SECURE_NO_WARNINGS 1
    #include"stdio.h"
    #include"math.h"
    int gcd(int a, int b)
    {
    	int c;
    	if (a<b)//保证a的值大于b
    	{
    		c = b;
    		b = a;
    		a = c;
    	}
    	while (a != 0)
    	{
    		c = a%b;
    		b = a;
    		a = c;//把余数赋值给a,直到a=0时跳出循环,找到结果。
    	}
    	return b;
    }
    int lcd(int a, int b)
    {
    	int c;
    	c = (a*b) / (gcd(a, b));//函数嵌套的过程
    	return c;
    }
    main()
    {
    	int m, n;
    	printf("请输入两个数:");
    	scanf("%d,%d", &m, &n);
    	printf("%d和%d最大公约数为%d\n", m, n, gcd(m, n));
    	printf("最小公倍数为%d\n", lcd(m, n));
    }
    

    函数的实现:找出45和56两个整数的最小公倍数和最大公因数。
    在这里插入图片描述

    函数的递归

    什么是函数的递归?

    在调用一个函数的过程中直接或者间接的调用函数的本身的过程,称为函数的递归调用。
    1.调用自己本身(main函数除外)
    2.有一个趋近于终止的条件。
    目的:将大问题转化为小问题的过程,分治思想。
    优势:代码少,简洁。

    例题:

    汉诺塔游戏的开发:
    1.游戏介绍:有三根相同的柱子,第一根柱子上有若干个盘子套在柱子上,他们由柱子下面自下而上由大到小依次排列,要求把第一根柱子上的所有盘子移动到第三根柱子上,期间大盘子不能放在小盘子的上面。
    在这里插入图片描述
    2.开发思路
    我们假设A上面有三个盘子,为a,b,c。他的移动步骤为c到C,b到B,c到B,a到C,c到A,b到C,c到C。
    在面对多个盘子的时候我们可以把问题简化,把他简化为两个盘子的过程。,直接把b移动到从B,在把a移动到C,再将b移动到C的过程。B中的盘子
    在这里插入图片描述
    函数的实现

    #define _CRT_SECURE_NO_WARNINGS 1
    #include"stdio.h"
    void Move(char pose1, char pose2)
    {
    	printf("%c->%c", pose1, pose2);
    }
    void hannuota(int n, char pose1, char pose2, char pose3)
    {
    	if (n == 1)//终止条件
    	{
    		Move(pose1, pose3);
    	}
    	else
    	{
    		hannuota(n - 1, pose1, pose3, pose2);
    			Move(pose1, pose3);
    			hannuota(n - 1, pose2, pose1, pose3);//递归d的过程
    	}
    }
    int main()
    {
    	int i;
    	printf("请输入一个值:");
    	scanf("%d", &i);
    	hannuota(i, 'a', 'b', 'c');
    	printf("\n");
    		return 0;
    }
    

    实现的结果
    i=6
    在这里插入图片描述

    展开全文
  • C语言函数嵌套定义问题

    万次阅读 2017-03-04 21:52:37
    几乎所有的C语言教材上都说C语言函数可以嵌套调用,但不可以嵌套定义。实际上,函数能否嵌套定义与编译器有关,GCC编译器下嵌套定义没问题,可以正常运行,我code blocks 和 Dev C++两个IDE(两者都用GCC)...

        几乎所有的C语言教材上都说C语言函数可以嵌套调用,但不可以嵌套定义。实际上,函数能否嵌套定义与编译器有关,在GCC编译器下嵌套定义没问题,可以正常运行,我在code blocks 和 Dev C++两个IDE(两者都用GCC)下测试了如下两个程序,都没问题:


    1.main函数中的嵌套定义。

    #include "stdio.h"

    int main()

    {

        int add(int a,int b)

        {

            return a+b;

        }

        printf("result = %d\n",add(5,67));

        return 0;

    }

     

    2.非main函数中的嵌套定义。

    #include "stdio.h"

    int main()

    {

        void fun();

        fun();

        return 0;

    }

    void fun()

    {

        int fun_inner(int a,int b)

        {

            return a-b;

        }

        printf("result = %d\n",fun_inner(5,67));

    }


    展开全文
  • 函数嵌套调用定义C语言中是不允许嵌套函数定义的,因此函数之间是相互平行的。不存在上一级函数和下一级函数。只不过在C语言中允许一个函数中调用另一个函数。这就是函数嵌套调用。练习:计算3!+2!得值#...
  • 楼上正解,可能楼主没理解 我这里具体举例说明不能嵌套定义 即是function a(){ function b(){ }}a函数里面定义b函数是错的,只能a函数外部定义b函数 像这样function a(){}function b(){}能嵌套调用 即是function...
  • C语言中函数嵌套调用和递归

    千次阅读 2019-05-24 11:14:00
    转载于:https://www.cnblogs.com/souhaite/p/10916959.html
  • C语言中函数的调用可以嵌套,但函数的定义不可以嵌套。不能嵌套定义 即是function a(){function b(){}}在a...}可以在a函数里面调用已经定义的b函数函数不能嵌套定义是由于语法不支持造成在函数定义的内部不能定...
  • ###########################例子全部来源于谭浩强版c语言################################ include &lt;stdio.h&gt; int main() { int max4(int a,int b,int c,int d); int a,b,c,d,max; printf(&...
  • 接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以函数分为有参函数和无参函数。将代码段封装成函数的过程叫做函数定义函数定义包含一个函数头(function head,或称为声明符...
  • c语言定义函数和声明函数 C语言中用户定义函数的类型 (Type of User-defined Functions in C) There can be 4 different types of user-defined functions, they are: 可以有4种不同类型的用户定义函数,它们是: ...
  • C 程序必须由一个或一个以上的函数组成 函数可以嵌套调用但不可以嵌套定义
  • 但是C语言允许一个函数定义中出现对另一个函数的调用。这样就出现了函数嵌套调用。即被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。其关系可表示如图。图表示了两层嵌套的情形。其...
  • 接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以函数分为有参函数和无参函数。 将代码段封装成函数的过程叫做函数定义C语言无参函数定义 如果函数不接收用户传递的数据,...
  • : 学习 定义 现象 学习 儿童 行为目前,有关可持续发展的定义有100多种,但被广泛接受、影响最大的是世界环境与发展委员会()定义。: 目前 有关 定义 影响 世界 环境 发展 委员会 定义 我们共...
  • 函数是指具有特定的功能代码的代码段,后面只要想要使用该功能只要调用函数可以可以减少代码的重复性,效率自然也会高很多。 函数的分类: (1)库函数:系统提供好的函数,例如printf()输出函数;输入函数...
  • 1、函数就是一个可以被多次调用的功能模块。 1)一个c程序有多个功能模块组成,一个模块可以有多个源程序文件。 (分别:编写、编译、提高效率) 2)一个源文件可以是一个或多个函数组成以及其他有关的内容组成。 ...
  • 在C语言中简单函数

    千次阅读 2018-08-11 16:13:52
    在C语言中函数是怎样的? 维基百科函数定义:子程序 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。 函数在面向过程的语言已经出现。是结构...
  • C语言嵌套定义

    千次阅读 2019-03-17 12:47:43
    //对于无返回值的函数用void定义 void func2(){ printf("C语言小白变怪兽\n"); } void func1(){ printf("http://c.biancheng.net\n"); func2(); } int main(){ func1(); printf("\...
  • 实验11 函数嵌套和递归调用 截止时间6.12 23:59前 填空题 以下程序的功能是通过调用一个用递归方式实现的求整数n的阶乘函数double 1.fac(int n)计算并输出从1到n的阶乘之和即s=1!+2!+.+n!n的值从键盘输入n...
  • 本课件主要描述的是关于C语言中函数的基础知识,包括函数定义、调用、声明、返回、递归与嵌套,并配有相应的练习。
  • 51单片机C语言延时函数怎么定义和使用

    万次阅读 多人点赞 2019-01-06 17:38:04
    C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。C程序可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,使用时应该使用unsigned char作为...
  • //这两个全局变量定义在最前面 void fcircle(int r) { s=PI*r*r; c=2*PI*r; } main() { int r; printf("input radias:\n"); scanf("%d",&r); fcircle(r); printf("s=%...
  • C语言无参函数定义如果函数不接收用户传递的数据,那么定义可以不带参数。如下所示:dataType functionName(){//body}dataType 是返回值类型,它可以C语言中的任意数据类型,例如 int、float、char 等。...
  • C语言——函数与递归

    2019-10-08 21:45:15
    但是有些编程语言是允许函数嵌套定义的,例如:JavaScript,JavaScript经常会使用函数的嵌套定义。 main()是函数定义,不是函数调用。 当可执行文件加载到内存后,系统从main函数开始执行,也就是说,系统会...
  • 通常在C语言中,一个完整的项目程序是不可能一个函数中实现所有的功能。而是由若干功能不同的函数来实现,并且函数之间会存在互相调用的情况。 当然了,也不是说就一定要把函数的功能模块都分开来写,但是如果你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,018
精华内容 18,007
关键字:

在c语言中函数可以嵌套定义

c语言 订阅