| 這個作業屬於哪個課程 | <班級的鏈接> |
|---|---|
| 這個作業要求在哪里 | <作業要求的鏈接> |
| 這個作業的目標 | 1、安裝C++開發環境2、完成問答題、實踐題及編程題3、發布博客 |
| 作業正文 | 如下 |
| 其他參考文獻 | <一> <二> <三> |
問答題:
c語言的缺陷:語法不夠嚴格,安全性較差,不能面向對象編程,經常要考慮數組越界、地址訪問之類的問題
c,c++編譯過程:
1、預處理,對源碼的偽指令和特殊符號進行處理
2、編譯,將經過預處理之后的程序轉換成特定匯編代碼
3、匯編,將匯編代碼轉換為機器碼
4、鏈接,將目標文件鏈接生成可運行文件
實踐題:
原本就使用的vs,配置了環境變量,用cl語句編譯生成了exe文件,打印出了hello world,編譯器版本順帶顯示了

編程題:
輸入輸出均支持兩位數
假設輸入數據有效
題目的難度在於數字和漢字的轉換
f1函數通過對輸入中文返回不同種類的數字,分為四類,分別是0-10,11-19,10的倍數,及形如幾十幾的數字
f2函數用來分離字符串中的某個漢字
f3函數用於將輸入的單個漢字零-十轉換為0-10
題目中有多處無用輸入,用字符串a處理
具體見代碼

#include <stdio.h>
#include<string.h>
int f1(char* s);
void f2(char* a, char* b);
int f3(char* s);
char chinese[11][4] = { "零","一","二","三","四","五","六","七","八","九","十" };
int main(void)
{
int i;
char a[10];
scanf("%s", a);
if (strcmp(a, "整數") == 0)
{
int purse;
for (i = 0; i < 3; i++)
{
scanf("%s", a);
}
purse = f1(a);
scanf("%s", a);
while (strcmp(a, "錢包") == 0)
{
scanf("%s", a);
if (strcmp(a, "增加") == 0)
{
scanf("%s", a);
purse += f1(a);
}
else if (strcmp(a, "減少") == 0)
{
scanf("%s", a);
purse -= f1(a);
}
scanf("%s", a);
}
scanf("%s", a);
//輸出中文
if (purse<=10)printf("%s", chinese[purse]);
else if (purse > 10 && purse < 20)printf("十%s", chinese[purse - 10]);
else if (purse % 10 == 0)printf("%s十", chinese[purse / 10]);
else printf("%s十%s", chinese[purse / 10], chinese[purse % 10]);
}
return 0;
}
int f1(char* s)//將輸入的零-九十九中文轉換為數字
{
int i;
if (strlen(s) == 2)//處理零-十
{
return f3(s);
}
else if (strlen(s) == 4)//處理十一-十九及十的倍數
{
char b[10] = "";
f2(b, s);
if (strcmp(b, "十") == 0)
{
f2(b, s + 2);
return 10 + f3(b);
}
else
{
return 10 * f3(b);
}
}
else//處理形如幾十幾的漢字
{
char b[10] = "",c[10]="";
f2(b, s);
f2(c, s + 4);
return 10 * f3(b) + f3(c);
}
}
void f2(char* a,char* b)//用字符串a存儲字符串b的某一個漢字
{
a[0] = b[0];
a[1] = b[1];
}
int f3(char*s)//將輸入零-十中文轉換為0-10
{
int i;
for (i = 0; i <= 10; i++)
{
if (strcmp(s, chinese[i]) == 0)
return i;
}
}
