【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 字母或数字判断函数



posted @ 2023-12-01 09:48  FBshark  阅读(30)  评论(0编辑  收藏  举报