C语言——标准函数库

简介: 函数库

数学库

1、三角函数 Trigonometric functions

1.1、 cos() 函数

/* cos example */

#include <stdio.h>      /* printf */

#include <math.h>       /* cos */

#define PI 3.14159265

intmain ()

{

 doubleparam, result;

 param=60.0;

 result=cos ( param*PI/180.0 );

 printf ("The cosine of %f degrees is %f.\n", param, result );

 return0;

}

1.2 sin() 正弦函数

/* sin example */

#include <stdio.h>      /* printf */

#include <math.h>       /* sin */

#define PI 3.14159265

intmain ()

{

 doubleparam, result;

 param=30.0;

 result=sin (param*PI/180);

 printf ("The sine of %f degrees is %f.\n", param, result );

 return0;

}

1.3、 tan() 正切函数

/* tan example */

#include <stdio.h>      /* printf */

#include <math.h>       /* tan */

#define PI 3.14159265

intmain ()

{

 doubleparam, result;

 param=45.0;

 result=tan ( param*PI/180.0 );

 printf ("The tangent of %f degrees is %f.\n", param, result );

 return0;

}

1.4、 acos() 反余弦函数

/* acos example */

#include <stdio.h>      /* printf */

#include <math.h>       /* acos */

#define PI 3.14159265

intmain ()

{

 doubleparam, result;

 param=0.5;

 result=acos (param) *180.0/PI;

 printf ("The arc cosine of %f is %f degrees.\n", param, result);

 return0;

}

1.5、asin() 反正弦函数

/* asin example */

#include <stdio.h>      /* printf */

#include <math.h>       /* asin */

#define PI 3.14159265

intmain ()

{

 doubleparam, result;

 param=0.5;

 result=asin (param) *180.0/PI;

 printf ("The arc sine of %f is %f degrees\n", param, result);

 return0;

}

1.6、atan() 反正切函数

/* atan example */

#include <stdio.h>      /* printf */

#include <math.h>       /* atan */

#define PI 3.14159265

intmain ()

{

 doubleparam, result;

 param=1.0;

 result=atan (param) *180/PI;

 printf ("The arc tangent of %f is %f degrees\n", param, result );

 return0;

}

1.7、atan2() 带两个参数的反正切函数

/* atan2 example */

#include <stdio.h>      /* printf */

#include <math.h>       /* atan2 */

#define PI 3.14159265

intmain ()

{

 doublex, y, result;

 x=-10.0;

 y=10.0;

 result=atan2 (y,x) *180/PI;

 printf ("The arc tangent for (x=%f, y=%f) is %f degrees\n", x, y, result );

 return0;

}

2、双曲函数 Hyperbolic functions

2.1、双曲余弦函数

/* cosh example */

#include <stdio.h>      /* printf */

#include <math.h>       /* cosh, log */

intmain ()

{

 doubleparam, result;

 param=log(2.0);

 result=cosh (param);

 printf ("The hyperbolic cosine of %f is %f.\n", param, result );

 return0;

}

2.2、双曲正弦函数

/* sinh example */

#include <stdio.h>      /* printf */

#include <math.h>       /* sinh, log */


int main ()

{

 double param, result;

 param = log(2.0);

 result = sinh (param);

 printf ("The hyperbolic sine of %f is %f.\n", param, result );

 return 0;

}

2.3、双曲正切函数

/* tanh example */

#include <stdio.h>      /* printf */

#include <math.h>       /* tanh, log */


int main ()

{

 double param, result;

 param = log(2.0);

 result = tanh (param);

 printf ("The hyperbolic tangent of %f is %f.\n", param, result);

 return 0;

}

3、指数函数与对数函数 Exponential and logarithmic functions

3.1、exp () 指数函数,以 e 为底数

/* exp example */

#include <stdio.h>      /* printf */

#include <math.h>       /* exp */


int main ()

{

 double param, result;

 param = 5.0;

 result = exp (param);

 printf ("The exponential value of %f is %f.\n", param, result );

 return 0;

}

3.2、frexp(param,n) 二进制浮点数表示方法 x=param*2^n

/* frexp example */

#include <stdio.h>      /* printf */

#include <math.h>       /* frexp */


int main ()

{

 double param, result;

 int n;


 param = 8.0;

 result = frexp (param , &n);

 printf ("%f = %f * 2^%d\n", param, result, n);

 return 0;

}

3.3、log(x) x的自然对数 (Natural logarithm of x)

