一、程式改錯題(共24分)
下列給定程式中,函式proc()的功能是根據整型形參n,計算如下公式的值:
Y=1-1/(22)+1/(33)-1/(44)+…+(-1)(n+1)/(nn)
例如,n中的值為l0,則應輸出0.817962。
請修改程式中的錯誤,使它能得到正確結果。
注意:不要改動main()函式,不得增行或刪行,也不得更改程式的結構。
試題程式:
#include
#include
#include
double proc(int n)
{
double y=1.0;
f|****found****
int J=1; .
int i;
for(i=2;i<=n;i++)
{
j=-l*j;//****found****
y+=1/(i*i);
)
return(y);
)
void main()
{
int n=10:
system("CLS"):
printf("nThe result is%lfn",proc(n));
)
二、程式設計題(共18分)
編寫一個函式,從傳人的M個字元中找出最長的一個字串,並通過形參指標max傳回該串地址(用****作為結束輸入的標誌)。
注意:部分源程式給出如下。
請勿改動main()函式和其他函式中的任何內容,僅在函式proc()的花括號中填人所編寫的`若干語句。
試題程式:
#include
#include
#include
char*proc(char(*a)[81],int num)
{
)
void main()
{
char ss[l0][81],*max;
int n,i=0;
printf("輸入若干個字串:");
gets(ss[i]);
puts(ss[i]);
while(!strcmp(ss[i],"****")= =0)
{
i++:
gets(ssEi]);
puts(ss[i]);
)
n=i:
max=proe(SS,n);
printf("nmax=%sn",max);
}
【參考答案及解析】
程式改錯題
(1)錯誤:int j=1;正確:double j=1.0;
(2)錯誤:y+=1/(i*i); 正確:y+=j/(i*i);
【解析】由函式proc()可知,變數j的作用是控制每一項符號的變化,並且作為運算的分子,應改為double型變數。因此,“int j=1;”應改為“double j=1.0;”。變數y中存放多項式的值,多項式中的每一項符號由變數j決定。因此,“y+=1/(i*i);”應改為“y+=j/(i*i);”。
程式設計題
char*proc(char(*a)[81],int M)
{
char*max;
int i=0:
max=a[O]:
for(i=0;i if(strlen(max) max=a[i];
return max; //返回最長字串的地址
}
【解析】本題首先要定義一個字元指標用於儲存最長的字串,並使其初始值指向第一個字串;再迴圈遍歷字串陣列,通過if語句比較字串的長度,並把最長的字串地址賦給字元指標;最後返回最長字串的地址。