全国计算机等级考试二级C语言练习题(十二)
1.程序填空题
在给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时,程序输出:x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#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.程序修改题
在给定程序中,函数fun()的功能是:将没有在字符串s中出现而在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。
例如,当s=“12345”,t=“24677”时,u中的字符串为“677”。
请改正程序中的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#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.程序设计题
请编写函数fun(),函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。
例如,字符串数组中的M个字符串为:
AAAA
BBBBBBBB
CC
则合并后的字符串的内容应是:
AAAABBBBBBBBCC。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数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.程序填空题
给定程序中,函数fun()的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#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函数的功能是:根据形参n,计算如下公式的值。
请改正程序中的错误,使其能得到正确的结果。
注意:不要改动main函数,不能增行或删行,也不得更改程序的结构。
#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.程序设计题
请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数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.程序填空题
在给定程序中,函数fun的功能是:将自然数1~10以及它们的平方根写到名为wfile4.txt的文本文件中,然后再顺序读出显示在屏幕上。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#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.程序修改题
在给定程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。K的值由主函数传入,若k的值为500,则函数值为4622。
请改正程序中的错误,使程序能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#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.程序设计题
请编写函数fun(),其功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
例如,二维数组中的数据为:
W W W W
S S S S
H H H H
则字符串中的内容应是:WSHWSHWSH。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数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.程序填空题
请补充fun函数,该函数的功能是:判断一个年份是否为闰年。
例如,2007年不是闰年,2008是闰年。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#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.程序修改题
数列中,第一项值为3,后一项都比前一项的值增5。下列给定程序中,函数fun的功能是:计算前n(4<n<50)项的累加和;在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数。
例如,当n的值为10时,符合此条件的累加值应为42、126。
请改正程序中的错误,使其能得到正确的结果。
注意:不要改动main函数,不能增行或删行,也不得更改程序的结构。
#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.程序设计题
程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[ ][N]),函数的功能是:使数组右上半三角元素中的值全部置0。
例如:a数组中的值为:
1 9 7
2 3 8
6 5 6
则返回主程序后a数组中的值应为
0 0 0
2 0 0
6 5 0
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数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.程序填空题
给定程序的功能是将大写字母转换为对应小写字母之后的第五个字母;若小写字母为v~z,使小写字母的值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#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.程序修改题
在给定程序中,函数fun()的功能是:将既在字符串s中出现又在字符串t中出现的字符构成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。
例如:当s=“122345”,t=“2467”时,u中的字符串为:“224”。
请改正程序中的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#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.程序设计题
请编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数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.程序填空题
给定程序的功能是分别统计字符串中大写字母和小写字母的个数。
例如,给字符串ss输入:AAaaBBb123CCccccd,则输出结果应为:upper = 6,lower = 8
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#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.程序修改题
在给定程序中,函数fun的功能是:将未在字符串s中出现、而在字符串t中出现的字符,构成一个新的字符串放在u中,u中字符按原字符串中字符的顺序的逆序排列,不去掉重复字符。
例如,当s=“12345”,t=“24677”时,u中的字符串为:“776”。
请改正程序中的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#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.程序设计题
请编写函数fun,它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。
例如:若n为878时,函数值应为:s = 134.465609。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数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.程序填空题
下列给定程序中,函数fun和funx的功能是:用二分法求解方程2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。
例如:给m输入-100,给n输入90,则函数求得的一个根值为2.000。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#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.程序修改题
在给定程序中,函数fun()的功能是:求两个形参的乘积和商数,并通过形参返回调用程序。
例如输入:61.82和12.65,输出为:c = 782.023000 d = 4.886957
请改正程序中的错误,使其能得出正确的结果。
注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。
#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.程序设计题
请编写一个函数void fun(int tt[M][N],int pp[N ]),tt是一个M行N列的二维数组,求出每列中最小元素,并依次放入pp数组中。Tt数组中的数由主函数从键盘读入。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数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中出现而不在字符串t中出现的字符,和仅在字符串t中出现而不在字符串s中出现的字符,构成一个新字符串放在u中,u中的字符按原字符串中字符顺序排列,不去掉重复字符。
例如:当s=“112345”,t=“24677”时,u中的字符串为:“1135677”。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构
#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.程序修改题
下列给定程序中,函数fun的功能是:按顺序给t所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在r所指的数组中。若t所指数组中元素的个数不是5的倍数,多余部分忽略不计。
例如,t所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
请改正程序中的错误,使其能得到正确的结果。
注意:不要改动main函数,不能增行或删行,也不得更改程序的结构。
#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.程序设计题
请编写函数fun(),其功能是用来删除字符串中的所有空格。
例如:输入的字符串是absd f aas z1o67,则输出为absdfaasz1o67。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数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.程序填空题
给定程序的功能是计算二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积。函数体的变量必须使用r。
例如输入圆的半径值r=19.527,输出s=598.950017。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#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函数的功能是计算以下公式的值:
t=f(-m)+f(-m+1)+…+f(0)+f(1)+f(2)+…+f(m)
例如,当m为10时,函数值应为22.550361。F(x)函数定义如下:
(x+1)/(x-2) x>0
f(x)= 0 x=0或x=2
(x-1)/(x-2) x<0
请改正程序中的错误,使其能得到正确的结果。
注意:不要改动main函数,不能增行或删行,也不得更改程序的结构。
#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.程序设计题
请编写函数fun,其功能是找出一维数组元素中最小的值和它所在的下标,最小值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。
主函数中x是数组名,n是x中的数据个数,min存放最小值,index存放最小值所在元素的下标。
注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数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;}
}