sqrt
求给定值的平方根
sqrt() 用来求给定值的平方根,其原型为:
double sqrt(double x);
【参数】x
为要计算平方根的值。
如果 x < 0
,将会导致 domain error
错误,并把全局变量 errno
的值为设置为 EDOM。
【返回值】返回 x
平方根。
Exp:
#include <math.h> main(){ double root; root = sqrt(200); printf("answer is %f/n", root); }
pow
求x的y次方(次幂)
pow()
函数用来求 x 的 y 次幂(次方),其原型为:
double pow(double x, double y);
pow()
用来计算以 x
为底的 y
次方值,然后将结果返回。设返回值为 ret
,则 ret = xy
。
可能导致错误的情况:
- 如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误。
- 如果底数 x 和指数 y 都是 0,可能会导致 domain error 错误,也可能没有;这跟库的实现有关。
- 如果底数 x 是 0,指数 y 是负数,可能会导致 domain error 或 pole error 错误,也可能没有;这跟库的实现有关。
- 如果返回值 ret 太大或者太小,将会导致 range error 错误。
错误代码:
- 如果发生 domain error 错误,那么全局变量 errno 将被设置为 EDOM;
- 如果发生 pole error 或 range error 错误,那么全局变量 errno 将被设置为 ERANGE。
Exp:
#include <stdio.h> #include <math.h> 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; }
fabs
求浮点数的绝对值
fabs()
函数用来求浮点数的绝对值。在TC中原型为:
float fabs(float x);
在VC6.0中原型为:
double fabs( double x );
【参数】x 为一个浮点数。
【返回值】计算|x|,当x不为负时返回 x,否则返回 -x。
Exp:
求任意一个双精度数的绝对值。
#include<stdio.h> #include<stdlib.h> #include<math.h> int main(void) { char c; float i=-1; /*提示用户输入数值类型*/ printf("I can get the float number's absolute value:/n"); scanf("%f",&i); while(1)/*循环*/ { printf("%f/n",fabs(i));/*求双精度绝对值并格式化*/ scanf("%f",&i);/*等待输入*/ } system("pause"); return 0; }
abs
求绝对值(整数)
abs()
用来计算参数j 的绝对值,然后将结果返回。
定义:
int abs (int j);
返回值:返回参数j 的绝对值结果。
Exp:
#ingclude <stdlib.h> main(){ int ansert; answer = abs(-12); printf("|-12| = %d/n", answer); }
atof
将字符串转换为double(双精度浮点数)
函数 atof()
用于将字符串转换为双精度浮点数(double),其原型为:
double atof (const char* str);
atof()
的名字来源于 ascii to floating point numbers 的缩写,它会扫描参数str字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('0')才结束转换,并将结果返回。参数str 字符串可包含正负号、小数点或E(e)来表示指数部分,如123. 456 或123e-2。
【返回值】返回转换后的浮点数;如果字符串 str 不能被转换为 double,那么返回 0.0
温馨提示:ANSI C 规范定义了
stof()、atoi()、atol()、strtod()、strtol()、strtoul()
共6个可以将字符串转换为数字的函数,大家可以对比学习;使用atof()
与使用strtod(str, NULL)
结果相同。另外在 C99 / C++11 规范中又新增了5个函数,分别是atoll()、strtof()、strtold()、strtoll()、strtoull()
,在此不做介绍,请大家自行学习。
Exp:
#include <stdio.h> #include <stdlib.h> int main(){ char *a = "-100.23", *b = "200e-2", *c = "341", *d = "100.34cyuyan", *e = "cyuyan"; printf("a = %.2f/n", atof(a)); printf("b = %.2f/n", atof(b)); printf("c = %.2f/n", atof(c)); printf("d = %.2f/n", atof(d)); printf("e = %.2f/n", atof(e)); system("pause"); return 0; }
atoi
atoi()
函数用来将字符串转换成整数(int),其原型为:
int atoi (const char * str);
【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace()
函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('0')才结束转换,并将结果返回。
【返回值】返回转换后的整型数;如果 str 不能转换成 int 或者 str 为空字符串,那么将返回 0。
Exp:
#include <stdio.h> #include <stdlib.h> int main () { int i; char buffer[256]; printf ("Enter a number: "); fgets (buffer, 256, stdin); i = atoi (buffer); printf ("The value entered is %d.", i); system("pause"); return 0; }
strcat
strcat()
函数用来连接字符串,其原型为:
char *strcat(char *dest, const char *src);
【参数】dest 为目的字符串指针,src 为源字符串指针。
strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。
注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。
【返回值】返回dest 字符串起始地址。
Exp:
#include <stdio.h> #include <string.h> int main () { char str[80]; strcpy (str,"these "); strcat (str,"strings "); strcat (str,"are "); strcat (str,"concatenated."); puts (str); return 0; }
strcmp
strcmp()
用来比较字符串(区分大小写),其原型为:
int strcmp(const char *s1, const char *s2);
【参数】s1, s2 为需要比较的两个字符串。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
【返回值】若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。
注意:strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符;如果考虑到本地化的需求,请使用 strcoll()
函数。
Exp:
#include <string.h> main(){ char *a = "aBcDeF"; char *b = "AbCdEf"; char *c = "aacdef"; char *d = "aBcDeF"; printf("strcmp(a, b) : %d/n", strcmp(a, b)); printf("strcmp(a, c) : %d/n", strcmp(a, c)); printf("strcmp(a, d) : %d/n", strcmp(a, d)); }
strcpy
字符串拷贝
strcpy()
会将参数src 字符串拷贝至参数dest 所指的地址。
char *strcpy(char *dest, const char *src);
函数说明:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。
返回值:返回参数dest 的字符串起始地址。
附加说明:如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。
Exp:
#include <string.h> main(){ char a[30] = "string(1)"; char b[] = "string(2)"; printf("before strcpy() :%s/n", a); printf("after strcpy() :%s/n", strcpy(a, b)); }
strlen
strlen()
函数用来计算字符串的长度,其原型为:
unsigned int strlen (char *s);
【参数说明】s为指定的字符串。
strlen()
用来计算指定的字符串s 的长度,不包括结束字符"0"。
【返回值】返回字符串s 的字符数。
注意一下字符数组,例如
char str[100] = "http://see.xidian.edu.cn/cpp/u/biaozhunku/";
定义了一个大小为100的字符数组,但是仅有开始的11个字符被初始化了,剩下的都是0,所以 sizeof(str) 等于100,strlen(str)
等于11。
如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定了,例如
char str[6] = "abcxyz";
strlen(str)
的返回值将是不确定的。因为str的结尾不是0,strlen()
会继续向后检索,直到遇到'0',而这些区域的内容是不确定的。
注意:strlen()
函数计算的是字符串的实际长度,遇到第一个'0'结束。如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。
Exp:
#include<stdio.h> #include<string.h> int main() { char *str1 = "http://see.xidian.edu.cn/cpp/u/shipin/"; char str2[100] = "http://see.xidian.edu.cn/cpp/u/shipin_liming/"; char str3[5] = "12345"; printf("strlen(str1)=%d, sizeof(str1)=%d/n", strlen(str1), sizeof(str1)); printf("strlen(str2)=%d, sizeof(str2)=%d/n", strlen(str2), sizeof(str2)); printf("strlen(str3)=%d, sizeof(str3)=%d/n", strlen(str3), sizeof(str3)); return 0; }
tolower
将大写字母转换为小写字母
这尼玛看名字就知道是转小写
定义函数:
int tolower(int c);
函数说明:若参数 c 为大写字母则将该对应的小写字母返回。
返回值:返回转换后的小写字母,若不须转换则将参数c 值返回。
Exp:
#include <ctype.h> main(){ char s[] = "aBcDeFgH12345;!#$"; int i; printf("before tolower() : %s/n", s); for(i = 0; i < sizeof(s); i++) s[i] = tolower(s[i]); printf("after tolower() : %s/n", s); }
话说上次写了个小函数来转换 其实大写变小写就是 +
0x20
toupper
将小写字母转换为大写字母
定义函数:
int toupper(int c);
函数说明:若参数 c 为小写字母则将该对应的大写字母返回。
返回值:返回转换后的大写字母,若不须转换则将参数c 值返回。
Exp:
#include <ctype.h> main(){ char s[] = "aBcDeFgH12345;!#$"; int i; printf("before toupper() : %s/n", s); for(i = 0; i < sizeof(s); i++) s[i] = toupper(s[i]); printf("after toupper() : %s/n", s); }
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论