/* log example */

#include <stdio.h>      /* printf */

#include <math.h>       /* log */


int main ()

{

 double param, result;

 param = 5.5;

 result = log (param);

 printf ("log(%f) = %f\n", param, result );

 return 0;

}

3.4、log10() 常用对数,以10为底 ( Common logarithm of x )

/* log10 example */

#include <stdio.h>      /* printf */

#include <math.h>       /* log10 */


int main ()

{

 double param, result;

 param = 1000.0;

 result = log10 (param);

 printf ("log10(%f) = %f\n", param, result );

 return 0;

}

3.5、modf() 返回x的小数部分,其符号与x相同 ,但是参数中可以添加整数部分的变量( The fractional part of x, with the same sign)

/* modf example */

#include <stdio.h>      /* printf */

#include <math.h>       /* modf */


int main ()

{

 double param, fractpart, intpart;


 param = 3.14159265;

 fractpart = modf (param , &intpart);

 printf ("%f = %f + %f \n", param, intpart, fractpart);

 return 0;

}

3.6、exp2() 返回2的x次方,2 raised to the power of x.

/* exp2 example */

#include <stdio.h>      /* printf */

#include <math.h>       /* exp2 */


int main ()

{

 double param, result;

 param = 8.0;

 result = exp2 (param);

 printf ("2 ^ %f = %f.\n", param, result );

 return 0;

}

3.7、log2() x的二进制对数( The binary logarithm of x)

/* log2 example */

#include <stdio.h>      /* printf */

#include <math.h>       /* log2 */


int main ()

{

 double param, result;

 param = 1024.0;

 result = log2 (param);

 printf ("log2 (%f) = %f.\n", param, result );

 return 0;

}

4、幂函数 Power functions

4.1、pow(base, power) 幂函数 The result of raising base to the power exponent

/* pow example */

#include <stdio.h>      /* printf */

#include <math.h>       /* pow */


int main ()

{

 printf ("7 ^ 3 = %f\n", pow (7.0, 3.0) );

 printf ("4.73 ^ 12 = %f\n", pow (4.73, 12.0) );

 printf ("32.01 ^ 1.54 = %f\n", pow (32.01, 1.54) );

 return 0;

}

4.2、sqrt(x) 计算x的平方根

/* sqrt example */

#include <stdio.h>      /* printf */

#include <math.h>       /* sqrt */


int main ()

{

 double param, result;

 param = 1024.0;

 result = sqrt (param);

 printf ("sqrt(%f) = %f\n", param, result );

 return 0;

}

4.3、cbrt(x) 计算x的立方根

/* cbrt example */

#include <stdio.h>      /* printf */

#include <math.h>       /* cbrt */


int main ()

{

 double param, result;

 param = 27.0;

 result = cbrt (param);

 printf ("cbrt (%f) = %f\n", param, result);

 return 0;

}

4.4、hypot(x,y) 计算直角三角形的斜边 ( The square root of (x^2+y^2) )

/* hypot example */

#include <stdio.h>      /* printf */

#include <math.h>       /* hypot */


int main ()

{

 double leg_x, leg_y, result;

 leg_x = 3;

 leg_y = 4;

 result = hypot (leg_x, leg_y);

 printf ("%f, %f and %f form a right-angled triangle.\n",leg_x,leg_y,result);

 return 0;

}

5、误差与伽马函数 Error and gamma functions

5.1、误差函数erf(x)  
网络异常,图片无法展示
|

/* erf example */

#include <stdio.h>      /* printf */

#include <math.h>       /* erf */


int main ()

{

 double param, result;

 param = 1.0;

 result = erf (param);

 printf ("erf (%f) = %f\n", param, result );

 return 0;

}

5.2、余差函数erfc(x) erfc(x) = 1-erf(x) 误差函数的补函数  
网络异常,图片无法展示
|

/* erfc example */

#include <stdio.h>      /* printf */

#include <math.h>       /* erfc */


int main ()

{

 double param, result;

 param = 1.0;

 result = erfc (param);

 printf ("erfc(%f) = %f\n", param, result );

 return 0;

}

5.3、tgamma(x) 伽马函数 ( the gamma function )  
网络异常,图片无法展示
|

/* tgamma example */

#include <stdio.h>      /* printf */

#include <math.h>       /* tgamma */


int main ()

{

 double param, result;

 param = 0.5;

 result = tgamma (param);

 printf ("tgamma(%f) = %f\n", param, result );

 return 0;

}

