c笔记07---递归,清空缓冲区,汉诺塔,随机数,重复数,exit(),return

1.    fflush(stdout);
    这条语句可以把输出缓冲区里的内容立刻显示在屏幕上;

2.    return; 结束当前函数
    exit(); 结束整个程序,需要在程序开头处加入 #include <stdlib.h>

4.    使用数组作形参和实参是同一个数组,函数中修改了数组的内容,调用函数可以看到数组的变化。
    若不用数组形参,而使用其他形参,很可能无法计算,因为函数结束,形参也就消失了。

5.    数组形参无法用 sizeof 计算出数组行参大小;
    只有在主函数里面算出数组大小,然后传给形参数组:
        void xingcan(int value[], int num){}
        
6.    输入一个整数,如果不是,提示重新输入:(scanf类型不匹配,返回 0)
    while(!(scanf("%d", &data)))
    {
        scanf("%*[^\n]");        // * 忽略读到的内容,[^\n]任何非\n的字符,将\n之前所有字符读走
        scanf("%*c");            // 从缓冲区读取一个字符,忽略掉。
        printf("请重新输入整数:");
    }    
    上面两条语句起到清空缓冲区的作用。
        
7.    递推思路:用循环解决问题;
    递归思路:用递归函数解决问题;

8.    汉诺塔:(han.c)
    han(int num, char left, char mid, char right)    // num盘子数目,left,mid,right为三个柱子,且盘子刚开始在left柱子上
    {
        if(1 == num)                                  // 递归一定要有分支
            printf("把第%d个盘子从%c移动到%c\n", num, left, right);
        else
        {
            han(num - 1, left/*确定*/, right/*添加*/, mid/*确定*/);
            // 先确定此处 left 和 mid 位置,先由 left->mid,最后添加 right
            printf("把第%d个盘子从%c移动到%c\n", num, left, right);
            han(num - 1, mid/*确定*/, left/*添加*/, right/*确定*/);
            // 再把中间的移到最右边
        }
    }
    int main()
    {
        han(3, 'A', 'B', 'C');
    }

9.    生成随机数代码如下:
        #include <stdlib.h>
        #include <time.h>
        int data = time(0);
        srand(data);
        int result = rand();

    rand(); 生成随机数,(伪随机数)如:int data = rand();
    srand 设置随机种子,生成随机数,通过rand()返回;如:srand(data); int result = rand();
    time 用来获取1970年零点到现在的秒数;当参数为 0 时,获取到的秒数通过返回值来返回:如:int data = time(0);    

10.    重复数字个数:(chongfu.c)
    int arr[10] = {0};
    do {
        arr[data % 10]++;        // 计算出重复数字个数
        data /= 10;
    } while (data != 0);
    

11.    输出内容能够到达屏幕的条件有下面四点:
        \n
        程序结束
        输出缓冲区满(4kb)
        人工刷新 fflush

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值