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

------------恢复内容开始------------

作业描述 详情
这个作业属于哪个课程 2020年面向对象程序设计
这个作业的要求在哪里 寒假作业1
这个作业的目标 1.安装C++开发环境(见附录) 2.完成问答题、实践题及编程题 3.发布博客
作业正文 如下
参考资料 见正文

问答题:

回答以下问题:

1.如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。
如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。
我还不是特别了解c++,但学习c语言也已经有了半年的时间.
第一点,在使用c语言打代码的过程中,我感到不顺手是一些在解题过程中很常用的函数,如按顺序排列等需要自己打出来,即使很简单,但每次都打也会感觉很麻烦。
第二点,在我查阅c语言优缺点相关资料后,c语言的安全性并不是很好,数组容易越界,我在打代码时经常出现。
另外资料还讲述了复用性,维护性,拓展性等一系列我并不是特别了解的词汇,但一个个查阅一下,也算初步了解,但感悟的话等以后接触使用再谈也可。

参考资料:(https://blog.csdn.net/Quinf/article/details/53241552)

2.查阅相关资料,简述一下C语言/C++的编译过程。
编译过程分为2个过程,第一个是编译,编译又分为预处理和编译、优化阶段,预处理相当于根据预处理指令组装新的C/C++程序。
第二个则是汇编,汇编是将编译完的代码文件翻译成机器语言,代码文件是可重定位目标程序的.o文件,该文件为二进制文件。
最后再1通过链接器将目标文件链接成为一个可执行的文件。

参考资料:(https://www.cnblogs.com/kevinWu7/p/10163443.html)
https://blog.csdn.net/csdn_violin/article/details/79430384)

实践题:
自己动手,完成以下任务:

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

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

这个做了一个小时,查阅同学的博客,但什么都看不懂,网上也是,让我输g++ 文件名什么的没用,最后找到一份教程完成了。。。
参考资料:(https://blog.csdn.net/jjz2016/article/details/79376622)
编程题(请使用C语言或者C++完成以下题目):

中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。

编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
注意:

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

1.读题,提取出题目的要求。
2.分解需求,把需求分解为几个你觉得不太相关的模块。
3.思考每个模块怎么写,可以从简单的模块开始写。
4.对于不会的问题进行查阅资料。
5.对于每一个模块设计测试用例。
6.详细记录下以上每一步,并写在博客中。
7.不要求完全做出来,但要求记录详细。
8.建议博客长度不少于1000字(不包含代码)。
思路:
第一个注意没有看懂,百度了一下gbk编码相关也没弄懂,然后我就没管,选择直接打代码。
第二个注意,据我的理解应该是不会出现十以上的数字?我和我的小伙伴认证思考了半小时,似乎出现十以上的我也不会做。
要开始做题,就要先输入,输入的首先应该是钱包里有多少钱,有且只有这一次的输入。
输入完钱包有多少钱之后,接着该输入钱包的变化,不知道要输入多少次,所以我做了一个循环。

#include<stdio.h>
#include<string.h>
int main()
{
	char c1[100],c2[100],c3[100],l1[100],l2[100];//c1是初始钱,c2是改变量,c3是剩余钱,l1和l2是文字//
        int f,i,j,n,m;
	scanf("%s%s 等于 %s",l1,l2,c1);
	while(strcmp(l1,'钱包')==0)
	{ 
	scanf("%s%s",l1,l2);
	scanf("%s",c2);
	} 
但是在循环之后还要判断增加和减少,所以我加入了f来判断。
        while(strcmp(l1,'钱包')==0)
	{ 
	scanf("%s%s",l1,l2);
	if(strcmp(l1,'钱包')!=0)
	break;
	scanf("%s",c2);
	if(strcmp(l2,'增加')==0)
	f=1;
	else if(strcmp(l2,'减少')==0)
	f=-1;
	} 
我之后写了一个把十以内的汉字变成数字的函数。
int change1(char c[])
{
	int n;
	if(strcmp(c,"零")==0) n=0;
	if(strcmp(c,"一")==0)n=1;
	if(strcmp(c,"二")==0)n=2;
	if(strcmp(c,"三")==0)n=3;
	if(strcmp(c,"四")==0)n=4;
	if(strcmp(c,"五")==0)n=5;
	if(strcmp(c,"六")==0)n=6;
	if(strcmp(c,"七")==0)n=7;
	if(strcmp(c,"八")==0)n=8;
	if(strcmp(c,"九")==0)n=9;
	if(strcmp(c,"十")==0)n=10;
	return n;
}
写完之后发现其实直接就可以在增加或减少后加一个if进行加减,没必要用f判断了,多此一举,但也没什么影响。
加减后答案就直接出来了,在结尾还需要把转化的数字再重新变成汉字。
于是我又有了第二个函数,并且用这个直接输出了。
void change2(int s)
{
	int n=s,i,j;
	if(s>=20)
	{
	i=s/10;
	switch(i) 
	{
		case 0: printf("十");break;
		case 1: printf("一");break;
		case 2: printf("二");break;
		case 3: printf("三");break;
		case 4: printf("四");break;
		case 5: printf("五");break;
		case 6: printf("六");break;
		case 7: printf("七");break;
		case 8: printf("八");break;
		case 9: printf("九");break;
	}
	printf("十");
	switch(s%10) 
	{
		case 0: break;
		case 1: printf("一");break;
		case 2: printf("二");break;
		case 3: printf("三");break;
		case 4: printf("四");break;
		case 5: printf("五");break;
		case 6: printf("六");break;
		case 7: printf("七");break;
		case 8: printf("八");break;
		case 9: printf("九");break;
	}
	}
	else if(s<=10)
	{
		switch(s)
	{
		case 0: printf("零");break;
		case 1: printf("一");break;
		case 2: printf("二");break;
		case 3: printf("三");break;
		case 4: printf("四");break;
		case 5: printf("五");break;
		case 6: printf("六");break;
		case 7: printf("七");break;
		case 8: printf("八");break;
		case 9: printf("九");break;
		case 10: printf("十");break;
	}
	}
	else if(s>10)
	{
		s=s%10;
		printf("十");
		switch(s)
	{
		case 0: printf("零");break;
		case 1: printf("一");break;
		case 2: printf("二");break;
		case 3: printf("三");break;
		case 4: printf("四");break;
		case 5: printf("五");break;
		case 6: printf("六");break;
		case 7: printf("七");break;
		case 8: printf("八");break;
		case 9: printf("九");break;
		case 10: printf("十");break;
	}
	}
}
第二个有点长,但我能想出来的只有这样了。。。
总的代码如下。
#include<stdio.h>
#include<string.h>
int change1(char c[]);
void change2(int s);
int main()
{
	char c1[100],c2[100],c3[100],l1[100],l2[100]; 
	int a,b,i,j,k,t,m,n,f,s=0;
	scanf("%s%s 等于 %s",l2,l1,c1);
	s=change1(c1);
	while(strcmp(l1,"钱包")==0)
	{ 
	scanf("%s%s",l1,l2);
	if(strcmp(l1,"钱包")!=0)
	break;
	scanf("%s",c2);
	if(strcmp(l2,"增加")==0)
	{
	f=1;
	s=s+change1(c2);
	}
	else if(strcmp(l2,"减少")==0)
	{
	f=-1;
	s=s-change1(c2);
	}
	} 
	if(s>=0)  change2(s);
	else printf("meiqianla");
	return 0;
}

int change1(char c[])
{
	int n;
	if(strcmp(c,"零")==0) n=0;
	if(strcmp(c,"一")==0)n=1;
	if(strcmp(c,"二")==0)n=2;
	if(strcmp(c,"三")==0)n=3;
	if(strcmp(c,"四")==0)n=4;
	if(strcmp(c,"五")==0)n=5;
	if(strcmp(c,"六")==0)n=6;
	if(strcmp(c,"七")==0)n=7;
	if(strcmp(c,"八")==0)n=8;
	if(strcmp(c,"九")==0)n=9;
	if(strcmp(c,"十")==0)n=10;
	return n;
}
void change2(int s)
{
	int n=s,i,j;
	if(s>=20)
	{
	i=s/10;
	switch(i) 
	{
		case 0: printf("十");break;
		case 1: printf("一");break;
		case 2: printf("二");break;
		case 3: printf("三");break;
		case 4: printf("四");break;
		case 5: printf("五");break;
		case 6: printf("六");break;
		case 7: printf("七");break;
		case 8: printf("八");break;
		case 9: printf("九");break;
	}
	printf("十");
	switch(s%10) 
	{
		case 0: break;
		case 1: printf("一");break;
		case 2: printf("二");break;
		case 3: printf("三");break;
		case 4: printf("四");break;
		case 5: printf("五");break;
		case 6: printf("六");break;
		case 7: printf("七");break;
		case 8: printf("八");break;
		case 9: printf("九");break;
	}
	}
	else if(s<=10)
	{
		switch(s)
	{
		case 0: printf("零");break;
		case 1: printf("一");break;
		case 2: printf("二");break;
		case 3: printf("三");break;
		case 4: printf("四");break;
		case 5: printf("五");break;
		case 6: printf("六");break;
		case 7: printf("七");break;
		case 8: printf("八");break;
		case 9: printf("九");break;
		case 10: printf("十");break;
	}
	}
	else if(s>10)
	{
		s=s%10;
		printf("十");
		switch(s)
	{
		case 0: printf("零");break;
		case 1: printf("一");break;
		case 2: printf("二");break;
		case 3: printf("三");break;
		case 4: printf("四");break;
		case 5: printf("五");break;
		case 6: printf("六");break;
		case 7: printf("七");break;
		case 8: printf("八");break;
		case 9: printf("九");break;
		case 10: printf("十");break;
	}
	}
}
做得确实很粗糙,完全没有加减十以上的计算,因为我不会了。。。
我计算的结果在0-99的范围内,超过99就不会了,少于0即没钱了。
以后等能力增强补上,现在就只能做到这种程度,再贴几个我的运行。



posted @ 2020-01-25 19:36  hqk111  阅读(145)  评论(0编辑  收藏  举报