5.4、lgamma(x) log伽马函数 ( log-gamma function )  
网络异常,图片无法展示
|

/* lgamma example */

#include <stdio.h>      /* printf */

#include <math.h>       /* lgamma */


int main ()

{

 double param, result;

 param = 0.5;

 result = lgamma (param);

 printf ("lgamma(%f) = %f\n", param, result );

 return 0;

}

6、四舍五入与余数函数Rounding and remainder functions

6.1、ceil(x) x上取整函数

/* ceil example */

#include <stdio.h>      /* printf */

#include <math.h>       /* ceil */


int main ()

{

 printf ( "ceil of 2.3 is %.1f\n", ceil(2.3) );

 printf ( "ceil of 3.8 is %.1f\n", ceil(3.8) );

 printf ( "ceil of -2.3 is %.1f\n", ceil(-2.3) );

 printf ( "ceil of -3.8 is %.1f\n", ceil(-3.8) );

 return 0;

}

6.2、floor(x) x的下取整函数

/* floor example */

#include <stdio.h>      /* printf */

#include <math.h>       /* floor */


int main ()

{

 printf ( "floor of 2.3 is %.1lf\n", floor (2.3) );

 printf ( "floor of 3.8 is %.1lf\n", floor (3.8) );

 printf ( "floor of -2.3 is %.1lf\n", floor (-2.3) );

 printf ( "floor of -3.8 is %.1lf\n", floor (-3.8) );

 return 0;

}

6.3、fmod(y, x) y/x的余数

/* fmod example */

#include <stdio.h>      /* printf */

#include <math.h>       /* fmod */


int main ()

{

 printf ( "fmod of 5.3 / 2 is %f\n", fmod (5.3,2) );

 printf ( "fmod of 18.5 / 4.2 is %f\n", fmod (18.5,4.2) );

 return 0;

}

6.4、round(x) x的四舍五入值  
网络异常,图片无法展示
|

/* round vs floor vs ceil vs trunc */

#include <stdio.h>      /* printf */

#include <math.h>       /* round, floor, ceil, trunc */


int main ()

{

 const char * format = "%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n";

 printf ("value\tround\tfloor\tceil\ttrunc\n");

 printf ("-----\t-----\t-----\t----\t-----\n");

 printf (format, 2.3,round( 2.3),floor( 2.3),ceil( 2.3),trunc( 2.3));

 printf (format, 3.8,round( 3.8),floor( 3.8),ceil( 3.8),trunc( 3.8));

 printf (format, 5.5,round( 5.5),floor( 5.5),ceil( 5.5),trunc( 5.5));

 printf (format,-2.3,round(-2.3),floor(-2.3),ceil(-2.3),trunc(-2.3));

 printf (format,-3.8,round(-3.8),floor(-3.8),ceil(-3.8),trunc(-3.8));

 printf (format,-5.5,round(-5.5),floor(-5.5),ceil(-5.5),trunc(-5.5));

 return 0;

}

7、绝对值、最小、最大 Absolute、Minimum, maximum

7.1、fabs(x) x的绝对值函数

/* fabs example */

#include <stdio.h>      /* printf */

#include <math.h>       /* fabs */


int main ()

{

 printf ("The absolute value of 3.1416 is %f\n", fabs (3.1416) );

 printf ("The absolute value of -10.6 is %f\n", fabs (-10.6) );

 return 0;

}

7.2、abs(x) x的绝对值

// cmath's abs example

#include <iostream>     // std::cout

#include <cmath>        // std::abs


int main ()

{

 std::cout << "abs (3.1416) = " << std::abs (3.1416) << '\n';

 std::cout << "abs (-10.6)  = " << std::abs (-10.6) << '\n';

 return 0;

}

7.3、fmax(x, y) 两个参数中的最大值 (The maximum numeric value of its arguments. Values among which the function selects a maximum )

/* fmax example */

#include <stdio.h>      /* printf */

#include <math.h>       /* fmax */


int main ()

{

 printf ("fmax (100.0, 1.0) = %f\n", fmax(100.0,1.0));

 printf ("fmax (-100.0, 1.0) = %f\n", fmax(-100.0,1.0));

 printf ("fmax (-100.0, -1.0) = %f\n", fmax(-100.0,-1.0));

 return 0;

}

7.4、fmin(x, y) 两个参数中的最小值

/* fmin example */

