C语言函数大全-- s 开头的函数(2)

news2024/11/24 5:07:46

C语言函数大全

本篇介绍C语言函数大全-- s 开头的函数(2)

1. setlinestyle

1.1 函数说明

函数声明函数功能
void setlinestyle( int linestyle, unsigned upattern, int thickness );设置当前绘图窗口的线条样式、线型模式和线条宽度

参数:

  • linestyle : 线条样式,取值范围为 0 到 4,不同的值对应着不同的线条样式,详见如下表格
  • upattern : 线型模式,它是一个 16 位的无符号整数,用二进制位表示线型模式,其中 1 表示绘制线条,0 表示空白。例如,如果 upattern 的值是 0x00FF,则表示绘制一段线条,然后空白一段,重复这个过程直到结束。如果 upattern 的值是 0x5555,则表示绘制一段虚线。
  • thickness : 线条宽度,取值范围为 1 到 10,表示线条的像素宽度
线条样式描述
SOLID_LINE0实线
DOTTED_LINE1虚线
CENTER_LINE2点线
DASHED_LINE3长短线
USERBIT_LINE4双点线

1.2 演示示例

#include <graphics.h>
#include <string.h>

/* the names of the line styles supported */
char *lname[] = {
   "SOLID_LINE",
   "DOTTED_LINE",
   "CENTER_LINE",
   "DASHED_LINE",
   "USERBIT_LINE"
   };

int main(void)
{
    int gdriver = DETECT, gmode;

    int style, midx, midy, userpat;
    char stylestr[40];

    initgraph(&gdriver, &gmode, "");

    midx = getmaxx() / 2;
    midy = getmaxy() / 2;

    userpat = 1;

    for (style=SOLID_LINE; style<=USERBIT_LINE; style++)
    {
        setlinestyle(style, userpat, 1);

        strcpy(stylestr, lname[style]);

        line(0, 0, midx-10, midy);

        rectangle(100, 100, getmaxx() - 100, getmaxy() - 100);

        outtextxy(midx, midy, stylestr);

        getch();
        cleardevice();
    }

    closegraph();
    return 0;
}

1.3 运行结果

在这里插入图片描述

2. setmem

2.1 函数说明

函数声明函数功能
void *setmem(void *dest, size_t n, int c);用于将指定内存区域的每个字节都设置为指定的值

参数:

  • dest : 要设置的内存区域的指针
  • n : 要设置的字节数
  • c : 要设置的值

·注意: setmem() 并不是标准 C 函数,而是 POSIX 标准库函数,因此可能并不被所有平台所支持。如果您的编译器或操作系统不支持 setmem() 函数,可以使用标准 C 库函数 memset() 来代替

2.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *str = (char *)malloc(10);  // 分配 10 字节的内存空间

    // 将 str 中的每个字节都设置为 'A'
    setmem(str, 10, 'A');

    printf("%s\n", str);

    free(str);

    return 0;
}

在上面的示例程序中,

  • 我们首先使用 malloc() 函数分配了 10 字节的内存空间,并将其赋值给指针变量 str。
  • 然后,我们使用 setmem() 函数将 str 指向的内存区域的每个字节都设置为 'A'
  • 最后,我们输出 str 的内容并使用 free() 函数释放了分配的内存空间。

3. setmode

3.1 函数说明

函数声明函数功能
int setmode(int fd, int mode);它是 Windows 系统下的特定库函数,用于将指定文件的 I/O 模式设置为文本模式或二进制模式

参数:

  • fd : 要设置模式的文件描述符,通常使用 fileno() 函数将文件指针转换为文件描述符
  • mode : 要设置的模式,它可以取以下两个值中的一个:
    • _O_BINARY:二进制模式
    • _O_TEXT:文本模式

注意:Windows 系统中,文本模式和二进制模式之间的区别在于换行符的处理方式。在文本模式下,Windows 将回车符(\r)和换行符(\n)组成的字符序列映射为单个换行符(\n),因此在读取文本文件时可以正确处理换行符。在二进制模式下,Windows 不对回车符和换行符做任何转换,因此在读取文本文件时可能会出现问题。

3.2 演示示例

#include <stdio.h>
#include <fcntl.h>

int main()
{
    int result;
    result = setmode(fileno(stdin), O_TEXT);
    if (result == -1)
        perror("Mode not available\n");
    else
        printf("Mode successfully switched\n");
    return 0;
}

