一、程序填空题
请补充函数proc(),该函数可以统计一个长度为n的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:fjdkad**fdadf fdadjkfdad,子字符串为ad,则应输出4。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#include
#include
int proc(char*str.char*sub)
{
int n;
char*P,*r;
n=0:
while(*str)
{
p=str;
r=sub:
while(【1】)
if(*r==*p)
{
r++:
p++;
}
else
【2】 ;
if(*r==’\0’)
n++;
str++;
}
return 【3】 ;
}
void main()
{
char str[81],sub[3];
int n;
system("CLS"):
printf("输入主字符串:");
gets(str);
print{("输入子字符串:");
gets(sub);
puts(str);
puts(sub);
n=proc(str,sub);
printf("n=%d\n",n);
}
二、程序改错题
下列给定程序中,函数p roc()的功能是:先将字符串s 中的字符按顺序存放到t中,然后把S中的字符按正序连接到t的后面。例如,当s中的字符串为WXYZ时,则t中的字符串应为WXYZWXYZ。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
#include
#include
void proc(char*s,char*t)
{
int i,s1;
s1=strlen(s);
for(i=0;i //****found****
t[i]=s[s1];
for(i=0;i t[s1+i]一s[i];
t[2*s1]=’\O0;
}
void main()
{
char s[100],t[100];
system("CLS");
print{("\nPlease enter string s:");
scanf("%s",s);
proc(s,t);
printf("The result is:%s\n",t);
}
三、程序设计题
请编写函数proc(),其叻能是:计算并输出下列多项式值。
S=(1+1/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)
例如,若主函数从键盘给n输入l00后,则输出为S=5.878031。
n的值要求大于1但不大于100。
注意:部分源程序给出如下。
请勿改动主函数main()和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序:
#include stdio.h>
double proc(int n)
{
}
void main()
{
int n;
double sum;
printf("\nInput n:");
scanf("%d",&n);
sum=proc(n);
printf("\ns一%f\n",sum);
}
上机考试试题答案与解析
一、程序填空题
【1】*r【2】break【3】n
【解析】由函数proc()可知,字符指针变量P和r分别指向字符串和子字符串,要对其指向的每一个字符进行比较,除非子字符串结束,因此【1】填“*r”;如果当前比较的两个字符相等,则分别指向下一个字符,否则退出本次循环,进行下一次比较,因此【2】填“break”;最后要返回所含子字符串的个数,因此【3】填“n”。
二、程序改错题
错误:t[i]=s[l];
正确:t[i]=s[i];
【解析】函数proc()首先要实现将数组s中的元素顺序放在数组t中,即数组t中下标为i的元素在数组S中下标也为i,因此“t[i]=s[s1];”应改为“t[i]=s[i];”。
三、程序设计题
double proc(int n)
{
int i;
double sum=0.0; //变量s存放和,因此其初始值为0
for(i=1;i<=n;i++)//从第1项到第n项
sum=sum+(1.0/(2*i-1)+1.0/(2*i)); //把
分子、分母转换为符合题意的类型
return sum; //最后把和值返回到主函数中
}
【解析】首先定义一个变量来存放表达式的和,根据题目中提供的多项式,通过n次循环来求出n项的和。最后把所求得的和返回到主函数当中。