数字如何转换成ASCII码字符――谭浩强C课后题4.9

原题如下:

练习4.9  给一个不多于5位的正整数,求

    1.它是几位数;

    2.分别输出每一位数字;

    3.倒序输出各位数字。


思考:1.要求输入为不多于5位的正整数

      2.要取出5位中每位的数字

      3.要能辨认出前几位的数字0来判断到底是几位数


在取得每位的数字然后转换成ASCII码字符时候,犯了错误。

错误代码为:

    A=(char)k/10000; k=k%10000;
    B=(char)k/1000; k=k%1000;
    C=(char)k/100; k=k%100;
    D=(char)k/10;
    E=(char)k%10;

结果总是得不到正确的字符。

经过调试,发现这样得到的零位,是空字符。才惊觉用(char)强制转换,得到的是第0个字符,而不是字符‘0’。故修改代码为:

    A=(char)(k/10000+48); k=k%10000;
    B=(char)(k/1000+48); k=k%1000;
    C=(char)(k/100+48); k=k%100;
    D=(char)(k/10+48);
    E=(char)(k%10+48);

     整体代码附后:

/******************************************************

练习4.9  给一个不多于5位的正整数,求
    1.它是几位数;
    2.分别输出每一位数字;
    3.倒序输出各位数字。

CREATE----------------------------
By:     Idooi Liu
Time:   2015/09/18-1046
----------------------------------

******************************************************/

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int integer;
    int k;              //用于取值
    int grade;          //表明是几位数
    char A, B, C, D, E; //A=万,B=千,C=百,D=十,E=个

    do{
        printf("Please intput your number:\n");
        scanf("%d", &integer);
    }while(integer>99999 || integer<=0);

    k=integer;
    A=(char)(k/10000+48); k=k%10000;
    B=(char)(k/1000+48); k=k%1000;
    C=(char)(k/100+48); k=k%100;
    D=(char)(k/10+48);
    E=(char)(k%10+48);

    if(A!='0')
    {
        printf("%d 是五位数\n", integer);
        grade=5;
    }
    else if(B!='0')
    {
        printf("%d 是四位数\n", integer);
        grade=4;
    }
    else if(C!='0')
    {
        printf("%d 是三位数\n", integer);
        grade=3;
    }
    else if(D!='0')
    {
        printf("%d 是两位数\n", integer);
        grade=2;
    }
    else{
        printf("%d 是个位数\n", integer);
        grade=1;
    }

    switch(grade)
    {
        case 1: printf("%c\n", E);printf("%c\n", E);break;
        case 2: printf("%c%c\n", D,E);printf("%c%c\n", E,D);break;
        case 3: printf("%c%c%c\n", C,D,E);printf("%c%c%c\n", E,D,C);break;
        case 4: printf("%c%c%c%c\n", B,C,D,E);printf("%c%c%c%c\n", E,D,C,B);break;
        case 5: printf("%c%c%c%c%c\n", A,B,C,D,E);printf("%c%c%c%c%c\n", E,D,C,B,A);
                break;
    }

    return 0;
}


    当然,可以用 itoa 函数将整个正整数直接变成字符串。代码如下

/******************************************************

练习4.9  给一个不多于5位的正整数,求
    1.它是几位数;
    2.分别输出每一位数字;
    3.倒序输出各位数字。

CREATE----------------------------
By:     Idooi Liu
Time:   2015/09/25-1046
----------------------------------

******************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

int main(void)
{
    int integer;
    char stringInt[5]={0};
    int i;

    do{
        printf("Please intput your number:\n");
        scanf("%d", &integer);
    }while(integer>99999 || integer<=0);

    itoa(integer, stringInt, 10);

    printf("%s's digit is %d\n", stringInt, strlen(stringInt));

    bool flag=false;

    for(i=4; i>=0; i--)
    {
        if(stringInt[i]!=0)
            flag=true;
        if (flag)
            putchar(stringInt[i]);
    }

    return 0;
}


你可能感兴趣的:(转换,数字,字符)