在上面的示例程序中,我们首先使用 setmode() 函数将标准输入流的模式从二进制模式切换到文本模式;如果调用成功,则返回 0,否则返回 -1,并将错误信息存储在全局变量 errno 中。在程序中,我们使用 perror() 函数来输出错误信息。如果调用成功,则输出一条提示信息。

注意: setmode() 函数只适用于 Windows 系统下的 C/C++ 编程,并且不是标准库函数,因此在跨平台编程时应该避免使用它。在 Unix/Linux 系统下,也可以使用 fcntl() 函数来设置文件描述符的模式。

3.3 运行结果

在这里插入图片描述

4. setpalette

4.1 函数说明

函数声明函数功能
void setpalette(int colornum, int color);设置调色板的颜色

参数:

  • colornum : 要设置的调色板中的颜色数量
  • color : 是一个整数类型的值,用于表示调色板中的颜色。这个参数可以是一个 RGB 值,也可以是一个预定义颜色名称,例如 REDBLUE

4.2 演示示例

#include <graphics.h>

int main()
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");

    // 将第 5 种颜色设置为红色
    setpalette(5, RED);

    // 绘制一条红色的直线
    setcolor(5);
    line(100, 100, 200, 100);

    getch();
    closegraph();
    return 0;
}

4.3 运行结果

在这里插入图片描述

5. setrgbpalette

5.1 函数说明

函数声明函数功能
void setrgbpalette(int colornum, int red, int green, int blue);用于设置当前绘图窗口的调色板中某个颜色的 RGB

参数:

  • colornum : 要修改的颜色索引,取值范围为 0~255
  • red、green 和 blue 要设置的 RGB 值,取值范围为 0~255

5.2 演示示例

#include <graphics.h>

int main()
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");

    setbkcolor(WHITE);
    cleardevice();

    // 将第 5 种颜色设置为蓝绿色
    setrgbpalette(5, 0, 128, 128);

    // 绘制一条蓝绿色的斜线
    setcolor(5);
    line(100, 100, 200, 200);

    getch();
    closegraph();
    return 0;
}

在上述的这个示例程序中,

  • 我们首先使用 setbkcolor() 函数设置背景颜色为白色,然后清除原有屏幕使前面设置生效。
  • 接着我们使用 setrgbpalette() 函数将第 5 种颜色设置为蓝绿色,并使用 setcolor() 函数将绘图颜色设为索引值 5(即蓝绿色);
  • 最后使用 line() 函数绘制了一条斜线。

5.3 运行结果

在这里插入图片描述

6. settextjustify

6.1 函数说明

函数声明函数功能
void settextjustify(int horiz, int vert);用于设置文本输出的对齐方式

参数:

  • horiz : 水平对齐方式,可以取以下值:
    • LEFT_TEXT:左对齐
    • CENTER_TEXT:居中对齐
    • RIGHT_TEXT:右对齐
  • vert : 垂直对齐方式,可以取以下值:
    • TOP_TEXT:顶部对齐
    • CENTER_TEXT:居中对齐
    • BOTTOM_TEXT:底部对齐

6.2 演示示例

#include <graphics.h>

int main()
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");

    // 设置文本输出的对齐方式为居中对齐
    settextjustify(CENTER_TEXT, CENTER_TEXT);

    // 输出一行居中对齐的文本
    outtextxy(getmaxx() / 2, getmaxy() / 2, "Hello, world!");

    getch();
    closegraph();
    return 0;
}

在上述的示例程序中,我们使用 settextjustify() 函数将文本输出的对齐方式设置为居中对齐,然后使用 outtextxy() 函数在窗口的中心输出一行文本。

注意: 在使用 settextjustify() 函数设置对齐方式时,必须指定正确的参数值,并且同时考虑水平和垂直方向的对齐方式,否则可能会导致文本输出位置错误。

6.3 运行结果

在这里插入图片描述

7. settextstyle

7.1 函数说明

函数声明函数功能
void settextstyle(int font, int direction, int charsize);用于设置当前文本输出的字体、方向和大小

