当前位置: 首页 > article >正文

C语言从头学63—学习头文件stdlib.h(二)

6、随机数函数rand()
     功能:产生0~RAND_MAX 之间的随机整数。
     使用格式:rand(); //无参
     返回值:返回随机整数
     说明:
      a.RAND_MAX是一个定义在stdlib.h里面的宏,表示可以产生的最大随机整数;
      b.如需要获得整数 a 到 b 之间的随机数(包括a、b),可以使用下面的公式:
         int r = rand()%(b-a+1)+a;。
      c.使用rand()函数还要配套使用随机数种子函数(下面介绍),否则每次输出的随机数顺序都会相同,失去了随机数的意义。
7、随机数种子函数srand()
     功能:重置随机数种子值
     使用格式:srand(参1);
         参1:使用无符号整数作为种子值,为增加随机性,一般使用随时变化的time(NULL)函数返回的秒数做为种子值
     返回值:无
     说明:种子函数srand要在随机数函数rand()前面调用才会发生作用。
 8、终止程序函数abort()  
     功能:触发SIGABRT信号,终止程序
     使用格式:abort(); //无参
     返回值:无
     说明:abort函数触发信号SIGABRT后,有两种情况:如无自定义信号处理程序,则调用默认信号处理程序,然后结束程序;如有自定义信号处理程序,则在执行默认信号处理程序后,会进入自定义信号处理程序,然后再结束程序。总之,不会再返回主程序,这一点与raise()函数发出信号的结果不同。
9、退出当前执行程序函数 exit()、quick_exit()、_Exit()
     功能:退出当前正在执行的程序
     使用格式: exit(参1);
                        quick_exit(参1);
                        _Exit(参1);
        参1:程序的退出状态:0正常退出,非零发生错误退出;也可使用宏EXIT_SUCCESS和EXIT_FAILURE当作参数
     说明:
      a. 上面三个退出程序函数的区别:exit()是正常退出,系统会做完整的清理;quick_exit() 是快速退出,清理工作少一些;_Exit() 是立即退出,不做清理工作。
      b. 退出程序函数退出的是整个程序,不是某一个具体函数;无论在程序的任何地方,遇到上面三个函数,程序都会立即结束。
10、退出前处理函数 atexit()、at_quick_exit()
     功能:程序退出前需要执行的一些函数通过这两个函数进行登记,以便程序退出前予以调用。
     使用格式:atexit(参1);
                       at_quick_exit(参1);
        参1:要执行的函数地址(函数名)。
      返回值:调用成功时返回0 ,调用失败时返回非零值
      说明:
       a.在函数atexit()中登记的函数,只有调用exit()退出或main()退出时才会执行;同样,在函数at_quick_exit()中登记的函数只有在调用quick_exit()退出时才会执行;也就是说,atexit与exit、at_quick_exit与quick_exit要成对使用。
       b.这些函数要在exit或quick_exit前使用,而且可以多次使用;多次使用时,执行顺序是挨着exit()近的先执行。
       c.要调用的函数必须是无参、无返回值的。
       以上函数的实验程序如下:

#include<stdio.h>
#include<time.h> //随机数种子函数
#include<stdlib.h>
#include<signal.h> 
void handle(int x)
{
    printf("按回车键lllll继续...\n");
    getchar();
}
void myPrint()
{
    printf("myPrint函数被调用了。。。\n");
    getchar();
    exit(EXIT_SUCCESS);
}
void myAtexit()
{
    printf("myAtexit函数被执行了\n");
    getchar();
}
int main(void)
{
//生成10个0-100间的随机整数
    srand(time(0));
    for (int i = 0; i < 10; i++)
    {
        int r = rand() % (100 - 0 + 1) + 0;
          //生成0-100之间的10个随机整数
        printf("%d - %d ",i,r);
    }
    //运行结果:0 - 92 1 - 55 2 - 26 3 - 41 4 - 17 5 - 32 6 - 80 7 - 69 8 - 1 9 - 93
//实验abort()函数
    signal(SIGABRT, handle);
    //abort(); //注释掉,否则后面的代码无法运行
//实验exit() 
    //myPrint(); //这个函数中有exit()的调用
    printf("这里是主程序...\n");
//实验atexit()函数
    atexit(myAtexit);
    exit(EXIT_FAILURE); //如果仅注释掉这一行,myAtexit仍会被调用,main函数正常退出也调用atexit函数
    getchar();
    return 0;
}


http://www.kler.cn/a/318909.html

相关文章:

  • SpringBoot(十八)SpringBoot集成Minio
  • 闯关leetcode——3178. Find the Child Who Has the Ball After K Seconds
  • Python——NumPy库的简单用法,超级详细教程使用
  • 新版 idea 编写 idea 插件时,启动出现 ClassNotFound
  • 性能测试|JMeter接口与性能测试项目
  • 代码 RNN原理及手写复现
  • PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute
  • Spring Boot在心理辅导领域的创新应用
  • C++(9.24)
  • Golang | Leetcode Golang题解之第420题强密码检验器
  • Android SystemUI组件(07)锁屏KeyguardViewMediator分析
  • echarts图表刷新
  • 与 CESS Network 共探去中心化创新:重塑数据基础设施,驱动未来变革
  • 数电学习基础(逻辑门电路+)
  • 羽毛球场馆预约系统,便捷管理预约
  • 【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第二篇-着色器制作】
  • 破解 oklink 网站加密数据(升级版)
  • Python中字典常用方法
  • Go版数据结构 -【序言】
  • 一,初始 MyBatis-Plus
  • 微信小程序公共样式:设计与实现指南
  • 智能听诊器宠物社区的新宠
  • Gnu Radio抓取WiFi信号,流程图中模块功能
  • 【Elasticsearch】-实现图片向量相似检索
  • 自然语言处理(NLP)实战项目
  • accelerate 分布式框架