一、实验目的及要求
- 加强程序基本结构、数组、字符数组和指针数组的练习,掌握字符数组和字符串函数的使用。
- 要求:上机前先编制程序并画出程序框图;独立完成实验;独立完成实验报告。
- 进一步提高程序的设计能力和调试能力
- 掌握与数组有关的算法。
2.从键盘上接收一个多至9位整数、2位小数的数值,请将其转换成大写金额,即写成:
×亿×仟×佰×拾×万×仟×佰×拾×元×角×分
的形式。例如:当从键盘上输入 374910.56 时,输出结果为:
×亿×仟×佰叁拾柒万肆仟玖佰壹拾零元伍角陆分
或: 叁拾柒万肆仟玖佰壹拾零元伍角陆分
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char a[13];
int j=-1, len, i, t;
char *s[] = { "亿","仟","佰","拾","万","仟","佰","拾","元","角","分" };
char *p[] = { "零","壹","贰","叁","肆","伍","陆","柒","捌","玖" };
printf("请输入金额(最多至9位整数2位小数):\n");
gets_s(a);
len = strlen(a); //读取数组a的长度
printf("大写金额为:\n");
for (i = len - 1; i >= 0; i--)//检测是否存在小数点,因为要算小数点的位置所以要用减法
if (a[i] == '.')
{
j = i;
break;
}
if (j==-1)
t = len;
else //有小数点
t = j;
//输出整数,1122.13 一千一百二十二 p1,s5...t=4
for (i = 0; i < t; i++)
{
printf("%s%s", p[a[i] - 48], s[9 - t + i]);
}
if (j != -1)//不是整数的情况,开始算小数
{
if ((len - j) == 3)//本身长度与小数点位置差三,即小数点后有两位,1122.13 len=7,a[4]小数点
{
printf("%s角", p[a[++i] - 48]);//0的ASCII为48,转化为字符串形式
printf("%s分", p[a[++i] - 48]);
}
if ((len - j) == 2)
printf("%s角", p[a[++i] - 48]);
}
putchar('\n');
return 0;
}