参数:

  • font : 要使用的字体编号,可以取以下值:
    • DEFAULT_FONT:默认字体
    • TRIPLEX_FONT:粗体三线字体
    • SMALL_FONT:小号字体
    • SANS_SERIF_FONT:无衬线字体
    • GOTHIC_FONT:哥特式字体
    • SCRIPT_FONT:手写字体
  • direction : 文本输出的方向,可以取以下值:
    • HORIZ_DIR:水平方向(从左到右)
    • VERT_DIR:垂直方向(从下到上)
  • horiz : 水平对齐方式,可以取以下值:
    • DEFAULT_WIDTHDEFAULT_HEIGHT:默认大小
    • TRIPLEX_WIDTHTRIPLEX_HEIGHT:大号尺寸
    • SMALL_WIDTHSMALL_HEIGHT:小号尺寸

7.2 演示示例

#include <graphics.h>

int main()
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");

    // 设置文本输出的字体、方向和大小
    settextstyle(TRIPLEX_FONT, HORIZ_DIR, 4);

    // 输出一行文本
    outtextxy(100, 100, "Hello, world!");

    getch();
    closegraph();
    return 0;
}

在上述的示例程序中,我们使用 settextstyle() 函数将文本输出的字体设置为粗体三线字体、方向设置为水平方向、大小设置为大号尺寸,然后使用 outtextxy() 函数在窗口的指定位置输出一行文本。

注意: 在使用 settextstyle() 函数设置文本样式时,必须指定正确的参数值,并且根据具体需求灵活选择字体、方向和大小,否则可能会导致文本输出不符合预期。

7.3 运行结果

在这里插入图片描述

8. settime

8.1 函数说明

函数声明函数功能
void settime(struct time *timep);设置当前系统时间

参数:

  • timep : 用于存储当前系统时间的结构体变量

8.2 演示示例

#include <stdio.h>
#include <dos.h>

int main(void)
{
    struct  time t;

    gettime(&t);
    printf("The current minute is: %d\n", t.ti_min);
    printf("The current hour is: %d\n", t.ti_hour);
    printf("The current hundredth of a second is: %d\n", t.ti_hund);
    printf("The current second is: %d\n", t.ti_sec);

    t.ti_min++;
    settime(&t);

    return 0;
}

在上述的程序中,

  • 我们首先定义了一个 struct time 类型的变量 t,用于存储当前系统时间。然后使用 gettime() 函数获取当前时间,并将小时、分钟、秒和百分之一秒等信息存储到 t 变量的对应成员变量中。
  • 接着,程序使用 printf() 函数输出了当前的分钟数、小时数、百分之一秒数和秒数。这里使用了 %d 占位符来指定输出整数类型的值。
  • 最后,程序将 t 变量的分钟数加上了 1,然后使用 settime() 函数将修改后的时间写入系统时钟中。

注意 : 这个程序依赖于 DOS 系统提供的日期和时间相关函数,可能无法在其他操作系统或环境下运行。此外,直接修改系统时间可能会对计算机的正常运行产生影响,因此应该谨慎使用。
在现代的 Windows 操作系统中,DOS 环境已经被废弃,因此这个程序可能无法正常工作。如果要获取和修改当前系统时间,可以使用操作系统提供的相关 API 或系统调用接口实现。例如,在 Windows 平台上,可以使用 GetSystemTime()SetSystemTime() 等函数来获取和设置系统时间。

9. setusercharsize

9.1 函数说明

函数声明函数功能
void setusercharsize(int multx, int dirx, int multy, int diry);用于设置用户定义的字符大小

参数:

  • multx : 水平放大倍数,取值为正整数
  • dirx : 水平方向,取值为 1-1。当 dirx 的值为 1 时,字符不进行左右翻转;当 dirx 的值为 -1 时,字符进行左右翻转
  • multy : 垂直放大倍数,取值为正整数
  • diry : 垂直方向,取值为 1-1。当 diry 的值为 1 时,字符不进行上下翻转;当 diry 的值为 -1 时,字符进行上下翻转。

9.2 演示示例

#include <graphics.h>

int main()
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");

    // 设置字符的大小为水平方向放大 2 倍、垂直方向放大 3 倍
    setusercharsize(2, 1, 3, 1);

    // 输出一行文本
    outtextxy(100, 100, "Hello, world!");

    getch();
    closegraph();
    return 0;
}

在上述这个示例程序中,我们使用 setusercharsize() 函数将当前字符的大小设置为水平方向放大 2 倍、垂直方向放大 3 倍,然后使用 outtextxy() 函数在窗口的指定位置输出一行文本。

