1.下列给定程序中,函数fun的功能是:计算并输出max以内最大的10个素数之和。high由主函数传给fun函数。
#include <stdio.h>
#include <math.h>
int fun( int high )
{ int sum = 0, n=0, j, yes;
/************found************/
while ((high >= 2) ___1___ (n < 10))
{
yes = 1;
for (j=2; j<=high/2; j++ )
if (high % j ==0 ){
/************found************/
yes=0; ___2___;
}
if (yes) { sum +=high; n++; }
/************found************/
___3___;
}
return sum ;
}
main ( )
{
printf("%d\n", fun (100));
}
2.对从键盘输入的字符数组xx不超过80个,按照字符从大到小的顺序进行排序,排序后的结果存入字符串数组xx中。
#include <stdio.h>
void main()
{
char xx[80] ;
int numi,numj;
char ch;
printf("\n please input strings:");
scanf("%s",xx);
for (numi=0;numi<strlen(xx);numi++)
/***************found***************/
for (numj=___1___;numj<strlen(xx);numj++)
if (xx[numi]<xx[numj]){
/***************found***************/
___2___;
xx[numi]=xx[numj];
/***************found***************/
___3___;}
printf("\n %s",xx);
}
3.本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
#include <conio.h>
#include <stdio.h>
double fun(int n)
{ int a,b,c,k; double s;
s=0.0;
a=2;
/***************found***************/
___1___;
for (k=1;k<=n;k++)
{
s=s+(double)a/b;
c=a; a=a+b;b=c;
}
/***************found***************/
___2___;
}
main()
{
int n;
/***************found***************/
printf("\n n=");
scanf("%d",___3___);
printf("\n the value of function is: %lf\n", fun(n));
}
3.求下列分数序列的前n项之和。n值从键盘输入,和值通过函数值返回主程序输出。
#include <conio.h>
#include <stdio.h>
double fun(int n)
{ int a,b,c,k; double s;
s=0.0;
a=2;
/***************found***************/
___1___;
for (k=1;k<=n;k++)
{
s=s+(double)a/b;
c=a; a=a+b;b=c;
}
/***************found***************/
___2___;
}
main()
{
int n;
/***************found***************/
printf("\n n=");
scanf("%d",___3___);
printf("\n the value of function is: %lf\n", fun(n));
}
4.给定程序中,函数fun的功能是:f(x)=1+x+x2/+…+xn/n!直到|x/n!|<10-6,若x=2.5,函数值为:12.182494。
#include <stdio.h>
#include <math.h>
double fun(double x)
{ double f, t; int n;
/**********found**********/
f = 1.0+___1___;
t = x;
n = 1;
do {
n++;
/**********found**********/
t *= x/___2___;
/**********found**********/
f += ___3___;
} while (fabs(t) >= 1e-6);
return f;
}
main()
{ double x, y;
x=2.5;
y = fun(x);
printf("\nThe result is :\n");
printf("x=%-12.6f y=%-12.6f \n", x, y);
}
5.
给定程序中,函数fun的功能是:找出100至x(x≤999)之间各位上的数字之和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。
例如,当n值为500时,各位数字之和为15的整数有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492。共有26个。
请在程序的下划线处填入正确的内容并把下划线删除,是程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
fun(int x)
{ int n, s1, s2, s3, t;
/**********found**********/
n=__1__;
t=100;
/**********found**********/
while(t<=__2__)
{ s1=t%10; s2=(t/10)%10; s3=t/100;
if(s1+s2+s3==15)
{ printf("%d ",t);
n++;
}
/**********found**********/
__3__;
}
return n;
}
main()
{ int x=-1;
while(x>999||x<0)
{ printf("Please input(0<x<=999): "); scanf("%d",&x); }
printf("\nThe result is: %d\n",fun(x));
}
6.求k!(k<13),求阶乘的值作为函数值返回。例如k=10,则输出3628800.
#include <conio.h>
#include <stdio.h>
long fun ( int k)
{
/************found************/
if k > 0
return (k*fun(k-1));
/************found************/
else if ( k=0 )
return 1L;
}
NONO( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *rf, *wf ;
int i, k ;
rf = fopen("gc02.in", "r") ;
wf = fopen("gc02.out", "w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%d,", &k) ;
fprintf(wf, "%d!=%ld\n", k, fun ( k )) ;
}
fclose(rf) ;
fclose(wf) ;
}
main()
{ int k = 10 ;
printf("%d!=%ld\n", k, fun ( k )) ;
NONO( ) ;
}
7.输入x,y的值,求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。
#include <stdio.h>
long fun(int x,int y,long *p )
{ int i;
long t=1;
/**************found**************/
for(i=1; i<y; i++)
t=t*x;
*p=t;
/**************found**************/
t=t/1000;
return t;
}
main()
{ long t,r; int x,y;
printf("\nInput x and y: "); scanf("%ld,%ld",&x,&y);
t=fun(x,y,&r);
printf("\n\nx=%d, y=%d, r=%ld, last=%ld\n\n",x, y,r,t );
}
8.“从低位开始取出长整型变量s奇数位上的数,依次构成一个新数放在t中。例如:当s中的数为:7654321时,t中的数为:7531。”
#include <conio.h>
#include <stdio.h>
/************FOUND************/
void fun (long s, long t)
{ long sl=10;
*t = s % 10;
while ( s > 0)
{ s = s/100;
*t = s%10 * sl + *t;
/************FOUND************/
sl = sl*100;
}
}
main()
{ long s, t;
printf("\nPlease enter s:"); scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
9.下列给定程序中,函数fun 实现的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回 主函数;并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数 30800,则数字值为 零的个数为3,各位上数字值最大的是8。
#include <stdio.h>
int fun(unsigned n, int *zero)
{ int count=0,max=0,t;
do
{ t=n%10;
/**************FOUND**************/
if(t=0)
count++;
if(max<t) max=t;
n=n/10;
}while(n);
/**************FOUND**************/
zero=count;
return max;
}
main()
{ unsigned n; int zero,max;
printf("\nInput n(unsigned): "); scanf("%d",&n);
max = fun( n,&zero );
printf("\nThe result: max=%d zero=%d\n",max,zero);
}
10.找出一个大于给定整数m且紧随m的素数。
#include <conio.h>
#include <stdio.h>
int fun(int m)
{ int i, k ;
for (i = m + 1 ; ; i++) {
for (k = 2 ; k < i ; k++)
/**************FOUND**************/
if (i % k != 0)
break ;
/**************FOUND**************/
if (k < i)
return(i);
}
}
NONO( )
{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
FILE *fp ;
int i ;
fp = fopen("gc06.out", "w") ;
for(i = 1 ; i <= 10 ; i++) fprintf(fp, "%d\n", fun(888 + i * 88)) ;
fclose(fp) ;
}
main( )
{ int n ;
printf("\nPlease enter n: " ) ;
scanf("%d", &n ) ;
printf("%d\n", fun(n)) ;
NONO( ) ;
}
11.
编写函数fun,函数的功能是:计算并输出给定整数n的所有因子之和(不包括1与自身)。规定n的值不大于1000。例如:n的值为855时,应输出704。
#include <stdio.h>
int fun(int n)
{
int sum=0,i;
for(i=2;i<=n-1;i++)
if(n%i==0)
sum+=i;
return sum;
}
NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf ; int i, n, sum ;
rf = fopen("bc.in", "r") ;
wf = fopen("bc.out", "w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%d", &n) ;
sum = fun(n) ;
fprintf(wf, "%d=%d\n", n, sum) ;
}
fclose(rf) ; fclose(wf) ;
}
main()
{ int n,sum;
printf("Input n: "); scanf("%d",&n);
sum=fun(n);
printf("sum=%d\n",sum);
NONO();
}
12.请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。
例如,若主函数从键盘给n输入100后,则输出为sum=148.874270。
注意:n的值要求大于2但不大于100。 部分源程序给出如下。
#include <math.h>
#include <stdio.h>
double fun(int n)
{
int i,j,k;
double sum=0.0;
for(i=3;i<=n;i++)
{k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0) break;
if(j>=k+1) sum+=sqrt(i);
}
return sum;
}
NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf ; int n, i ; double s ;
rf = fopen("bc.in", "r") ;
wf = fopen("bc.out", "w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%d", &n) ;
s = fun(n) ;
fprintf(wf, "%lf\n", s) ;
}
fclose(rf) ; fclose(wf) ;
}
main()
{ int n; double sum;
printf("\n\nInput n: "); scanf("%d",&n);
sum=fun(n);
printf("\n\nsum=%f\n\n",sum);
NONO();
}
13.设计程序,求斐波那契(Fibonacci)数列中大于t的最小的一个数,结果由函数返回,其中斐波那契数列F(n)的定义为:F(0)=0,F(1)=1;F(n)=F(N-1)+F(n-2)分别计算当t=1000和t=3000时的结果。
#include <conio.h>
#include <math.h>
#include <stdio.h>
int fun( int t)
{
}
NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i, n, s ;
fp = fopen("bc06.in","r") ;
if(fp == NULL) {
printf("数据文件bc06.in不存在!") ;
return ;
}
wf = fopen("bc06.out","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(fp, "%d", &n) ;
s = fun(n) ;
fprintf(wf, "%d\n", s) ;
}
fclose(fp) ;
fclose(wf) ;
}
main() /* 主函数 */
{ int n;
n=1000;
printf("n = %d, f = %d\n",n, fun(n));
NONO();
}
14.
如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。例如6的因子为1,2,3,且1+2+3=6,因此6是一个“完数”。
计算并输出1000以内的所有“完数”之和。
#include <stdio.h>
int fun()
{
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *wf ;
int a;
wf = fopen("out.dat","w") ;
a=fun() ;
fprintf(wf, "2-1000之间的完数之和为:%d\n", a) ;
}
int main( )
{
printf("2-1000之间的完数之和为:%d\n",fun());
NONO ();
return 0;
}
15.编写一个函数,输入n为偶数时,计算1/2+1/4+...+1/n;当输入n为奇数时,计算1/1+1/3+...+1/n。 调用该函数并输出结果。