【C 语言基础】牛客华为机试必知必会的C库函数
简短不看版本:
1. scanf读入16进制数,scanf("%x", var);
或者scanf("%i", var);
2. 求平方根:double sqrt(double);
或者 double pow(double, 0.5);
3. 求 int最大范围:包含头文件 <limits.h> 然后打印宏 INT_MAX
4. 将字符串转换为数字:包含头文件<stdlib.h>,int my_int = atoi(char *str);
5. 判断字符类型:包含头文件<ctype.h>, 判断字母的函数为 int isalpha(char ch);
知识点1:scanf读入16进制数
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在
我的解法:
void HexToDec(void)
{
uint32_t result = 0;
scanf("%x", &result);
printf("%d", result);
}
scanf("%x",&n);就可以接收16进制数据。输入时可以写前导符0x也可以不写。
网友的解法:
int num=0;
while(scanf("%i\n",&num)!=-1)
{
printf("%d\n",num);
}
在scanf格式中,%d 只与十进制形式的整数相匹配。而%i 则可以匹配八进制、十进制、十六进制表示的整数。· 如果输入的数字有前缀 0(018、025),%i将会把它当作八进制数来处理,如果有前缀0x (0x54),它将以十六进制来处理。
知识点2:怎么求一个数的根号?
方法1:使用<math.h>的函数double sqrt(double);
方法2:使用<math.h>的函数double pow(double, 0.5);
知识点3:如何求int 类型的最大有效范围?
#include <limits.h>
printf("int的最大值是:%d\n", INT_MAX);//注:int 如果占32位, INT_MAX值为65535, unsigned int 最大大概为21亿
知识点4:atoi()函数的头文件和使用注意
头文件:stdlib.h。
它的作用是将一个字符串表示的数字转换为对应的整数。
函数原型:int atoi(const char* str);
如果成功,则返回相应的整数值;
如果发生错误,则返回0。
错误情况 & 特殊情况示例
#include <stdlib.h>
char str1[] = "0xABC";
int num1 = atoi(str1);//如果字符串中包含非数字字符,则会停止转换并返回已经转换得到的整数。
printf("%d",num1);//错误,输出0
char str2[] = "0003355";
int num2 = atoi(str2);//如果字符串中有前导0,则会去掉前导0
printf("%d",num2);//正确:输出3355
char str3[] = "+0003355";
int num3 = atoi(str3);//允许带正号、负号,但只允许出现一次。(两个“+”号,返回错误)
printf("%d",num3);//正确:输出3355
char str4[] = "3000000000";//30亿,超过INT_MAX(大约为21亿)
int num4 = atoi(str4);//发生越界,数值错误
printf("%d",num4);//错误值,输出-1294967296
知识点5:isalpha函数的头文件和使用注意
字符分很多类,对一个字符处理时我们往往要对类型进行判断。
使用时,包含 <ctype.h>
头文件;这些函数可以让你免于大于小于号判断条件的书写。
- isalpha 字母判断函数
- islower 小写字母判断函数
- isupper 大写字母判断函数
- tolower 大写字母转小写字母函数
- toupper 小写字母转大写字母函数
- isdigit 十进制数字判断函数
- isxdigit 十六进制数字判断函数
- isalnum 字母或数字判断函数