注意: 在使用 setusercharsize() 函数设置字符大小时,必须指定正确的参数值,并且考虑到水平和垂直方向的缩放倍数,否则可能会导致字符输出不符合预期。

9.3 运行结果

在这里插入图片描述

10. setvbuf

10.1 函数说明

函数声明函数功能
int setvbuf(FILE *stream, char *buf, int type, unsigned size);用于设置文件流的缓冲方式

参数:

  • stream : 要设置缓冲方式的文件指针,可以是标准输入流(stdin)、标准输出流(stdout)或标准错误流(stderr),也可以是通过 fopen() 函数打开的文件指针
  • buf : 缓冲区指针,可以是一个已经分配好的缓冲区,也可以是 NULL。如果 buf 参数为 NULL,则 setvbuf() 函数将自动为文件流分配一块缓冲区
  • type : 缓冲类型,可以取以下值:
    • _IONBF:不使用缓冲区,直接从或向设备读写数据
    • _IOLBF:行缓冲,每行数据结束后刷新缓冲区
    • _IOFBF:全缓冲,填满缓冲区后才进行读写操作
  • size: 缓冲区大小,如果 buf 参数不为 NULL,则 size 参数指定了缓冲区大小;如果 buf 参数为 NULL,则 size 参数指定了系统为缓冲区分配的大小。size 参数只对全缓冲方式有效,行缓冲和无缓存方式忽略该参数

10.2 演示示例

#include <stdio.h>

int main(void)
{
    FILE *input, *output;
    char bufr[512];

    input = fopen("file.in", "r+b");
    output = fopen("file.out", "w");

    if (setvbuf(input, bufr, _IOFBF, 512) != 0)
        printf("failed to set up buffer for input file\n");
    else
        printf("buffer set up for input file\n");

    if (setvbuf(output, NULL, _IOLBF, 132) != 0)
        printf("failed to set up buffer for output file\n");
    else
        printf("buffer set up for output file\n");

    fclose(input);
    fclose(output);
    return 0;
}

在上述的示例程序中,

  • 我们首先定义了两个文件指针变量 inputoutput,分别表示输入文件和输出文件。
  • 然后调用 fopen() 函数打开输入文件和输出文件,并将返回的文件指针保存到对应的变量中。
  • 接着,程序使用 setvbuf() 函数分别为输入文件和输出文件设置缓冲方式。对于输入文件,使用 _IOFBF 缓冲类型和大小为 512 字节的缓冲区;对于输出文件,使用 _IOLBF 缓冲类型和大小为 132 字节的缓冲区(此处 bufr 缓冲区为空指针)。在设置完缓冲方式后,程序根据 setvbuf() 函数的返回值判断是否设置成功,如果返回值不为 0,则说明设置失败,否则说明设置成功,并输出相应的提示信息。
  • 最后,程序使用 fclose() 函数关闭输入文件和输出文件。

注意: 在使用文件流进行读写操作时,必须在适当的时候进行缓冲区清理操作,以避免数据丢失或者读取到过期数据等问题。另外,需要根据具体需求选择合适的缓冲方式和缓冲区大小,以实现最优的性能和稳定性。

10.3 运行结果

在这里插入图片描述

11. setviewport

11.1 函数说明

函数声明函数功能
void setviewport(int left, int top, int right, int bottom, int clipflag);用于设置绘图窗口的视口范围

参数:

  • left : 视口矩形的左上角横坐标,取值为正整数或 0
  • top: 视口矩形的左上角纵坐标,取值为正整数或 0
  • right: 视口矩形的右下角横坐标,取值为正整数
  • bottom: 视口矩形的右下角纵坐标,取值为正整数
  • clipflag: 裁剪标志,可以取以下值:
    • CLIP_ON:开启裁剪模式,只显示视口内的图形;
    • CLIP_OFF:关闭裁剪模式,显示整个画面。

11.2 演示示例

#include <graphics.h>

#define CLIP_ON 1

int main()
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");

    setcolor(RED);
    rectangle(100, 100, 300, 200);

    // 将视口范围设置为矩形 (150, 150) - (250, 250)
    setviewport(150, 150, 250, 250, CLIP_ON);

    setcolor(GREEN);
    rectangle(0, 0, 400, 300);

    getch();
    closegraph();
    return 0;
}

