int num=0,n,i;
printf(\:\\n\ gets(str);
while(str[num]) num++; n=proc(str,bb,num); printf(\
for(i=0;i 答案:【1】str[i]>=’0’&&str[i]<=’9’【2】str[i]-’O’【3】n  【解析】题目中要求把字符串str中的数字字符转换成数字并存放到整型数组bb中。首先,应判断字符串str中每个字符是否是数字字符。因此,【1】处填“str[i]>=’0’&&str[i]<=’9’”将每一个数字字符转化为数字放在整型数组bb中,因此,【2】处填“str[i]-’0’;由函数proc()可知,变量n中存放整型数组bb中的元素个数,最后要返回到主函数当中,因此,【3】处填’n’。  三、程序改错题(共24分)  下列给定程序中,函数proc()的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCIl码升序排序后输出。  例如,输入opdye,则应输出deopy。 请修改程序中的错误,使它能得到正确结果。  注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。  试题程序:  #include  //****found**** int proc(char str[]) { char c; unsigned i,j;  for(i=0;i   c=str[j]:   //****found****   str[j]=str[i++];   str[i]=c;   }  }  void main() {  char str[81]; system(\ printf(\:\gets(str);  printf(\:\\n %s\,str); proc(str);  printf(\:\\n %s\,str); }  (1)错误:int proc(char str[])   正确:void proc(char str[])  (2)错误:str[j]=str[i++];   正确:str[j]=str[i];  【解析】由主函数中的函数调用可知,函数proc()没有返回值。因此,“int proc(char str[])”应改为“void proc(char str[])”;由函数proc()可知,if语句块完成将字符串str中的第i个元素与第j个元素相交换。因此,“str[j]=str[i++];”应改为“str[j]=str[i];”。  四、程序设计题(共18分)  请编写函数proc(),它的功能是计算:s=(ln(1)+ln(2)+ln(3)+…+ln(m))的平方根。  在C语言中可调用log(n)函数求ln(n)。  例如,若m的值为30,则proc()函数值为8.640500。 注意:部分源程序给出如下。  请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。  试题程序:  #include  void main() {   system(\  printf(\,proc(30));  } 答案:    double proc(int m)   {   int i;    double s=0.0; /* s是用来存放其和*/   for(i=1;i<=m;i++)     s=s+log(i); /*计算s=ln(1)+ln(2)+ln(3)+…+ln(m)*/   return sqrt(s); /*最后将其开平方的值返回到主函数中*/   }  【解析】由题目中所给表达式可知,表达式的值为m项表达式的和然后开平方。可以首先通过m次循环求得m项表达式的和,然后将其和开平方并返回到主函数当中。