以下表格中,重点记住第一、二行十进制的输出格式,二十年来,八进制数我从来没有用过,十六进制数只在显示内存的地址时见过,所以大家不必关心八进制和十六进制的相关知识,了解即可。
%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
%hX、%X、%lX
以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。
%#hx、%#x、%#lx
%#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); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)