在上面的示例程序中,

  • 我们首先使用 rectangle() 函数绘制了一个红色的矩形;
  • 然后使用 setviewport() 函数将视口范围设置为矩形 (150, 150) - (250, 250);
  • 最后使用 rectangle() 函数绘制了一个绿色的矩形,但这里只有在视口范围的矩形才显示出来。

注意: 在使用 setviewport() 函数设置视口范围时,必须指定正确的参数值,并考虑到裁剪模式的影响,否则可能会导致图形显示不符合预期。

11.3 运行结果

在这里插入图片描述

12. setvisualpage

12.1 函数说明

函数声明函数功能
void setvisualpage(int pagenum); 用于设置图形窗口中用户可见的页面

参数:

  • pagenum : 要设置的可视化页面页码,整数类型。

在双缓冲绘图中,我们通常会使用两个页面来绘制图像,一个是前台页面,另一个是后台页面。当我们绘制完一个完整的画面时,可以通过调用 setactivepage() 函数将后台页面切换到前台页面以显示出来。而 setvisualpage() 函数则用于设置用户当前看到的页面,它实际上是将指定的页面置于前台,从而更新屏幕上显示的内容。

12.2 演示示例

#include <graphics.h>

int main(void)
{
   int gdriver = EGA, gmode = EGAHI;
   int x, y, ht;

   initgraph(&gdriver, &gmode, "");

   x = getmaxx() / 2;
   y = getmaxy() / 2;
   ht = textheight("W");

   setactivepage(1);

   line(0, 0, getmaxx(), getmaxy());

   settextjustify(CENTER_TEXT, CENTER_TEXT);
   outtextxy(x, y, "This is page #1:");
   outtextxy(x, y+ht, "Press any key to halt:");

   setactivepage(0);

   outtextxy(x, y, "This is page #0.");
   outtextxy(x, y+ht, "Press any key to view page #1:");
   getch();

   setvisualpage(1);

   getch();
   closegraph();
   return 0;
}

上述示例将在屏幕上绘制两个页面,并允许用户通过按任意键查看第二个页面。

注意: setvisualpage() 函数只能用于已经创建的图形窗口,且参数 pagenum 必须在 0getmaxpages() 函数返回值之间。

12.3 运行结果

在这里插入图片描述

13. setwritemode

13.1 函数说明

函数声明函数功能
void setwritemode(int mode); 用于设置绘画操作的写入模式

参数:

  • mode: 要设置的写入模式,整数类型。常用的写入模式有以下三种:
    • COPY_PUT:0,复制模式(默认),新绘制的图形将完全覆盖旧图形
    • XOR_PUT:1,异或模式,新绘制的图形将与旧图形进行异或运算后显示。在这种模式下,如果一个像素既在新图形中出现过,也在旧图形中出现过,则它最终不会被显示出来;如果一个像素只在新图形中出现过,或者只在旧图形中出现过,则它将会被显示出来。
    • OR_PUT:2,或模式,新绘制的图形将与旧图形进行或运算后显示。在这种模式下,如果一个像素既在新图形中出现过,也在旧图形中出现过,则它最终会被显示出来;如果一个像素只在新图形中出现过,或者只在旧图形中出现过,则它将会被显示出来。

13.2 演示示例

#include <graphics.h>

int main()
{
   int gdriver = DETECT, gmode;
   int xmax, ymax;

   initgraph(&gdriver, &gmode, "");

   xmax = getmaxx();
   ymax = getmaxy();

   setwritemode(XOR_PUT);

   line(0, 0, xmax, ymax);
   getch();

   line(0, 0, xmax, ymax);
   getch();

   setwritemode(COPY_PUT);

   line(0, 0, xmax, ymax);

   getch();
   closegraph();
   return 0;
}

注意: setwritemode() 函数只对紧随其后的绘画操作生效,它不会影响之前已经绘制的图形。因此,在更改写入模式之前,必须先完成之前的绘画操作。

13.3 运行结果

在这里插入图片描述

14. signal

14.1 函数说明

函数声明函数功能
void (*signal(int signum, void (*handler)(int)))(int);用于设置指定信号的处理方式。当系统接收到某个信号时,会调用相应的信号处理函数来处理该信号。在调用 signal 函数时,需要指定要处理的信号以及相应的信号处理函数。

