阅读以下说明和代码,填写程序中的空(1)-(5),将解答写入答题细的对应栏内。【说明】下面程序运行时,对输入的表达式进行计算并输出计算结果。设表达式由两个整数和一个运算符(+或-)构成,整数和运算符之间以空格分隔,运算符可以出现在两个整数之前、之间或之后,整数不超过4位,输入的两个整教和运算符都用字符串表示 例如,输入分别为 “25+7”、“+257”、“257+”时,输出均为“25+7=32”。【C 代码】
#include Int strain (char*s); //将数字字符串转换为整数 Int isOperator(char*str); //判断字符串的开头字符是否为运算符 void cal (char op, char a[ ], charb[ ]); //将数字串转化为对应证书后进行所要求的计算 int main ( ) { char a[ 10] ,b[10 ],c[10]; scanf ("%s%s%s, a, b, c); //输入数据的有效性检测略,下面假设输入数据有效、正确 Solve(a, b, c); Retune ( ) } int strain (char*s);{ Int val=0 while(*s) val= (1)+(*s-’0’); ∥将数字字符串转换为十进制整数 (2) //令字符指针指向下一个数字字符 } Return val; } int isoperator(char* str) { return (*str==’+’II*str==’-’): }Void cal ( char op,char a [ ],char b[ ]){switch(op) { case ‘+’: printf("%s+%s=%d", a, b, straint(a)+straint(b)); break. case ‘-’: printf("%s-%s=%d", a, b, strain(a)-straint(b)); Break; }}void solve(char a[ ], char b[ ], char c [ ]){//解析输入的3 个字符串,输出表达式及计算结果 if (seperator(a)){ ∥运算符在两个整数之前 ca(( 3 ); } else if(opErator(b)){ ∥运算符在两个整数之间 ca(( 4 ); else { ∥运算符在两个整数之后 ca(( 5 );}}
答案:
解析:
(1)val*10(2)S++(3)*a,b,c(4)*b,a,c(5)*c,a,b
【解析】
1、2 空将数字字符申进行全部转化为数字,例如“1234”转化为数字1234,分别用指针s 依次取字符,val将数字保留,之前是’1’,val=1;然后s=’2’,val=12,然后s=’3’,Val=123,然后s=’4’,Val=1234,因此val=val*10+*S-’0’。每次循环后s 向后移动一个。3、4、5 考查的都是函数调用的问题,首先判断运算符的位置,用 isOperator 来进行判定,如果字符串a 就是运算符,那么操作数就是b和c,调用cal函数进行计算。实参传递的时候,第一个参数要传递字符,后面两个参数传递字符数组或者字符指针,(3)填写的是*a,b,C,依次类推,(4)答案是*b,a,C,(5) 的答家是*c,a,b。