C语言 念数字?

Python010

C语言 念数字?,第1张

你一共提出三个问题:

1、为什么不写成int?

此处也可以写成int。

如果写成int型,还要求出各位上的数字是多少,才能将数字转换为拼音。

写成char型,省去了转换各位数字的环节,可以用str[i]任意取出各位上的数字。两位,也方便负号的处理。

2、为什么是*?

如果不加*,只能定义一个字符数组(或叫字符串),如char num[]="yi"

加上一个*后,char *num[]跟不加*相比,①num已经变成字符串数组;②num变成了指针数组,num[0]、num[1]等各个元素已经成为指向“ling”、“yi”的地址,而“ling”等数据则放在常量区。

根据num[0]指向“ling”,num[1]指向“yi”,num[2]指向“er”……

这样可以通过num[i],很方便地找到对应的数字i的汉语拼音。

3、str[0]-'0'是什么意思?

先看str[0]是什么,它是你输入的整数的第一个数字,比如它是3,在这里程序是把3当作字符'3'处理的(原因就是变量str的类型为char型),在储存这个'3'时,实际上储存的是字符'3'的asc码,即51。而字符'0'的asc码是48,str[0]-'0'=51-48=3。这样,num[str[0]-'0']=num[3],如前面所述,就很容易找到3对应的拼音“san”了。

有什么问题请留言。

你的程序有很多不对的地方,没必要用数组,多次的getchar()也不知道是干啥的,我写一个程序贴给你看看吧,有问题再问。

#include<stdio.h>

void judge_num(int num)

void split_num(int num)

int main()

{

int num=0

printf("请输入一个整数:")

scanf("%d",&num)

if(num<0)

{

printf("fu ")

num=-num

}

split_num(num)

printf("\n")

return 0

}

void judge_num(int num)

{

switch(num)

{

case 0: printf("ling ")break

case 1: printf("yi ")break

case 2: printf("er ")break

case 3: printf("san ")break

case 4: printf("si ")break

case 5: printf("wu ")break

case 6: printf("liu ")break

case 7: printf("qi ")break

case 8: printf("ba ")break

case 9: printf("jiu ")break

}

}

void split_num(int num)

{

int n

if((n=num/10)!=0)

split_num(n)

judge_num(num%10)

}