(二)
上机编程题
1.
程序设计题:z=f(x,y)=(3.14*x-y)/(x+y),
若x、y取值为区间[1,6]的整数,找出使z取最小值的x1、y1,并将x1、y1以格式
"%d,%d" 写入到考生目录下新建文件design.dat。
#include
void main()
{ FILE *p; float f(int
x,int y),min;
int
x,y,x1,y1;
//此处起要求考生自己编制程序
min=100;
p=fopen(“design.dat”, “w”);
for(x=1;x<6;x++)
for(y=1;y<6;y++)
if(f(x,y)
{ min=f(x,y); x1=x;
y1=y; }
fprintf(p,
“%d,%d”,x1,y1); // 答案:x1=1,
y1=5
fclose(p); //
或
若x<=6
及y<=6 则
x1=1, y1=6
}
float f(int u,int v)
{ return (3.14*u-v)/(u+v); }
4.程序设计题:对x=1,2,...,10,求函数 f(x)=x-10*cos(x)-5*sin(x)的最大值,并将该数以格式"%.3f"写到考生目录下新建文件
design.dat。
#include
#include
void main()
{ FILE *p; float f(float),max,x;
//此处起要求考生自己编制程序
p=fopen(“design.dat”, “w”);
max=f(1);
for(x=2;x<=10;x++)
if(max
max=f(x);
fprintf(p,”%.3f”,max); //
答案:21.111
fclose(p);
}
float
f(float y)
{ y=y-10*cos(y)-5*sin(y);
return
(y);
}
6.
程序设计题:数组元素x[i]、y[i]表示平面 上某点坐标,统计10个点中同处在圆
(x-1)*(x-1)+(y+0.5)*(y+0.5)=25 和 (x-0.5)*(x-
0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。
#include
#include
void main()
{ FILE *p; int i,k=0;
float
x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
float
y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33};
//此处起要求考生自己编制程序
p=fopen("design.dat", "w");
for(i=0;i<10;i++)
if(((x[i]-1)*(x[i]-1)+(y[i]+0.5)*(y[i]+0.5)<=25)&&
((x[i]-0.5)*(x[i]-0.5)+(y[i]*y[i])<=36))
k++;
fprintf(p,"%d",k); // 答案:3
fclose(p);
}
7.
程序设计题:数组元素x[i]、y[i]表示平面上某点坐标,统计所有各点间最短距离,并将其值以格式"%f"写到考生目录下新建文件
design.dat。
#include
#include
#define len(x1,y1,x2,y2)
sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
void main()
{ FILE
*p; int i,j; float c,minc;
float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
float
y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33};
minc=len(x[0],y[0],x[1],y[1]);
//此处起要求考生自己编制程序
p=fopen("design.dat", "w");
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if((c=len(x[i],y[i],x[j],y[j]))
minc=c;
fprintf(p,"%f",minc); //
答案:1.457944
fclose(p);
}
8.
程序设计题:将数组a的每一行均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...,)然后将a数组写入到考生目录下新建的文件design.dat.
#include
#include
void main( )
{ float
a[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}};
FILE *p; int
i,j;
//此处起要求考生自己编制程序
float k;
if((p=fopen("design.dat","w"))==NULL)
{ printf("cannot open in
FILE\n"); exit(0); }
for(i=0;i<3;i++)
{
k = a[i][i];
for(j=0;j<3;j++)
a[i]
[j]=a[i][j]/k;
}
//
此处起要求考生自己编制程序
for(i=0;i<3;i++) {
for(j=0;j<3;j++)
fprintf(p,"%10.6f",a[i][j]); // 答案: 1.000000 2.076923 2.769231
fprintf(p,"\n");
// 0.666667 1.000000 1.566667
} // 2.362205 3.149606 1.000000
fclose(p);
}
9.
程序设计题:计算表达式1+2!+3!+...+12!的值,并将计算结果以格式"%d"写入到考生目录下新建的文件design.dat。
#include
#include
void main( )
{ FILE *p;
int s=1,k=1,i;
// 此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("cannot open inFILE\n"); exit(0); }
for(i=2;i<=12;i++)
{ k*=i;
s+=k; }
fprintf(p,"%d",s); // 答案:522956313
fclose(p);
}
10.
程序设计题:在6至1000内找出所有的合数,并顺序将每个合数用语句“fprintf(p,"%6d",n)”写入到考生目录下新建的文件
design.dat。说明:某数等于其诸因子之和则该数为合数,如6=1+2+3,28=1+2+4+7+14 则
6、28就是合数。
#include
#include
void main()
{ FILE *p; int
n,i,s;
//此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("cannot open inFILE\n"); exit(0); }
for(n=6;n<=1000;n++)
{ s=0;
for(i=1;i
if(n%i==0) s+=i;
if(n==s)
fprintf(p,"%6d",n); //
答案:6 28
496
}
fclose(p);
}
11.
程序设计题:在正整数中找出一个最小的、被3、5、7、9除余数分别为1、3、5、7的数,将该数以格式"%d"写到考生目录下新建文件design.dat。
#include
#include
void main( )
{
// 此处起要求考生自己编制程序
FILE
*p; int i;
if((p=fopen("design.dat","w"))==NULL)
{ printf("cannot open FILE");
exit(0); }
for(i=1; ;i++)
if(i%3==1&&i%5==3&&i%7==5&&i%9==7)
break;
fprintf(p,"%d",i);
fclose(p);
}
//答案:313
12.程序设计题:a、b、c为区间[1,100]的整数,统计使等式
c/(a*a+b*b)=1成立的所有解的个数,并将统计数以格式"%d"写入到考生目录下新建文件design.dat(若a=1、b=3、c=10是1个解,则a=3、b=1、c=10
也是解)
#include
void main()
{
FILE
*p; int n=0,a,b,c;
//
此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("cannot open inFILE\n"); exit(0); }
for(a=1;a<=100;a++)
for(b=1;b<=100;b++)
for(c=1;c<=100;c++)
if((a*a+b*b)==c) // 同学们注意:若写成
c/(a*a+b*b)==1就上当了!
n+=1; // 想一想为什么?
fprintf(p,"%d",n); // 答案:69个
fclose(p);
}
13.
程序设计题:对x=1,2,...,10,求函数f(x)=x-10*cos(x)+5*sin(x)的最大值,并将该数以格式
"%.2f" 写到考生目录下新建文件design.dat。
#include
#include
#include
void main()
{
FILE
*p; float
f(float),max; int x;
//
此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("cannot open
file\n"); exit(0); }
max=f(1);
for(x=2;x<=10;x++)
if(max
max=f(x);
fprintf(p,"%.2f",max);//答案:20.17
fclose(p);
}
float f(float x)
{ x=x-10*cos(x)+5*sin(x);
return x;
}
14.
程序设计题:统计满足条件
x*x+y*y+z*z==2000的所有解的个数,并将统计结果以格式"%d"写入到考生目录下新建的文件design.dat。说明:若a、b、c是一个解,则a、c、b也是一个解,等等。
#include
void main()
{ FILE *p; int x,y,z,k=0;
//
此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("cannot open
FILE"); exit(0); }
for(x=-45;x<45;x++)
for(y=-45;y<45;y++)
for(z=-45;z<45;z++)
if(x*x+y*y+z*z==2000)
k++; // 该题有x,y,z 取值范围的问题!
fprintf(p,"%d",k);
//答案:144
fclose(p);
}
15.
程序设计题:在6至5000内找出所有的亲密数对,并将每对亲密数用语句“fprintf(p,"%6d,%6d\n",a,b);”写到考生目录下新建文件design.dat。
说明:若a、b为一对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。
如:220、284是一对亲密数,284、220也是一对亲密数。
#include
void main()
{ FILE
*p; int i,a,b,c;
p=fopen("design.dat","w");
printf("程序正在运行,请稍等....\n");
for(a=6;a<=5000;a++)
{
// 此处起要求考生自己编制程序 */
b=c=0;
for(i=1;i
if(a%i==0) b=b+i;
for(i=1;i
if(b%i==0) c=c+i;
if(a==c && a!=b)
fprintf(p,"%6d,%6d\n",a,b) //
答案:220, 284
} // 284, 220
fclose(p); // 1184, 1210
} // 1210, 1184
// 2620, 2924
// 2924, 2620
16.
程序设计题:
计算数列1,-1/3!,1/5!,-1/7!,1/9!,...的和至某项的绝对值小于1e-5时为止(该项不累加),将求和的结果以格式"%.6f"写到考生目录下新建文件design.dat。
#include
#include
#include
void main( )
{ FILE
*p; float s=1,t=1,i=3;
// 此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("cannot open inFILE\n"); exit(0); }
do{
t=-t*
(i-1)*i;
s=s+1/t;
i+=2;
}while(fabs(1/t) >= 1e-5);
fprintf(p,"%.6f",s); //
答案:0.841471
fclose(p);
}
17.
程序设计题:x[i],y[i]分别表示平面上1个点的x、y坐标,求下列5点各点间距离总和,并将该数以格式"%.4f"写到考生目录下新建文件design.dat。
#include
#include
#include
void main()
{ FILE
*p; float s,x[5]={-1.5,2.1,6.3,3.2,-0.7};
float
y[5]={7,5.1,3.2,4.5,7.6}; int i,j;
//
此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("cannot open inFILE\n"); exit(0); }
s=0;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
s+=sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
fprintf(p,"%.4f",s); //
答案:45.2985
fclose(p);
}
18.
程序设计题:数列第1项为81,此后各项均为它前1项的平方根,统计该数列前30项之和,并将和以格式"%.3f"写入到考生目录下新建文件design.dat。
#include
#include
#include
void main()
{ FILE *p; float
s=0,a=81,i;
//
此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("Can't open
file\n"); exit(0); }
for(i=0;i<30;i++)
{
s+=a;
a=sqrt(a);
}
fprintf(p,"%.3f",s); //
答案:121.336
fclose(p);
}
19.
程序设计题:在1000至1100内找出所有的素数,并顺序将每个素数用语句“fprintf(p,"%5d",i)”写入到考生目录下新建的文件design.dat。说明:素数是自然数中除了1以外只能被1和其自身整除的数。
#include
#include
#include
void main()
{
FILE
*p; int j;
//此处起要求考生自己编制程序
int prime(int n);
if((p=fopen("design.dat","w"))==NULL)
{ printf("cann't open a
FILE"); exit(0); }
for(j=1000;j<=1100;j++)
if(prime(j)==1)
fprintf(p,"%5d",j);
fclose(p);
}
int prime(int n)
{ int i;
for(i=2;i
if(n%i==0) return 0;
return
1; //
注意:这里不能else
}
*********以下题目是2003年秋考新增加的程序设计题!***********
20.
程序设计题:计算多项式a0+a1*x+a2*x*x+a3*x*x*x+...的值,并将其值以格式"%f"写到考生目录下新建文件design.dat。
#include
#include
#include
void main()
{ FILE *p; int i; float x=1.279,t=1,y=0;
float a[10]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
// 此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("cann't open a
FILE"); exit(0); }
for(i=0; i<10; i++)
{ y=y+a[i]*t;
t=t*x;
}
//
或用如下最笨的写法:
// y=a[0]+a[1]*x+a[2]*x*x+a[3]*x*x*x+a[4]*x*x*x*x+a[5]*x*x*x*x*x;
// y=y+a[6]*x*x*x*x*x*x+a[7]*x*x*x*x*x*x*x+a[8]*x*x*x*x*x*x*x*x;
// y=y+a[9]*x*x*x*x*x*x*x*x*x;
fprintf(p,"%f",y); //
答案:98.722542
fclose(p);
}
21.
程序设计题:将数组a的每1行均除以该行上绝对值最大的元素,然后将a数组写入到考生目录下新建文件design.dat。
#include
#include
#include
void main()
{ float a[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}};
FILE *p; float x; int i,j;
//
此处起要求考生自己编制程序
for(i=0;i<3;i++)
{ x=fabs(a[i][0]);
for(j=1;j<3;j++)
if(x
for(j=0;j<3;j++)
a[i][j]=a[i][j]/x;
}
p=fopen("design.dat","w");
for(i=0;i<3;i++) {
for(j=0;j<3;j++) fprintf(p,"%10.6f",a[i][j]);
fprintf(p,"\n");
}
fclose(p);
}
// 答案: 0.361111 0.750000 1.000000
0.425532 0.638298 1.000000
0.750000 1.000000 0.317500
22. 程序设计题:
数列各项为1,1,2,3,5,8,13,21,...,求其前40项之和,并将求和的结果以格式"%ld"写到考生目录下新建文件design.dat。
#include
#include
void main()
{ FILE *p; long s=0,i,a[40];
//
此处起要求考生自己编制程序
if((p=fopen("design.dat","w"))==NULL)
{ printf("cann't open a
FILE"); exit(0); }
a[0]=1; a[1]=1;
for(i=2;i<40;i++)
a[i]=a[i-1]+a[i-2];
for(i=0;i<40;i++)
s=s+a[i];
fprintf(p,"%ld",s); // 答案:267914295
fclose(p);
}
24.
程序设计题:计算多项式a0-a1*x+a2*x*x/2!-a3*x*x*x/3!+...的值,并将其以格式"%f"写到考生目录下新建文件design.dat。
#include
#include
void main()
{ FILE *p; int i; float
x=1.279,t,y;
float a[10]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
// 此处起要求考生自己编制程序
t=1; y=0;
if((p=fopen("design.dat","w"))==NULL)
{ printf("cann't open a
FILE"); exit(0); }
for(i=0; i<10; i++)
{ y=y+a[i]*t;
t=-t*x*1/(i+1);
}
fprintf(p,"%f",y); //
答案: -6.495819
fclose(p);
}