参数:

  • signum : 要设置的信号编号,整数类型。常见的信号有很多种,如:
    • SIGINT(中断信号):通常由用户按下 “Ctrl + C” 产生,用于中断正在运行的程序。
    • SIGALRM(闹钟信号):用于在指定的时间后向进程发送信号,可以用于实现定时器等功能。
    • SIGFPE(浮点异常信号):在发生浮点运算异常时发送该信号。
    • SIGSEGV(段错误信号):在访问非法的内存地址时发送该信号。
  • handler : 要设置的信号处理函数,是一个指向函数的指针,其形式为 void handler(int)

返回值:

  • 如果调用成功,返回之前对信号的处理方式(通常是一个函数指针)。如果之前没有设置过该信号的处理方式,返回默认的处理方式(通常是 SIG_DFLSIG_IGN)。
  • 如果调用失败,返回 SIG_ERR

14.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void sigint_handler(int sig) {
    printf("Caught signal %d\n", sig);
    exit(0);
}

int main() {
    signal(SIGINT, sigint_handler);

    while (1) {
        printf("Doing something...\n");
        getchar();
        // check for interrupt signal
        raise(SIGINT);
    }

    return 0;
}

在上面的示例中,

  • 我们首先使用 signal() 函数设置了一个处理 SIGINT 信号的处理程序 sigint_handler()
  • 然后,在主循环中,我们随意输入一个字符后,就使用 raise() 函数向当前正在运行的进程发送 SIGINT 信号。当收到 SIGINT 信号时,程序将打印一条消息并退出。

14.3 运行结果

在这里插入图片描述

15. significand,significandf

15.1 函数说明

函数声明函数功能
double significand(double x);用于分离浮点数 x 的尾数部分(double)
float significandf(float x);用于分离浮点数 x 的尾数部分(float)

参数:

  • x : 要求尾数的浮点数。

15.2 演示示例

#include <stdio.h>
#include <math.h>

int main()
{
    double x = 123.456789;
    float y = -2.5;

    printf("The significand of %lf is %lf\n", x, significand(x));
    printf("The significand of %f is %f\n", y, significandf(y));

    return 0;
}

注意: 在某些旧版本的编译器中,可能没有实现 significand 函数。这个时候可以考虑使用其他类似的函数来替代,如 frexpmodf 等。

16. sin,sinf,sinl

16.1 函数说明

函数声明函数功能
double sin(double x);用于计算一个角度(以弧度为单位)的正弦值(double)
float sinf(float x);用于计算一个角度(以弧度为单位)的正弦值(float)
long double sinl(long double x);用于计算一个角度(以弧度为单位)的正弦值(long double)

参数:

  • x : 要求正弦值的角度,以弧度为单位

16.2 演示示例

#include <stdio.h>
#include <math.h>

int main()
{
    double x = M_PI / 6.0; // M_PI 圆周率
    float y = M_PI / 4.0L;
    long double z = M_PI / 3.0L;

    printf("sin(%lf) = %lf\n", x, sin(x));
    printf("sinf(%f) = %f\n", y, sinf(y));
    printf("sinl(%Lf) = %Lf\n", z, sinl(z));

    return 0;
}

16.3 运行结果

在这里插入图片描述

17. sincos,sincosf,sincosl

17.1 函数说明

函数声明函数功能
void sincos(double x, double* sinVal, double* cosVal);用于同时计算一个角度(以弧度为单位)的正弦值和余弦值
void sincosf(float x, float* sinVal, float* cosVal);用于同时计算一个角度(以弧度为单位)的正弦值和余弦值
void sincosl(long double x, long double* sinVal, long double* cosVal);用于同时计算一个角度(以弧度为单位)的正弦值和余弦值

参数:

  • x : 要求正弦值和余弦值的角度,以弧度为单位
  • sinVal : 存放计算得到的正弦值的指针
  • cosVal : 存放计算得到的余弦值的指针

17.2 演示示例

#include <stdio.h>
#include <math.h>

int main()
{
    double x = M_PI / 6.0;
    float y = M_PI / 4.0L;
    long double z = M_PI / 3.0L;

    double sinVal, cosVal;
    float sinfVal, cosfVal;
    long double sinlVal, coslVal;

    sincos(x, &sinVal, &cosVal);
    sincosf(y, &sinfVal, &cosfVal);
    sincosl(z, &sinlVal, &coslVal);

    printf("sincos(%lf) = (%lf, %lf)\n", x, sinVal, cosVal);
    printf("sincosf(%f) = (%f, %f)\n", y, sinfVal, cosfVal);
    printf("sincosl(%Lf) = (%Lf, %Lf)\n", z, sinlVal, coslVal);

    return 0;
}

