首页
前端面试题
前端报错总结
电子书
更多
插件下载
Search
1
JavaScript基础(二)操作符 流程控制
42 阅读
2
HTML基础
20 阅读
3
Vue基础
17 阅读
4
wctype.h
14 阅读
5
Vue2(知识点)
13 阅读
默认分类
HTML CSS
HTML基础
CSS
HTML5 CSS3
javaScript
javaScript基础
javaScript高级
Web APIs
jQuery
js小总结
WEB开发布局
Vue
PS切图
数据可视化
Git使用
Uniapp
c语言入门
标准库
嵌入式
登录
Search
liuxiaobai
累计撰写
108
篇文章
累计收到
12
条评论
首页
栏目
默认分类
HTML CSS
HTML基础
CSS
HTML5 CSS3
javaScript
javaScript基础
javaScript高级
Web APIs
jQuery
js小总结
WEB开发布局
Vue
PS切图
数据可视化
Git使用
Uniapp
c语言入门
标准库
嵌入式
页面
前端面试题
前端报错总结
电子书
插件下载
搜索到
104
篇与
的结果
2023-09-20
math.h
math.hmath.h头文件提供了很多数学函数。很多数学函数的返回值是 double 类型,但是同时提供 float 类型与 long double 类型的版本,比如pow()函数就还有powf()和powl()版本。double pow(double x, double y); float powf(float x, float y); long double powl(long double x, long double y);为了简洁,下面就略去了函数的f后缀(float 类型)和l后缀(long double)版本。类型和宏math.h 新定义了两个类型别名。float_t:(当前系统)最有效执行 float 运算的类型,宽度至少与 float 一样。double_t:(当前系统)最有效执行 double 运算的类型,宽度至少与 double 一样。它们的具体类型可以通过宏FLT_EVAL_METHOD来了解。FLT_EVAL_METHOD 的值float_t 对应的类型double_t 对应的类型0floatdouble1doubledouble2long doublelong double其他由实现决定由实现决定math.h 还定义了一些宏。INFINITY:表示正无穷,返回一个 float 类型的值。NAN:表示非数字(Not-A-Number),返回一个 float 类型的值。错误类型数学函数的报错有以下类型。Range errors:运算结果不能用函数返回类型表示。Domain errors:函数参数不适用当前函数。Pole errors:参数导致函数的极限值变成无限。Overflow errors:运算结果太大,导致溢出。Underflow errors:运算结果太小,导致溢出。变量math_errhandling提示了当前系统如何处理数学运算错误。math_errhandling 的值描述MATH_ERRNO系统使用 errno 表示数学错误MATH_ERREXCEPT系统使用异常表示数学错误MATH_ERREXCEPT系统同时使用两者表示数学错误数值类型数学函数的参数可以分成以下几类:正常值,无限值,有限值和非数字。下面的函数用来判断一个值的类型。fpclassify():返回给定浮点数的分类。isfinite():如果参数不是无限或 NaN,则为真。isinf():如果参数是无限的,则为真。isnan():如果参数不是数字,则为真。isnormal():如果参数是正常数字,则为真。下面是一个例子。isfinite(1.23) // 1 isinf(1/tan(0)) // 1 isnan(sqrt(-1)) // 1 isnormal(1e-310)) // 0signbit()signbit()判断参数是否带有符号。如果参数为负值,则返回1,否则返回0。signbit(3490.0) // 0 signbit(-37.0) // 1三角函数以下是三角函数,参数为弧度值。acos():反余弦。asin():反正弦。atan():反正切atan2():反正切。cos():余弦。sin():正弦。tan():正切。不要忘了,上面所有函数都有 float 版本(函数名加上 f 后缀)和 long double 版本(函数名加上 l 后缀)。下面是一个例子。cos(PI/4) // 0.707107双曲函数以下是双曲函数,参数都为浮点数。acosh():反双曲余弦。asinh():反双曲正弦。atanh():反双曲正切。cosh():双曲余弦。tanh():双曲正切。sinh():双曲正弦。指数函数和对数函数以下是指数函数和对数函数,它们的返回值都是 double 类型。exp():计算欧拉数 e 的乘方,即 ex。exp2():计算 2 的乘方,即 2x。expm1():计算 ex - 1。log():计算自然对数,exp()的逆运算。log2():计算以2为底的对数。log10():计算以10为底的对数。logp1():计算一个数加 1 的自然对数,即ln(x + 1)。logb():计算以宏FLT_RADIX(一般为2)为底的对数,但只返回整数部分。下面是一些例子。exp(3.0) // 20.085500 log(20.0855) // 3.000000 log10(10000) // 3.000000如果结果值超出了 C 语言可以表示的最大值,函数将返回HUGE_VAL,它是一个在math.h中定义的 double 类型的值。如果结果值太小,无法用 double 值表示,函数将返回0。以上这两种情况都属于出错。frexp()frexp()将参数分解成浮点数和指数部分(2为底数),比如 1234.56 可以写成 0.6028125 * 211,这个函数就能分解出 0.6028125 和 11。double frexp(double value, int* exp);它接受两个参数,第一个参数是用来分解的浮点数,第二个参数是一个整数变量指针。它返回小数部分,并将指数部分放入变量exp。如果参数为0,则返回的小数部分和指数部分都为0。下面是一个例子。double frac; int expt; // expt 的值是 11 frac = frexp(1234.56, &expt); // 输出 1234.56 = 0.6028125 x 2^11 printf("1234.56 = %.7f x 2^%d\n", frac, expt);ilogb()ilogb()返回一个浮点数的指数部分,指数的基数是宏FLT_RADIX(一般是2)。int ilogb(double x);它的参数为x,返回值是 logr|x|,其中r为宏FLT_RADIX。下面是用法示例。ilogb(257) // 8 ilogb(256) // 8 ilogb(255) // 7ldexp()ldexp()将一个数乘以2的乘方。它可以看成是frexp()的逆运算,将小数部分和指数部分合成一个f * 2^n形式的浮点数。double ldexp(double x, int exp);它接受两个参数,第一个参数是乘数x,第二个参数是2的指数部分exp,返回“x * 2exp”。ldexp(1, 10) // 1024.000000 ldexp(3, 2) // 12.000000 ldexp(0.75, 4) // 12.000000 ldexp(0.5, -1) // 0.250000modf()modf()函数提取一个数的整数部分和小数部分。 double modf(double value, double* iptr);它接受两个参数,第一个参数value表示待分解的数值,第二个参数是浮点数变量iptr。返回值是value的小数部分,整数部分放入变量double。下面是一个例子。// int_part 的值是 3.0 modf(3.14159, &int_part); // 返回 0.14159scalbn()scalbn()用来计算“x * rn”,其中r是宏FLT_RADIX。double scalbn(double x, int n);它接受两个参数,第一个参数x是乘数部分,第二个参数n是指数部分,返回值是“x * rn”。下面是一些例子。scalbn(2, 8) // 512.000000这个函数有多个版本。scalbn():指数 n 是 int 类型。scalbnf():float 版本的 scalbn()。scalbnl():long double 版本的 scalbn()。scalbln():指数 n 是 long int 类型。scalblnf():float 版本的 scalbln()。scalblnl():long double 版本的 scalbln()。round()round()函数以传统方式进行四舍五入,比如1.5舍入到2,-1.5舍入到-2。double round(double x);它返回一个浮点数。下面是一些例子。round(3.14) // 3.000000 round(3.5) // 4.000000 round(-1.5) // -2.000000 round(-1.14) // -1.000000它还有一些其他版本。lround():返回值是 long int 类型。llround():返回值是 long long int 类型。trunc()trunc()用来截去一个浮点数的小数部分,将剩下的整数部分以浮点数的形式返回。double trunc(double x);下面是一些例子。trunc(3.14) // 3.000000 trunc(3.8) // 3.000000 trunc(-1.5) // -1.000000 trunc(-1.14) // -1.000000ceil()ceil()返回不小于其参数的最小整数(double 类型),属于“向上舍入”。double ceil(double x);下面是一些例子。ceil(7.1) // 8.0 ceil(7.9) // 8.0 ceil(-7.1) // -7.0 ceil(-7.9) // -7.0floor()floor()返回不大于其参数的最大整数,属于“向下舍入”。double floor(double x);下面是一些例子。floor(7.1) // 7.0 floor(7.9) // 7.0 floor(-7.1) // -8.0 floor(-7.9) // -8.0下面的函数可以实现“四舍五入”。double round_nearest(double x) { return x < 0.0 ? ceil(x - 0.5) : floor(x + 0.5); }fmod()fmod()返回第一个参数除以第二个参数的余数,就是余值运算符%的浮点数版本,因为%只能用于整数运算。double fmod(double x, double y);它在幕后执行的计算是x - trunc(x / y) * y,返回值的符号与x的符号相同。fmod(5.5, 2.2) // 1.100000 fmod(-9.2, 5.1) // -4.100000 fmod(9.2, 5.1) // 4.100000浮点数比较函数以下函数用于两个浮点数的比较,返回值的类型是整数。isgreater():返回x > y的结果。isgreaterequal():返回x >= y的结果。isless():返回x < y的结果。islessequal():返回x <= y的结果。islessgreater():返回(x < y) || (x > y)的结果。下面是一些例子。isgreater(10.0, 3.0) // 1 isgreaterequal(10.0, 10.0) // 1 isless(10.0, 3.0) // 0 islessequal(10.0, 3.0) // 0 islessgreater(10.0, 3.0) // 1 islessgreater(10.0, 30.0) // 1 islessgreater(10.0, 10.0) // 0isunordered()isunordered()返回两个参数之中,是否存在 NAN。int isunordered(any_floating_type x, any_floating_type y);下面是一些例子。isunordered(1.0, 2.0) // 0 isunordered(1.0, sqrt(-1)) // 1 isunordered(NAN, 30.0) // 1 isunordered(NAN, NAN) // 1其他函数下面是 math.h 包含的其它函数。pow():计算参数x的y次方。sqrt():计算一个数的平方根。cbrt():计算立方根。fabs():计算绝对值。hypot():根据直角三角形的两条直角边,计算斜边。fmax():返回两个参数之中的最大值。fmin():返回两个参数之中的最小值。remainder():返回 IEC 60559 标准的余数,类似于fmod(),但是余数范围是从-y/2到y/2,而不是从0到y。remquo():同时返回余数和商,余数的计算方法与remainder()相同。copysign():返回一个大小等于第一个参数、符号等于第二个参数的值。nan():返回 NAN。nextafter():获取下一个(或者上一个,具体方向取决于第二个参数y)当前系统可以表示的浮点值。nextoward():与nextafter()相同,除了第二个参数是 long double 类型。fdim():如果第一个参数减去第二个参数大于0,则返回差值,否则返回0。fma():以快速计算的方式,返回x * y + z的结果。nearbyint():在当前舍入方向上,舍入到最接近的整数。当前舍入方向可以使用fesetround()函数设定。rint():在当前舍入方向上,舍入到最接近的整数,与nearbyint()相同。不同之处是,它会触发浮点数的INEXACT异常。lrint():在当前舍入方向上,舍入到最接近的整数,与rint()相同。不同之处是,返回值是一个整数,而不是浮点数。erf():计算一个值的误差函数。erfc():计算一个值的互补误差函数。tgamma():计算 Gamma 函数。lgamma():计算 Gamma 函数绝对值的自然对数。下面是一些例子。pow(3, 4) // 81.000000 sqrt(3.0) // 1.73205 cbrt(1729.03) // 12.002384 fabs(-3490.0) // 3490.000000 hypot(3, 4) // 5.000000 fmax(3.0, 10.0) // 10.000000 fmin(10.0, 3.0) // 3.000000
2023年09月20日
3 阅读
0 评论
0 点赞
2023-09-20
locale.h
locale.h简介locale.h是程序的本地化设置,主要影响以下的行为。数字格式货币格式字符集日期和时间格式它设置了以下几个宏。LC_COLLATE:影响字符串比较函数strcoll()和strxfrm()。LC_CTYPE:影响字符处理函数的行为。LC_MONETARY:影响货币格式。LC_NUMERIC:影响printf()的数字格式。LC_TIME:影响时间格式strftime()和wcsftime()。LC_ALL:将以上所有类别设置为给定的语言环境。setlocale()setlocale()用来设置当前的地区。char* setlocale(int category, const char* locale);它接受两个参数。第一个参数表示影响范围,如果值为前面五个表示类别的宏之一,则只影响该宏对应的类别,如果值为LC_ALL,则影响所有类别。第二个参数通常只为"C"(正常模式)或""(本地模式)。任意程序开始时,都隐含下面的调用。setlocale(LC_ALL, "C");下面的语句将格式本地化。setlocale(LC_ALL, "");上面示例中,第二个参数为空字符,表示使用当前环境提供的本地化设置。理论上,第二个参数也可以设为当前系统支持的某种格式。setlocale(LC_ALL, "en_US.UTF-8");但是这样的话,程序的可移植性就变差了,因为无法保证其他系统也会支持那种格式。所以,通常都将第二个参数设为空字符串,使用操作系统的当前设置。setlocale()的返回值是一个字符串指针,表示已经设置好的格式。如果调用失败,则返回空指针 NULL。setlocale()可以用来查询当前地区,这时第二个参数设为 NULL 就可以了。char *loc; loc = setlocale(LC_ALL, NULL); // 输出 Starting locale: C printf("Starting locale: %s\n", loc); loc = setlocale(LC_ALL, ""); // 输出 Native locale: en_US.UTF-8 printf("Native locale: %s\n", loc);localeconv()localeconv()用来获取当前格式的详细信息。struct lconv* localeconv(void);该函数返回一个 Struct 结构指针,该结构里面包含了格式信息,它的主要属性如下。char* mon_decimal_point:货币的十进制小数点字符,比如.。char* mon_thousands_sep:货币的千位分隔符,比如,。char* mon_grouping:货币的分组描述符。char* positive_sign:货币的正值符号,比如+或为空字符串。char* negative_sign:货币的负值符号,比如-。char* currency_symbol:货币符号,比如$。char frac_digits:打印货币金额时,十进制小数点后面输出几位小数,比如设为2。char p_cs_precedes:设为1时,货币符号currency_symbol出现在非负金额前面。设为0时,出现在后面。char n_cs_precedes:设为1时,货币符号currency_symbol出现在负的货币金额前面。设为0时,出现在后面。char p_sep_by_space:决定了非负的货币金额与货币符号之间的分隔字符。char n_sep_by_space:决定了负的货币金额与货币符号之间的分隔字符。char p_sign_posn:决定了非负值的正值符号的位置。char n_sign_posn:决定了负值的负值符号的位置。char* int_curr_symbol:货币的国际符号,比如USD。char int_frac_digits:使用国际符号时,frac_digits的值。char int_p_cs_precedes:使用国际符号时,p_cs_precedes的值。char int_n_cs_precedes:使用国际符号时,n_cs_precedes的值。char int_p_sep_by_space:使用国际符号时,p_sep_by_space的值。char int_n_sep_by_space:使用国际符号时,n_sep_by_space的值。char int_p_sign_posn:使用国际符号时,p_sign_posn的值。char int_n_sign_posn:使用国际符号时,n_sign_posn的值。下面程序打印当前系统的属性值。#include <stdio.h> #include <locale.h> #include <string.h> int main () { setlocale (LC_ALL,"zh_CN"); struct lconv * lc; lc=localeconv(); printf ("decimal_point: %s\n",lc->decimal_point); printf ("thousands_sep: %s\n",lc->thousands_sep); printf ("grouping: %s\n",lc->grouping); printf ("int_curr_symbol: %s\n",lc->int_curr_symbol); printf ("currency_symbol: %s\n",lc->currency_symbol); printf ("mon_decimal_point: %s\n",lc->mon_decimal_point); printf ("mon_thousands_sep: %s\n",lc->mon_thousands_sep); printf ("mon_grouping: %s\n",lc->mon_grouping); printf ("positive_sign: %s\n",lc->positive_sign); printf ("negative_sign: %s\n",lc->negative_sign); printf ("frac_digits: %d\n",lc->frac_digits); printf ("p_cs_precedes: %d\n",lc->p_cs_precedes); printf ("n_cs_precedes: %d\n",lc->n_cs_precedes); printf ("p_sep_by_space: %d\n",lc->p_sep_by_space); printf ("n_sep_by_space: %d\n",lc->n_sep_by_space); printf ("p_sign_posn: %d\n",lc->p_sign_posn); printf ("n_sign_posn: %d\n",lc->n_sign_posn); printf ("int_frac_digits: %d\n",lc->int_frac_digits); printf ("int_p_cs_precedes: %d\n",lc->int_p_cs_precedes); printf ("int_n_cs_precedes: %d\n",lc->int_n_cs_precedes); printf ("int_p_sep_by_space: %d\n",lc->int_p_sep_by_space); printf ("int_n_sep_by_space: %d\n",lc->int_n_sep_by_space); printf ("int_p_sign_posn: %d\n",lc->int_p_sign_posn); printf ("int_n_sign_posn: %d\n",lc->int_n_sign_posn); return 0; }
2023年09月20日
4 阅读
0 评论
0 点赞
2023-09-20
limits.h
limits.hlimits.h提供了用来定义各种整数类型(包括字符类型)取值范围的宏。CHAR_BIT:每个字符包含的二进制位数。SCHAR_MIN:signed char 类型的最小值。SCHAR_MAX:signed char 类型的最大值。UCHAR_MAX:unsiged char 类型的最大值。CHAR_MIN:char 类型的最小值。CHAR_MAX:char 类型的最大值。MB_LEN_MAX:多字节字符最多包含的字节数。SHRT_MIN:short int 类型的最小值。SHRT_MAX:short int 类型的最大值。USHRT_MAX:unsigned short int 类型的最大值。INT_MIN:int 类型的最小值。INT_MAX:int 类型的最大值。UINT_MAX:unsigned int 类型的最大值。LONG_MIN:long int 类型的最小值。LONG_MAX:long int 类型的最大值。ULONG_MAX:unsigned long int 类型的最大值。LLONG_MIN:long long int 类型的最小值。LLONG_MAX:long long int 类型的最大值。ULLONG_MAX:unsigned long long int 类型的最大值。下面的示例是使用预处理指令判断,int 类型是否可以用来存储大于 100000 的数。#if INT_MAX < 100000 #error int type is too small #endif上面示例中,如果 int 类型太小,预处理器会显示一条出错消息。可以使用limit.h里面的宏,为类型别名选择正确的底层类型。#if INT_MAX >= 100000 typedef int Quantity; #else typedef long int Quantity; #endif上面示例中,如果整数类型的最大值(INT_MAX)不小于100000,那么类型别名Quantity指向int,否则就指向long int。
2023年09月20日
2 阅读
0 评论
0 点赞
1
...
8
9
10
...
35