#include <stdio.h>      /* printf */

#include <math.h>       /* fmin */


int main ()

{

 printf ("fmin (100.0, 1.0) = %f\n", fmin(100.0,1.0));

 printf ("fmin (-100.0, 1.0) = %f\n", fmin(-100.0,1.0));

 printf ("fmin (-100.0, -1.0) = %f\n", fmin(-100.0,-1.0));

 return 0;

}

通用工具库

思维导图大纲

前言

stdlib .h 头文件定义了四个变量类型、一些宏和各种通用工具函数。

  1. double atof(const char *str)函数原型 double atof(const char *str)函数功能: 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。

//时间:2019年11月18日

//作者:Kroner

//编译环境:VS 2019

//库函数 stdlib.h

//函数原型   double atof(const char *str)

//函数功能: 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main()

{

float val;

char str[20];


strcpy(str, "98993489");

val = atof(str);

printf("字符串值 = %s, 浮点值 = %f\n", str, val);


strcpy(str, "runoob");

val = atof(str);

printf("字符串值 = %s, 浮点值 = %f\n", str, val);


return 0;

}

测试结果:

  1. int atoi(const char *str)函数原型 int atoi(const char *str)函数功能: 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

//时间:2019年11月18日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   int atoi(const char *str)

//函数功能: 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main()

{

int val;

char str[20];


strcpy(str, "98993489");

val = atoi(str);

printf("字符串值 = %s, 整型值 = %d\n", str, val);


strcpy(str, "runoob.com");

val = atoi(str);

printf("字符串值 = %s, 整型值 = %d\n", str, val);


return 0;

}

测试结果:

  1. long int atol(const char *str)函数原型 long int atol(const char *str)函数功能: 把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)

//时间:2019年11月18日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   long int atol(const char *str)

//函数功能: 把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main()

{

long val;

char str[20];


strcpy(str, "9899348911");

val = atol(str);

printf("字符串值 = %s, 长整型值 = %ld\n", str, val);


strcpy(str, "runoob.com");

val = atol(str);

printf("字符串值 = %s, 长整型值 = %ld\n", str, val);


return 0;

}

测试结果:

  1. double strtod(const char *str, char endptr)函数原型 double strtod(const char *str, char endptr)函数功能: 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型),str – 要转换为双精度浮点数的字符串。endptr – 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。这个当第二个参数为空时和 double atof(const char *str)是相同,但是当而第二形参引用后,第二个指针会指向存储字符串位置的地址。

//时间:2019年11月18日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   double strtod(const char *str, char **endptr)

//函数功能: 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int main()

{

char str[30] = "20.30300 This is test";

char* ptr;

double ret;


ret = strtod(str, &ptr);

printf("数字(double)是 %lf\n", ret);

printf("字符串部分是 |%s|", ptr);


return 0;

}

测试结果:

  1. long int strtol(const char *str, char endptr, int base)函数原型 long int strtol(const char *str, char endptr, int base)函数功能: 把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。str – 要转换为长整数的字符串。endptr – 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。base – 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。这个基数就表示这个多少数字就多少进制如果下列代码改为ret = strtol(str, &ptr, 8);就表示11112是八进制的数

//时间:2019年11月18日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   long int strtol(const char *str, char **endptr, int base)

//函数功能: 把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int main()

{

char str[30] = "11112 This is test";

char* ptr;

long ret;


ret = strtol(str, &ptr, 10);

printf("数字(无符号长整数)是 %ld\n", ret);

printf("字符串部分是 |%s|", ptr);


return 0;

}

测试结果:

  1. unsigned long int strtoul(const char *str, char endptr, int base)函数原型 unsigned long int strtoul(const char *str, char endptr, int base)函数功能: 把参数 str 所指向的字符串转换为一个无符号长整数(类型为 unsigned long int 型)。

//时间:2019年11月19日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   unsigned long int strtoul(const char *str, char **endptr, int base)

//函数功能: 把参数 str 所指向的字符串转换为一个无符号长整数(类型为 unsigned long int 型)。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int main()

{

char str[30] = "2030300 This is test";

char* ptr;

long ret;


ret = strtoul(str, &ptr, 10);

printf("数字(无符号长整数)是 %lu\n", ret);

printf("字符串部分是 |%s|", ptr);


return 0;

}

测试结果:

  1. void *calloc(size_t nitems, size_t size)函数原型 void *calloc(size_t nitems, size_t size)函数功能: 分配所需的内存空间,并返回一个指向它的指针。malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,

