C语言整数

C语言整数,第1张

C语言整数

以下表格中,重点记住第一、二行十进制的输出格式,二十年来,八进制数我从来没有用过,十六进制数只在显示内存的地址时见过,所以大家不必关心八进制和十六进制的相关知识,了解即可。

%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

#include 

int 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语言中,我们使用 头文件中的 srand和rand 函数来生成随机数。

void srand(unsigned int seed);      // 随机数生成器的初始化函数
int  rand();                        // 获一个取随机数

srand函数初始化随机数发生器(俗称种子),在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同,通常我们采用 头文件中的 time 函数即可得到一个精确到秒的时间作为种子。

编写示例程序,把字符串里的数字全部加起来,例如字符串是"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);
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5658851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存