zoukankan      html  css  js  c++  java
  • 2020年面向对象程序设计寒假作业1_编程题

    编程题(请使用C语言或者C++完成以下题目):

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

    编程要求

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

    样例

    输入:
    整数 钱包 等于 零
    钱包 增加 四
    钱包 减少 三
    看看 钱包
    输出:

    注意:

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

    思路:题目大致的意思就是用汉字编程,解决题目给出的问题。

    (1)由于要用汉语编程,汉语其实就是字符,我打算通过“strcmp”函数来进行处理输入的汉字,并将他们转化为数字,便于计算。

    (2)根据编程要求,我认为应该分成三个部分。

    第一部分,编写识别初始条件的部分。由样例可知“整数 钱包 等于 零”是一种初始条件的语句,那么初始条件语句的格式就为“整数 钱包 等于 某个数”(其中“某个数”是“零一二三四五六七八九十”某一个)。

    第二部分,编写处理操作运算的部分。由样例可以知道,运算就两种,要么增加,要么减少。只要识别其中的关键字“增加”或者“减少”,然后对输入的大写数字进行转化,转化为数字后,进行相应的操作即可。

    第三部分,编写查询结果的部分。由样例可知,“看看 钱包”是触发查询的语句,然后将之前操作计算出的结果由数字转为大写数字即可。

    代码

    //#include<stdio.h>
    #include<string.h>
    int trans1(char num[]);
    int op(int n, char b[],int sum);
    void trans2(int sum);
    int main()
    {
    	char a[20], b[20], c[20], num[20];
    	int n, sum,m;
    	scanf("%s%s%s%s", a, b, c, num);
    	sum = trans1(num);
    	while (1)
    	{
    		scanf("%s%s",a, b);
    		if (strcmp(a,"看看") == 0)
    		break;
    		scanf("%s", num);
    		n = trans1(num);
    		sum = op(n, b, sum);
    	}
    	if (sum <= 10)
    		trans2(sum);
    	else
    	{
    		m = sum % 10;
    		sum = sum / 10;
    		if (sum == 1)
    		{
    			printf("十");
    			trans2(m);
    		}
    		if(sum>1)
    		{
    			trans2(sum);
    			printf("十");
    			trans2(m);
    		}
    	}
    	return 0;
    }
    int trans1(char num[])
    {
    	if (strcmp(num, "零") == 0) return 0;
    	if (strcmp(num, "一") == 0) return 1;
    	if (strcmp(num, "二") == 0) return 2;
    	if (strcmp(num, "三") == 0) return 3;
    	if (strcmp(num, "四") == 0) return 4;
    	if (strcmp(num, "五") == 0) return 5;
    	if (strcmp(num, "六") == 0) return 6;
    	if (strcmp(num, "七") == 0) return 7;
    	if (strcmp(num, "八") == 0) return 8;
    	if (strcmp(num, "九") == 0) return 9;
    	if (strcmp(num, "十") == 0) return 10;
    }
    int op(int n, char b[], int sum)
    {
    	if (strcmp(b, "增加") == 0) sum = sum + n;
    	if (strcmp(b, "减少") == 0) sum = sum - n;
    	return sum;
    }
    void trans2(int sum)
    {
    	if (sum == 1) printf("一");
    	if (sum == 2) printf("二");
    	if (sum == 3) printf("三");
    	if (sum == 4) printf("四");
    	if (sum == 5) printf("五");
    	if (sum == 6) printf("六");
    	if (sum == 7) printf("七");
    	if (sum == 8) printf("八");
    	if (sum == 9) printf("九");
    }
    

    代码放在Dev-C++中运行,输入样例代码,如下图所示。

    遇到的困难
    在visual studio中运行时,会显示如图所示情况。

    根据提示,查找资料之后将scanf改为scanf_s,就通过了编译。

  • 相关阅读:
    注意:开发环境不同,启动代码不同…
    6410在rvds下编译启动代码报错分析
    S3C6410的启动代码分析&nbsp;一
    s3c6410开发板LED驱动程序设计详细…
    季逸超:90后IT少年的“盖茨梦”
    我的博客今天0岁52天了,我领取了…
    在linux中获取错误返回信息&nbsp;&amp;…
    各种居中对齐
    文本对齐方式
    素描人像
  • 原文地址:https://www.cnblogs.com/littleseasalt/p/12236501.html
Copyright © 2011-2022 走看看