这个作业属于哪个课程 | 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)比较不能编译成功的原因还不了解。