以下表格中,重点记住第一、二行十进制的输出格式,二十年来,八进制数我从来没有用过,十六进制数只在显示内存的地址时见过,所以大家不必关心八进制和十六进制的相关知识,了解即可。
| %hd、%d、%ld | 以十进制、有符号的形式输出short、int、long 类型的整数。 |
| %hu、%u、%lu | 以十进制、无符号的形式输出short、int、long 类型的整数。 |
| %ho、%o、%lo | 以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数 |
| %#ho、%#o、%#lo | 以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数 |
| %hx、%x、%lx | 以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。 |
| %#hx、%#x、%#lx | 以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。 |
如果输出需要带前缀,那就在%后面加上#,输出时会显示前缀。
1000,1000,1000
1000,1000,1000
1750,1750,1750
01750,01750,01750
3e8,3e8,3e8
0x3e8,0x3e8,3e8
#includeint main() { int a=1000; printf("%hd,%d,%ldn",a,a,a); printf("%hu,%u,%lun",a,a,a); printf("%ho,%o,%lon",a,a,a); printf("%#ho,%#o,%#lon",a,a,a); printf("%hx,%x,%lxn",a,a,a); printf("%#hx,%#x,%lxn",a,a,a); return 0; }
h:short
d:十进制
o: 八进制
x:十六进制
#: 八进制和十六进制的前缀
经常用到的几个库函数
随机数#include
int atoi(const char *nptr); //把字符串nptr转换成为int整数
long atol(const char *nptr); //把字符串nptr转换为long整数
long long atoll(const char *nptr); //求int整数的绝对值
long long atoq(const char *nptr); //求long整数的绝对值
在实际开发中,会用到随机数这个功能,例如编写游戏类的程序时就需要用到随机数。
1、生成随机数在C语言中,我们使用
void srand(unsigned int seed); // 随机数生成器的初始化函数 int rand(); // 获一个取随机数
srand函数初始化随机数发生器(俗称种子),在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同,通常我们采用
编写示例程序,把字符串里的数字全部加起来,例如字符串是"90576483975423",全部加起来结果是72。
//用于把数字的字符转换为整数,str为用字符方式表示的数字,函数的返回值为数字的整数
//如果str不是数字的字符,函数返回-1.
int ctoi(const char str)
{
switch(str)
{
case '0': return 0;
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
default: return -1;
}
}
int main()
{
char str[21];
memset(str,0,sizeof(str));
strcpy(str,"34723743672");
int i=0;
int result=0;
for(i=0;str[i]!=0;i++)
{
result=result+ctoi(str[i]);
}
printf("%s 加起来可以等于 %dn",str,result);
}
11)重写整数的atoi和atol库函数,实现其功能,函数的声明如下:
int ATOI(const char *nptr); // 把字符串nptr转换为int整数 long ATOL(const char *nptr); // 把字符串nptr转换为long整数
提示:例如字符串的"12305",转为整数12305,拆开就是10000+2000+300+0+5,即1*104+2*103+3*102+0*101+5*100
int POW(const int n,const int m)
{
int result;
if(m=0) result=1;
for(int i=1;i<=n;i++)
{
result*=n;
}
return result;
}
//用于把数字的字符转换为整数,str为用字符方式表示的数字,函数的返回值为数字的整数
//如果str不是数字的字符,函数返回-1.
int ctoi(const char str)
{
switch(str)
{
case '0': return 0;
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
default: return -1;
}
}
int main()
{
char str[21];
memset(str,0,sizeof(str));
strcpy(str,"12345");
int i=0;
//计算字符串长度
int len=strlen(str);
int result=0;
for(i=0;str[i]!=0;i++)
{
result=result+(ctoi(str[i])*POW(10,--len));
}
printf("%s=%dn",str,result);
}



