三做一年级算术题 | 您所在的位置:网站首页 › 小学算术游戏 › 三做一年级算术题 |
我已经骂不动这题了,不论是这一年级就会做的取模还有隐藏案例里面的无脑示例,不得不说,这道题算是比较恶心的题目了。(主要使用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 实验室设备网 版权所有 |