//时间:  2019年11月19日

//作者:  Kroner

//编译环境: VS 2019

//库函数  stdlib.h

//函数原型   void *calloc(size_t nitems, size_t size)

//函数功能: 释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。


#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int main()

{

int i, n;

int* a;


printf("要输入的元素个数:");

scanf("%d", &n);


a = (int*)calloc(n, sizeof(int));

printf("输入 %d 个数字:\n", n);

for (i = 0; i < n; i++)

{

scanf("%d", &a[i]);

}


printf("输入的数字为:");

for (i = 0; i < n; i++) {

printf("%d ", a[i]);

}

free(a);  // 释放内存

return 0;

}

测试结果:

  1. void free(void *ptr)函数原型 void free(void *ptr)函数功能: 分配所需的内存空间,该函数不返回任何值。

//时间:2019年11月19日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   void free(void *ptr)

//函数功能: 分配所需的内存空间,并返回一个指向它的指针。

//    malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。


#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main()

{

char* str;


/* 最初的内存分配 */

str = (char*)malloc(15);

strcpy(str, "runoob");

printf("String = %s,  Address = %p\n", str, str);


/* 重新分配内存 */

str = (char*)realloc(str, 25);

strcat(str, ".com");

printf("String = %s,  Address = %p\n", str, str);


/* 释放已分配的内存 */

free(str);


return 0;

}

测试结果:

  1. void *malloc(size_t size)函数原型 void *malloc(size_t size)函数功能: 分配所需的内存空间,并返回一个指向它的指针。该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。

//时间:2019年11月15日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   void *malloc(size_t size)

//函数功能: 分配所需的内存空间,并返回一个指向它的指针。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <string.h>

#include <stdlib.h>


int main()

{

char* str;


/* 最初的内存分配 */

str = (char*)malloc(15);

strcpy(str, "Kroner");

printf("String = %s,  Address = %u\n", str, str);


/* 重新分配内存 */

str = (char*)realloc(str, 25);

strcat(str, ".com");

printf("String = %s,  Address = %u\n", str, str);


free(str); //释放内存


return 0;

}

测试结果

  1. void *realloc(void *ptr, size_t size)函数原型 void *realloc(void *ptr, size_t size)函数功能: 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。该函数返回一个指针 ,指向重新分配大小的内存。如果请求失败,则返回 NULL。

//时间:2019年11月15日

//作者:Kroner

//编译环境:VS 2019

//库函数 stdlib.h

//函数原型   void *realloc(void *ptr, size_t size)

//函数功能: 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main()

{

char* str;


/* 最初的内存分配 */

str = (char*)malloc(15);

strcpy(str, "Kroner");

printf("String = %s,  Address = %p\n", str, str);


/* 重新分配内存 */

str = (char*)realloc(str, 25);

strcat(str, ".com");

printf("String = %s,  Address = %p\n", str, str);


free(str);


return 0;

}

测试结果:

  1. void abort(void)函数原型 void abort(void)函数功能: 使一个异常程序终止。

//时间:2019年11月15日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   void abort(void)

//函数功能: 使一个异常程序终止。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int main()

{

FILE* fp;


printf("准备打开 nofile.txt\n");

fp = fopen("nofile.txt", "r");

if (fp == NULL)

{

printf("准备终止程序\n");  

abort();

}

printf("准备关闭 nofile.txt\n");

fclose(fp);


return(0);

}

测试结果:由于我们没有创建nofile.txt,所以是无法使用fopen()打开文件的,所以就会有弹出这样的异常界面

  1. int atexit(void (func)(void))函数原型 int atexit(void (func)(void))函数功能: 当程序正常终止时,调用指定的函数 func。

//时间:2019年11月15日

//作者:Kroner

//编译环境:  VS 2019

//库函数  stdlib.h

//函数原型   int atexit(void (*func)(void))

//函数功能: 当程序正常终止时,调用指定的函数 func。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


void functionA()

{

printf("这是函数A\n");

}


int main()

{

/* 注册终止函数 */

atexit(functionA);


printf("启动主程序...\n");


printf("退出主程序...\n");


return 0;

}

测试结果:

  1. void exit(int status)函数原型 void exit(int status)函数功能: 使程序正常终止。

//时间:2019年11月15日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   void exit(int status)

//函数功能: 使程序正常终止。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int main()

