某程序设计语言中,对实数的定义如下语法图所示。
语法图中的数字是属于[0,9]中的任意普通数字.
这个语法图定义的实数是C、C++、Java 等程序设计语言中实数的子集,所以,这样的实数可以与你答题时所采用的程序设计语言中的实数进行运算。
定义并实现一个函数,它带有两个参数,第一个参数代表一个字符串,第二个参数代表一个实数,函数的返回值是布尔类型。其功能是:试图把参数字符串根据语法图翻译成一个实数,若能够成功翻译,则进一步用翻译出的实数与实数参进行数值比较,若大于实数参数则函数返回真值;若参数字符串不满足语法图对实数的定义,或者,翻译出的实数不大于实数参数,则返回假值。例如:当参数字符串分别为”2a.4”、”-3.14”、”3.b”时、因不满足语法图对实数的定义,则无论实数参数的值是多少,均返回假值;当给定参数字符串分别为”123”、”123.”、“123.789”时,由于它们均满足语法图对实数的定义,所以可以把它们翻译成实数,随后与给定的实数参数进行数值比较,根据比较结果给出返回值。
boolean judge(char str[],double compareWith){
int i=0;
double figure=0.0;
int flag=0;
int count=0;
if(str[0]>'9'||str[0]<'0')
return false;
for(int j=1;str[j]!='\0';j++){
if(str[j]!='.'||str[j]>'9'||str[j]<'0')
return false;
if(str[j]=='.'&&flag==0)
flag=j;
if(str[j]=='.'&&flag!=0)
return false;
}
for(int i=0;i<strlen(str);i++){
if(i<flag){
figure=figure*10+(str[i]-'0');
}
if(i>flag){
figure=figure+(str[i]-'0')*pow(10,-count);
count++;
}
if(i==flag){
count++;
}
if(figure>compareWith)
return true;
else
return false;
}
int main() {
// 测试用例
printf("%d\n", judge("123.45", 100.0)); // 应该输出 1 (true)
printf("%d\n", judge("-3.14", 3.14)); // 应该输出 0 (false)
printf("%d\n", judge("3.b", 0.0)); // 应该输出 0 (false)
printf("%d\n", judge("123", 123.0)); // 应该输出 0 (false),因为等于
printf("%d\n", judge("-123.456", -123.456)); // 应该输出 0 (false),因为等于
return 0;
}
1