您的位置:首页 > 其它

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

2015-09-18 13:51 344 查看
原题如下:
练习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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: