• 面向对象程序设计寒假作业1(编程题)


    这个作业属于哪个课程 2020面向对象程序设计张栋班
    这个作业要求在哪里 面向对象程序设计寒假作业1
    这个作业的目标 按照要求完成简单文言文编程的相关功能
    其他参考文献
    ps:因为能力有限加上本人有点懒,所以该程序仅支持数据范围在0~99内的处理和很差的错误提示以及代码不够简练,如有大佬发现我的代码有不足之处,请指正,希望日后能改进程序。

    1、思考题目所需要的功能

    • (1)数字转换成为汉字需要考虑以下特殊情况:
      • 0~9的数字
      • 10~19的数字
      • 整十的数字
        在这里我设置了一个字符数组记录0~10的数字
    char hz[11][10]={"零","一","二","三","四","五","六","七","八","九","十"};
    

    然后分情况处理对应的特殊情况
    然后我写了一个函数来完成:

    if(num>=10)
    {
    	if(num%10==0)
    	{
    		if(num==10)
    		{
    			printf("%s
    ",hz[10]);
    		}
    		else
    		{
    		printf("%s%s
    ",hz[num/10],hz[10]);
    		}
    	}
    	else
    	{
    		if(num<20)
    		{
    			printf("%s%s
    ",hz[10],hz[num%10]);
    		}
    		else
    		{
    			printf("%s%s%s
    ",hz[num/10],hz[10],hz[num%10]);
    		}
    	}
    }
    else
    {
    	printf("%s
    ",hz[num]);
    }
    
    • (2)汉字转换为数字:
      这里我了解到gbk编码一个汉字为两个字节,于是我想到用strlen函数先量取字符串长度,因为范围在0~99,因此可以得出字符串长度仅可为2、4、6;
      • 当长度为6时,提取字符串头两个和最后两个位,利用循环在hz数组中对比相应的汉字数字
      • 当长度为4和2时,仅需提取头两位进行循环对比
        函数代码如下:
    int hz_to_num(char* str)
    {
    	char a[10],b[10];
    	int len,i,j;
    	len=strlen(str);
    	if(len==4)
    	{
    		a[0]=str[0];
    		a[1]=str[1];
    		b[0]=str[2];
    		b[1]=str[3];
    		if(strcmp(b,hz[10])==0)
    		{
    			for(i=0;i<11;i++)
    			{
    				if(strcmp(a,hz[i])==0)
    				{
    					return i*10;
    				}
    			}
    		}
    		else
    		{
    			for(i=0;i<10;i++)
    			{
    				if(strcmp(b,hz[i])==0)
    				{
    					return i+10;
    				}
    			}
    		}
    	}
    	else if(len==6)
    	{
    		a[0]=str[0];
    		a[1]=str[1];
    		b[0]=str[4];
    		b[1]=str[5];
    		b[2]=0;//这里十分不解,自己也是试了几遍才试出来,需要加上一个'',感觉是内存分配出了问题,但是不知道为什么
    		for(i=0;i<10;i++)
    		{
    			if(strcmp(a,hz[i])==0)
    			{
    				for(j=0;j<11;j++)
    				{
    					if(strcmp(b,hz[j])==0)
    					{
    						return i*10+j;
    					}
    				}
    			}
    		}
    	}
    	else if(len==2)
    	{
    		a[0]=str[0];
    		a[1]=str[1];
    		for(i=0;i<11;i++)
    		{
    			if(strcmp(a,hz[i])==0)
    			{
    				return i;
    			}
    		}
    	}
    }
    
    • (3)计算功能
      这里引入关键字字符数组:
    char keywords[5][20]={"整数","等于","增加","减少","看看"};
    

    该功能需要结合前两个函数进行计算代码如下:

    int calculate(int num,char* command,char* number)
    {
    	int n;
    	if(strcmp(command,keywords[2])==0)
    	{
    		n=hz_to_num(number);
    		//printf("%d
    ",n);
    		num+=n; 
    		return num;
    	}
    	else if(strcmp(command,keywords[3])==0)
    	{
    		n=hz_to_num(number);
    		num-=n;
    		return num;
    	}
    }
    

    2、直接给出代码

    #include<stdio.h>
    #include<string.h>
    int hz_to_num(char* str); 
    char hz[11][10]={"零","一","二","三","四","五","六","七","八","九","十"};
    char keywords[5][20]={"整数","等于","增加","减少","看看"};
    int calculate(int num,char* command,char* number)
    {
    	int n;
    	if(strcmp(command,keywords[2])==0)
    	{
    		n=hz_to_num(number); 
    		num+=n;
    		return num;
    	}
    	else if(strcmp(command,keywords[3])==0)
    	{
    		n=hz_to_num(number);
    		num-=n;
    		return num;
    	}
    }
    int hz_to_num(char* str)
    {
    	char a[10],b[10];
    	int len,i,j;
    	len=strlen(str);
    	if(len==4)
    	{
    		a[0]=str[0];
    		a[1]=str[1];
    		b[0]=str[2];
    		b[1]=str[3];
    		if(strcmp(b,hz[10])==0)
    		{
    			for(i=0;i<11;i++)
    			{
    				if(strcmp(a,hz[i])==0)
    				{
    					return i*10;
    				}
    			}
    		}
    		else
    		{
    			for(i=0;i<10;i++)
    			{
    				if(strcmp(b,hz[i])==0)
    				{
    					return i+10;
    				}
    			}
    		}
    	}
    	else if(len==6)
    	{
    		a[0]=str[0];
    		a[1]=str[1];
    		b[0]=str[4];
    		b[1]=str[5];
    		b[2]=0;
    		for(i=0;i<10;i++)
    		{
    			if(strcmp(a,hz[i])==0)
    			{
    				for(j=0;j<11;j++)
    				{
    					if(strcmp(b,hz[j])==0)
    					{
    						return i*10+j;
    					}
    				}
    			}
    		}
    	}
    	else if(len==2)
    	{
    		a[0]=str[0];
    		a[1]=str[1];
    		for(i=0;i<11;i++)
    		{
    			if(strcmp(a,hz[i])==0)
    			{
    				return i;
    			}
    		}
    	}
    }
    int num_to_hz(int num)
    {
    	if(num>=10)
    	{
    		if(num%10==0)
    		{
    			if(num==10)
    			{
    				printf("%s
    ",hz[10]);
    			}
    			else
    			{
    				printf("%s%s
    ",hz[num/10],hz[10]);
    			}
    		}
    		else
    		{
    			if(num<20)
    			{
    				printf("%s%s
    ",hz[10],hz[num%10]);
    			}
    			else
    			{
    				printf("%s%s%s
    ",hz[num/10],hz[10],hz[num%10]);
    			}
    		}
    	}
    	else
    	{
    		printf("%s
    ",hz[num]);
    	}
    }
    int main()
    {
    	char name[20],command[100][20];
    	int i=0,target;
    	scanf("%s",command[i++]);
    	if(strcmp(command[i-1],keywords[0])==0)
    	{
    		scanf("%s",name);
    		scanf("%s",command[i++]);
    		if(strcmp(command[i-1],keywords[1])==0)
    		{
    			scanf("%s",command[i++]);
    			target=hz_to_num(command[i-1]);	
    		}
    		else
    		{
    			printf("输入错误!
    "); 
    			return 0; 
    		}		
    	}
    	else
    	{
    		printf("错误,请先定义变量!
    ");
    	}
    	while(1)
    	{
    		scanf("%s",command[i++]);
    		if(strcmp(command[i-1],keywords[4])==0)
    		{
    			scanf("%s",command[i++]);
    			if(strcmp(command[i-1],name)==0)
    			{
    				num_to_hz(target);
    				return 0;
    			}
    			else
    			{
    				printf("输入名称错误!
    "); 
    			}
    		}
    		else if(strcmp(command[i-1],name)==0)
    		{
    			scanf("%s",command[i++]);
    			scanf("%s",command[i++]);
    			target=calculate(target,command[i-2],command[i-1]);
    		}
    		else
    		{
    			printf("输入名称错误!
    ");
    		}
    	}	
    }
    
     
    

    3、下面是我的几个测试样例




  • 相关阅读:
    JS内置对象-Array之splice-删插替
    for-in的缺点
    Obeject.hasOwnProperty
    JS中的深拷贝和浅拷贝
    函数中this的指向
    CSS预处理器之less和sass
    [转]javaweb学习总结(四十四)——监听器(Listener)学习
    [转]javaweb学习总结(四十三)——Filter高级开发
    [转]javaweb学习总结(四十二)——Filter(过滤器)学习
    [转]javaweb学习总结(四十一)——Apache的DBUtils框架学习
  • 原文地址:https://www.cnblogs.com/JoshuaYu/p/12232979.html
Copyright © 2020-2023  润新知