全國計算機(jī)等級考試二級C語言練習(xí)題(十二)
1.程序填空題
在給定程序中,函數(shù)fun的功能是根據(jù)形參i的值返回某個函數(shù)的值。當(dāng)調(diào)用正確時,程序輸出:x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
double f1(double x)
{ return x*x; }
double f2(double x, double y)
{ return x*y; }
/**********found**********/
___1___fun(int I, double x, double y)
{
if(i==1)
/**********found**********/
___2___;
else
/**********found**********/
___3___;
}
main()
{
double x1=5, x2=3, r;
r=fun(1, x1, x2);
r+=fun(2, x1, x2);
printf("x1=%f, x2=%f, x1*x1+x1*x2=%f\n\n",x1, x2, r);
}
【答案】
(1)double
(2)return f1(x)
(3)return f2(x, y)
2.程序修改題
在給定程序中,函數(shù)fun()的功能是:將沒有在字符串s中出現(xiàn)而在字符串t中出現(xiàn)的字符形成一個新的字符串放在u中,u中字符按原字符串中字符順序排列,不去掉重復(fù)字符。
例如,當(dāng)s=“12345”,t=“24677”時,u中的字符串為“677”。
請改正程序中的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
void fun(char *s, char *t, char *u)
{
int I,j,sl,tl;
sl=strlen(s); tl=strlen(t);
/**********found**********/
for(i=0,i<t1,i++)
{
for(j=0; j<sl; j++)
if(t[i]==s[j]) break;
if(j>=sl) *u++=t[i];
}
/**********found**********/
*u='0';
}
main()
{
char s[100], t[100], u[100];
printf("\nPlease enter string s:");
scanf("%s", s);
printf("\nPlease enter string t:");
scanf("%s", t);
fun(s, t, u);
printf("The result is: %s\n", u);
}
【答案】
(1)將for(i=0;i<t1;i++) 改為:
for(i=0;i<tl;i++)
(2)將*u='0' 改為:*u='\0'
3.程序設(shè)計題
請編寫函數(shù)fun(),函數(shù)的功能是:將放在字符串?dāng)?shù)組中的M個字符串(每串的長度不超過N),按順序合并組成一個新的字符串。
例如,字符串?dāng)?shù)組中的M個字符串為:
AAAA
BBBBBBBB
CC
則合并后的字符串的內(nèi)容應(yīng)是:
AAAABBBBBBBBCC。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#define M 3
#define N 20
void fun(char a[M][N], char *b)
{
?
}
main()
{
char w[M][N]={"AAAA","BBBBBBBB","CC"},
a[100];
int I ;
printf("The string:\n");
for(i=0; i<M; i++) puts(w[i]);
printf("\n");
fun(w,a);
printf("The A string:\n");
printf("%s",a); printf("\n\n");
}
【答案】
void fun(char a[M][N],char *b)
{
int i;
*b=0;
for(i=0; i<M; i++)
strcat(b,a[i]);
}
1.程序填空題
給定程序中,函數(shù)fun()的功能是將形參給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用字符方式從此文本文件中逐個讀入并顯示在終端屏幕上。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
void fun(char *s,int a,double f)
{
/**********found**********/
___1___*fp;
char ch;
fp=fopen("file1.txt","w");
fprintf(fp, "%s %d %f\n",s,a,f);
fclose(fp);
fp=fopen("file1.txt","r");
printf("The result :\n\n");
ch=fgetc(fp);
/**********found**********/
while(___2___)
{ putchar(ch); ch=fgetc(fp); }
putchar('\n');
fclose(fp);
}
main()
{
char a[10]="Hello!";
int b=12345;
double c=98.76;
fun(a,b,c);
}
【答案】
(1)FILE (2)!feof(fp)
2.程序修改題
下列給定程序中,fun函數(shù)的功能是:根據(jù)形參n,計算如下公式的值。
請改正程序中的錯誤,使其能得到正確的結(jié)果。
注意:不要改動main函數(shù),不能增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
double fun(int n)
{
double s=1.0;
int I;
/******found**********/
for(i=2;i<=n;i++)
s+=1.0/k;
/******found**********/
________
}
main()
{
int n;
printf("\nplease enter 1 integer numbers:\n");
scanf("%d",&n);
printf("\n\nthe result is %lf\n",fun(n));
}
【答案】
(1)將s+=1.0/k;改為:s+=1.0/i;
(2)return s;?
3.程序設(shè)計題
請編寫函數(shù)fun,對長度為7個字符的字符串,除首、尾字符外,將其余5個字符按ASCII碼降序排列。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入所編寫的若干語句。
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <string.h>
void fun(char *str,int n)
{
?
}
main()
{
char str[10];
FILE *out;
printf("input string with seven characters:");
gets(str);
fun(str,7);
printf("\n%s",str);
out=fopen("outfile.dat","w");
strcpy(str,"Justsdf");
fprintf(out,"%s",str);
fclose(out);
}
【答案】
char t;
int i,j;
for(i=1;i<n-2;i++)
for(j=i+1;j<n-1;j++)
if(str[i]<str[j])
{
t=str[i];
str[i]=str[j];
str[j]=t;
}
1.程序填空題
在給定程序中,函數(shù)fun的功能是:將自然數(shù)1~10以及它們的平方根寫到名為wfile4.txt的文本文件中,然后再順序讀出顯示在屏幕上。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <math.h>
#include <stdio.h>
int fun(char *fname )
{
FILE *fp;
int I,n; float x;
if((fp=fopen(fname, "w"))==NULL) return 0;
for(i=1; i<=10; i++)
/**********found**********/
fprintf(___1___);
printf("Succeed!!\n");
/**********found**********/
___2___;
printf("The data in file :\n");
if((fp=fopen(fname,"r"))==NULL)
return 0;
fscanf(fp,"%d%f",&n,&x);
while(!feof(fp))
{
printf("%d %f\n",n,x);
fscanf(fp,"%d%f",&n,&x);
}
fclose(fp);
return 1;
}
main()
{
char fname[]="wfile4.txt";
fun(fname);
}
【答案】
(1)fp,"%d %f\n",sqrt((double)i)
(2)fclose(fp)
2.程序修改題
在給定程序中,函數(shù)fun的功能是:計算并輸出k以內(nèi)最大的10個能被13或17整除的自然數(shù)之和。K的值由主函數(shù)傳入,若k的值為500,則函數(shù)值為4622。
請改正程序中的錯誤,使程序能輸出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
int fun(int k)
{
int m=0,mc=0,j,n;
while((k>=2)&&(mc<10))
{
/**********found**********/
if((k%13=0)||(k%17=0))
{m=m+k; mc++;}
k--;
}
return m;
/**********found**********/
main()
{
printf("%d\n",fun(500));
}
【答案】
(1)將if((k%13=0)||(k%17=0))改為:
if((k%13==0)||(k%17==0))
(2)將缺少的“}”加上
3.程序設(shè)計題
請編寫函數(shù)fun(),其功能是:將M行N列的二維數(shù)組中的字符數(shù)據(jù),按列的順序依次放到一個字符串中。
例如,二維數(shù)組中的數(shù)據(jù)為:
W W W W
S S S S
H H H H
則字符串中的內(nèi)容應(yīng)是:WSHWSHWSH。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#define M 3
#define N 4
void fun(char (*s)[N], char *b)
{
?
}
main()
{
char a[100],w[M][N]={{'W','W','W','W'},
{'S','S','S','S'},{'H','H','H','H'}};
int I,j;
printf("The matrix:\n");
for(i=0; i<M; i++)
{
for(j=0;j<N; j++) printf("%3c",w[i][j]);
printf("\n");
}
fun(w,a);
printf("The A string:\n"); puts(a);
printf("\n\n");
}
【答案】
void fun(char (*s)[N],char *b)
{
int i, j, k;
for(i=0; i<N; i++)
for(j=0; j<M; j++)
{
k=i*M+j;
b[k]=s[j][i];
}
b[M*N]='\0';
}
1.程序填空題
請補(bǔ)充fun函數(shù),該函數(shù)的功能是:判斷一個年份是否為閏年。
例如,2007年不是閏年,2008是閏年。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <conio.h>
int fun(int n)
{
int flag=0;
if(n%4==0)
if(___1___)
flag=1;
if(___2___)
flag=1;
return ___3___;
}
main()
{
int year;
printf("Input the year:");
scanf("%d",&year);
if(fun(year))
printf("%d is a leap year.\n",year);
else
printf("%d is not a leap year.\n",year);
}
【答案】
(1)n%100!=0 (2)n%400==0 (3)flag
2.程序修改題
數(shù)列中,第一項值為3,后一項都比前一項的值增5。下列給定程序中,函數(shù)fun的功能是:計算前n(4<n<50)項的累加和;在累加過程中把那些被4除后余2的當(dāng)前累加值放入數(shù)組中,符合此條件的累加值的個數(shù)作為函數(shù)值返回主函數(shù)。
例如,當(dāng)n的值為10時,符合此條件的累加值應(yīng)為42、126。
請改正程序中的錯誤,使其能得到正確的結(jié)果。
注意:不要改動main函數(shù),不能增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#define M 10
int fun(int n,int *b)
{
/********found*******/
int I,j,k,sum;
sum=0;
for(k=3,i=0;i<n;i++,k+=5)
{
sum=sum+k;
/********found********/
if(sum%4=2)
b[j++]=sum;
}
return j;
}
main()
{
int b[M],m,n,I;
printf("\nEnter n (4<n<=50): ");
scanf("%d",&n);
m=fun(n,b);
printf("\n\nThe result :\n");
for(i=0;i<m;i++)
printf("%6d",b[i]);
printf("\n\n");
}
【答案】
(1)將int i,j,k,sum;改為:int i,j=0,k,sum;
(2)將if(sum%4=2)改為:if(sum%4==2)?
3.程序設(shè)計題
程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(int a[ ][N]),函數(shù)的功能是:使數(shù)組右上半三角元素中的值全部置0。
例如:a數(shù)組中的值為:
1 9 7
2 3 8
6 5 6
則返回主程序后a數(shù)組中的值應(yīng)為
0 0 0
2 0 0
6 5 0
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#include <stdlib.h>
#define N 5
int fun(int a[][N])
{
?
}
main()
{
int a[N][N],I,j;
printf("***The array***\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=rand()%20;
printf("%4d",a[i][j]);}
printf("\n");
}
fun(a);
printf("THE RESULT\n");
for(i=0; i<N; i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
【答案】
int fun(int a[][N])
{
int i,j;
for(i=0; i<N; i++)
for(j=i; j<N; j++)
a[i][j]=0;
}
1.程序填空題
給定程序的功能是將大寫字母轉(zhuǎn)換為對應(yīng)小寫字母之后的第五個字母;若小寫字母為v~z,使小寫字母的值減21。轉(zhuǎn)換后的小寫字母作為函數(shù)值返回。例如,若形參是字母A,則轉(zhuǎn)換為小寫字母f;若形參是字母W,則轉(zhuǎn)換為小寫字母b。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <ctype.h>
char fun(char c)
{
if(c>='A'&&c<='Z') c=c+32;
if(c>='a' && c<='u')
/**********found**********/
___1___;
else if(c>='v'&&c<='z')
c=c-21;
/**********found**********/
___2___;
}
main()
{
char c1,c2;
printf("Enter a letter(A-Z): ");
c1=getchar();
if(isupper(c1))
{
/**********found**********/
c2=fun(c1);
printf("The letter %c change to %c\n",c1,c2);
}
else printf("Enter (A-Z)!\n");
}
【答案】
(1)c=c+5 (2)return c?
2.程序修改題
在給定程序中,函數(shù)fun()的功能是:將既在字符串s中出現(xiàn)又在字符串t中出現(xiàn)的字符構(gòu)成一個新的字符串放在u中,u中字符按原字符串中字符順序排列,不去掉重復(fù)字符。
例如:當(dāng)s=“122345”,t=“2467”時,u中的字符串為:“224”。
請改正程序中的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
void fun(char *s,char *t,char *u)
{
int I,j,sl,tl;
sl=strlen(s); tl=strlen(t);
for(i=0; i<sl; i++)
{
for(j=0;j<tl;j++)
if(s[i]==t[j]) break;
/**********found**********/
if(j<tl);
*u++ = s[i];
}
/**********found**********/
u='\0';
}
main()
{
char s[100], t[100], u[100];
printf("Please enter string s:");
scanf("%s", s);
printf("Please enter string t:");
scanf("%s", t);
fun(s,t,u);
printf("The result is: %s\n",u);
}
【答案】
(1)將if(j<tl); 改為:if(j<tl)
(2)將u = '\0'; 改為:*u ='\0';
3.程序設(shè)計題
請編寫函數(shù)int fun(int lim,int aa[MAX]),該函數(shù)的功能是求出小于lim的所有素數(shù)并放在aa數(shù)組中,該函數(shù)返回所求出素數(shù)的個數(shù)。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#define MAX 100
int isP(int num)
{
int I,tag=1;
for(i=2; i<=(num/2)&&tag; i++)
if(num%i==0) tag=0;
return tag;
}
int fun(int lim, int aa[MAX])
{
?
}
main()
{
int limit, I, sum ;
int aa[MAX] ;
scanf("%d", &limit) ;
sum=fun(limit, aa) ;
for(i=0 ; I < sum ; i++)
{
if(i%10==0&&i!=0) printf("\n") ;
printf("%5d", aa[i]);
}
}
【答案】
int fun(int lim, int aa[MAX])
{
int i,j=0;
for(i=2; i<=lim; i++)
if(isP(i)) aa[j++]=i;
return j;
}
1.程序填空題
給定程序的功能是分別統(tǒng)計字符串中大寫字母和小寫字母的個數(shù)。
例如,給字符串ss輸入:AAaaBBb123CCccccd,則輸出結(jié)果應(yīng)為:upper = 6,lower = 8
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
void fun(char *s,int *a,int *b)
{
while(*s)
{
if(*s>='A'&&*s<='Z')
/**********found**********/
___1___;
if(*s>='a'&&*s<='z')
/**********found**********/
___2___;
s++;
}
}
main()
{
char s[100];
int upper=0,lower=0;
printf("Please a string : ");
gets(s);
fun(s,&upper,&lower);
/**********found**********/
printf("upper=%d lower=%d\n",upper,lower);
}
【答案】
(1)(*a)++; (2)(*b)++;?
2.程序修改題
在給定程序中,函數(shù)fun的功能是:將未在字符串s中出現(xiàn)、而在字符串t中出現(xiàn)的字符,構(gòu)成一個新的字符串放在u中,u中字符按原字符串中字符的順序的逆序排列,不去掉重復(fù)字符。
例如,當(dāng)s=“12345”,t=“24677”時,u中的字符串為:“776”。
請改正程序中的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
void fun(char *s, char *t, char *u)
{
int I,j,sl,tl,ul;
char r,*up=u;
sl=strlen(s); tl=strlen(t);
for(i=0;i<tl;i++)
{
for(j=0;j<sl;j++)
if(t[i]==s[j]) break;
if(j>=sl) *u++=t[i];
}
/**********found**********/
*u='\0'
ul=strlen(up);
/**********found**********/
for(i=0;i<ul;i++)
{ r=up[i];
up[i]=up[ul-1-i];
up[ul-1-i]=r;
}
}
main()
{
char s[100],t[100],u[100];
printf("Please enter string s:");
scanf("%s", s);
printf("Please enter string t:");
scanf("%s",t);
fun(s,t,u);
printf("The result is: %s\n", u);
}
【答案】
(1)將*u='\0' 改為:*u='\0';
(2)將for (i=0; i<ul; i++) 改為:
for(i=0; i<ul/2; i++)
3.程序設(shè)計題
請編寫函數(shù)fun,它的功能是:求n以內(nèi)(不包括n)同時能被3與7整除的所有自然數(shù)之和的平方根s,并作為函數(shù)值返回。
例如:若n為878時,函數(shù)值應(yīng)為:s = 134.465609。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <math.h>
#include <stdio.h>
double fun(int n)
{
?
}
main()
{
printf("s=%f\n",fun(878));
}
【答案】
double fun(int n)
{
int i;
long s=0;
double t;
for(i=3;i<n;i++)
if(i%3==0&&i%7==0) s+=i;
t=sqrt(1.0*s);
return t;
}
1.程序填空題
下列給定程序中,函數(shù)fun和funx的功能是:用二分法求解方程2x3-4x2+3x-6=0的一個根,并要求絕對誤差不超過0.001。
例如:給m輸入-100,給n輸入90,則函數(shù)求得的一個根值為2.000。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <math.h>
double funx(double x)
{ return(2*x*x*x-4*x*x+3*x-6); }
double fun(double m,double n)
{
___1___;
r=(m+n)/2;
while(___2___)
{
if(funx?*funx(n)<0) m=r;
else n=r;
r=(m+n)/2;
}
return r;
}
main()
{
double m,n,root;
printf(“enter m n:\n”);
scanf(“%lf%lf”,&m,&n);
root=___3___;
printf(“root=%6.3f\n”,root);
}
【答案】
(1)double r
(2)fabs(n-m)>=0.001
(3)fun(m,n)?
2.程序修改題
在給定程序中,函數(shù)fun()的功能是:求兩個形參的乘積和商數(shù),并通過形參返回調(diào)用程序。
例如輸入:61.82和12.65,輸出為:c = 782.023000 d = 4.886957
請改正程序中的錯誤,使其能得出正確的結(jié)果。
注意;不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
/**********found**********/
fun(double a,double b,double *x,double *y)
{
/**********found**********/
*x=a*b,*y=a/b;
}
main()
{
double a,b,c,d;
printf("Enter a,b: ");
scanf("%lf%lf",&a,&b);
fun(a,b,&c,&d) ;
printf("c=%f d=%f\n",c,d);
}
【答案】
(1)將fun(double a,double b,double *x,double *y)
改為:void fun(double a,double b,double *x,dou ble *y)
(2)將*x=a*b,*y=a/b; 改為:*x=a*b;*y=a/b;?
3.程序設(shè)計題
請編寫一個函數(shù)void fun(int tt[M][N],int pp[N ]),tt是一個M行N列的二維數(shù)組,求出每列中最小元素,并依次放入pp數(shù)組中。Tt數(shù)組中的數(shù)由主函數(shù)從鍵盤讀入。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#define M 3
#define N 4
void fun( int tt[M][N],int pp[N] )
{
?
}
main()
{
int t[M][N]={{22,45,56,30},
{19,33,45,38},
{20,22,66,40}};
int p[N],I,j,k;
printf("The original data is : \n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("The result is:\n");
for(k=0;k<N;k++) printf("%4d ",p[k]);
printf("\n");
}
【答案】
void fun(int tt[M][N],int pp[N])
{
int i, j;
for(i=0; i<N; i++)
pp[i]=tt[0][i];
for(i=1; i<M; i++)
for(j=0; j<N; j++)
if(pp[j]>tt[i][j])
pp[j]=tt[i][j];
}
1.程序填空題
給定程序的功能是:將僅在字符串s中出現(xiàn)而不在字符串t中出現(xiàn)的字符,和僅在字符串t中出現(xiàn)而不在字符串s中出現(xiàn)的字符,構(gòu)成一個新字符串放在u中,u中的字符按原字符串中字符順序排列,不去掉重復(fù)字符。
例如:當(dāng)s=“112345”,t=“24677”時,u中的字符串為:“1135677”。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)
#include <stdio.h>
#include <string.h>
void fun(char *s,char *t,char *u)
{
int I,j,sl,tl;
sl=strlen(s); tl=strlen(t);
for(i=0;i<sl;i++)
{
for(j=0;j<tl;j++)
if(s[i]==t[j]) break;
/**********found**********/
___1___;
*u++=s[i];
}
for(i=0;i<tl;i++)
{
for(j=0;j<sl;j++)
if(t[i]==s[j]) break;
/**********found**********/
___2___;
*u++=t[i];
}
/**********found**********/
___3___;
}
main()
{
char s[100], t[100], u[100];
printf("Please enter string s:");
scanf("%s", s);
printf("Please enter string t:");
scanf("%s", t);
fun(s,t,u);
printf("The result is: %s\n", u);
}
【答案】
(1)if(j>=tl) (2)if(j>=sl) (3)*u='\0'?
2.程序修改題
下列給定程序中,函數(shù)fun的功能是:按順序給t所指數(shù)組中的元素賦予從2開始的偶數(shù),然后再按順序?qū)γ?個元素求一個平均值,并將這些值依次存放在r所指的數(shù)組中。若t所指數(shù)組中元素的個數(shù)不是5的倍數(shù),多余部分忽略不計。
例如,t所指數(shù)組有14個元素,則只對前10個元素進(jìn)行處理,不對最后的4個元素求平均值。
請改正程序中的錯誤,使其能得到正確的結(jié)果。
注意:不要改動main函數(shù),不能增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#define NUM 20
int fun(double *t,double *r)
{
int j,I;
double sum;
for(j=2,i=0;i<NUM;i++)
{
t[i]=j;
j+=2;
}
sum=0.0;
for(j=0,i=0;i<NUM;i++)
{
sum+=t[i];
/********found********/
if(i+1%5==0)
{
r[j]=sum/5;
sum=0;
j++;
}
}
return j;
}
main()
{
double a[NUM],b[NUM/5];
int I,j;
j=fun(a,b);
printf("The original data:\n");
for(i=0;i<NUM;i++)
{
if(i%5==0)
printf("\n");
printf("%4.0f",a[i]);
}
printf("\n\nThe result :\n");
for(i=0;i<j;i++)
printf("%6.2f ",b[i]);
printf("\n\n");
}
【答案】
將if(i+1%5==0)改為:if((i+1)%5==0)
3.程序設(shè)計題
請編寫函數(shù)fun(),其功能是用來刪除字符串中的所有空格。
例如:輸入的字符串是absd f aas z1o67,則輸出為absdfaasz1o67。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#include <ctype.h>
int fun(char *str)
{
?
}
main()
{
char str[81];
int n ;
gets(str);
puts(str);
fun(str);
printf("*** str: %s\n", str);
}
【答案】
int fun(char *str)
{
char *p=str;
int i=0;
while(*p)
{
if(*p!=' ') str[i++]=*p;
p++;
}
str[i]='\0';
}
1.程序填空題
給定程序的功能是計算二分之一的圓面積,函數(shù)通過形參得到圓的半徑,函數(shù)返回二分之一的圓面積。函數(shù)體的變量必須使用r。
例如輸入圓的半徑值r=19.527,輸出s=598.950017。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
/**********found**********/
float fun(___1___)
{
/**********found**********/
return___2___;
}
main()
{
float x;
printf("Enter x: ");
/**********found**********/
___3___;
printf("s=%f\n ",fun(x));
}
【答案】
(1)float r
(2)3.14159 * r * r /2.0
(3)scanf ( "%f", &x )?
2.程序修改題
下列給定程序中,fun函數(shù)的功能是計算以下公式的值:
t=f(-m)+f(-m+1)+…+f(0)+f(1)+f(2)+…+f(m)
例如,當(dāng)m為10時,函數(shù)值應(yīng)為22.550361。F(x)函數(shù)定義如下:
(x+1)/(x-2) x>0
f(x)= 0 x=0或x=2
(x-1)/(x-2) x<0
請改正程序中的錯誤,使其能得到正確的結(jié)果。
注意:不要改動main函數(shù),不能增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <math.h>
/******found**********/
f(double x)
{
if(x==0.0 || x==2.0)
return 0.0;
else if(x<0.0)
return (x-1)/(x-2);
else
return (x+1)/(x-2);
}
double fun(int m)
{
int I;
double t=0.0,y;
for(i=-m;i<=m;i++)
{
y=f(1.0*i);
t+=y;
}
/*******found*********/
return t
}
main()
{
printf("%lf\n",fun(10));
}
【答案】
(1)將f(double x)改為:double f(double x)
(2)將return t 改為:return t
3.程序設(shè)計題
請編寫函數(shù)fun,其功能是找出一維數(shù)組元素中最小的值和它所在的下標(biāo),最小值和它所在的下標(biāo)通過形參傳回。數(shù)組元素中的值已在主函數(shù)中賦予。
主函數(shù)中x是數(shù)組名,n是x中的數(shù)據(jù)個數(shù),min存放最小值,index存放最小值所在元素的下標(biāo)。
注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdlib.h>
#include <stdio.h>
void fun(int a[],int n,int *min,int *d)
{
?
}
main()
{
int I,x[20],min,index,n=10;
randomize();
for(i=0;i<=n;i++)
{
x[i]=rand()%50; printf("%4d",x[i]);
}
printf("\n");
fun(x,n,&min,&index);
printf("min=%d,index=%d\n",min,index);
}
【答案】
void fun(int a[],int n,int *min,int *d)
{
int i;
*min=a[0];
*d=0;
for(i=0;i<n;i++)
if(a[i]<*min)
{*min=a[i];*d=i;}
}