面向對象程序設計2020第一次作業
這個作業屬於哪個課程 | 2020面向對象程序設計張棟班 |
---|---|
這個作業要求在哪里 | 寒假作業1 |
這個作業的目標 | 安裝開發環境、回顧知識、了解編譯過程、實現白話文編程、記錄學習過程並發布博客 |
作業正文 | 1.問答題2. 實踐題3.編程題 |
其它參考文獻 | 問答題和實踐題中已注明 |
注: 系統是Mac OS
編程題
1. 要求:
- 在只有“整數、等於、增加、減少、看看”五個關鍵字、數據范圍0-99的情況下,實現白話文編程
2. 分解需求
-
語法定義:遇到“整數“時開始定義變量,並把“等於“后面的中文所代表的大小賦值給變量;遇到“增加“、”減少“能夠進行相應的運算;遇到”看看“能夠輸出最終結果
-
超過9的數據能夠處理成中文的語言習慣,比如10不是輸出”一零“而是”十“
temp = a.value;
if(temp <= 10)
{
printf("%s",convertToString(temp));
}
else if(temp % 10 == 0 && temp < 100)
{
printf("%s十",convertToString(temp/10)); #十的整數倍輸出為幾十而不是幾零
}
else if(temp < 20)
{
temp %= 10;
printf("十%s",convertToString(temp)); #輸出十幾而不是一十幾
}
else if(temp < 100)
{
printf("%s十%s",convertToString(temp/10),convertToString(temp%10));
}
- 能夠實現多個變量的輸入、運算、輸出(
沒實現,后面有時間再改善)
完整代碼
// 感覺處理方式不太好,提示錯誤的方式也是很暴力
#include <stdio.h>
#include <string.h>
typedef struct variable
{
char name[1000];
int value;
} var;
int convertToInt(char str[]);
char* convertToString(int n);
int main()
{
var a;
char integer[6];
char name[1000],operator[6],number[3];
int temp;
scanf("%s",integer);
if(strcmp(integer,"整數"))
{
printf("Error: 您輸入的不是“整數”\n");
}
else
{
scanf("%s%s%s",a.name,operator,number);
if(strcmp(operator,"等於"))
{
printf("Error: 您輸入的不是“等於”\n");
}
else if(convertToInt(number) == -1)
{
printf("Error: 請輸入正確的數字大小\n");
}
else
{
a.value = convertToInt(number); //賦初始值
scanf("%s",name);
while(!strcmp(name,a.name))
{
scanf("%s%s",operator,number);
if(convertToInt(number) == -1)
{
printf("Error: 請輸入正確的數字大小\n");
}
else if(!strcmp(operator, "增加"))
{
a.value += convertToInt(number);
}
else if(!strcmp(operator, "減少"))
{
a.value -= convertToInt(number);
}
else
{
printf("Error: 請輸入正確的運算\n");
break;
}
scanf("%s",name);
}
if(!strcmp(name,"看看"))
{
scanf("%s",name);
if(!strcmp(name,a.name))//“看看”后面輸入的內容得和前面的變量名稱相同
{
temp = a.value;
if(temp <= 10)
{
printf("%s",convertToString(temp));
}
else if(temp % 10 == 0 && temp < 100)
{
printf("%s十",convertToString(temp/10));//十的整數倍輸出為幾十而不是幾零
}
else if(temp < 20)
{
temp %= 10;
printf("十%s",convertToString(temp));//輸出十幾而不是一十幾
}
else if(temp < 100)
{
printf("%s十%s",convertToString(temp/10),convertToString(temp%10));
}
}
else
{
printf("不存在此變量\n");
}
}
}
}
return 0;
}
int convertToInt(char str[])
{
if(!strcmp(str,"零")) return 0;
else if(!strcmp(str,"一")) return 1;
else if(!strcmp(str,"二")) return 2;
else if(!strcmp(str,"三")) return 3;
else if(!strcmp(str,"四")) return 4;
else if(!strcmp(str,"五")) return 5;
else if(!strcmp(str,"六")) return 6;
else if(!strcmp(str,"七")) return 7;
else if(!strcmp(str,"八")) return 8;
else if(!strcmp(str,"九")) return 9;
else return -1;
}
char* convertToString(int n)
{
if(n == 0) return "零";
else if(n == 1) return "一";
else if(n == 2) return "二";
else if(n == 3) return "三";
else if(n == 4) return "四";
else if(n == 5) return "五";
else if(n == 6) return "六";
else if(n == 7) return "七";
else if(n == 8) return "八";
else if(n == 9) return "九";
else if(n == 10) return "十";
else return "Error";
}
運行示例
遇到的問題
- 中文的存儲和比較
- 運行C語言時輸出中文會變成問號
- 沒限制條件的話可能出現的錯誤太多(或許面向對象語言有比較好的處理錯誤的方法,但我目前還不懂)
- 以目前學到的知識能完成的東西十分有限