{

printf("程序的开头....\n");


printf("退出程序....\n");

exit(0);


printf("程序的结尾....\n");


return 0;

}

测试结果:

  1. char *getenv(const char *name)函数原型 char *getenv(const char *name)函数功能: 搜索 name 所指向的环境字符串,并返回相关的值给字符串。

//时间:2019年11月15日

//作者:Kroner

//编译环境:VS 2019

//库函数  stdlib.h

//函数原型   char *getenv(const char *name)

//函数功能: 搜索 name 所指向的环境字符串,并返回相关的值给字符串。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int main()

{

printf("PATH : %s\n", getenv("PATH"));

printf("HOME : %s\n", getenv("HOME"));

printf("ROOT : %s\n", getenv("ROOT"));


return 0;

}

测试结果:

  1. int system(const char *string)函数原型 int system(const char *string)/函数功能: 由 string 指定的命令传给要被命令处理器执行的主机环境。

//时间:2019年11月15日

//作者:Kroner

//编译环境: VS 2019

//库函数  stdlib.h

//函数原型   int system(const char *string)

//函数功能: 由 string 指定的命令传给要被命令处理器执行的主机环境。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <string.h>

#include<stdlib.h>


int main()

{

char command[50];


strcpy(command, "dir");

system(command);


return 0;

}

测试结果:在windows 系统中显示的结果,相当于win+r运行cmd后再输入栏中输入dir的结果

  1. void *bsearch(const void *key, const void base, size_t nitems,size_t size, int (compar)(const void *, const void *))

函数原型 void *bsearch(const void *key, const void base, size_t nitems, size_t size, int (compar)(const void , const void *))key – 指向要查找的元素的指针,类型转换为 void*base – 指向进行查找的数组的第一个对象的指针,类型转换为 voidnitems – base 所指向的数组中元素的个数。size – 数组中每个元素的大小,以字节为单位。compar – 用来比较两个元素的函数。函数功能: 执行二分查找。

//时间:2019年11月15日

//作者:Kroner

//编译环境: VS 2019

//库函数  stdlib.h

//函数原型   void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))

//    key -- 指向要查找的元素的指针,类型转换为 void* 。

//    base -- 指向进行查找的数组的第一个对象的指针,类型转换为 void* 。

//      nitems -- base 所指向的数组中元素的个数。

//       size -- 数组中每个元素的大小,以字节为单位。

//    compar -- 用来比较两个元素的函数。

//函数功能: 执行二分查找。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>



int cmpfunc(const void* a, const void* b)

{

return (*(int*)a - *(int*)b);

}


int values[] = { 5, 20, 29, 32, 63 };


int main()

{

int* item;

int key = 20;


/* 使用 bsearch() 在数组中查找值 32 */

item = (int*)bsearch(&key, values, 5, sizeof(int), cmpfunc);

if (item != NULL)

{

printf("Found item = %d\n", *item);

}

else

{

printf("Item = %d could not be found\n", *item);

}


return(0);

}

测试结果:这个相当于C语言封装的一个二分算法。后缀讲解算法题目的时候在讲解。

  1. void qsort(void base, size_t nitems, size_t size, int (compar)(const void , const void))函数原型 void qsort(void base, size_t nitems, size_t size, int (compar)(const void , const void))base – 指向要排序的数组的第一个元素的指针。nitems – 由 base 指向的数组中元素的个数。size – 数组中每个元素的大小,以字节为单位。compar – 用来比较两个元素的函数。函数功能: 数组排序

//时间:2019年11月15日

//作者:Kroner

//编译环境: VS 2019

//库函数  stdlib.h

//函数原型   void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

  // base -- 指向要排序的数组的第一个元素的指针。

  // nitems -- 由 base 指向的数组中元素的个数。

  //size -- 数组中每个元素的大小,以字节为单位。

  //compar -- 用来比较两个元素的函数。

//函数功能: 数组排序

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int values[] = { 88, 56, 100, 2, 25 };


int cmpfunc(const void* a, const void* b)

{

return (*(int*)a - *(int*)b);

}


int main()

{

int n;


printf("排序之前的列表:\n");

for (n = 0; n < 5; n++) {

printf("%d ", values[n]);

}


qsort(values, sizeof(values)/sizeof(int), sizeof(int), cmpfunc);


printf("\n排序之后的列表:\n");

for (n = 0; n < 5; n++) {

printf("%d ", values[n]);

}


return 0;

}

