面向對象程序設計2020第一次做業

面向對象程序設計2020第一次做業

這個做業屬於哪一個課程 2020面向對象程序設計張棟班
這個做業要求在哪裏 寒假做業1
這個做業的目標 安裝開發環境、回顧知識、瞭解編譯過程、實現白話文編程、記錄學習過程併發布博客
做業正文 1.問答題2. 實踐題3.編程題
其它參考文獻 問答題和實踐題中已註明

注: 系統是Mac OShtml


編程題

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語言時輸出中文會變成問號
  • 沒限制條件的話可能出現的錯誤太多(或許面嚮對象語言有比較好的處理錯誤的方法,但我目前還不懂)
  • 以目前學到的知識能完成的東西十分有限
相關文章
相關標籤/搜索