问题 填空题

字符串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; 【1】 ; p++; while (*p) { n= 【2】 ; p++; } return 【3】 ; } 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 !\n\n"); 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 !\n\n", str[i]); exit(0); } printf("The original string:"); puts(str); n=fun(str); printf("\n%s is convered to decimal number:%d\n\n",str,n); }

答案

参考答案:[1] n=*p-’0’ [2] n*2+*p’0’ [3] n

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

问答题 简答题
单项选择题