第11套
1.程序填空题
给定程序中 ,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移 ,其他字符顺序后移 ,处理后新字符串的首地址作为函数值返回 。
例如 ,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543 。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果 。
注意:不得增行或删行 ,也不得更改程序的结构!
2.程序修改题
给定程序中 ,函数fun的功能是:求出以下分数序列的前n项之和 。
2/1 ,3/2 ,5/3 ,8/5 ,13/8 ,21/13 ,……
例如,若n=5 ,则应输出:8.391667 。
请改正函数fun中指定部位的错误 ,使它能得出正确的结果 。
注意:不要改动main函数,不得增行或删行 ,也不得更改程序的结构 。
#include <stdio.h>
/**************found**************/
fun( n )
{
int a = 2, b = 1, c, k ;
double s=0.0 ;
for ( k = 1; k <= n; k++ )
{
s = s + 1.0 * a / b ;
/**************found**************/
c = a; a += b; b += c;
}
return(s) ;
}
int main( )
{
int n = 5 ;
printf("\nThe value of function is: %f\n", fun(n));
return 0;
}
3.程序设计题
编写函数fun ,其功能是:求Fibonacci数列中大于s的最小的一个数 ,结果由函数返回 。其中Fibonacci数列F(n)的定义为:
F(0)=0 F(1)=1
F(n)=F(n-1)+F(n-2)
例如 ,当s=1000时 ,函数值为1597 。
注意:请勿改动主函数main和其他函数中的任何内容 ,仅在函数fun的花括号中填入你编写的若干语句 。
#include <stdio.h>
void NONO(void);
int fun(int s)
{
}
int main()
{
int n;
n=1000;
printf("n=%d,f=%d\n",n,fun(n));
NONO();
return 0;
}
void NONO(void)
{/* 本函数用于打开文件 ,输入数据 ,调用函数 ,输出数据 ,关闭文件 。 */
FILE *fp, *wf ;
int i, n, s ;
fp = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for (i = 0 ; i < 10 ; i++)
{
fscanf(fp, "%d", &n) ;
s = fun(n) ;
fprintf(wf, "%d\n", s) ;
}
fclose(fp) ;
fclose(wf) ;
}
1.(1)s[i] (2)k (3)\0
2. double fun(int n)
c = a+b; b=a; a=c;
3. int fun(int s)
{
if (s<0) return 0;
int a=0,b=1,c;
c=a+b;
while (c<=s)
{
a=b;
b=c;
c=a+b;
}
return c;
}
第11套参考答案
第12套
1.程序填空题
函数fun的功能是:计算
的前n项 。
例如 ,若x=2.5 ,n=12,函数值为:12.182340。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果 。
注意:不得增行或删行 ,也不得更改程序的结构!
#include <stdio.h>
double fun(double x, int n)
{
double f, t;
int i;
f = 1.0;
/**********found**********/
t = ___1___;
/**********found**********/
for (i=___2___; i<n; i++)
{
/**********found**********/
t *= x/___3___;
f += t;
}
return f;
}
int main()
{
double x, y;
x=2.5;
y = fun(x, 12);
printf("\nThe result is :\n");
printf("x=%-12.6f y=%-12.6f\n", x, y);
return 0;
}
2.程序修改题
假定整数数列中的数不重复 ,并存放在数组中 。给定程序中函数fun的功能是:删除数列中值为x的元素。N中存放的是数列中元素的个数 。
请改正函数fun中指定部位的错误,使它能得出正确的结果 。
注意:不要改动main函数 ,不得增行或删行 ,也不得更改程序的结构 。
#include <stdio.h>
#define N 20
int fun(int *a,int n,int x)
{
int p=0,i;
a[n]=x;
while(x!=a[p])
p=p+1;
/************found************/
if (p=n) return -1;
else
{
for(i=p;i<n;i++)
/************found************/
a[i+1]=a[i];
return n-1;
}
}
int main()
{
int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;
n=10;
printf("The original data :\n");
for (i=0;i<n;i++) printf("%5d",w[i]);
printf("\nInput x (to delete):");
scanf("%d",&x);
printf("Delete : %d\n",x);
n=fun(w,n,x);
if (n==-1)
printf("***Not be found!***\n\n");
else
{
printf("The data after deleted:\n");
for(i=0;i<n;i++) printf("%5d",w[i]);
printf("\n");
}
return 0;
}
3.程序设计题
编写函数fun ,其功能是:计算下列多项式的值 。
例如 ,若n=50 ,函数值为:1.718282 。
注意:请勿改动主函数main和其他函数中的任何内容 ,仅在函数fun的花括号中填入你编写的若干语句 。
#include <stdio.h>
void NONO( );
double fun(int n)
{
}
int main()
{
int n;
double s;
printf("\nInput n: ");
scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n\n",s);
NONO();
return 0;
}
void NONO()
{/* 请在此函数内打开文件 ,输入测试数据 ,调用 fun 函数 ,输出数据 ,关闭文件 。 */
FILE *rf, *wf ; int n, i ;
double s ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++)
{
fscanf(rf, "%d", &n) ;
s = fun(n) ;
fprintf(wf, "%lf\n", s) ;
}
fclose(rf) ; fclose(wf) ;
}
1.(1)1.0 (2)1 (3)i
2. if (p==n) return -1;
a[i]=a[i+1];
3. double fun(int n)
{
double s=0.0,t=1.0;
int i;
for (i=1;i<=n;i++)
{
t=t/i;
s+=t;
}
return s;
}
第12套参考答案
第13套
1.程序填空题
给定程序中 ,函数fun的功能是:求出形参ss所指字符串中最长字符串的长度 ,将其余字符串右边用字符“* ”补齐,使其与最长的字符串等长 。ss所指字符串数组中共有M个字符串 ,且串长<N 。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果 。
注意:不得增行或删行 ,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
#define M 5
#define N 20
void fun(char (*ss)[N])
{
int i, j, n, len=0;
for(i=0; i<M; i++)
{
len=strlen(ss[i]);
if(i==0) n=len;
if(len>n)n=len;
}
len=n;
for(i=0; i<M; i++)
{
/**********found**********/
n=strlen(___1___);
for(j=0; j<len-n; j++)
/**********found**********/
ss[i][ ___2___]=*;
/**********found**********/
ss[i][ ___3___]=\0;
}
}
int main()
{
char ss[M][N]={"shanghai","guangzhou",
"beijing","tianjing","cchongqing"};
int i;
printf("The original strings are :\n");
for(i=0; i<M; i++) printf("%s\n",ss[i]);
printf("\n");
fun(ss);
printf("The result is :\n");
for(i=0; i<M; i++) printf("%s\n",ss[i]);
return 0;
}
2.程序修改题
给定程序中,函数fun的功能是:把主函数中输入的3个数 ,最大的放在a中 ,最小的放在c中 。
例如 ,输入:55 12 34 ,输出结果为:a=55.0,b=34.0,c=12.0 。
请改正函数fun中指定部位的错误 ,使它能得出正确的结果。
注意:不要改动main函数 ,不得增行或删行 ,也不得更改程序的结构 。
#include <stdio.h>
void fun(float *p,float *q,float *s)
{
/**********found**********/
float *k;
if( *p<*q )
{ k=*p; *p=*q; *q=k; }
/**********found**********/
if( *p>*s )
{ k=*s; *s=*p; *p=k; }
if( *q<*s )
{ k=*q; *q=*s; *s=k; }
}
int main()
{
float a,b,c;
printf("Input a b c: ");
scanf("%f%f%f",&a,&b,&c);
printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
fun(&a,&b,&c);
printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
return 0;
}
3.程序设计题
学生的记录由学号和成绩组成 ,N名学生的数据已在主函数中放入结构体数组s中 。编写函数fun ,它的功能是:把分数最高的学生数据放在b所指的数组中 ,注意:分数最高的学生可能不止一个 ,函数返回分数最高的学生的人数。
注意:请勿改动主函数main和其他函数中的任何内容 ,仅在函数fun的花括号中填入你编写的若干语句 。
#include <stdio.h>
#define N 16
typedef struct
{
char num[10];
int s;
}STREC;
int fun(STREC *a,STREC *b)
{
}
int main()
{
STREC s[N]={{"GA05",85},{"GA03",76},
{"GA02",69},{"GA04",85},{"GA01",91},
{"GA07",72},{"GA08",64},{"GA06",87},
{"GA015",85},{"GA013",91},{"GA012",64},
{"GA014",91},{"GA011",91},{"GA017",64},
{"GA018",64},{"GA016",72}};
STREC h[N];
int i,n;FILE *out;
n=fun(s,h);
printf("The %d highest score:\n",n);
for(i=0;i<n;i++)
printf("%s %4d\n",h[i].num,h[i].s);
printf("\n");
out=fopen("out.dat","w");
fprintf(out,"%d\n",n);
for (i=0;i<n;i++)
fprintf(out,"%s %4d\n",h[i].num,h[i].s);
fclose(out);
}
1.(1)ss[i] (2)n+j (3)n+j
2. float k;
if( *p<*s )
3. int fun(STREC *a,STREC *b)
{
int i,n=0,max;
max=a[0].s;
for (i=1;i<N;i++)
if (max<a[i].s) max=a[i].s;
for (i=0;i<N;i++)
if (max==a[i].s) b[n++]=a[i];
return n;
}
第13套参考答案
第14套
1.程序填空题
用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始 ,将所有2的倍数的数从数表中删除(把数表中相应位置的值置为0);接着从数表中找到下一个非0数 ,并从数表中删除该数的所有倍数,以此类推 ,直到所找的下一个数等于n为止 。这样会得到一个序列:2,3,5,7,11,13,17,19,23 ,… 。
函数fun用筛选法找出所有小于等于n的素数 ,并统计素数的个数作为函数值返回 。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果 。
注意:不得增行或删行 ,也不得更改程序的结构!
#include <stdio.h>
int fun(int n)
{
int a[10000], i,j, count=0;
for (i=2; i<=n; i++) a[i] = i;
i = 2;
while (i<n)
{
/**********found**********/
for (j=a[i]*2; j<=n; j+=___1___)
a[j] = 0;
i++;
/**********found**********/
while (___2___==0)
i++;
}
printf("\nThe prime number between 2 to %d\n", n);
for (i=2; i<=n; i++)
/**********found**********/
if (a[i]!=___3___)
{
count++;
printf( count%15?"%5d":"\n%5d",a[i]);
}
return count;
}
int main()
{
int n=20, r;
r = fun(n);
printf("\nThe number of prime is : %d\n", r);
return 0;
}
2.程序修改题
给定程序中 ,函数fun的功能是:比较两个字符串 ,将长的字符串的首地址作为函数值返回 。
请改正函数fun中指定部位的错误 ,使它能得出正确的结果 。
注意:不要改动main函数 ,不得增行或删行 ,也不得更改程序的结构 。
#include <stdio.h>
/**********found**********/
char fun(char *s, char *t)
{
int sl=0,tl=0;
char *ss, *tt;
ss=s; tt=t;
while(*ss)
{
sl++;
/**********found**********/
(*ss)++;
}
while(*tt)
{
tl++;
/**********found**********/
(*tt)++;
}
if(tl>sl) return t;
else return s;
}
int main()
{
char a[80],b[80];
int i;
printf("\nEnter a string : ");
gets(a);
printf("\nEnter a string again : ");
gets(b);
printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b));
return 0;
}
3.程序设计题
编写函数fun ,它的功能是:求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s ,并作为函数值返回 。
例如 ,n=1000时,函数值应为:s=153.909064 。
注意:请勿改动主函数main和其他函数中的任何内容 ,仅在函数fun的花括号中填入你编写的若干语句 。
#include <stdio.h>
#include <math.h>
double fun(int n)
{
}
int main()
{
printf("s=%f\n",fun(1000));
void NONO(void);
NONO();
return 0;
}
void NONO(void)
{/* 请在此函数内打开文件 ,输入测试数据,调用 fun 函数 ,
输出数据 ,关闭文件 。 */
FILE *wf;
wf = fopen("a28.out", "w") ;
fprintf(wf,"s=%f\n",fun(1000));
fclose(wf) ;
}
1.(1)a[i] (2)a[i] (3)0
2. char *fun(char *s, char *t)
ss++;
tt++;
3. double fun(int n)
{
double s=0;
int i;
for (i=1;i<n;i++)
if (i%3==0 && i%7==0)
s+=i;
s=sqrt(s);
return s;
}
第14套参考答案
第15套
1.程序填空题
人员的记录由编号和出生年 、月 、日组成 ,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员 ,将其数据放在形参k所指的数组中 ,由主函数输出 ,同时由函数值返回满足指定条件的人数 。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果 。
注意:不得增行或删行 ,也不得更改程序的结构!
#include <stdio.h>
#define N 8
typedef struct
{
int num;
int year,month,day ;
}STU;
int fun(STU *std, STU *k, int year)
{
int i,n=0;
for (i=0; i<N; i++)
/**********found**********/
if( ___1___==year)
/**********found**********/
k[n++]= ___2___;
/**********found**********/
return (___3___);
}
int main()
{
STU std[N]={ {1,1984,2,15},{2,1983,9,21},
{3,1984,9,1},{4,1983,7,15},
{5,1985,9,28},{6,1982,11,15},
{7,1982,6,22},{8,1984,8,19}};
STU k[N];
int i,n,year;
printf("Enter a year : ");
scanf("%d",&year);
n=fun(std,k,year);
if(n==0)
printf("\nNo person was born in %d \n",year);
else
{
printf("\nThese persons were born in %d \n",year);
for(i=0; i<n; i++)
printf("%d %d-%d-%d\n",k[i].num,k[i].year,
k[i].month,k[i].day);
}
return 0;
}
2.程序修改题
给定程序中 ,函数fun的功能是:通过某种方式实现两个变量值得交换 ,规定不允许增加语句和表达式。例如 ,a=3,b=8 ,程序运行后a=8,b=3 。
请改正函数fun中指定部位的错误 ,使它能得出正确的结果 。
注意:不要改动main函数,不得增行或删行 ,也不得更改程序的结构 。
#include <stdio.h>
int fun(int *x,int y)
{
int t ;
/**************found**************/
t = x ; x = y ;
/**************found**************/
return(y) ;
}
int main()
{
int a = 3, b = 8 ;
printf("%d %d\n", a, b) ;
b = fun(&a, b) ;
printf("%d %d\n", a, b) ;
return 0;
}
3.程序设计题
编写函数fun ,它的功能是:求出1~1000之内能被7或11整除,但不能同时被7和11整除的所有整数并将它们放在a所指的数组中 ,通过n返回这些数的个数 。
注意:请勿改动主函数main和其他函数中的任何内容 ,仅在函数fun的花括号中填入你编写的若干语句 。
#include <stdio.h>
void NONO(void);
void fun (int *a, int *n)
{
}
int main()
{
int aa[1000], n, k ;
fun(aa, &n);
for ( k = 0 ; k < n ; k++ )
if ((k+1)%10==0) printf("\n") ;
else printf("%5d", aa[k]) ;
NONO( );
return 0;
}
void NONO(void)
{/* 本函数用于打开文件 ,输入测试数据 ,调用fun函数 ,输出数据 ,关闭文件 。*/
int aa[1000], n, k ;
FILE *fp ;
fp = fopen("out.dat","w") ;
fun ( aa, &n ) ;
for ( k = 0 ; k < n ; k++ )
if ((k+1)%10==0) fprintf(fp, "\n") ;
else fprintf(fp, "%5d", aa[k]) ;
fclose(fp) ;
}
1.(1)std[i].year (2)std[i] (3)n
2. t = *x ; *x = y ;
return (t) ;
3. void fun (int *a, int *n)
{
int i,j;
j=0;
for (i=1;i<=1000;i++)
if ((i%7==0 || i%11==0)&& (i%77!=0))
a[j++]=i;
*n=j;
}
第15套参考答案
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时 ,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。