面向对象程序设计2020第一次作业(问答题+实践题+编程题)

这个作业属于哪个课程 2020福大面向对象程序设计
这个作业要求在哪里 【寒假作业1】(https://www.cnblogs.com/jhy16193335/p/12212380.html)
这个作业的目标 安装开发环境,了解编译过程,实现白话文编程,记录学习过程,发布博客
作业正文 问答题、实践题、编程题
其他参考文献 【在windows命令行中如何运行c程序的文本】(https://zhidao.baidu.com/question/366892157337055052.html)
问答题:
在我看来,C语言的缺陷主要体现在对语法限制不严格,对变量的约束也并不严格,这就会导致整个程序的不安全性。C语言中大部分的错误并不能通过简单的编译发现,需要自己通过结果去调试。还有诸如数组越界问题在处理边界问题(像之前的一道题目扫雷)就体现的很清楚。还有整数溢出问题,对于整型及实型的变量类型都有一定的范围,一旦超过一定的变量范围,数值就会溢出,就得考虑通过数组来实现。还有字符串输入,字符串输入可以通过“scanf(“%s,a[])”和“gets()”实现,但如果忘记在“gets()”后将回车吞掉,就会导致后续的输入输出出现问题。
鉴于我目前对C++并不了解,我大致通过查阅资料(《C++ Prime Plus》)可以得出C++与C语言相较的优点在于:C语言是面向过程的一种编程语言,而C++是面向对象的一种编程语言。C语言采用结构化编程,自顶向下,使得C语言便于维护,但不利于编写大型程序;而C++面向对象,把问题分解成各个对象,建立对象的目的不是为了完成某一个步骤,而是为了描述某个事物在整个问题的步骤中的行为。OOP(面向对象编程)设计类,类规定了可使用哪些数据来表示对象以及可以对数据执行哪些操作。其次,OOP还有助于创建可重用的代码。信息隐藏可以保护数据,使其免遭不适当的访问。多态能够为运算符和函数创建多个定义,通过编程上下文来确定使用哪个定义。继承能够使用旧类派生出新类。同时,C++还支持泛型编程。泛型编程强调独立于特定数据类型,它可以提供执行常见任务(如对数据排序或合并链表)的工具。
C语言编译过程:C源程序—>预编译处理—>编译—>汇编—>链接
由.c文件到.i文件,这个过程称为预处理;
由.i文件到.s文件,这个过程称为编译;
由.s文件到.o文件,这个过程称为汇编;
由.o文件到可执行文件,这个过程称为链接。
实践题:
1、
打开visual studio界面,选择工具栏—>命令行—>开发者命令提示,然后输入cl.exe即可查看编辑器版本。
2、首先在visual studio界面。在键盘上同时按win+R,输入cmd,即可打开cmd界面;
然后,输入所要编译的程序所在的盘,比如D盘(注意D后的冒号为英文的),然后输入确切地址即可编译。
若编译C++文件,输入gcc,输入gcc时,命令行显示信息:不是内部或外部命令,也不是可运行的程序或批处理文件。
需要在环境变量中添加gcc.exe的路径:
首先打开我的电脑,右击此电脑,点击属性,
“更改设置”——>“高级”——>“环境变量”——>“系统变量编辑”——>“新建”——>“添上gcc.exe”即可。
编程题:
在做这道题时,遇到的第一个问题在于文字如何存储,后来了解到可以用数组存储(即将一个文字视为一个字符)。原先,我想定义一个数组s[15],并且用s【9】与数字比较(即if(strcmp(s[9],“零”))==0),用于存放最初的值。但是在编译时会报错
因此,后来用四个数组存放类似“整数 钱包 等于 零”,再将“零”拿来比较,即
int zhi(char s[15])
	{
		if(strcmp(s,"零")==0)
			return 0;
		else
			if(strcmp(s,"一")==0)
				return 1;
		else
			if(strcmp(s,"二")==0)
				return 2;
		else
			if(strcmp(s,"三")==0)
				return 3;
		else
			if(strcmp(s,"四")==0)
				return 4;
		else
			if(strcmp(s,"五")==0)
				return 5;
		else
			if(strcmp(s," 六")==0)
				return 6;
		else
			if(strcmp(s,"七")==0)
				return 7;
		else
			if(strcmp(s,"八")==0)
				return 8;
		else
			return 9; 
	}

鉴于我们无法确定输入中只有两次运算,因此我选择用循环语句判断。即
while(1)
{
scanf("%s %s %s",str1,str2,str3);
if(strcmp(str1,"输出")==0)
break;
若不是,就继续输入。
这是完整的代码:

# include<stdio.h>
# include<string.h>
int main()
	{
		int sum;
		int zhi(char s[15]);
		int zengjia(char s[15]);
		int jianshao(char s[15]);
		void shuchu(int sum);
		char s1[15],s2[15],s3[15],s4[15];
		char str1[15],str2[15],str3[15];
		char a[15],b[15];
		scanf("%s %s %s %s",s1,s2,s3,s4);
		sum=zhi(s4);
		while(1)
		    {
			scanf("%s %s %s",str1,str2,str3);
			if(strcmp(str1,"输出")==0)
			    break;
			else
			    {
				if(strcmp(str2,"增加")==0)
				    {
					sum=sum+zengjia(str3);
				    }
				else
				    if(strcmp(str2,"减少")==0)
					{
				            sum=sum-jianshao(str3);
					}
			    }
		    }
		scanf("%s %s",a,b);
		if(strcmp(b,str2)==0)
			shuchu(sum);
		return 0;
	}
int zhi(char s[15])
	{
		if(strcmp(s,"零")==0)
			return 0;
		else
			if(strcmp(s,"一")==0)
				return 1;
		else
			if(strcmp(s,"二")==0)
				return 2;
		else
			if(strcmp(s,"三")==0)
				return 3;
		else
			if(strcmp(s,"四")==0)
				return 4;
		else
			if(strcmp(s,"五")==0)
				return 5;
		else
			if(strcmp(s," 六")==0)
				return 6;
		else
			if(strcmp(s,"七")==0)
				return 7;
		else
			if(strcmp(s,"八")==0)
				return 8;
		else
			return 9; 
	}
int zengjia(char s[15])
	{
		if(strcmp(s,"零")==0)
			return 0;
		else
			if(strcmp(s,"一")==0)
				return 1;
		else
			if(strcmp(s,"二")==0)
				return 2;
		else
			if(strcmp(s,"三")==0)
				return 3;
		else
			if(strcmp(s,"四")==0)
				return 4;
		else
			if(strcmp(s,"五")==0)
				return 5;
		else
			if(strcmp(s," 六")==0)
				return 6;
		else
			if(strcmp(s,"七")==0)
				return 7;
		else
			if(strcmp(s,"八")==0)
				return 8;
		else
			return 9; 
	}
int jianshao(char s[15])
	{
		if(strcmp(s,"零")==0)
			return 0;
		else
			if(strcmp(s,"一")==0)
				return 1;
		else
			if(strcmp(s,"二")==0)
				return 2;
		else
			if(strcmp(s,"三")==0)
				return 3;
		else
			if(strcmp(s,"四")==0)
				return 4;
		else
			if(strcmp(s,"五")==0)
				return 5;
		else
			if(strcmp(s," 六")==0)
				return 6;
		else
			if(strcmp(s,"七")==0)
				return 7;
		else
			if(strcmp(s,"八")==0)
				return 8;
		else
			return 9; 
	}
void shuchu(int sum)
	{
		int m,n;
		if(sum<=10)
			{
				if(sum==0)
					printf("零");
				else
					if(sum==1)
						printf("一");
				else
					if(sum==2)
						printf("二");
				else
					if(sum==3)
						printf("三");
				else
					if(sum==4)
						printf("四");
				else
					if(sum==5)
						printf("五");
				else
					if(sum==6)
						printf("六");
				else
					if(sum==7)
						printf("七");
				else
					if(sum==8)
						printf("八");
				else
					if(sum==9)
						printf("九");
				else
					printf("十");
			}
		else
			{
				m=sum/10;n=sum%10;
				if(m==1)
					{
						if(n==1)
							printf("十一");
						else
							if(n==2)
								printf("十二"); 
						else
							if(n==3)
								printf("十三");
						else
							if(n==4)
								printf("十四");
						else
							if(n==5)
								printf("十五");
						else
							if(n==6)
								printf("十六");
						else
							if(n==7)
								printf("十七");
						else
							if(n==8)
								printf("十八");
						else
							printf("十九"); 
					}
				else
					if(m==2)
						{
							if(n==0)
								printf("二十"); 
							else 
								if(n==1)
									printf("二十一");
							else
								if(n==2)
									printf("二十二"); 
							else
								if(n==3)
									printf("二十三");
							else
								if(n==4)
									printf("二十四");
							else
								if(n==5)
									printf("二十五");
							else
								if(n==6)
									printf("二十六");
							else
								if(n==7)
									printf("二十七");
							else
								if(n==8)
									printf("二十八");
							else
								printf("二十九"); 		
						}	
					if(m==3)
						{
							if(n==0)
								printf("三十"); 
							else 
								if(n==1)
									printf("三十一");
							else
								if(n==2)
									printf("三十二"); 
							else
								if(n==3)
									printf("三十三");
							else
								if(n==4)
									printf("三十四");
							else
								if(n==5)
									printf("三十五");
							else
								if(n==6)
									printf("三十六");
							else
								if(n==7)
									printf("三十七");
							else
								if(n==8)
									printf("三十八");
							else
								printf("三十九"); 	
						}
					else
						if(m==4)
							{
								if(n==0)
								printf("四十"); 
							else 
								if(n==1)
									printf("四十一");
							else
								if(n==2)
									printf("四十二"); 
							else
								if(n==3)
									printf("四十三");
							else
								if(n==4)
									printf("四十四");
							else
								if(n==5)
									printf("四十五");
							else
								if(n==6)
									printf("四十六");
							else
								if(n==7)
									printf("四十七");
							else
								if(n==8)
									printf("四十八");
							else
								printf("四十九"); 		
							} 
					else
						if(m==5)
							{
								if(n==0)
								printf("五十"); 
							else 
								if(n==1)
									printf("五十一");
							else
								if(n==2)
									printf("五十二"); 
							else
								if(n==3)
									printf("五十三");
							else
								if(n==4)
									printf("五十四");
							else
								if(n==5)
									printf("五十五");
							else
								if(n==6)
									printf("五十六");
							else
								if(n==7)
									printf("五十七");
							else
								if(n==8)
									printf("五十八");
							else
								printf("五十九"); 		
							} 
					else
						if(m==6)
							{
								if(n==0)
								printf("六十"); 
							else 
								if(n==1)
									printf("六十一");
							else
								if(n==2)
									printf("六十二"); 
							else
								if(n==3)
									printf("六十三");
							else
								if(n==4)
									printf("六十四");
							else
								if(n==5)
									printf("六十五");
							else
								if(n==6)
									printf("六十六");
							else
								if(n==7)
									printf("六十七");
							else
								if(n==8)
									printf("六十八");
							else
								printf("六十九"); 	
							}
					else
						if(m==7)
							{
								if(n==0)
								printf("七十"); 
							else 
								if(n==1)
									printf("七十一");
							else
								if(n==2)
									printf("七十二"); 
							else
								if(n==3)
									printf("七十三");
							else
								if(n==4)
									printf("七十四");
							else
								if(n==5)
									printf("七十五");
							else
								if(n==6)
									printf("七十六");
							else
								if(n==7)
									printf("七十七");
							else 
								if(n==8)
									printf("七十八");
							else
								printf("七十九"); 	
							}
					else
						if(m==8)
							{
								if(n==0)
								printf("八十"); 
							else 
								if(n==1)
									printf("八十一");
							else
								if(n==2)
									printf("八十二"); 
							else
								if(n==3)
									printf("八十三");
							else
								if(n==4)
									printf("八十四");
							else
								if(n==5)
									printf("八十五");
							else
								if(n==6)
									printf("八十六");
							else
								if(n==7)
									printf("八十七");
							else
								if(n==8)
									printf("八十八");
							else
								printf("八十九"); 		
							} 
					else
						{
							if(n==0)
								printf("九十"); 
							else 
								if(n==1)
									printf("九十一");
							else
								if(n==2)
									printf("九十二"); 
							else
								if(n==3)
									printf("九十三");
							else
								if(n==4)
									printf("九十四");
							else
								if(n==5)
									printf("九十五");
							else
								if(n==6)
									printf("九十六");
							else
								if(n==7)
									printf("九十七");
							else
								if(n==8)
									printf("九十八");
							else
								printf("九十九"); 	
						} 
			} 
	}

但这份代码,它存在的问题在于:首先,我在运行的时候,他不能运行出结果,即
;
其次,我仅考虑输入的各位数字均为十以下的数字,而且我采用的是枚举法,若数字增大,则这个方法非常不试用;
其三,我上文中的第一种用是s[9]与数字(0~9)比较不能编译成功的原因还不了解。

posted @ 2020-01-25 20:32  十又二分之一  阅读(233)  评论(1编辑  收藏  举报