A-A+

字符串str由数字字符‘0’和‘1’组成(长度不超过8个字符) 可看作二进制数 请补充函数f

2022-08-06 01:30:01 问答库 阅读 174 次

问题详情

字符串str由数字字符‘0’和‘1’组成(长度不超过8个字符),可看作二进制数,请补充函数fun(),该函数的功能是:把str字符串转换成十进制数,结果由函数返回。例如,输入“1001”,结果输出:9。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
include<stdio.h>
include<stdlib.h>
include<string.h>
int fun(char *str)
{
int n;
char *p=str;
【 】;
p++;
while (*p)
{
n=【 】;
p++;
}
return【 】;
}
main()
{
char str[9];
int i;
int n;
printf ("Enter a string made up of "0" and
"1" digital character:");
gets (str);
if (strlen(str)>8)
{
printf ("Error:string too longer!
please input again !nn");
exit(0);
}
for(i=0;str[i];i++)
if(str[i]<"0"||str[i]>"1")
{
printf("Error:%c not is "0"and
"1" digital character !nn",
str[i]);
exit(0);
}
printf("The original string:");
puts(str);
n=fun(str);
printf("n%s is convered to decimal
number:%dnn",str,n);
}请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:n=*p-'0'n*2+*p'0'n
n=*p-'0'n*2+*p'0'n 解析:第一空:'0'和'1'是字符串中的数字字符,为了进行数字运算,必须要将数字字符转换为数字,用数字字符减去字符'0'的ASCII码,就得到对应的数字。第二空:将二进制数转换为十进制数的算法是:以1001为例,对应的十进制数为1*23+0*22+0*2+1=2*(2*(2*1+0)+0)+1=9。明白了这一算法,此空就非常容易了。第三空:最后计算的结果存放在变量n中,所以函数的返回值为n。

考点:字符,字符串