第一次個人編程作業(更新至2020.02.07)


這個作業屬於哪個課程 軟件工程
這個作業要求在哪里 第一次個人編程作業
這個作業的目標 完成漢字編程
作業正文 第一次個人編程作業(更新至2020.02.07)
其他參考文獻 無,但是感謝洪成龍陳徳渠的解答

編程信息

時間:2020.02.06|2020.02.07

代碼行數:86行|338行

需求分析時間:1h30min|2h

編碼時間:3h|2h

要求

請編寫一個程序,制作一個簡易的中文語言編譯器,即使用中文語法進行編程,輸入為逐行輸入,每行為一個語句,一個語句代變一個操作,滿足以下語法要求(括號內代變格式類型,具體參考樣例):
變量定義:整數 (變量名) 等於 (數字)
運算(加法):(變量名) 增加 (數字)
運算(減法):(變量名) 減少 (數字)
輸出:看看 (變量名) or 看看 “(字符串內容)”

附加要求:

選擇:如果 (判斷語句) 則 (操作語句) 否則 (操作語句)
若否則后沒有任何操作使用(無)來進行填充(參考樣例2)。

C++過程

1.准備

2.變量定義的裝入

3.增加與減少及查看

4.后續的附加要求

5.附加要求的判斷

6.函數部分

運行結果

源代碼(舊的,新的在下面)

github代碼

代碼全文

#include<stdio.h>
#include<string.h>
#include<string>
using namespace std;
int main()
    {
	char a1[10],a2[10],a3[10],a4[10];
	char b1[10],b2[10],b3[10],b4[10],b5[10],b6[10],b7[10],b8[10],b9[10],b10[10];
	char x[10],y[10],z[10];
	int begin=0,in=0,in1=0,in2=0,ele;
	int loading(char i[10]);
	void pri(int t);
	
	//裝入第一行 
	scanf("%s %s %s %s",a1,a2,a3,a4);
	in=loading(a4);
	begin=begin+in;
	 
	for(int asd;asd<1000;asd++)//循環 增加 減少 直到 輸入為看看 
	{
		scanf("%s %s %s",x,y,z);
		if(strcmp(x,"看看")==0)
			break;
		if(strcmp(y,"減少")==0)
		{	in1=loading(z);
		begin=begin-in1;}
		if(strcmp(y,"增加")==0)
		{	in2=loading(z);
		begin=begin+in2;}
	}
	//輸入后續條件 
	scanf("%s %s %s %s %s %s %s %s %s %s",b1,b2,b3,b4,b5,b6,b7,b8,b9,b10);
	ele=loading(b4);
	
	pri(begin);
	printf("\n");
	
	int len=strlen(b7);
	int len1=strlen(b10);
	
	
	//判斷 條件 (去除雙引號) 
	if(begin>ele)
		for (int i1=1;i1<len-1; i1+=2) 
		{
			
			printf("%c%c",b7[i1],b7[i1+1]);
		}
	else
		for (int i2=1;i2<len1-1;i2+=2) 
		{
		
			printf("%c%c",b10[i2],b10[i2+1]);
		}
}

//函數部分 
int loading(char i[10])//中文->數字 
{
	if(strcmp(i,"一")==0){return 1;}
	if(strcmp(i,"二")==0){return 2;}
	if(strcmp(i,"三")==0){return 3;}
	if(strcmp(i,"四")==0){return 4;}
	if(strcmp(i,"五")==0){return 5;}
	if(strcmp(i,"六")==0){return 6;}
	if(strcmp(i,"七")==0){return 7;}
	if(strcmp(i,"八")==0){return 8;}
	if(strcmp(i,"九")==0){return 9;}
	if(strcmp(i,"十")==0){return 10;}
	if(strcmp(i,"零")==0){return 0;}

}
void pri(int t)//數字->中文
{
	if(t==0){printf("零");} 
	if(t==1){printf("一");} 
	if(t==2){printf("二");} 
	if(t==3){printf("三");} 
	if(t==4){printf("四");} 
	if(t==5){printf("五");} 
	if(t==6){printf("六");} 
	if(t==7){printf("七");} 
	if(t==8){printf("八");} 
	if(t==9){printf("九");} 
	if(t==10){printf("十");}  
}

思考

1.這部分代碼只滿足了題目部分的要求且具有局限性
2.題目難點在於如何讓中文數字與阿拉伯數字對應,還有變量的數量控制
3.附加要求中雙引號的去除要注意,如果 (判斷語句) 則 (操作語句) 否則 (操作語句)的中文與代碼的轉換是一大難點

時間:2020.2.6

代碼更新