17.3 运行结果

在这里插入图片描述

18. sinh,sinhf,sinhl

18.1 函数说明

函数声明函数功能
double sinh(double x);用于计算一个数的双曲正弦值
float sinhf(float x);用于计算一个数的双曲正弦值
long double sinhl(long double x);用于计算一个数的双曲正弦值

参数:

  • x : 要求双曲正弦值的数,以弧度为单位

18.2 演示示例

#include <stdio.h>
#include <math.h>

int main()
{
    double x = 1.0;
    float y = 2.0;
    long double z = 3.0;

    printf("sinh(%lf) = %lf\n", x, sinh(x));
    printf("sinhf(%f) = %f\n", y, sinhf(y));
    printf("sinhl(%Lf) = %Lf\n", z, sinhl(z));

    return 0;
}

18.3 运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/477249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL中去除重复数据的几种方法,我一次性都告你​

使用SQL对数据进行提取和分析时&#xff0c;我们经常会遇到数据重复的场景&#xff0c;需要我们对数据进行去重后分析。 以某电商公司的销售报表为例&#xff0c;常见的去重方法我们用到distinct 或者group by 语句&#xff0c; 今天介绍一种新的方法&#xff0c;利用窗口函数…

不得不说的行为型模式-命令模式

目录 命令模式&#xff1a; 代码实例&#xff1a; 下面是面试中可能遇到的问题&#xff1a; 命令模式&#xff1a; 命令模式(Command Pattern)是一种行为型设计模式&#xff0c;它允许将请求封装成对象&#xff0c;从而让你能够用不同的请求对客户端进行参数化&#xff0c;对…

Guitar Pro8苹果mac最新版本下载安装教程

Guitar Pro是一款专业的吉他制谱软件&#xff0c;现在已更新至Guitar Pro8&#xff0c;新增了支持添加音频轨道、支持嵌套连音符、直观的效果器视图、让指法一目了然的音阶示意图等实用新功能。下面我们来看Guitar Pro8 Mac如何安装。 guitar pro是一款专业的吉他学习软件&…

Linux内核(十四)Input 子系统详解 I —— 子系统介绍以及相关结构体解析

文章目录 概述input 子系统框架input 子系统相关结构体介绍input_dev结构体input_handler结构体input_handle结构体Evdev事件相关结构体input_event结构体&#xff08;标准按键编码信息&#xff09;设备相关信息结构体 概述 input子系统就是管理输入的子系统&#xff0c;和Lin…

HTML中的常用标签

HTML中的常用标签 &#x1f50e;注释标签&#x1f50e;标题标签&#x1f50e;段落标签&#x1f50e;换行标签&#x1f50e;格式化标签&#x1f50e;图片标签&#x1f50e;超链接标签&#x1f50e;表格标签合并单元格 &#x1f50e;列表标签无序列表有序列表自定义列表 &#x1…

新手如何快速学会Python?

在本文中&#xff0c;我们将介绍如何有效地学习 Python 。你应该知道「数据科学」是用于解决、探究问题并从数据中提取有价值信息的科学。 为了有效地做到这一点&#xff0c;你需要整理数据集、训练机器学习模型、可视化结果等等。 这是学习 Python 的最佳时机。 事实上&#x…

【五一创作】数据可视化之美 ( 三 ) - 动图展示 ( Python Matlab )

1 Introduction 在我们科研学习、工作生产中&#xff0c;将数据完美展现出来尤为重要。 数据可视化是以数据为视角&#xff0c;探索世界。我们真正想要的是 — 数据视觉&#xff0c;以数据为工具&#xff0c;以可视化为手段&#xff0c;目的是描述真实&#xff0c;探索世界。 …

[创新工具和方法论]-01- DOE课程基础知识

文章目录 1.DOE实验设计的介绍1.1 什么是实验设计DOE?1.2 DOE的优势有哪些?1.3 如何开展DoE研究&#xff1f;步骤 2.DOE实验培训3.数据分析步骤4.实验的随机化5.偏差6.R方 相关系数假设检验 7.三因子二水平全因子设计 1.DOE实验设计的介绍 实验设计是一种安排实验和分析实验数…

【网络进阶】服务器模型Reactor与Proactor

