面向对象程序设计寒假作业一解题报告

这个作业属于哪个课程 面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业1
这个作业的目标 安装C++开发环境、回顾知识、查看自己的C++编译器版本、使用命令行编译一份C语言/C++代码、实现简单的中文编程、编写博客
作业正文 问答题实践题编程题
其他参考文献 C语言的不足之处 C语言的缺陷 C语言的编译过程

一、问答题

1.如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。

如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。

我对C++不怎么了解,在使用C语言的过程中,我发现了以下问题:
(1)C语言语法限制不严格,对变量的类型约束不严格,影响程序的安全性,比如C语言中将一个浮点型数据赋给一个整型变量,编译时只会警告,不会报错。
(2)C语言是面向过程的语言,写大项目的时候很容易崩溃。
(3)C语言存在着一些不应该存在的语法限制。例如, switch语句由 case结构组成,每个 case结束之后都要使用一个 break来跳出 case结构,否则将会继续执行下面的 case,这样就会造成错误。

2.查阅相关资料,简述一下C语言/C++的编译过程。

过程:C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件
编译---->形成目标代码,目标代码是在目标机器上运行的代码。
连接---->将目标代码与C函数库相连接,并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码(程序)。
执行----->在特定的机器环境下运行C程序。

二、实践题

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

打开vs->选择工具栏->命令行->开发者命令提示->输入cl.exe

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

在上文中输入a.exe即可编译运行

三、编程题

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

思考过程:

我需要先将中文转换成int才能进行计算,然后再将它转化成中文输出,这其中还要考虑十几与几十几的差别。数字转化代码如下:

int change1(char num[])
{
    if (strcmp(num, "一") == 0)
        return 1;
    else if (strcmp(num, "二") == 0)
        return 2;
    else if (strcmp(num, "三") == 0)
        return 3;
    else if (strcmp(num, "一") == 0)
        return 1;
    else if (strcmp(num, "四") == 0)
        return 4;
    else if (strcmp(num, "五") == 0)
        return 5;
    else if (strcmp(num, "六") == 0)
        return 6;
    else if (strcmp(num, "七") == 0)
        return 7;
    else if (strcmp(num, "八") == 0)
        return 8;
    else if (strcmp(num, "九") == 0)
        return 9;
    else if (strcmp(num, "零") == 0)
        return 0;
}

我在主函数中将0~99分为0~9,10~19,20~99三部分讨论,所以定义的转化函数只需要将数字转化。
刚开始我想直接用pintf输出中文的整数,钱包,然后发现出错,我重新打开一个界面试了一下直接输出中文可以吗,它显示出错,我才排除这个想法。

然后我决定通过数组输出中文,再通过定义的转化中文的函数进行预算,具体代码如下:

#include<stdio.h>
#include<string.h>
int change1(char num[])
{
    if (strcmp(num, "一") == 0)
        return 1;
    else if (strcmp(num, "二") == 0)
        return 2;
    else if (strcmp(num, "三") == 0)
        return 3;
    else if (strcmp(num, "一") == 0)
        return 1;
    else if (strcmp(num, "四") == 0)
        return 4;
    else if (strcmp(num, "五") == 0)
        return 5;
    else if (strcmp(num, "六") == 0)
        return 6;
    else if (strcmp(num, "七") == 0)
        return 7;
    else if (strcmp(num, "八") == 0)
        return 8;
    else if (strcmp(num, "九") == 0)
        return 9;
    else if (strcmp(num, "零") == 0)
        return 0;
}
char* change2(int n)
{
    if (n == 0)  return "零";
    else if (n == 1) return "一";
    else if (n == 2) return "二";
    else if (n == 3) return "三";
    else if (n == 4) return "四";
    else if (n == 5) return "五";
    else if (n == 6) return "六";
    else if (n == 7) return "七";
    else if (n == 8) return "八";
    else if (n == 9) return "九";
    else if (n == 10) return "十";
}
int main()
{
     int result;
    char a[10],name[10],b[10],c[10];
   scanf("%s %s %s %s",a,name,b,c);
    if(strcmp(a,"整数")!=0||strcmp(c,"等于")!=0)
    {printf("输入错误\n");
     return 0;
    }
    result=change1(c);
    while(strcmp(name,"看看")!=0)
    {
        scanf("%s %s",b,c);
        if(strcmp(b,"增加")==0)
        {
        result+=change1(c);
        }
        else if(strcmp(b,"减少")==0)
        {
        result-=change1(c);
        }
        else printf ("格式错误\n");
    }
    if (result<=10)
    {
        printf("%s",change2(result));
    }
    else if(result%10==0&&result<100)
    {
        printf("%s十",change2(result/10));
    }
    else if (result<20)
    {
        result%=10;
        printf("十%s",change2(result));
    }
    else if (result<100)
    {
        printf("%s十%s", change2(result/10),change2(result%10));
    }
    return 0; 
 } 

函数运行结果如下:

总结反思:
如果钱包数字更大或者有小数,我的方法就会更复杂,我希望学会更简便能够转化中文的方法。

猜你喜欢

转载自www.cnblogs.com/ph1212/p/12236972.html
今日推荐