#include<stdio.h>
#include<string.h>
#include <string>
using namespace std;
int main()
{
	char a1[100],a2[100],a3[100],a4[100],c3[100],c4[100];
	char b1[10],b2[10],b3[10],b4[10],b5[10],b6[10],b7[10],b8[10],b9[10];
	char e2[100],e3[100],name1[100],name2[100],d2[100],d3[100];
	int begin=0,in=0,in1=0,in2=0,ele,i=0,begin1=0;
	
	int loading(char i[100]);
	void pri(int t);
	
	scanf("%s",a2);
	scanf("%s",name1);
	scanf("%s",c3);
	scanf("%s",c4);
	in1=loading(c4);
	begin=begin+in1;
	//裝入 
	for(;;){
		scanf("%s",a1);
		//開頭為整數的裝入 
			if(strcmp(a1,"整數")==0)
			{
							
				
				//第二次裝入
					
					scanf("%s",name2);
					scanf("%s",a3);
					scanf("%s",a4);
					in=loading(a4);
					begin1=begin1+in;
			}
			//開頭為如果的裝入 
			else if(strcmp(a1,"如果")==0)
			{
				scanf("%s",b1);
				//判斷第一個已定義的事物 
				if(strcmp(name1,b1)==0){
				
					scanf("%s",b2);
					//判斷如果中的事物是否大於條件 
					if(strcmp(b2,"大於")==0)
					{	scanf("%s",b3);
						int num1=loading(b3);
						scanf("%s",b4);
						scanf("%s",b5);
						if(strcmp(b5,"看看")==0)//判斷 第二次條件 1 
							{
								scanf("%s",b6);
								scanf("%s",b7);
								scanf("%s",b8);
								scanf("%s",b9);
								int len=strlen(b6);
								int len1=strlen(b9);
								//判斷第一個條件是否成立及去除雙引號 
								if(begin>num1){	
								for (int i1=1;i1<len-1; i1+=2) 
								{
									printf("%c%c",b6[i1],b6[i1+1]);
								}
								}
								else{	
									for (int i2=1;i2<len1-1;i2+=2) 
										{
		
											printf("%c%c",b9[i2],b9[i2+1]);
										}
									
								}
							}
						//判斷 第二次條件  2 
						else if(strcmp(b5,name1)==0)
							{	scanf("%s",b6);
								scanf("%s",b7);
								scanf("%s",b8);
								scanf("%s",b9); 
								int num2=loading(b7);
								if(begin>num1)
								{
								if(strcmp(b6,"減少")==0)
									{begin=begin-num2;}
								if(strcmp(b6,"增加")==0)
									{begin=begin+num2;}
								}
							}
						//判斷 第二次條件  3 
						else if(strcmp(b5,name2)==0)
							{	scanf("%s",b6);
								scanf("%s",b7);
								scanf("%s",b8);
								scanf("%s",b9); 
								int num2=loading(b7);
								if(begin>num1)
								{
								if(strcmp(b6,"減少")==0)
									{begin1=begin1-num2;}
								if(strcmp(b6,"增加")==0)
									{begin1=begin1+num2;}
								}
							}
					}
					//判斷如果中的事物是否小於條件 
					if(strcmp(b2,"小於")==0)
					{	scanf("%s",b3);
						int num1=loading(b3);
						scanf("%s",b4);
						scanf("%s",b5);
						
						if(strcmp(b5,"看看")==0)
							{
								scanf("%s",b6);
								scanf("%s",b7);
								scanf("%s",b8);
								scanf("%s",b9);
								if(begin<num1){int len=strlen(b6);
								for (int i1=1;i1<len-1; i1+=2) 
								{
									printf("%c%c",b6[i1],b6[i1+1]);
								}
								}
								else{	int len1=strlen(b9);
									for (int i2=1;i2<len1-1;i2+=2) 
										{
		
											printf("%c%c",b9[i2],b9[i2+1]);
										}
									
								}
							}
							
						else if(strcmp(b5,name1)==0)
							{	scanf("%s",b6);
								scanf("%s",b7);
								int num2=loading(b7);
								if(begin<num1)
								{
								if(strcmp(b6,"減少")==0)
									{begin=begin-num2;}
								if(strcmp(b6,"增加")==0)
									{begin=begin+num2;}
								}
							}
							
						else if(strcmp(b5,name2)==0)
							{	scanf("%s",b6);
								scanf("%s",b7);
								int num2=loading(b7);
								if(begin<num1)
								{
								if(strcmp(b6,"減少")==0)
									{begin1=begin1-num2;}
								if(strcmp(b6,"增加")==0)
									{begin1=begin1+num2;}
								}
							}
					}
					
				}
				if(strcmp(name2,b1)==0){
				
					scanf("%s",b2);
					if(strcmp(b2,"大於")==0)
					{	scanf("%s",b3);
						int num1=loading(b3);
						scanf("%s",b4);
						scanf("%s",b5);
						if(strcmp(b5,"看看")==0)
							{
								scanf("%s",b6);
								scanf("%s",b7);
								scanf("%s",b8);
								scanf("%s",b9);
								if(begin1>num1){	int len=strlen(b6);
								for (int i1=1;i1<len-1; i1+=2) 
								{
									printf("%c%c",b6[i1],b6[i1+1]);
								}
								}
								else{	int len1=strlen(b9);
									for (int i2=1;i2<len1-1;i2+=2) 
										{
		
											printf("%c%c",b9[i2],b9[i2+1]);
										}
									
								}
							}
						else if(strcmp(b5,name1)==0)
							{	scanf("%s",b6);
								scanf("%s",b7);
								int num2=loading(b7);
								if(begin1>num1)
								{
								if(strcmp(b6,"減少")==0)
									{begin=begin-num2;}
								if(strcmp(b6,"增加")==0)
									{begin=begin+num2;}
								}
							}
						else if(strcmp(b5,name2)==0)
							{	scanf("%s",b6);
								scanf("%s",b7);
								int num2=loading(b7);
								if(begin1>num1)
								{
								if(strcmp(b6,"減少")==0)
									{begin1=begin1-num2;}
								if(strcmp(b6,"增加")==0)
									{begin1=begin1+num2;}
								}
							}
					}
					if(strcmp(b2,"小於")==0)
					{	scanf("%s",b3);
						int num1=loading(b3);
						scanf("%s",b4);
						scanf("%s",b5);
						if(strcmp(b5,"看看")==0)
							{
								scanf("%s",b6);
								scanf("%s",b7);
								scanf("%s",b8);
								scanf("%s",b9);
								
								
								if(begin1<num1){int len=strlen(b6);
								
								for (int i1=1;i1<len-1; i1+=2) 
								{
									printf("%c%c",b6[i1],b6[i1+1]);
								}
								}
								else{int len1=strlen(b9);	
									for (int i2=1;i2<len1-1;i2+=2) 
										{
		
											printf("%c%c",b9[i2],b9[i2+1]);
										}
									
								}
							}
						else if(strcmp(b5,name1)==0)
							{	scanf("%s",b6);
								scanf("%s",b7);
								int num2=loading(b7);
								if(begin1<num1)
								{
								if(strcmp(b6,"減少")==0)
									{begin=begin-num2;}
								if(strcmp(b6,"增加")==0)
									{begin=begin+num2;}
								}
							}
						else if(strcmp(b5,name2)==0)
							{	scanf("%s",b6);
								scanf("%s",b7);
								int num2=loading(b7);
								if(begin1<num1)
								{
								if(strcmp(b6,"減少")==0)
									{begin1=begin1-num2;}
								if(strcmp(b6,"增加")==0)
									{begin1=begin1+num2;}
								}
							}
					}
					}
			}	
			//開頭為已定義事物1的判斷 
			else if(strcmp(a1,name1)==0)
			{	
				scanf("%s",d2);
				scanf("%s",d3);
				int num3=loading(d3);
				if(strcmp(d2,"增加")==0)
				{begin=begin+num3;}	
				if(strcmp(d2,"減少")==0)
				{begin=begin-num3;}	
			}					
			//開頭為已定義事物2的判斷 
			else if(strcmp(a1,name2)==0)
			{	
				scanf("%s",d2);
				scanf("%s",d3);
				int num4=loading(d3);
				if(strcmp(d2,"增加")==0)
				{begin1=begin1+num4;}	
				if(strcmp(d2,"減少")==0)
				{begin1=begin1-num4;}	
			}
			//開頭為看看的裝入 
			else if(strcmp(a1,"看看")==0)
			{
				scanf("%s",e2);
				if(strcmp(e2,name1)==0)
					{pri(begin);} 
				else if(strcmp(e2,name2)==0)
					{pri(begin1);}
				
			}
}
	
}
//函數部分 
int loading(char i[100])//中文->數字 
{
	if(strcmp(i,"一")==0){return 1;}
	if(strcmp(i,"二")==0){return 2;}
	if(strcmp(i,"三")==0){return 3;}
	if(strcmp(i,"四")==0){return 4;}
	if(strcmp(i,"五")==0){return 5;}
	if(strcmp(i,"六")==0){return 6;}
	if(strcmp(i,"七")==0){return 7;}
	if(strcmp(i,"八")==0){return 8;}
	if(strcmp(i,"九")==0){return 9;}
	if(strcmp(i,"十")==0){return 10;}
	if(strcmp(i,"零")==0){return 0;}

}
void pri(int t)//數字->中文
{
	if(t==0){printf("零");} 
	if(t==1){printf("一");} 
	if(t==2){printf("二");} 
	if(t==3){printf("三");} 
	if(t==4){printf("四");} 
	if(t==5){printf("五");} 
	if(t==6){printf("六");} 
	if(t==7){printf("七");} 
	if(t==8){printf("八");} 
	if(t==9){printf("九");} 
	if(t==10){printf("十");}  
}

運行結果

樣例一

樣例二

新源代碼

github代碼

思考

1.新的代碼滿足了題目中兩個樣例的要求,但是對於數字的范圍與正負沒有進行判斷。
2.重復使用多次相同的代碼,可以在使用函數進行改進。
3.改變了思考思路,第一次是一次性輸入多個變量,后改為一次一次輸入,后者更加靈活多變。

時間:2020.2.7


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM