三做一年级算术题 您所在的位置:网站首页 小学算术游戏 三做一年级算术题

三做一年级算术题

#三做一年级算术题| 来源: 网络整理| 查看: 265

        我已经骂不动这题了,不论是这一年级就会做的取模还有隐藏案例里面的无脑示例,不得不说,这道题算是比较恶心的题目了。(主要使用C语言)

题目如下:

        两个一年级小朋友在一起玩游戏,小明给出一堆一位的正整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。

输入:     用逗号分隔的一位正整数序列,及其运算符和等号

输出:     最大数 op 最小数=结果   

并且题目给出的示例的输入只使用一次回车,所以只允许读入一次数据

例:5,1,1,2,0,3,+,=↵        5+0=5↵

        首先是我做这道题的大思路:关于数据的读入,scanf无法满足这道题的输入量,走投无路,我也想不到更好的、更简单的方法,我只能用C++的库函数,如果有大佬们有更好的方法,欢迎在评论区告诉我和其他人。

        我选择的是 cin.get 函数,可以读取输入流中的数据,然后写入到指定的数组中。

char a[60]={0}; cin.get(a,60);

        这句话的意思就是:读取六十个字符写入到创建的数组 a 中去。

对于这个字符串 a,遍历每一个字符,将数字读入数组中,将运算符单独存储,后面switch即可

关于遍历字符串:

有几个点必须要说明,特别是学C不久的同学们:

        (1)isdigit函数:判断一个字符是否是十进制数,即是否是0~9,如果是的话就直接将他从ASCII码转成数字存到数组中去

        (2)如果是两位数,则需要判断上后一位,然后相应的乘十调整,理论上还需要考虑三位数等更多位,由于题目的案例中没有,我直接偷懒。(正常的话需要一个while一直读入isdight为真的数值)

        (3)current这一个标志的使用,算是给固定数组的元素个数做铺垫,由于是不定的数组输入,所以需要在数组中找值的范围也是变化的,于是就需要这个变量来固定查找范围。

while(a[i]!='\0'&&a[i]!='=') { if(a[i]==',') // 逗号跳过 { i++; continue; } else if(isdigit(a[i])&&(!isdigit(a[i+1]))) { b[current]=a[i]-'0'; //调整数据类型至整型数字 current++; i++; } else if(isdigit(a[i])&&(isdigit(a[i+1]))) { b[current]=(a[i]-'0')*10+(a[i+1]-'0'); // 两位数的数字读取 current++; i+=2; } else if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'||a[i]=='%') { signal=a[i]; // 操作符的读取 i++; } }

查找数组最大值和最小值,我设置了两个函数,其中就用到了刚才的current:

        正常的一次遍历,然后在固定范围内查找最大(小)值,这里的size均会调用刚才的current变量的值。然后b就是数组,传址调用。

int findmax(int*b,int size) // 找最大数 { int i=0; int max=b[0]; for(i=1;imax) { max=b[i]; } } return max; } int findmin(int*b,int size) // 找最小数 { int i=0; int min=b[0]; for(i=1;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有