阿拉伯数字转化为大写汉字

本文为大一时所写的文章(2017/5/3),文笔还很生疏,在很多问题上认识不深,算是在学校的微信公众号上的一个编程探究模块上的投稿,本人当时也参与了本模块的维护和管理。补档。
首先向大家说一声抱歉,上次因为一些个人原因没有按时更新编程讨论角,下次有什么特殊情况我一定会提前和大家说明原因!
本次的主角是“阿拉伯数字转化为大写汉字”这个算法和代码,在这之前,我们来看看很经典的变量——静态变量(static)和动态变量(auto)
在这里我们先列出静态函数和动态函数的一般声明格式:
Static type name = value——静态函数
Type name = value——动态函数
可见,他们的区别就在于在数据类型前是否有static 的声明。
一、auto的局部变量和全局变量
一般我们在写代码的时候,在数据类型前不加任何说明的时候就是auto变量,这种变量的特点就是在程序执行过程中建立,随函数的调用需要动态的分配存储空间,调用结束释放所占用存储空间,这和函数形参有点相似,如果你在main函数里写一个auto变量,那么在这个程序结束的时候他就会自动释放占用的空间,生存周期是和main函数相同,属于动态局部变量,在未做初始化的时候默认值为垃圾值(即随机数)同样,在用户函数里使用auto函数都认为是局部动态函数,生存周期都在{}内。默认初始值都是随机数。
如果在main函数和用户函数以外的地方的auto就是动态全局变量,她的生存周期是整个源“项目”,即可以被整个项目里的函数进行调用(如果一个源文件有多个文件可以调用那么这些就是一个项目)范围很广,注意,需要在动态全局变量前加上extern声明,表示可用于其它文件中调用。动态全局变量在未进行初始化的情况下值为0.
二、static的局部变量和全局变量
Static的局部变量的作用域为当前函数(main or 用户函数),从定义位置开始,到其所在的{}结束。她的生命周期是程序运行开始到结束,每次调用的时候她的值是不会被初始化的,而是继承上次函数结束时的值,在没有初始化的情况下,值为0。
静态局部变量的使用方法如图所示:
阿拉伯数字转化为大写汉字_第1张图片
如果是动态局部变量则是:
阿拉伯数字转化为大写汉字_第2张图片
Static的全局变量位置与动态全局变量相同,但是作用范围只限于本文件,不能被别的文件进行调用,在没有初始化的情况下,值为0。
接下来进入到我们的主角“阿拉伯数字转化为大写汉字”
代码如下:

#include 
#include 
int main()
{
	char wei[][4] = {"零","一","二","三","四","五","六","七","捌","玖"};
	char shu[][4]  =  {"","拾","佰","仟"};
	char quan[4];  
	int  num,a;  
	int flag;    
	scanf("%d",&num);
	if( num < 0)exit(-1);
	if( num > 9999)exit(-1);
	a = 0;         
	while(num > 0)
		{
			quan[a] = num % 10;
			num /= 10;
			a++;
		}
		
		flag = 0; 
		for( int i= a -1; i>=0; i--) 
		{
			if( quan[i] == 1 && i == 1 && a ==2 ) 
				printf("%s",shu[i]);    
			else if( quan[i] > 0)       
				printf("%s%s",wei[quan[i]],shu[i]),flag = 0; 
			else if( i > 0 && flag ==0) 
				printf("%s",wei[0]),flag=1; 
		}
		printf("\n");
		return 0;
}

阿拉伯数字转化为大写汉字_第3张图片
在这里因为大写汉字和阿拉伯数字有个明显的区别就是,大写汉字如果在有两个及以上的零在相邻位上只读一个零,所以本程序的关键就在此,我们构建一个开关变量(flag),初始值为0,在上一位是零的话将开关的值改为1,在下一位输出判断的时候,如果也是零则不输出,如果不是零,则将开关的值又调回0。
其他就是数字的录入和输出的方式了,多看就可以了,主要是要有一个开关的解决思路,在以后的类似问题上开关思想将对你程序的优化大有裨益。
由于本人的能力有限,代码难免出现错误,请各位同学斧正!

你可能感兴趣的:(往期补档,补档)