zoukankan      html  css  js  c++  java
  • 第一次个人编程作业

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系)
    这个作业要求在哪里 第一次个人编程作业
    这个作业的目标 了解GitHub以及复习c语言
    作业正文 GitHub仓库地址
    其他参考文献 感谢洪成龙大佬的帮助

    记录自己的代码行数,需求分析时间,编码时间。

    • 代码行数:214行
    • 需求分析时间:一小时
    • 编码时间:2天

    编程题目

    汉字是迄今为止持续使用时间最长的文字,也是上古时期各大文字体系中唯一传承至今者,中国历代皆以汉字为主要的官方文字。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
    小杨同学想到:用汉字来进行编程一定很有趣,来请你帮帮他。

    编程要求

    请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):

    • 变量定义:整数 (变量名) 等于 (数字)
    • 运算(加法):(变量名) 增加 (数字)
    • 运算(减法):(变量名) 减少 (数字)
    • 输出:看看 (变量名) or 看看 “(字符串内容)”

    附加要求:

    • 选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
      若否则后没有任何操作使用(无)来进行填充(参考样例2)。

    注意事项

    • 输入输出采用utf-8编码,请在编码过程中注意。
    • 数字只会出现:零一二三四五六七八九十。(此条作废,可先完成0-10的情况)
    • 字符串输出的双引号是全角,即中文双引号。
    • 变量类型要求只有整数,如有余力,可以自己实现更多。
    • 测试数据会相较于样例复杂,请考虑充分需求。
    • 不限制编程语言。
    • 不能使用eval函数动态执行代码,或调用系统指令。
    • 数据输入形式为交互式运行,类似于shell。

    分析与学习

    看到题目是想了想自己会什么代码,最后决定用了自己记得最多的c写。
    本来不知道怎么多次输入,经过百度查询到了scanf("%s",var1))!=EOF
    去除双引号的方法则是由洪成龙大佬教导完成
    最后完成的代码其实只是根据样例完成的,比较死板,还要改进。

    • 把汉字转为数字(只做了0-10的情况)
    int exchange(char a[])
    {
    	 if(strcmp("零",a)==0)return 0;
    	 if(strcmp("一",a)==0)return 1;
    	 if(strcmp("二",a)==0)return 2;
    	 if(strcmp("三",a)==0)return 3;
    	 if(strcmp("四",a)==0)return 4;
    	 if(strcmp("五",a)==0)return 5;
    	 if(strcmp("六",a)==0)return 6;
    	 if(strcmp("七",a)==0)return 7;
    	 if(strcmp("八",a)==0)return 8;
    	 if(strcmp("九",a)==0)return 9;
    	 if(strcmp("十",a)==0)return 10;
    }
    
    • 去除双引号(只能去除英文双引号)
    void disp(char *p)
    {
    	int l=strlen(p);
    	if(p[0]='"')
    	{
    		for(int i=1;i<l-1;i+=2)
    			printf("%c%c",p[i],p[i+1]);
    	}	
    }
    
    • 主函数(对输入的字符串进行判断实现输出)
    int main()
    {
    	char *str[11]={"零","一","二","三","四","五","六","七","八","九","十"};
        char var[100],var1[100],name[100],name1[100],name2[100],op[100],num[100];
    	char a1[100],a2[100],a3[100],a4[100],a5[100],a6[100],a7[100],a8[100],a9[100];
    	scanf("%s %s %s %s",var,name,op,num);
        int sum1,sum2,sum3,a,b;
    	sum1=exchange(num);
    	while((scanf("%s",var1))!=EOF)
    	{	
    		if(strcmp(var1,var)==0)
    		{
    			scanf("%s %s %s ",name1,op,num);
    			sum2=exchange(num);
    		}
    		else if(strcmp(var1,name)==0)
    		{
    			scanf("%s %s",op,num);
    			if(strcmp(op,"增加")==0)
    			{
                    a=exchange(num);
                    sum1+=a; 
                }
                else if(strcmp(op,"减少")==0)
                {
                    a=exchange(num);
                    sum1-=a;
                } 
    		}
    		else if(strcmp(var1,name1)==0)
    		{
    			scanf("%s %s",op,num);
    			if(strcmp(op,"增加")==0)
    			{
                    a=exchange(num);
                    sum2+=a; 
                }
                else if(strcmp(op,"减少")==0)
                {
                    a=exchange(num);
                    sum2-=a;
                } 
    		}
    		else if(strcmp(var1,"看看")==0)
    		{
    			scanf("%s",name2);
    			if(strcmp(name2,name)==0)
    				printf("%s
    ",str[sum1]);
    			else if(strcmp(name2,name1)==0)
    				printf("%s
    ",str[sum2]);
    		}	
    		else if(strcmp(var1,"如果")==0)
    		{
    			scanf("%s %s %s %s %s %s %s %s %s",a1,a2,a3,a4,a5,a6,a7,a8,a9);
    			if(strcmp(a5,"看看")!=0)
    			{
    				if(strcmp(a1,name)==0)
    				{
    					sum3=exchange(a3);
    					b=exchange(a7);
    					if(strcmp(a2,"大于")==0)
    					{
    						if(sum1>sum3)
    						{
    							if(strcmp(a5,name)==0)
    							{
    								if(strcmp(a6,"增加")==0)
    									sum1+=b;
    								else if(strcmp(a6,"减少")==0)
    									sum1-=b;
    							}
    							if(strcmp(a5,name1)==0)
    							{
    								if(strcmp(a6,"增加")==0)
    									sum2+=b;
    								else if(strcmp(a6,"减少")==0)
    									sum2-=b;
    							}
    						}
    					}
    					else if(strcmp(a2,"小于")==0)
    					{
    						if(sum1<sum3)
    						{
    							if(strcmp(a5,name)==0)
    							{
    								if(strcmp(a6,"增加")==0)
    									sum1+=b;
    								else if(strcmp(a6,"减少")==0)
    									sum1-=b;
    							}
    							if(strcmp(a5,name1)==0)
    							{
    								if(strcmp(a6,"增加")==0)
    									sum2+=b;
    								else if(strcmp(a6,"减少")==0)
    									sum2-=b;
    							}
    						}
    					}
    				}
    				if(strcmp(a1,name1)==0)
    				{
    					sum3=exchange(a3);
    					b=exchange(a7);
    					if(strcmp(a2,"大于")==0)
    					{
    						if(sum1>sum3)
    						{
    							if(strcmp(a5,name)==0)
    							{
    								if(strcmp(a6,"增加")==0)
    									sum1+=b;
    								else if(strcmp(a6,"减少")==0)
    									sum1-=b;
    							}
    							if(strcmp(a5,name1)==0)
    							{
    								if(strcmp(a6,"增加")==0)
    									sum2+=b;
    								else if(strcmp(a6,"减少")==0)
    									sum2-=b;
    							}
    						}
    					}
    					else if(strcmp(a2,"小于")==0)
    					{
    						if(sum1<sum3)
    						{
    							if(strcmp(a5,name)==0)
    							{
    								if(strcmp(a6,"增加")==0)
    									sum1+=b;
    								else if(strcmp(a6,"减少")==0)
    									sum1-=b;
    							}
    							if(strcmp(a5,name1)==0)
    							{
    								if(strcmp(a6,"增加")==0)
    									sum2+=b;
    								else if(strcmp(a6,"减少")==0)
    									sum2-=b;
    							}
    						}
    					}
    				}
    			}
    			else if(strcmp(a5,"看看")==0)
    			{
    				sum3=exchange(a3);
    				if(strcmp(a1,name)==0)
    				{
    					if(strcmp(a2,"大于")==0)
    					{
    						if(sum1>sum3)
    							disp(a6);
    						else 
    							disp(a9);
    					}
    					if(strcmp(a2,"小于")==0)
    					{
    						if(sum1<sum3)
    							disp(a6);
    						else 
    							disp(a9);
    					}
    				}
    				if(strcmp(a1,name1)==0)
    				{
    					if(strcmp(a2,"大于")==0)
    					{
    						if(sum2>sum3)
    							disp(a6);
    						else 
    							disp(a9);
    					}
    					if(strcmp(a2,"小于")==0)
    					{
    						if(sum2<sum3)
    							disp(a6);
    						else 
    							disp(a9);
    					}
    					
    				}
    			}
    		}
    	}
    }
    

    测试样例


  • 相关阅读:
    leetcode[164] Maximum Gap
    leetcode[162] Find Peak Element
    leetcode[160] Intersection of Two Linked Lists
    leetcode[156] binary tree upside down
    leetcode[155] Min Stack
    leetcode Find Minimum in Rotated Sorted Array II
    leetcode Find Minimum in Rotated Sorted Array
    leetcode Maximum Product Subarray
    ROP
    windbg bp condition
  • 原文地址:https://www.cnblogs.com/linhang123/p/12288339.html
Copyright © 2011-2022 走看看