面向对象程序设计寒假作业1

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2020OOP
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10224
这个作业的目标 1.安装C++开发环境(见附录) 2.完成问答题、实践题及编程题 3.发布博客
作业正文 问答题、实践题、编程题
其他参考文献 C++程序设计(第三版)(谭浩强 编箸)

问答题:

  1. 如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。
    答:
  2. 在为期一学期的C语言使用中,我总结出了以下几点我个人遇到的C语言的不足之处:
    一、 C语言语法限制不太严格。C语言作为众多编程语言的基础模板,不难在使用过程中体会出它的灵活性,但这也必然地导致了其在语法限制的放松。同时这也就要求了使用者要对C语言的高度熟练使用。具体的情况有:在数组使用中,经常因为对于数据估计错误,而发生数组越界的情况,引发数据在内存中的混乱。
    二、 C语言中运算符十分复杂。C语言的运算符十分丰富,多达34种。这样的丰富虽然具有高度的效率性,但同样的对新手的我十分不友好。不仅要求对多种的运算符清晰记忆,辨明其不同的组合,其中还有多级的优先顺序,容易相混淆而产生程序逻辑错误。具体情况有:符号“%“的输出,使用printf(“%”)无法直接输出%符号,应为%是运算符的一种,所以要以printf(“%%”)输出;符号“=“在C语言中一般情况下为赋值功能,如需进行数值比较则要使用”==“,而这与我们现实生活中”=“有一定的出入,易造成错误。
    三、 C语言关键字有许多“一词多义“。C语言的中的一些关键词在不同的场合具有不同的含义,这容易令人在编程中迷惑与混淆。例如,void这一关键词在函数的返回类型中,表示不返回任何值;在指针声明中,表示通用指针类型;而在参数列表中,表示没有参数。
  3. 我认为C++是C语言在“面向对象”机制方面的更加完善的高阶产物。C++是由C语言发展而来的,与C语言兼容。用C语言编写的程序基本上可以不加修改地使用于C++。C++既可用于过程的结构化程序设计,又可以用于面向对象的程序设计,是一个功能强大的混合型程序设计语言。
    综上,C++对于C语言的增强表现在两个方面:
    一、 在原来基于过程的机制基础上,对C语言的功能做了扩充:
    二、 增加了面向对象的机制。
  4. 查阅相关资料,简述一下C语言/C++的编译过程。
    答:

从资料的查阅中,可以清晰得知,C语言/C++的编译过程有以下几个步骤:

1.预处理(Preprocessing),
2.编译(Compilation),
3.汇编(Assemble),
4.链接(Linking)。

实践题

  1. 查看自己的C++编译器版本。

进入Visual Studio,选择“工具”栏,选择“命令行”,进入“开发者命令提示”,输入“cl.exe”即可查看C++编译器版本。
也可以直接使用“gcc -v”查询编译器版本

  1. 使用命令行编译一份C语言/C++代码。

打开cmd->cd指令转到文件所在目录->使用gcc 指令对其编译->运行生成的a.exe即可使用程序。

编程题

中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
注意:

  1. 输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
  2. 数字只会出现以下 零一二三四五六七八九十 。

1.读题,提取出题目的要求。
依据题目,可以得知题目要求写出一个用于处理多次十以内加减法、以汉字为输入语言的程序。程序对初始数要求通过输入指令定义,并以“看看 钱包”作为最终输出的输出指令,输出的结果也要求为汉字。
疑惑点:题目中只规定了输入数字范围,没有明确要求输出数字范围,故本程序仅对“零—九十九”的结果输出进行实现。
2.分解需求
了解题目要求以后,我大致将程序分为四个子模块:
初始定义模块

加法模块

减法模块

输出模块

3.对于每一个模块设计测试用例。
初始定义模块

正常

加法模块

正常

减法模块

正常

输出模块 正常

完整范例测试

完整代码

#include <iostream>
#include <string.h>
using namespace std;
const char jia[]="增加";
const char jian[]="减少";
const char check[]="看看";
const char wallet[]="钱包";
const char num[11][3]={"零","一","二","三","四","五","六","七","八","九","十"};//定义题设的常量汉字关键词
int w,*p=&w;//通过指针使“钱包”内累计值在函数内更新
void defin()
{
	char type[10],wa[10],op[10],start[10];
	cin>>type>>wa>>op>>start;//输入初始值
	for(int i=0;i<=10;i++)
	{
		if(strcmp(num[i],start)==0) *p=i;//输入汉字在程序内部转化为阿拉伯数字
	}
}
void up(char number[10])
{
	for(int i=0;i<=10;i++)
	{
		if(strcmp(num[i],number)==0) *p=*p+i;//寻找汉字对应阿拉伯数字,并对“钱包”内累计值做加法更新
	}
}
void down(char number[10])
{
	for(int i=0;i<=10;i++)
	{
		if(strcmp(num[i],number)==0) *p=*p-i;//寻找汉字对应阿拉伯数字,并对“钱包”内累计值做减法更新
	}
}
void output()
{
	if(w<=10){
		cout<<num[w];
	}//对10以内的数值直接输出
	else if(w>=11&&w<20){
		int ge;
		ge=w%10;
		cout<<"十"<<num[ge];
	}//输出11至19之间的数值
	else if(w==20){
		cout<<"二十"; 
	}//输出当且仅当20的数值
	else{
		int ge,shi;
		ge=w%10; shi=w/10;
		if(ge) cout<<num[shi]<<"十"<<num[ge];
		else cout<<num[shi]<<"十";
	}//输出大于20的数值
}
int main() 
{
	 defin();//调用初始定义模块函数
	 char object[10],order[10],number[10];
	 while(1)//对指令逐条处理
	 {
	 	cin>>object;//接收指令的首个关键词
	 	if(strcmp(object,wallet)==0){
	 		cin>>order>>number;
	 		if(strcmp(order,jia)==0) up(number);
	 		else down(number);
		 }//对加减法指令判断
		 else{
		 	cin>>order;
		 	output();
		 	break;
		 }//对输出指令判断并跳出循环
	}
	return 0; 
}

解题困难

本次作业的编程题程序逻辑本身其实并不难,但是对汉字的处理还是挺令我懵逼的
所以这样的情况比起C来解决,我个人觉得还是C++更为方便一点。总的来说,这次作业的收获还是比较大的。

posted @ 2020-01-27 17:04  Excalibur_Morgan  阅读(181)  评论(1编辑  收藏  举报