浙江省二级C语言考试上机试题库
C语言省二级考试上机模拟试题库
试题整理时间:2006、3、7
一、求最值问题
1,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得
加行、减行、加句、减句,否则后果自负)。该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)
的最大值。
#include
#include
#define f(x) x*x-5*x+sin(x) void main()
{ int x; float max;
max=f(1);
for(x=2;x<=10;x++)
if(max
#include
void main()
{ FILE *p;
float f(float),max,x;
max=f(1);
for(x=2;x<=10;x++)
if(max
void main()
{ FILE *p;
float f(float x,float y),min;
int x,y,x1,y1;
min=f(1,1);x1=1;y1=1;
for(x=1;x<=6;x++)
for(y=1;y<=6;y++)
if(min>f(x,y)) {min=f(x,y);x1=x;y1=y;} printf(“%d,%d”,x1,y1);
p=fopen(“design.dat”,”w”);
fprintf(p, “%d,%d”,x1,y1);
fclose(p);
}
float f(float u,float v)
{ return (3.14*u-v)/(u+v); }
4,设计程序:在数组x的10个数中求平均值v,找出与v相差最小的数组元素并将其以格式"%.5f"写到考生目录中Paper子目录下的新建文件design.dat。
#include
#include
void main()
{ FILE *p;
int i,k=0;
float x[10]={7.23,-1.5,5.24,2.1,-12.45,6.3,-5,3.2,-0.7,9.81},d,v=0;
for(i=0;i<10;i++) v+=x[i]; v=v/10; d=fabs(x[0]-v);
for(i=1;i<10;i++)
if(fabs(x[i]-v)
int cnt,sum;
void JSValue()
{ int i,j,half,values[100];
cnt=0;sum=0;
for(i=800;i<=500;i--)
{ half=i/2;
for(j=2;j<=half;j++)
if(i%j==0)break;
if(j==half+1) {values[cnt]=i;cnt++;}
}
for(i=0;i
int cnt,sum;
void JSValue()
{ int i,j,half;
cnt=0;sum=0;
for(i=500;i<=800;i++)
{ half=i/2;
for(j=2;j<=half;j++)
if(i%j==0) break;
if(j==half+1) {sum+=i;cnt++;}
}
}
void main()
{ FILE *p;
JSValue();
printf("%d,%d",cnt,sum);
p=fopen(“design.dat”,”w”);
fprintf(p, "%d,%d",cnt,sum);
fclose(p);
}
3,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输出6,1000之间的完数(1个数的因子和等于其自身的数:6=1+2+3、28=1+2+4+7+14,则6、28都是完数)。 #include
void main()
{ int i,j,s;
for(i=6;i<=1000;i++) {
s=1;
for(j=2;j<=i/2;j++) if(i%j==0) s+=j;
if(s==i) printf("%d\n",s);
}
}
4,设计程序:在6至10000内找出所有的合数,并顺序将每个合数用语句 “printf("%6d",n)” 写到考生目录中Paper子目录下的新建文件design.dat。说明:某数等于其诸因子之和则该
数为合数,如6=1+2+3,28=1+2+4+7+14则6、28就是合数。 #include
void main()
{ int n,i,s; FILE *p;
for(n=6;n<=10000;n++) { s=1;
for(i=2;i<=n/2;i++)
if(n%I==0) s+=i;
if(s==n) printf(“%6d”,n);
p=fopen(“design.dat”,”w”);
fprintf(p, “%6d”,n);
fclose(p);
}
}
5,设计程序:在6至5000内找出所有的亲密数对,并将每对亲密数用语句
printf("%6d,%6d\n",a,b);” 写到考生目录中Paper子目录下的新建文件design.dat。说明:若
a,b为1对亲密数,则a的因子和等于b,b的因子和等于a、且a不等于b。如:220、284是
1对亲密数,284、220也是1对亲密数。
#include
void main()
{ int a,b,c,k; FILE *p; for(a=6;a<=5000;a++)
{c=1;
for(i=2;i<=a/2;i++)
if(a%i==0)c+=i;
for(b=a+1;b<=5000;b++)
{if(b!=c) continue;
else{ k=1;
for(i=2;i<=b/2;i++)
if(b%i==0) k+=i;
if(k==a) printf(“%6d%6d\n”,a,b);
}
}
p=fopen(“design.dat”,”w”);
fprintf(p, “%6d%6d\n”,a,b);
fclose(p);
}
}
6,以下程序中“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、
加句、减句,否则后果自负)。该程序功能:运行时输入n,输出n的所有质数因子(如n=13860,
则输出2、2、3、3、5、7、11)。
#include
void main()
{ int n,i;
scanf("%d",&n);
/****** 1 ******/
i=2;
while(n>1)
if(n%i==0) {
printf("%d\t",i);
n/=i;
}
else
/******** 2 *******/
i++;
}
三、公倍数/公约数
1,在以下程序中“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入m、n(要求输入数均大于0,且m>=n),输出它们的最小公倍数。
#include
void main()
{ int m,n,k;
/******** 1 *********/
while(scanf("%d%d",&m,&n),m<=0|| n<=0||m
void main()
{ int m,n,k;
while(scanf("%d%d",&m,&n), m<=0||n<=0 );
for(k=m<=n?m:n ; n%k!=0||m%k!=0; k--);
printf("%d\n",k);
}
四、一维数组/二维数组
1,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能: 求出a中各相邻两个元素的和,并将这些和存放在数组b中,按每行3个元素的形式输出。例如:b[1]=a[1]+a[0],„„,b[9]=a[9]+a[8]。
#include
void main()
{ int a[10],b[10],i;
printf("\nInput 10 numbers: ");
for (i=0; i<10;i++) /* 数组输入 */
scanf("%d", &a[i]);
for (i=1; i<10; i++)
b[i]=a[i]+a[i-1]; /* 计算b数组中的元素 */
for (i=1; i<10; i++)
{ printf("%3d",b[i]);
if (i%3==0) printf("\n"); /* 每行打印3个数据 */
}
}
2,设计程序:将数组a的每1行均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),然后将a数组写到考生目录中Paper子目录下的新建文件design.dat。 #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 t;
for(i=0;i<3;i++)
{ t=a[i][i];
for(j=0;j<3;j++)
a[i][j]/=t;
}
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);
}
3,设计程序:将数组a的每1行均除以该行上绝对值最大的元素,然后将a数组写到考生目录中Paper子目录下的新建文件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;
float x; int i,j;
for(i=0;i<3;i++)
{ x=a[i][0];
for(j=0;j<3;j++)
if(fabs(x)
float f(int *x[ ],int m,int n)
{ float y=0; int i,j;
for(i=0;i
#include
#include
int JSValue(long m)
{ int i=0,j,a[100];
while(m!=0)
{a[i]=m%10;m/=10;i++;}
for(j=0;j
#include
void main()
{ float x,eps,s=1,t=1,i=1;
scanf("%f%f",&x,&eps);
do {
/***** 1 *****/
t=-t*x/ i ++;
s+=t;
/***** 2 *****/
} while(fabs(t)>=eps);
printf("%f\n",s);
}
2,设计程序:计算多项式a0-a1*x+a2*x*x/2!-a3*x*x*x/3!+...的值, 并将其以格式"%f"写到
考生目录中Paper子目录下的新建文件design.dat。
#include
#include
void main()
{ int i; float x=1.279,t,y; FILE *p;
float a[10]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
y=a[0];t=a[0];
for(i=1;i<=9;i++)
{t=-t*a[i]*x/(i*a[i-1]); y+=t; } printf(“%f”,y);
p=fopen(“design.dat”,”w”);
fprintf(p, “%f”,y);
fclose(p);
}
3,设计程序:计算
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式1+2!+3!+...+12!的值,并将计算结果以格式"%ld"写到考生目录中
Paper子目录下的新建文件design.dat。
#include
void main()
{ long s=1,k=1; int i;FILE *p;
for(i=2;i<=12;i++)
{k=k*i; s+=k;}
printf(“%ld”,s);
p=fopen(“design.dat”,”w”);
fprintf(p, “%ld”,s);
fclose(p);
}
4,设计程序:计算数列1,-1/3!,1/5!,-1/7!,1/9!,...的和至某项的绝对值小于1e-5时为止(该项不累加),将求和的结果以格式"%.6f"写到考生目录中Paper子目录下的新建文件design.dat。 #include
#include
void main()
{ float s=1,t=1,i=3; FILE *p;
while(fabs(t)>=1e-5)
{t=-t/i/(i-1);i=i+2;s+=t;}
printf(“%.6f”,s);
p=fopen(“design.dat”,”w”);
fprintf(p, “%.6f”,s);
fclose(p);
}
5,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f计算代数多项式 1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x当x=1.7时的值。
#include
float f(float,float*,int);
void main()
{ float b[5]={1.1,2.2,3.3,4.4,5.5};
printf("%f\n",f(1.7,b,5));
}
float f( float x,float *a,int n ) { float y=a[0],t=1; int i;
for(i=1;i
#include
void main()
{ 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}; FILE *p;
y=a[0];
for(i=1;i<=9;i++)
{t=t*x; y=y+a[i]*t; }
printf(“%f”,y);
p=fopen(“design.dat”,”w”);
fprintf(p, “%f”,y);
fclose(p);
}
7,设计程序:有数列:2/1,3/2,5/3,8/5,13/8,21/13,„„求出数列的前40项的和。将结果以格
式"%.6f"写到考生目录中Paper子目录下的新建文件design.dat。 #include
void main()
{ int i;
float f1=1.0,f2=2.0,t1=2.0,t2=3.0,s;
float f,t; FILE *p;
s=t1/f1+t2/f2;
for(i=0;i<38;i++)
{ f=t2; t=t2+f2;
s=s+t/f;
t2=t; f2=f;
}
printf(“%.6f”,s);
p=fopen(“design.dat”,”w”);
fprintf(p, “%.6f”,s);
fclose(p);
}
8,设计程序:数列各项为1,1,2,3,5,8,13,21,...,求其前40项之和,并将求和的结果以格式"%ld"
写到考生目录中Paper子目录下的新建文件design.dat。 #include
void main()
{ long s=0,i,a[40]; FILE *p;
a[0]=1;a[1]=1; s= a[0]+ a[1];
for(i=2;i<40;i++)
{a[i]=a[i-1]+a[i-2]; s=s+a[i];
}
printf(“%ld”,s);
p=fopen(“design.dat”,”w”);
fprintf(p, “%ld”,s);
fclose(p);
}
9,设计程序:数列第1项为81,此后各项均为它前1项的正平方根,统计该数列前30项之
和,并以格式"%.3f"写到考生目录中Paper子目录下的新建文件design.dat。 #include
#include
void main()
{ float s=0,a=81,i; FILE *p;
for(i=1;i<30;i++)
{s=s+a;a=sqrt(a);}
printf(“%.3f”,s);
p=fopen(“design.dat”,”w”);
fprintf(p, “%.3f”,s);
fclose(p);
}
10,设计程序:计算多项式a0+a1*sin(x)+a2*sin(x*x)+a3*sin(x*x*x)+„„的值,并将其值以格式"%.6f写到考生目录中Paper子目录下的新建文件design.dat。 #include
#include
void main()
{ int i; float x=2.345,t=1.0,y=0.0;
float a[10]={1.2,-1.4,-4.0,1.1,2.1,-1.1,3.0,-5.3,6.5,-0.9}; FILE *p;
y=a[0];
for(i=1;i<=9;i++)
{t=t*x; y=y+a[i]*sin(t); }
printf(“%.6f”,y);
p=fopen(“design.dat”,”w”);
fprintf(p, “%.6f”,y);
fclose(p);
}
11,以下中程序“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:运行时若输入a、n分别为3、6,则输出下列表达式的值:3+33+333+3333+33333+333333。
#include
void main()
{ int i,a,n; long t=0;
/********* 1 *******/
long s=0;
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++) {
/******* 2 ******/
t=t*10+1;
s=s+t;
}
s=s*a;
printf("%ld\n",s);
}
12,在以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:数列的第1、2项均为1,此后各项值均为该项前二项之和。计算数列第30项的值。
#include
long f(int n);
void main()
{ printf("%ld\n",f(30));
}
long f(int n)
{ if( n==1||n==2) return 1;
else return f(n-1)+f(n-2);
}
13,设计程序:累加a字符串中各个字符的ASCII码值,然后将累加和以格式"%d"写到考生目录中Paper子目录下的新建文件design.dat。
#include
void main()
{ int s=0,i=0; FILE *p;
char *a="r235%^%34cdDW,.";
while(*a!=?\0?)
{s=s+a[Ii]; i++;}
printf(“%d”,s);
p=fopen(“design.dat”,”w”);
fprintf(p, “%d”,s);
fclose(p);
}
14,设计程序:计算2的平方根、3的平方根、...、10的的平方根之和,要求计算结果具有小数点后10位有效位数,并以格式"%.10f\n"写到考生目录中Paper子目录下的新建文件design.dat。
#include
#include
void main()
{ double s=0,t=0;int i; FILE *p;
for(i=2;i<=10;i++)
s=s+sqrt(i);
printf(“%.10f\n”,s);
p=fopen(“design.dat”,”w”);
fprintf(p, “%.10f\n”,s);
fclose(p);
}
七、排序
1,以下程序中“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:用选择法对10个整数按升序排序。 #include
#define N 10
void main()
{ int i,j,min,temp;
int a[N]={5,4,3,2,1,9,8,7,6,0};
printf("\nThe array is:\n"); /* 输出数组元素 */
for (i=0;i=a[j]) min =j;
/****** 2 ******/
temp=a[min]; a[min]=a[i]; a[i]=temp; /* 数据交换 */
}
printf("\nThe sorted numbers: \n"); /* 输出排序结果 */
for (i=0;i
#include
void main()
{ char *s="634,.%@\\w|SQ2",c;
int i,j,k,n=strlen(s); FILE *p;
for(j=0;js[s+1])
{c=s[i];s[i]=s[i+1];s[i+1]=c;} p=fopen(“design.dat”,”w”);
for(i=0;i
#include
void main()
{ char s[60],*f(char*);
gets(s); printf("%s\n",f(s)); }
char * f(char* x)
{ char t; int i,n;
n=strlen(x);
for(i=0;i
void itoa(long i,char *s)
{ if(i==0) return;
/****** 1 ******/
*s = '0'+i%10;
itoa(i/10,s-1);
}
void main()
{ long n;
char str[7]="";
scanf("%ld",&n);
/****** 2 ******/
itoa(n,str+5);
printf("%s",str);
}
九、平面距离问题
1,设计程序:x[i],y[i]分别表示平面上一个点的坐标,求下列10个点与点(1.0,1.0)的距离的总和,并将结果以格式"%.6f"写到考生目录中Paper子目录下的新建文件design.dat。 #include
#include
void main()
{ int i;
float x[10]={-1.5,2.1,6.3,3.2,-0.7,7.0,5.1,3.2,4.5,7.6};
float y[10]={3.5,7.6,8.1,4.5,6.0,1.1,1.2,2.1,3.3,4.4};
float s=0.0;FILE *p;
float sx,sy;
for(i=0;i<10;i++)
{ sx=(x[i]-1.0)*(x[i]-1.0);
sy=(y[i]-1.0)*(y[i]-1.0);
s+=sqrt(sx+sy);
}
printf("%.6f",s);
p=fopen(“design.dat”,”w”);
fprintf(p, "%.6f",s);
fclose(p);
}
2,设计程序:数组元素x[i]、y[i]表示平面上某点坐标,统计所有各点间最短距离,并将其值以格式"%f"写到考生目录中Paper子目录下的新建文件design.dat。 #include
#include
#define len(x1,y1,x2,y2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
void main()
{ 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}; FILE *p;
minc=len(x[0],y[0],x[1],y[1]);
for(I=0;I<10;I++)
for(j=I+1;j<10;j++)
if(minc>len(x[I],y[I],x[j],y[j]))
minc= len(x[I],y[I],x[j],y[j]); printf(“%f”,minc);
p=fopen(“design.dat”,”w”);
fprintf(p, “%f”,minc);
fclose(p);
}
3,设计程序:一个球从100米高度落下,每次落地后都反弹至原高度一半位置,再落下。 计算出第10次落地时小球共经过的距离,并将结果以格式"%.0f"写到考生目录中Paper子目录下的新建文件design.dat。
#include
void main()
{ float s=100,h=100;
int i;FILE *p;
for(I=1;I<10;I++)
{ h=h/2; s=s+2*h; }
printf(“%.0f”,s);
p=fopen(“design.dat”,”w”);
fprintf(p, “%.0f”,s);
fclose(p);
}
4,设计程序:x[i],y[i]分别表示平面上1个点的x、y坐标,求下列5点各点间距离总和,并将该数以格式"%.4f"写到考生目录中Paper子目录下的新建文件design.dat。 #include
#include
void main()
{ 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; FILE *p;
s=0;
for(i=0;i<5;i++)
for(j=i+1;j<5;j++)
s=s+sqrt((x[i]-x[j])*( x[i]-x[j])+( y[i]-y[j])*( y[i]-y[j]));
printf(“%.4f”,s);
p=fopen(“design.dat”,”w”);
fprintf(p, “%.4f”,s);
fclose(p);
}
十、满足条件的所有解
1,设计程序:a、b、c为区间[1,100]的整数,统计使等式 c/(a*a+b*b)=1成立的所有解的个数,并将统计数以格式"%d"写到考生目录中Paper子目录下的新建文件design.dat(如a=1、b=3、c=10是1个解,a=3、b=1、c=10 也是解)。
#include
void main()
{ int n=0,a,b,c; FILE *p;
for(a=1;a<=100;a++)
for(b=1;b<=100;b++)
for(c=1;c<=100;c++)
if(c==a*a+b*b) n++;
printf(“%d”,n);
p=fopen(“design.dat”,”w”);
fprintf(p, “%d”,n);
fclose(p);
}
2,设计程序:统计满足条件x*x+y*y+z*z==2000的所有解的个数,并将统计结果以格式"%d"
输出。说明:若a、b、c是1个解,则a、c、b也是1个解,等等。 #include
void main()
{ int x,y,z,k=0; FILE *p;
for(x=0;x<=50;x++)
for(y=0;y<=50;y++)
for(z=0;z<=50;z++)
if(x*x+y*y+z*z==2000) k++;
printf(“%d”,k);
p=fopen(“design.dat”,”w”);
fprintf(p, “%d”,k);
fclose(p);
}
3,设计程序:在正整数中找出1个最小的、被3、5、7、9除余数分别为1、3、5、7的数,
将该数以格式"%d"写到考生目录中Paper子目录下的新建文件design.dat。 #include
#include
void main()
{int j=1; FILE *p;
while(1)
if(j%3==1&&j%5==3&&j%7==5&&j%9==7) {printf(“%d\n”,j);break;}
else j++;
p=fopen(“design.dat”,”w”);
fprintf(p, “%d\n”,j);
fclose(p);
}
4,设计程序:找出1000至9999之间符合条件的自然数。条件是:若一个四位数的千位数字上的值小于等于百位数字上的值,百位数字上的值小于等于十位数字上的值,以及十位数
字上的值小于等于个位数字上的值,并且此四位数是偶数,统计出满足此条件的自然数的个
数cnt,以格式"%d"写到考生目录中Paper子目录下的新建文件design.dat。 #include
void main()
{ int cnt=0; FILE *p;
int a,b,c,d,j;
for(j=1000;j<9999;j=j+2)
{a=j%10; b=j/10%10; c=j/100%10; d=j/1000; if(d<=c&&c<=b&&b<=a) cnt++;
}
printf("%d",cnt);
p=fopen(“design.dat”,”w”);
fprintf(p, “%d”, cnt);
fclose(p);
}
5,设计程序:求解百鸡问题。已知公鸡每只5元、母鸡每只3元、小鸡1元3只。求出用100元买100只鸡的解。将得到的解按公鸡、母鸡和小鸡的只数以"%d,%d,%d\n"的格式写到考生目录中Paper子目录下的新建文件design.dat。
#include
void main()
{ int cock,hen,chick; FILE *p;
for(cock=0;cock<=20;cock++)
for(hen=0;hen<33;hen++)
{chick=100-cock-hen;
if(cock*5+hen*3+chick/3.0==100) printf(“%d,%d,%d\n”,cock,hen,chick);
}
p=fopen(“design.dat”,”w”);
fprintf(p, “%d,%d,%d\n”,cock,hen,chick);
fclose(p);
}
6,设计程序:将满足条件pow(1.05,n)<1e6
#include
void main()
{ float y=1.05; int n=1; FILE *p;
while(!(pow(y,n)<1e6&&pow(y,n+1)>1e6))
{n++;}
printf("%d,%.0f",n,pow(1.05,n)); p=fopen(“design.dat”,”w”);
fprintf(p, "%d,%.0f",n,pow(1.05,n)); fclose(p);
}
十一、超值问题
1,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入整数n(n>0),求m使得 2
的m次方小于或等于n、2的m+1次方大于或等于n。
#include
void main()
{ int m=0,t=1,n;
while(scanf(“%d”,&n),n<=0);
while(!(t<=n&&t*2>=n)){
t=t*2;
m++;
}
printf("%d\n",m);
}
2,设计程序:求斐波那契(Fibonacci)数列中大于t的最小的一个数,结果由函数JSValue返回,
其中斐波那契数列F(n)的定义为:F(0)=0,F(1)=1,F(n)=F(N-1)+F(n-2)。分别计算当t=1000
和t=3000时的结果,将计算结果写到考生目录中Paper子目录下的新建文件design.dat。 #include
int JSValue(int t)
{ int f0=0;f1=1;
while(1)
{ f0=f0+f1;if(f0>=t) return f0; f1=f0+f1;if(f1>=t) return f1; }
}
void main()
{ FILE *p;
p=fopen(“design.dat”,”w”);
fprintf(p,"%d,%d",JSValue(1000),JSValue(3000));
fclose(p);
}
3,设计程序:某公司1999年年产量11.5万件,生产能力每年提高9.8%,求出产量能超过x万件的年份,结果由函数Year返回。计算当x=20和x=30时的结果,将计算结果写到考生目录中Paper子目录下的新建文件design.dat。
#include
int Year(int x)
{ int p=11.5,y=1999;
while(p<=x)
{p=p*(1+0.098); y++;}
return y;
}
void main()
{ FILE *p;
printf("%d,%d",Year(20),Year(30)); p=fopen(“design.dat”,”w”);
fprintf(p, "%d,%d",Year(20),Year(30));
fclose(p);
}
4,设计程序:计算27的小于1.00001的2n次方根(27的2n-2次方根不小于1.00001),将n
以格式"%d"写到考生目录中Paper子目录下的新建文件design.dat。 #include
#include
void main()
{ float x=27; int n=0;FILE *p;
while(!(x<1.00001&&x*x>=1.00001))
{ x=sqrt(x); n++; } printf(“%d”,n);
p=fopen(“design.dat”,”w”);
fprintf(p, “%d”,n);
fclose(p);
}
5,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得
加行、减行、加句、减句,否则后果自负)。该程序功能:输入整数n(n>0),求m使得2
的m次方小于或等于n、2的m+1次方大于或等于n。
#include
void main()
{ int m=0,t=1,n;
while( scanf(“%d”,&n),n<=0);
while(!(t<=n&&t*2>=n)){
t=t*2;
m++;
}
printf("%d\n",m);
}
十二、进制转换
1,在以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不
得加行、减行、加句、减句,否则后果自负)。该程序功能:将输入的十进制正整数n通过
函数Dec2Bin转换为二进制数,并将转换结果输出。
#include
void Dec2Bin(int m)
{ int bin[32],j;
for(j=0;m!=0;j++)
{ bin[j]= m%2;
m=m/2;
}
for(;j!=0;j--)
printf("%d", bin[j-1] ); }
void main()
{ int n;
scanf("%d",&n);
Dec2Bin(n);
}
2,在以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不
得加行、减行、加句、减句,否则后果自负)。该程序功能:将输入的十进制整数n通过函
数DtoH转换为十六进制数,并将转换结果以字符串形式输出。例如:输入十进制数79,将
输出十六进制4f。
# include
# include
char trans(int x)
{ if(x<10) return '0'+x; else return „a?+x-10;
}
int DtoH(int n,char *str) { int i=0;
while(n!=0)
{ str[i]=trans(n%16);
n/=16;i++;}
return i-1;
}
void main()
{ int i,k,n;
char *str;
scanf("%d",&n);
k=DtoH(n,str);
for (i=0;i<=k;i++) printf("%c",str[k-i]);
}
十三、指针/指针与数组
1,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得
加行、减行、加句、减句,否则后果自负)。该程序功能:输入三个整数,按由小到大的顺
序输出这三个数。
#include
void swap( int *pa,int *pb ) { /*交换两个数的位置*/
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
void main()
{ int a,b,c,temp;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
swap(&a,&b);
if(b>c)
swap(&b,&c);
if(a>b)
swap(&a,&b);
printf("%d,%d,%d",a,b,c);
}
2,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f用以求1元2次方程 x*x+5*x-2=0 的实根。
#include
#include
int f(float a,float b,float c,float *x1,float *x2)
{ if(b*b-4*a*c<0) return 1;
*x1=(-b+sqrt(b*b-4*a*c))/2/a;
*x2=(-b-sqrt(b*b-4*a*c))/2/a;
return 0;
}
void main()
{ float u1,u2; float a=1,b=5,c=-2;
if( f(a,b,c,&u1,&u2) ) printf("实数范围内无解\n");
else printf("%.2f %.2f\n",u1,u2); }
3,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:函数f将数组循环左移k个元素,数组x[7]调用函数f后的输出结果为:4 5 6 7 1 2 3 #include
void f(int *a,int n,int k)
{ int i,j,t;
for(i=0;i
struct STUDENT
{
char name[16];
int math;
int english;
int computer;
int average;
};
void GetAverage(struct STUDENT *pst) /* 计算平均成绩 */
{
int sum=0;
sum = pst->math+pst->english+pst->computer;
pst->average = sum/3;
}
void main()
{
int i;
struct STUDENT st[4]={{"Jessica",98,95,90},{"Mike",80,80,90},
{"Linda",87,76,70},{"Peter",90,100,99}};
for(i=0;i<4;i++)
{
GetAverage(&st[i]);
}
printf("Name\tMath\tEnglish\tCompu\tAverage\n");
for(i=0;i<4;i++)
{
printf("%s\t%d\t%d\t%d\t%d\n",st[i].name,st[i].math,st[i].english,
st[i].computer,st[i].average);
}
}
2,以下程序中“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。
#include
#include
#include
void main()
{ int i,n;
/***** 1 *****/
struct axy { float x,y; } *a;
scanf("%d",&n);
a=(float*) malloc(n*2*sizeof(float));
for(i=0;i
enum FLAG {positive=1,negative=-1}; float f(float *x,int n,enum FLAG flag) { float y; int i;
y=x[0];
for(i=1;iflag*y) y=x[i];
return y;
}
void main()
{ float a[6]={3,5,9,4,2.5,1},b[5]={3,-2,6,9,1};
printf("%.2f\n",f(a,6,positive)- f(b,5, negative));
}
十六、位运算
1,以下程序中“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:将一个char型数的高4位和低4位分离,分别输出,如22(二进制:00010110)输出为1和6。
#include
void main()
{ char a,b1,b2,c;
scanf("%d",&a);
/****** 1 ******/
b1=a>>4; /*b1存放高4位*/
c=~(~0<<4);
/****** 2 ******/
b2=a&c; /*b2存放低4位*/
printf("%d,%d",b1,b2);
}
十七、其它
1,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。
#include
#include
void main()
{ int n,s=0;
scanf("%d",&n);
n=fabs(n);
while(n!=0) {
s=s+n%10;
n=n/10;
}
printf("%d\n",s);
}
2,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得
加行、减行、加句、减句,否则后果自负)。该程序功能:输入1个整数后,输出该数的位
数(若输入3214则输出4,输入-23156则输出5)。 #include
void main()
{ int n,k=0;
scanf("%d",&n);
while(n!=0 ){
k++;
n=n/10;
}
printf("%d\n",k); }
3,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得
加行、减行、加句、减句,否则后果自负)。该程序功能:将字符串s中所有的字符'c'删除。
#include
void main()
{ char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!=?\0?;i++)
if(s[i] != 'c')
{ s[j]=s[i];
j++;
}
s[j]='\0';
puts(s);
}
4,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得
加行、减行、加句、减句,否则后果自负)。该程序功能:调用find函数在输入的字符串中
查找是否出现"the"这个单词。如果查到返回出现的次数;如果未找到返回0。
#include
int find(char *str) { char *fstr="the";
int i=0,j,n=0;
while (str[i]!='\0')
{ for(j=0;j<3;j++)
if (str[j+i]!=fstr[j]) break;
if (j>=3) n++;
i++;
}
return n;
}
void main()
{ char a[80];
gets(a);
printf("%d",find(a));
}
5,以下程序中“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、
加句、减句,否则后果自负)。该程序功能:分别统计字符串中所有英文字母中的各元音字
母个数。
#include
#include
void main()
{ char a[81]; int n[5]={0},i; gets(a);
for(i=0; a[i]!='\0'; i++)
/***** 1 *****/
switch(tolower(a[i])) {
case 'a': n[0]++; break;
case 'e': n[1]++; break;
case 'i': n[2]++; break;
case 'o': n[3]++; break;
/***** 2 *****/
case 'u': n[4]++;
}
for(i=0;i<5;i++)printf("%d\n",n[i]);
}
6,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得
加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f,从字符串中删除所
有的数字字符。
#include
#include
#include
void f(char *s)
{ int i=0;
while(s[i]!='\0')
if(isdigit(s[i])) strcat(s+i,s+i+1);
else i++;
}
void main()
{ char str[80];
gets(str); f(str); puts(str); }
7,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:分别统计字符串中英文字母、数字和其他字符出现的次数。
#include
#include
void main()
{ char a[80]; int n[3]={0},i; gets(a);
for(i=0;i='a' && tolower(a[i])<='z') /*统计字母个数*/
n[0]++;
else if (a[i]>=?0?&&a[i]<=?9?) /*统计数字个数*/
n[1]++;
else
n[2]++;
}
for(i=0;i<3;i++) printf("%d\n",n[i]);
}
8,以下程序中“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母后,输出该字符串。
#include
#include
#include
void main()
{ int n,i;
/***** 1 *****/
char *str;
scanf("%d\n",&n); str=(char*)malloc(n); gets(str);
/***** 2 *****/
for(i=0;i='a'&& str[i]<='z') str[i]=str[i]-('a'-'A');
puts(str);
}
9,以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入的一个小写字母,将字母循环后移5个位置后输出,如’a’变成’f’, ‘w’变成’b’。
#include
void main()
{ char c;
c=getchar();
if( c>=?a?&&c='v' && c<='z')
c=c-21;
putchar(c);
}
10,在考生目录的Paper子目录下,有Modify.c文件,该文件中“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入1个字符串,按字母首次出现次序输出其中所出现过的大写英文字母。如运行时输入字符串"FONTNAME and FILENAME",应输出"F O N T A M E I L"。
#include
void main()
{ char x[80],y[26]; int i,j,ny=0;
gets(x);
for(i=0;x[i]!='\0';i++)
if(x[i]>='A'&&x[i]<='Z') {
for(j=0;j
本文档为【浙江省二级C语言考试上机试题库】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。