这次作业属于哪个课程 | 2020面向对象程序设计(福州大学-数学与计算机科学学院) |
---|---|
这次作业的要求在哪里 | 面向对象程序设计寒假作业1 |
作业目的 | 1.安装C++开发环境(见附录)2.完成问答题、实践题及编程题3.发布博客 |
相关链接 | https://blog.csdn.net/weixin_40756041/article/details/88052207 |
<font face="宋体"color=blue size=6>问答题
1.如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。
如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。
c语言的函数库比较少,例如排序比较素数判断这类函数需要自己写
c语言的数组容易越界,并且越界不会报错经常出现错误
变量定义的位置决定了变量的使用范围
使用gets函数不安全
各种符号的优先级使用太多
开关函数,一直需要执行到break才结束
2、查阅相关资料,简述一下C语言/C++的编译过程。
- 编译预处理读取C语言源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。
伪指令主要包括以下四个方面:
(1)宏定义指令
(2)条件编译指令,如#ifdef, #ifndef, #else, #elif, #endif
(3)头文件包含指令,如#include “FileName” 或者 #include 等。
(4)特殊符号,预编译程序可以识别一些特殊的符号。
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。 - 编译阶段
经过预编译得到的输出文件中,将只有常量,如数字、字符串、变量的定义,以及C语言的关键字,如main, if, else, for, while, {, }, +, -, *, , 等等。预编译程序所要做的工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
3.优化阶段
优化一部分是对中间代码的优化。这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。 - 汇编过程
汇编语言代码翻译成目标机器指令的过程 - 链接程序
将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来。
相关链接https://blog.csdn.net/weixin_40756041/article/details/88052207
<font face="宋体"color=blue size=6>实践题
1、查看自己的C++编译器版本。
1.打开vs
2.创建新项目
3.工具—》命令行-》开发者命令提示-》输入cl.exe
2.使用命令行编译一份C语言/C++代码。
打开vs-》win键盘+r键-》输入cmd
<font face="宋体"color=blue size=6>编程题
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
<font face="宋体"color=black size=3>编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
题目关键:将汉字转化成数字,最后将数字转化成汉字;
汉字可以看作是字符,每个汉字占两个字节
将汉字转化为数字(能力有限,只能是初始值以及每次参与运算的值是零到九),处理的疑惑点是汉字与汉字之间空格的处理以及何时停止,这里通过测试空格并没有影响,空格及结束。
停止用一个while函数直接对输入的函数判断
汉字转数字change1(只能初始值是零到九)
int change1(char num1[10])
{
if(strcmp(num1,"零")==0)return 0;
if(strcmp(num1,"一")==0)return 1;
if(strcmp(num1,"二")==0)return 2;
if(strcmp(num1,"三")==0)return 3;
if(strcmp(num1,"四")==0)return 4;
if(strcmp(num1,"五")==0)return 5;
if(strcmp(num1,"六")==0)return 6;
if(strcmp(num1,"七")==0)return 7;
if(strcmp(num1,"八")==0)return 8;
if(strcmp(num1,"九")==0)return 9;
}
运算代码,放在主函数里面(每个运算的值是零到九)
num=0;
char a[10],b[10],c[10],num1[10];
char d[10],yunsuan[10],num2[10];
scanf("%s %s %s %s",a,b,c,num1);
num=change1(num1);
scanf("%s %s",d,yunsuan);
while(strcmp(d,"钱包")==0)
{
scanf(" %s",num2);
if(strcmp(yunsuan,"增加")==0)
num=num+change1(num2);
if(strcmp(yunsuan,"减少")==0)
num=num-change1(num2);
scanf("%s %s",d,yunsuan);
}
输出结果
分为小于十和大于等于十两种,使用if else
小于十change3
void change3(int num)
{
{
if(num==0);
else if(num==1)
printf("一") ;
else if(num==2)
printf("二");
else if(num==3)
printf("三") ;
else if(num==4)
printf("四");
else if(num==5)
printf("五") ;
else if(num==6)
printf("六");
else if(num==7)
printf("七") ;
else if(num==8)
printf("八");
else if(num==9)
printf("九") ;
}
大于十(这个代码只能是两位数)
先将数各位分解存在一个数组中,并且注意数组的各位输出应该是从后向前输出
change2和change3
void change2(int num)
{
if(num==0);
else if(num==1)
printf("十") ;
else if(num==2)
printf("二十");
else if(num==3)
printf("三十") ;
else if(num==4)
printf("四十");
else if(num==5)
printf("五十") ;
else if(num==6)
printf("六十");
else if(num==7)
printf("七十") ;
else if(num==8)
printf("八十");
else if(num==9)
printf("九十") ;
}
void change3(int num)
{
{
if(num==0);
else if(num==1)
printf("一") ;
else if(num==2)
printf("二");
else if(num==3)
printf("三") ;
else if(num==4)
printf("四");
else if(num==5)
printf("五") ;
else if(num==6)
printf("六");
else if(num==7)
printf("七") ;
else if(num==8)
printf("八");
else if(num==9)
printf("九") ;
}
完整代码
#include<stdio.h>
#include<string.h>
int change1(char num1[10])
{
if(strcmp(num1,"零")==0)return 0;
if(strcmp(num1,"一")==0)return 1;
if(strcmp(num1,"二")==0)return 2;
if(strcmp(num1,"三")==0)return 3;
if(strcmp(num1,"四")==0)return 4;
if(strcmp(num1,"五")==0)return 5;
if(strcmp(num1,"六")==0)return 6;
if(strcmp(num1,"七")==0)return 7;
if(strcmp(num1,"八")==0)return 8;
if(strcmp(num1,"九")==0)return 9;
}
void change2(int num)
{
if(num==0);
else if(num==1)
printf("十") ;
else if(num==2)
printf("二十");
else if(num==3)
printf("三十") ;
else if(num==4)
printf("四十");
else if(num==5)
printf("五十") ;
else if(num==6)
printf("六十");
else if(num==7)
printf("七十") ;
else if(num==8)
printf("八十");
else if(num==9)
printf("九十") ;
}
void change3(int num)
{
{
if(num==0);
else if(num==1)
printf("一") ;
else if(num==2)
printf("二");
else if(num==3)
printf("三") ;
else if(num==4)
printf("四");
else if(num==5)
printf("五") ;
else if(num==6)
printf("六");
else if(num==7)
printf("七") ;
else if(num==8)
printf("八");
else if(num==9)
printf("九") ;
}
}
int main()
{
int num;
int q,i;
int m[100];
num=0;
char a[10],b[10],c[10],num1[10];
char d[10],yunsuan[10],num2[10];
scanf("%s %s %s %s",a,b,c,num1);
num=change1(num1);
scanf("%s %s",d,yunsuan);
while(strcmp(d,"钱包")==0)
{
scanf(" %s",num2);
if(strcmp(yunsuan,"增加")==0)
num=num+change1(num2);
if(strcmp(yunsuan,"减少")==0)
num=num-change1(num2);
scanf("%s %s",d,yunsuan);
}
if(num<10)
change3(num);
else
{
while(num!=0)
{
q=num%10;
m[i++]=q;
num=num/10;
}
for(i=i-1;i>=0;i--)
{
if(i==1);
change2(m[i]);
if(i==0);
change3(m[i]);
}
}
return 0;
}
样例
整数 钱包 等于 零
钱包 增加 七
钱包 减少 五
看看 钱包
整数 钱包 等于 九
钱包 增加 四
钱包 减少 三
看看 钱包