文章目录 1. Reactor模型2. Proactor模型3. 同步IO模拟Proactor模型 在高并发编程和网络连接的消息处理中&#xff0c;通常可分为两个阶段&#xff1a;等待消息就绪和消息处理。当使用默认的阻塞套接字时&#xff08;例如每个线程专门处理一个连接&#xff09;&#xff0c;这两…

Ubantu docker学习笔记(八)私有仓库

文章目录 一、建立HTTPS链接1.在仓库服务器上获取TLS证书1.1 生成证书颁发机构证书1.2 生成服务器证书1.3 利用证书运行仓库容器 2.让私有仓库支持HTTPS3.客户端端配置 二、基本身份验证三、对外隐藏仓库服务器3.1 在服务器端3.2 在客户端进行 四、仓库可视化 在前面的学习中&a…

数据库三范式与反范式详解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;数据库三范式与反范式详解 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: 林…

阿里云服务器通用算力u1性能测评CPU处理器网络PPS

阿里云服务器u1通用算力型Universal实例高性价比&#xff0c;CPU采用Intel(R) Xeon(R) Platinum&#xff0c;主频是2.5 GHz&#xff0c;云服务器U1实例的基准vCPU算力与5代企业级实例持平&#xff0c;最高vCPU算力与6代企业级实例持平&#xff0c;提供2c-32c规格和1:1/2/4/8丰富…

贪心算法讲解

文章目录 1. 贪心算法的概念2. 讲解贪心 1. 贪心算法的概念 贪心算法是&#xff1a;用一种局部最功利的标准&#xff0c;总是做出当前看来是最好的选择。如果局部最优解可以得出全局最优解&#xff0c;说明贪心假设成立&#xff0c;否则就失败。 举个例子&#xff1a; 这里有…

尚融宝26-投标

目录 一、需求 &#xff08;一&#xff09;投资人投标 &#xff08;二&#xff09;流程 二、标的详情 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;后端 &#xff08;三&#xff09;前端 三、计算收益 &#xff08;一&#xff09;四种还款方式 &#…

基于 A* 搜索算法来优化无线传感器节点网络的平均电池寿命(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 A*&#xff08;念做&#xff1a;A Star&#xff09;算法是一种很常用的路径查找和图形遍历算法。它有较好的性能和准确度。本文…

一篇带你快速入门DDD领域驱动设计

一、什么是领域驱动 领域驱动设计 Domain-Driven Design&#xff0c;简称DDD。软件对于行业并没有这么高的要求&#xff0c;他本身就是帮助其他行业更好的发展&#xff0c;赋能其他行业的。各个行业都有软件的身影&#xff0c;但是他们的业务场景是不同的&#xff0c;所以就需…

【MYSQL】数据类型和约束

目录 数据类型 1.数值类型 1.1.位--类型bit(M) 1.2. 整数类型--tinyint&#xff0c;smallint&#xff0c;int&#xff0c;bigint 1.3.小数类型--float、decimal 2.字符类型--char、varchar 3.日期类型--datetime、timestamp 4.string类型--enum和set mysql的约束 1.空…

Mybatis 知识总结2(基于注解的增删改查操作)

3.3 MyBatis 增删改查&#xff08;注解方式&#xff09; MyBatis 的增删改查是最基础最核心的功能&#xff0c;需要重点掌握。 需求说明 对员工信息进行增删改查操作。 查询&#xff08;查询结果分页展示后续实现&#xff09; 根据主键ID查询根据条件查询 新增更新删除 根据主…

海思芯片(hi3536av100)启动模式选择

1、支持多种模式可配置 (1)支持BootRom启动 (2)支持从 SPI NOR Flash 启动 (3)支持从 SPI NAND Flash 启动 (4)支持从 eMMC 启动 (5)支持 PCIe 从片启动 2、启动方式的选择 BOOT_SEL[1:0]SFC_EMMC_BOOT_MODEMODE000SPI Nor Flash 3 Byte001SPI Nor Flash 4 Byte010SPI Nand Fl…

2005-2020全国及各省家庭承包耕地流转总面积及经营耕地面积

2005-2020全国及各省家庭承包耕地流转总面积及经营耕地面积 1、时间&#xff1a;时间&#xff1a;2005-2020年 2、范围&#xff1a;包括全国及30个省份不包括西藏 3、指标包括&#xff1a;家庭承包耕地流转总面积(亩)、家庭承包经营耕地面积(亩) 4、来源&#xff1a;农村经…