还是学C的一天

递归主要构成:

(1):递归出口,即递归的结束条件,到何时不再递归调用下去。

(2):递归式子,即递归的表达式。

递归思想在一定程度上,与数学上的数学归纳法相似。以此找递归表达式。

汉诺塔问题:

#include "stdio.h"
int main (void )
{
    void hanoi (int n,char a,char b,char c);
    int n;
    printf("input the number of disk:");
    scanf("%d",&n);
    printf("the steps for %d disk are:\n",n);
    hanoi(n,'a','b','c');
    return  0;
}

void hanoi (int n,char a,char b,char c)
{
    if (n==1)
    {
        printf("%c->%c\n",a,b);

    }
    else{
        hanoi((n-1),a,c,b);//将其从a搬到c
        printf("%c->%c\n",a,b);将a搬到b
        hanoi((n-1),c,b,a);//将c搬回b

    }
}

此程序很好的反应了递归的思想,只需要确定递归出口和具体大的问题解决思路,而不需要过度研究程序的细节实现上。

具体实现代码,也可用于如下代码:

阶乘计算:

#include <stdio.h>

int main()
{
    int n;
    int number;
    int result(int n);
    printf("input your number n:");
    scanf("%d",&n);
    number= result(n);
    printf("the number of %d cifang is %d:",n,number);

    return 0;
}
int result(int n)
{
    int a;
    if(n==1)//递归出口,一定不能忘记,否则函数会进入循环
    {
        a=1;
    } else{

        a=n* result((n-1));
    }
    return a;
}

最大公约数寻找:

#include "stdio.h"
int gcd(int n,int m);
int main(void)
{
    int n,m;
    int number;
    printf("input your number for the m and n");
    scanf("%d%d",&m,&n);
    number= gcd(m,n);
    printf("the gcd number is %d:",number);
    return  0;
}
int gcd(int m,int n)
{
    int number;
    if(m%n==0)
    {
        return n;
    } else{
        return gcd(n,m%n);
    }
}

宏基本定义:

宏定义#define是c语言程序中常用的功能,用宏定义来定义一些符号常量,可以方便程序的编制。

宏的用途包括:

1,符号常量,

2,简单的函数功能实现,由于宏要在一行内完成,所以只能实现简单的函数内容。

3,当程序中需要重复书写一些内容时,可以简写成宏。

格式

#define 宏名 宏定义字符串

#define 最后跟的/表达该行还未结束,与下一行合起来成为完整一行。

c语言中允许宏嵌套定义,例如:

#define pi 3.14

#define s pi*3

宏名和宏定义字符串之间用空格隔开,所以宏名中间不能存在空格。而宏定义字符串是宏名对应的具体实现过程,可以是任意字符串,中间可以有空格,以回车符作结束。

在程序编译时,所有出现宏名的地方,都会用宏定义字符串来替换。如果宏定义字符串后面跟了分号,则替换时分号也被作为替换内容。

#include "stdio.h"
#define Mile_to_meter 1609
#define Foot_to_centimeter 30.48
#define Inch_to_centimeter 2.54
int main(void )
{
    float foot,inch,mile;
    printf("input mile foot and inch");
    scanf("%f%f%f",&mile,&foot,&inch);
    printf("%f miles=%f meters\n",mile,mile*Mile_to_meter);
    printf("%f foots=%f centimeter\n",foot,foot*Foot_to_centimeter);
    printf("%f inchs =%f centimeter\n",inch,inch*Inch_to_centimeter);
    return 0;
}

带参数的宏定义:

例子:#define MAX(a,b) a>b? a:b

宏引用形式与函数调用区别:

宏替换在程序编译预处理时完成,对于MAX(a,b)的编译预处理,首先用程序中变量名替换a,b。在将包含变量的条件表达式替换MAX。

宏调用替换时,是直接替换表达式,而不会进行运算。所以加上括号可以避免替换后由于运算符号优先级而引出的错误。例;

#define MAX(x)  (x)*(x)

而如果定义函数,对其的处理要到程序执行时才进行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值