测试结果:若是要从大到小排列只需要cmpfunc的返回值前加个一个符号就可以。

  1. int abs(int x)函数原型 int abs(int x)函数功能: 返回 x 的绝对值。

//时间:2019年11月15日

//作者:Kroner

//编译环境: VS 2019

//库函数  stdlib.h

//函数原型   int abs(int x)

//函数功能: 返回 x 的绝对值。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int main()

{

int a, b;


a = abs(5);

printf("a 的值 = %d\n", a);


b = abs(-10);

printf("b 的值 = %d\n", b);


return 0;

}

测试结果:

  1. div_t div(int numer, int denom)函数原型 div_t div(int numer, int denom)函数功能: 分子除以分母。

//时间:2019年11月15日

//作者:Kroner

//编译环境: VS 2019

//库函数   stdlib.h

//函数原型:    div_t div(int numer, int denom)

//函数功能:    分子除以分母。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int main()

{

div_t output;


output = div(27, 4);

printf("(27/ 4) 的商  = %d\n", output.quot);

printf("(27/4) 的余数 = %d\n", output.rem);


output = div(27, 3);

printf("(27/ 3) 的商 = %d\n",  output.quot);

printf("(27/3) 的余数 = %d\n", output.rem);


return 0;

}

测试结果:

  1. int rand(void)
  2. void srand(unsigned int seed)函数原型: int rand(void)函数原型: void srand(unsigned int seed)函数功能: 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。函数功能: 该函数播种由函数 rand 使用的随机数发生器。

//时间:2019年11月15日

//作者:Kroner

//编译环境:  VS 2019

//库函数  stdlib.h

//函数原型:    int rand(void)

//函数原型      void srand(unsigned int seed)

//函数功能:    返回一个范围在 0 到 RAND_MAX 之间的伪随机数。

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <time.h>


int main()

{

int i, n;

time_t t;


n = 5;


/* 初始化随机数发生器 以CPU的时间作为随机种子所以是伪随机数*/

srand((unsigned)time(&t));


/* 输出 0 到 49 之间的 5 个随机数 */

for (i = 0; i < n; i++) {

printf("%d\n", rand() % 50);

}


return 0;

}

测试结果:d

断言库

title date tags categories description
C语言断言库assert.h 2020-04-02 03:42:57 -0700 断言库 C语言 assert.h是一个用于辅助调试程序的小型库

assert宏

assert()宏接收一个整型表达式作为参数,如果表达式为假,就在标准错误stderr中写入一条错误信息,如测试名,文件名,行号等,并调用abort()终止程序

  • 示例

#include <stdio.h>

#include <assert.h>

int Div(int a, int b)

{

   assert(b != 0);

   return a / b;

}

int main()

{

   printf("%d\n", Div(5, 0));

}

假设程序名为test.c,编译出的可执行文件为test,运行程序

test: test.c:5: Div: Assertion `b != 0' failed.

执行test文件,其源文件是test.c,第5行,b!=0的测试未通过

  • 禁用assert 如果认为已经排除了bug,可以关闭assert(),断言库提供了无须更改代码就可开闭assert的机制 通过在导入<assert.h>之前加上如下的宏定义,可以关闭assert断言

//此宏定义必须在导入assert.h之前

#define NDEBUG

#include <assert.h>

_Static_assert(C11)

assert是在运行时检查,C11新增_Static_assert声明,可以在编译时检查assert()表达式,assert会导致程序的终止,_Static_assert会导致编译的失败 _Static_assert接收两个参数,第一个参数是整型常量表达式,第二个参数是一个字符串,如果第一个表达式求值为假(0或_False),编译器会显示字符串,且不通过编译

  • 示例

#include <assert.h>

#include <limits.h>

#include <stdio.h>

_Static_assert(CHAR_BIT==16, "char不是16位");

intmain()

{

   printf("OK\n");

}

假设该文件名为test.c,使用gcc编译它

$gcc-otesttest.c

test.c:4:1: 错误:静态断言错误:"char is not 16bits"

   4|_Static_assert(CHAR_BIT==16, "char is not 16bits");

     |^~~~~~~~~~~~~~

目录
相关文章
|
12天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
51 23
|
12天前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
43 15
|
12天前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
51 24
|
8天前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
46 16
|
7天前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
19 3
|
7天前
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
11 2
|
11天前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
41 1
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
79 10
|
1月前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
62 9
|
1月前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
57 6

热门文章

最新文章