一、程序填空题1. str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数proc(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。
例如,str="abc123de45fg67",结果为1234567。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#define M 80
int bb[M];
int proc(char str[],int bb[],int num)
{
int i,n=0;
for(i=0;i<num;i++)
{
if(______)
{
bb[n]=______;
n++;
}
}
return ______;
}
vnid main()
{
char str[M];
int num=0,n,i;
printf("Enter a string:n");
gets(str);
while(str[num])
num++;
n=proc(str,bb,num);
printf("\nbb=");
for(i=0;i<n;i++)
printf("%d",bb[i]);
}
str[i]>='0'&&str[i]<='9' str[i]-'0' n
[解析] 题目中要求把字符串str中的数字字符转换威数字并存放到整型数组bb中。首先,应判断字符串str中每个字符是否是数字字符。因此,第一处填“str[i]>='0'&&str[i]<='9'”;将每一个数字字符转化为数字放在整型数组bb中,因此,第二处填“str[i]-'0'”;由函数proc()可知,变量n中存放整型数组bb中的元素个数,最后要返回到主函数当中,因此,第三处填“n”。
二、程序改错题1. 下列给定程序中,函数proc()的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码升序排序后输出。
例如,输入opdye,则应输出deopy。
请修改程序中的错误,使它能得到正确结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
//****found****
int proc(char str[])
{
char c;
unsigned i,j;
for(i=0;i<strlen(str)-1;i++)
for(j=i+1;j<strlen(str);j++)
if(str[i]>str[j])
{
c=str[j];
{|****found****
str[j]=str[i++];
str[i]=c;
}
}
void main()
{
char str[81];
system("CLS"):
printf("\nPlease enter a character
string:");
gets(str);
printf("\n\nBefore sorting:\n%S",str);
proc(str);
printf("\nAfter sorting decendingly:n%S",str);
}
错误:int proc(char str[])
正确:void proc(char str[])
错误: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];”。
三、程序设计题1. 请编写函数proc(),它的功能是计算:
s=(ln(1)+ln(2)+ln(3)+…+ln(m))0.5
在C语言中可调用log(n)函数求ln(n)。
例如,若m的值为30,则proc()函数值为8.640500。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
double proc(int m)
{
}
void main()
{
system("CLS");
printf("%f\n",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项表达式的和,然后将其和开平方并返回到主函数当中。