61阅读

计算机二级c语言上机题库-浙江省计算机二级考试C语言上机题库27

发布时间:2017-08-07 所属栏目:二级c语言上机题库

一 : 浙江省计算机二级考试C语言上机题库27

上机程序调试及程序设计题目分类练习

1. 数字处理(切割技术)

1-1找Armstrong(水仙花)数:371=3*3*3+7*7*7+1*1*1 【这是一个三位的自然数,要点是三位分离】

#include <stdio.h>

#include<math.h>

void main()

{ int i,a,b,c;

for(i=100;i<=999;i++)

{ a=i/100;

_______1_______ // b=i%100/10;

c=i%10;

if (________2________) // a*a*a+b*b*b+c*c*c = = i

printf("%d is a Armstrong number!\n",i);

}

}

1-2输入1个整数后,输出该数的位数。(例:输入3214则输出4,输入-23156则输出5)。【逐位剥离】

#include <stdio.h>

void main()

{ int n,k=0;

scanf("%d",&n);

while( _____1_____ ){ // n!=0

k++;

_____2_____; // n=n/10

}

printf("%d\n",k);

}

1-3求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。【逐位剥离】

#include <stdio.h>

#include <math.h>

void main()

{

int n,s=0;

scanf("%d",&n);

______ 1 ______ // if (n<0) n=-n;【符号预处理】

while(n!=0) {

______ 2 ______ // s+=n%10;

n=n/10;

}

printf("%d\n",s);

}

1-4调用函数f,将一个整数首尾倒置。例如:若程序输入12345,则输出54321;若程序输入-34567,

则输出-76543。【逐位剥离+逆置技术y=y*10+m%10 】

#include <stdio.h>

#include <math.h>

long f(long n)

{ long m,y=0; m=fabs(n);

while(m!=0) {

y=y*10+m%10;

____1____ // m=m/10 ;

}

if(n>=0) return y;

else _____2_____ // return -y ;

}

void main()

{

printf("%ld\t",f(12345)); printf("%ld\n",f(-34567));

}

1-5寻找并输出11至999之间的数m,它满足m、m*m、m*m*m均为回文数。说明:所谓回文数是指各位数字左右对称,例如121、676、94249等。满足上述条件的数如m=11,m^2=121,m^3=1331皆为回文数。

请编制函数int JSValue(long m)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。【本题目的算法与 1-4题相同】

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int JSValue(long m)

{ /*考生在这里添加代码*/

long i,n;

n=m; i=0; // i中存放的是m的倒置数

while(n>0)

{ i=i*10+n%10; n=n/10; }

if (m = = i) return 1;

else return 0;

/***添加代码结束***/ }

void main()

{

FILE *p;long m;

p=fopen("design.dat","w");

for(m=11;m<1000;m++)

{ if(JSValue(m)&&JSValue(m*m)&&JSValue(m*m*m))

fprintf(p,"%ld ",m); }

fclose(p); }

2. 字符串操作(特别,单字符删除的两种算法)

2-1输入一个小写字母,将字母循环后移5个位置后输出。例如:"a"变成"f","w"变成"b"。

#include <stdio.h>

void main()

{ char c;

c=getchar();

if(______1______) // c>='a'&&c<='u'

c=c+5;

else

if (c>='v' && c<='z')

______2______ // c=(c-'a'+5)%26+'a'; 或 c=c-21; 或 c=c+5-26;

putchar(c);

}

2-2输入一个字符串,将组成字符串的所有字符先按顺序存放到字符串t中,再将字符串中的字符按逆序连接到字符串t后面。例如:输入"ABCD",则字符串t为"ABCDDCBA"。PP2

#include <stdio.h>

#include <string.h>

void fun(char *s,char *t)

{ int i,sl;

sl=strlen(s);

for(i=0;i<sl;i++)

t[i]=s[i];

for(i=0;i<sl;i++)

/********1********/

t[sl+i]=s[sl-i]; // t[sl+i]=s[sl-1-i];

/********2********/

t[sl]="\0"; // t[2*sl]=’\0’;

}

void main()

{ char s[100],t[100];

scanf("%s",s);

fun(s,t);

printf("%s",t);

}

2-3设计程序:计算字符串s中每个字符的权重值,所谓权重值就是字符在字符串中的位置值与该字符的ASCII码值的乘积。位置值从1开始依此递增。将每个字符的权重值,以格式"%d "写入到源程序目录中Paper子目录下的新建文件design.dat中。

#include<stdio.h>

#include<math.h>

void main()

{ FILE *p; int i,w;

char *s="we45*&y3r#$1";

/*考生在这里添加代码*/

p=fopen("design.dat","w");

for (i=0;s[i]!='\0';i++)

{ w=(i+1)*s[i];

fprintf( p,"%d ",w);

}

fclose(p);

}

2-4调用find函数在输入的字符串中查找是否出现"the"这个单词。如果查到返回出现的次数,如果未找到返回0。【本题解在判断源串里当前连续三个字符是否为"the"这个单词采用了查找算法】

#include <stdio.h>

int find(char *str)

{ char *fstr="the";

int i=0,j,n=0;

while (str[i]!='\0') 【注:while (str[i+2]!='\0') 更佳】

{

for(______1______) // j=0; j<3; j++

if (str[j+i]!=fstr[j]) break;

if (______2______) n++; // j>=3 或者 j = = 3

i++;

}

return n;

}

void main()

{ char a[80];

gets(a);

printf("%d",find(a));

}

【注:以下为单字符删除。出现两种算法。一是使用strcpy做子串覆盖,二是逐个保留新串的字符】 2-5调用函数f,从字符串中删除所有的数字字符。

#include <stdio.h>

#include <string.h>

#include <ctype.h>

void f(char *s)

{ int i=0;

while(s[i]!='\0'){

if(isdigit(s[i])) ____1____(s+i,s+i+1); // strcpy

___2___ i++;} // else

}

void main()

{ char str[80];

gets(str); f(str); puts(str);

}

2-6将字符串s中所有的字符'c'删除。

#include <stdio.h>

void main()

{ char s[80];

int i,j;

gets(s);

for(i=j=0; ______1______; i++) // s[i] != '\0'

if(s[i] != 'c')

{ s[j]=s[i];

______2______ // j++;

}

s[j]='\0';

puts(s);

}

2-7输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。

#include <stdio.h>

#include <string.h>

void main()

{ char str[256];

int i,j,k=0,n;

gets(str);

n=strlen(str);

for(i=0;i<n;i++)

/********1********/

if (tolower(str[i])<'a' || tolower(str[i])>'z') // if (tolower(str[i])>='a' && tolower(str[i])<='z') {

/********2********/

str[n]=str[i]; n++; // str[k]=str[i]; k++;

}

str[k]='\0';

printf("%s\n",str);

3. 最大(小)值

3-1运行时输入10个数,然后分别输出其中的最大值、最小值。PP11

#include <stdio.h>

void main()

{ float x,max,min; int i;

/******** 1 *******/

for(i=0;i<=10;i++) { // for(i=1; i<=10; i++) {

scanf("%f",&x);

/******* 2 ********/

if(i=1) { max=x;min=x;} // if(i==1) { max=x;min=x;}

浙江省计算机二级考试C语言上机题库27_计算机二级c语言上机题库

if(x>max) max=x;

if(x<min) min=x;

}

printf("%f,%f\n",max,min);

}

3-2 对x=1,2,……,10,求f(x)=x*x-5*x+sin(x)的最大值。P3

#include <stdio.h>

#include <math.h>

#define f(x) x*x-5*x+sin(x)

void main()

{ int x; float max;

______1______ // max=f(1);

for(x=2;x<=10;x++)

______2______ // if (f(x)>max) max=f(x);

printf("%f\n",max);

}

3-3对x=1,2,…10,求函数f(x)=x-10*cos(x)-5*sin(x)的最大值,并将该数以格式".3f"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。

#include <stdio.h>

#include <math.h>

void main()

{ FILE *p; float f(float),max,x;

/*考生在这里添加代码*/

int i; max=f(1);

for (i=2;i<=10;i++)

{ x=f(i);

if (max<x) max=x;

}

p=fopen("Design1.dat","w");

fprintf(p,"%.3f",max);

fclose(p);

}

float f(float x)

{ float t;

t=x-10*cos(x)-5*sin(x);

return t;

}

3-4 z=f(x,y)=(3.14*x-y)/(x+y),若x、y取值为区间[1,6]的整数,找出使z取最小值的x1、y1,并将x1、y1以格式"%d,%d"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。P6

#include <stdio.h>

void main()

{ FILE *p; float f(float x,float y),min;

int x,y,x1,y1;

/*考生在这里添加代码*/

min=f(1,1); x1=y1=1;

for (x=1;x<=6;x++)

for (y=1;y<=6;y++)

if (f(x,y)<min)

{ min=f(x,y); x1=x; y1=y; }

p=fopen("Design2.dat","w");

fprintf(p,"%d,%d",x1,y1);

fclose(p);

/***添加代码结束***/

}

float f(float u,float v)

{ return (3.14*u-v)/(u+v); }

3-5 z=f(x,y)=10*cos(x-4)+5*sin(y-2),若x、y取值为区间[0,10]的整数,找出使z取最小值的x1、y1,并将x1、y1以格式"%d,%d"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。P13

#include<stdio.h>

#include<math.h>

void main()

{ FILE *p;

int x,y,x1,y1; float z,z1;

/*考生在这里添加代码*/

z1=10*cos(-4)+5*sin(-2); x1=y1=0;

for (x=0;x<=10;x++)

for (y=0;y<=10;y++)

{ z=10*cos(x-4)+5*sin(y-2);

if (z<z1) { z1=z; x1=x; y1=y; }

}

p=fopen("Design2.dat","w");

fprintf(p,"%d,%d",x1,y1);

fclose(p);

}

3-6 将数组a的每一行均除以该行上绝对值最大的元素,然后将a数组写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。P3

#include <stdio.h>

#include <math.h>

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=1;j<3;j++) if (fabs(a[i][j])>fabs(x)) x=a[i][j];

for (j=0;j<3;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); }

3-7 设计程序:在数组x的10个数中求平均值v,找出与v相差最小的数组元素并将其以格式"%.5f"写到考生目录中Paper子目录下的新建文件design.dat中。P12

#include <stdio.h>

#include <math.h>

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)<d ) { d=fabs(x[i]-v); k=i; }

p=fopen("Design.dat","w"); fprintf(p,"%.5f", x[k] ); fclose(p);

}

3-8 设计程序:数组元素x[i]、y[i]表示平面上某点坐标,统计所有各点间最短距离,并将其值以格式"%f"

写到源程序目录中Paper子目录下的新建文件design.dat中。P13

#include <stdio.h>

#include <math.h>

#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]);

/*考生在这里添加代码*/

for (i=0;i<10;i++)

for (j=i+1;j<10;j++)

{ c=len(x[i],y[i],x[j],y[j]);

if (c<minc) minc=c;

}

p=fopen("Design.dat","w");

fprintf(p,"%f",minc);

fclose(p);

}

4. 累加

4-1计算2的平方根、3的平方根、……、10的平方根之和,要求计算结果具有小数点后10位有效位数,并以格式"%.10f\n"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat中。P8

#include <stdio.h>

#include <math.h>

void main()

{ FILE *p;

/*考生在这里添加代码*/

int i; double s=0;

for (i=2;i<=10;i++)

s+=sqrt(i);

p=fopen("Design2.dat", "w");

fprintf(p,"%.10f\n",s);

fclose(p);

}

4-2运行时若输入a、n分别为3、6,则输出下列表达式的值:3+33+333+3333+33333+333333。PP11

#include <stdio.h>

void main()

{ int i,a,n; long t=0;

/********* 1 *******/

s=0; // long s=0;

scanf("%d%d",&a,&n);

for(i=1;i<=n;i++) {

/******* 2 ******/

t=t*10+i; // t=t*10+1;

s=s+t;

}

s=s*a;

printf("%ld\n",s);

}

4-3累加a字符串各个字符的ASCII码值,然后将累加和以格式"%d"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat中。P11

#include <stdio.h>

void main()

{ FILE *p; int s=0,i=0;

char *a="r235%^%34cdDW,.";

/*考生在这里添加代码*/

for (i=0;a[i]!='\0';i++)

s+=a[i];

p=fopen("Design2.dat","w");

fprintf(p,"%d",s);

fclose(p);

}

4-4计算数列1,-1/3!,1/5!,-1/7!,1/9!,……的和至某项的绝对值小于1e-5时为止(该项不累加),将求和的结果以格式"%.6f"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat中。P3

#include <stdio.h>

#include <math.h>

void main()

{ FILE *p; float s=1,t=1,i=3;

/*考生在这里添加代码*/

while ( fabs(-t/(i-1)/i)>=1e-5)

{ t= -t/(i-1)/i;

s+=t;

i+=2;

}

p=fopen("Design1.dat","w");

fprintf(p,"%.6f",s);

fclose(p);

}

4-5 x[i],y[i]分别表示平面上的 一个点的 坐标,求下列10个点与点(1.0,1.0)的 距离的总和,并将结果以格式"%.6f"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。P14

#include<stdio.h>

#include<math.h>

void main()

{ FILE *p;

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;

/*考生在这里添加代码*/

for(i=0;i<10;i++)

s+=sqrt((x[i]-1.0)*(x[i]-1.0)+(y[i]-1.0)*(y[i]-1.0));

p=fopen("Design2.dat","w");

fprintf(p,"%.6f",s);

fclose(p);

}

4-6计算表达式1+2!+3!+…+12!的值,并将计算结果以格式"%ld"写入考生文件夹中Paper子文件夹下的新建文件Design2.dat。P7

#include <stdio.h>

void main()

{ FILE *p; long s=1,k=1; int i;

/*考生在这里添加代码*/

浙江省计算机二级考试C语言上机题库27_计算机二级c语言上机题库

for (i=2;i<=12;i++)

{ k=k*i;

s+=k;

}

p=fopen("Design2.dat","w");

fprintf(p,"%ld",s);

fclose(fp);

}

4-7利用公式π/4≈1-1/3+1/5-1/7+??公式计算π的近似值,直到某一项的绝对值小于1e-6为止。(π/4的结果不包含此项)将计算结果以格式"%.6f"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。【本题的考点是不定长循环的控制细节】P14-15

#include <stdio.h>

#include <math.h>

void main()

{ FILE *fp;

float n=1,t=1,pi=0;

int i;

/*考生在这里添加代码*/

i=1;

while(fabs(t)>=1e-6)

{ pi+=t; i++; n= - n ;

t=n/(2*i-1);

}

fp=fopen("Design1.dat","w");

fprintf(fp,"%.10f",pi*4);

fclose(fp);

}

4-8输入x和正数eps,计算多项式1-x+x*x/2-x*x*x/3!+……的和直到末项的绝对值小于eps为止。

【本题的考点是不定长循环的控制细节】PP9

#include <stdio.h>

#include <math.h>

void main()

{ float x,eps,s=1,t=1,i=1;

scanf("%f%f",&x,&eps);

do {

/***** 1 *****/

t=-t*x/++i; // t=-t*x/i++ ;

s+=t;

/***** 2 *****/

} while(fabs(t)<eps); // } while(fabs(t)>=eps);

printf("%f\n",s);

}

4-9计算多项式a0+a1*sin(x)+a2*sin(x*x)+a3*sin(x*x*x)+…..+a9*sin(x*x*x*x*x*x* x*x*x)的值,并将结果以格式"%.6f"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat中。P1

#include<stdio.h>

#include<math.h>

void main()

{ FILE *p;

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};

/*考生在这里添加代码*/

y=a[0]; t=x;

for (i=1;i<10;i++)

{ y+=a[i]*sin(t);

t=t*x;

}

p=fopen("Design2.dat","w");

fprintf(p,"%.6f",y);

fclose(p);

}

4-10计算多项式a0+a1*x+a2*x*x+a3*x*x*x+…+a9*x*x*x*x*x*x*x*x*x的值,并将其值以格式"%f"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。P4

#include <stdio.h>

#include <math.h>

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};

/*考生在这里添加代码*/

for (i=0; i<10;i++)

{ y=y+a[i]*t;

t=t*x;

}

p=fopen("Design2.dat","w");

fprintf(p,"%f",y);

fclose(p);

}

4-11设计:数列第一项为81,此后各项均为它前一项的正平方根,统计该数列前30项之和,并以格式“%.3f”写入到考生文件夹中paper子文件夹下的新建文件design2.dat【本题目的考点是文件操作】

#include <stdio.h>

#include <math.h>

void main()

{ FILE *p; float s=0,a=81;int i;

/* 考生在这里添加代码*/

for(i=0;i<30;i++) { s+=a; a=sqrt(a); }

p=fopen(“design2.dat”,”w+’); fprintf(p,”%.3f”,s); fclose(p); } //运行结果:121.336

5. 统计

5-1分别统计字符串中英文字母、数字、和其他字符出现的次数。PP4

#include <stdio.h>

#include <ctype.h>

void main()

{ char a[80]; int n[3]={0}, i; gets(a) ;

________1________ // for ( i=0; a[i]!='\0'; i++)

{if (tolower(a[i])>='a' && tolower(a[i])<='z') /*统计字母个数*/

n[0]++;

else if (________2________) /*统计数字个数*/ // a[i]>='0' && a[i]<='9'

n[1]++;

else n[2]++;

}

for(i=0;i<3;i++) printf("%d\n",n[i]); }

5-2数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中处在圆(方程为:(x-1)*(x-1)+(y+0.5)*(y+0.5)=25)内的点数k,并将变量k的值以格式"%d"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。P12

#include <stdio.h>

#include <math.h>

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};

/*考生在这里添加代码*/

for (i=0;i<10;i++)

if ((x[i]-1)*(x[i]-1)+(y[i]-0.5)*(y[i]-0.5)<25) k++;

p=fopen("Design1.dat","w");

fprintf(p,"%d",k);

fclose(p);

}

6. 数制的转换

6-1将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。

#include <stdio.h>

void Dec2Bin(int m)

{

int bin[32],j;

for(j=0;m!=0;j++)

{

bin[j]= ______1______; // m%2

m=m/2;

}

for( ; j!=0; j-- )

printf("%d", ______2______ ); // bin[j-1]

}

void main()

{

int n;

scanf("%d",&n);

Dec2Bin(n);

}

6-2将输入的十进制整数n通过函数DtoH函数转换为十六进制数,并将转换结果以字符串形式输出。(例如:输入十进制数79,将输出十六进制4f。)

# include <stdio.h>

# include <string.h>

char trans(int x)

{

if(x<10) return '0'+x;

else _______1________ // return 'a'+x-10;

}

int DtoH(int n,char *str)

{

int i=0;

while(n!=0)

{

________2________ // 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]);

}

7. 递推与数列

7-1某公司1999年年产量11.5万件,生产能力每年提高9.8%,求出产量能超过x万件的年份,结果由函数Year返回。分别计算当x=20和x=30时的结果,将计算结果写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。P6

#include<stdio.h>

int Year(int x)

{ int p=11.5, y=1999;

/*考生在这里添加代码*/

int i;

for ( i=1; p<=x; i++)

p=p*(1+9.8/100);

return p;

/***添加代码结束***/

}

void main()

{ FILE *p;

p=fopen("design.dat","w");

fprintf(p,"%d,%d",Year(20),Year(30));

fclose(p);

}

7-2数列的第1、2项均为1,此后各项值均为该项前二项之和。计算数列第30项的值。PP4-5

#include <stdio.h>

_______1______ // long f(int n);

void main()

{ printf("%ld\n",f(30)) ;

}

long f(int n)

{ if( ______2______ ) // n==1 || n==2

return 1;

else

return f(n-1)+f(n-2);

}

7-3求斐波那契(Fibonacci)数列中其前40项之和,(斐波那契数列的定义为后一项为前两项之和),并将求和的结果以格式"%d"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。P4

#include <stdio.h>

void main()

{ FILE *p; long s=0,i,a[40];

/*考生在这里添加代码*/

a[0]=a[1]=1; s=a[0]+a[1];

for (i=2;i<40;i++)

{ a[i]=a[i-1]+a[i-2];

s+=a[i];

}

p=fopen("Design2.dat","w");

fprintf(p,"%d",s);

fclose(p);

}

7-4求斐波那契(Fabonacci)数列中大于t的最小的一个数,结果由函数JSValue返回,其中斐波那契数列F(n)的定义为:

F(0)=0, F(1)=1

F(n)=F(n-1)+F(n-2)

浙江省计算机二级考试C语言上机题库27_计算机二级c语言上机题库

分别计算当t=1000和t=3000时的结果,将计算结果写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。

#include<stdio.h>

int JSValue(int t)

{ /*考生在这里添加代码*/

int x1=1, x2=1, x ;

x=x1+x2;

while(x<=t)

{ x1=x2; x2=x; x=x1+x2; }

return x;

/***添加代码结束***/

}

void main()

{ FILE *p;

p=fopen("design.dat","w");

fprintf(p,"%d,%d",JSValue(1000),JSValue(3000));

fclose(p);

}

7-5有数列:2/1,3/2,5/3,8/5,13/8,21/13,......求出数列的前40项的和。将计算结果以格式"%.6f"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat中。P11

#include<stdio.h>

void main()

{ FILE *p;

int i;

float f1=1.0,f2=2.0,t1=2.0,t2=3.0,s;

float f,t;

s=t1/f1+t2/f2;

/*考生在这里添加代码*/

for(i=2;i<=20;i++)

{ t=t1+t2; f=t2; t1=t; f1=f; t2=t1+t2; f2=t1;

s+=t1/f1+t2/f2;

} /***添加代码结束***/

p=fopen("Design1.dat","w");

fprintf(p,"%.6f",s);

fclose(p);

}

8. 数字游戏

8-1在正整数中找出1个最小的、被3、5、7、9除余数分别为1、3、5、7的数,将该数以格式"%d"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat中。【本题目的考点是条件表达式】

#include <stdio.h>

#include <math.h>

void main()

{

/*考生在这里添加代码*/

FILE *p; int i;

p=fopen("Design1.dat","w");

for( i=1; ;i++)

if (i%3==1 && i%5==3 && i%7==5 && i%9==7) break;

fprintf(p,"%d",i);

fclose(p);

}

8-2已知公鸡每只5元、母鸡每只3元、小鸡1元3只。求出用100元买100只鸡的解。将得到的解按公鸡、母鸡和小鸡的只数以格式"%d,%d,%d"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。【本题目的考点是三重循环】

#include <stdio.h>

void main()

{ FILE *p;

int cock,hen,chick;

/*考生在这里添加代码*/

p=fopen("Design1.dat","w");

for (cock=0;cock<=20;cock++)

for (hen=0;hen<=33;hen++)

for (chick=3;chick<=100;chick++)

if (cock+hen+chick = = 100 && cock*5+hen*3+chick/3.0 = = 100)

fprintf(p,"%d,%d,%d\n",cock,hen,chick);

fclose(p);

}

8-3统计满足条件x*x+y*y+z*z==2000的所有解的个数,(注意:若a、b、c是一个解,则a、c、b也是一个解,等等)。并将统计结果以格式"%d"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。

【本题目的考点是三重循环】

#include <stdio.h>

void main()

{ FILE *p; int x,y,z,k=0;

/*考生在这里添加代码*/

p = fopen("design.dat", "w");

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++;

fprintf(p,"%d",k);

fclose(p);

}

8-4输入整数n(n>0),求m使得2的m次方小于或等于n,2的m+1次方大于或等于n。PP1

#include <stdio.h>

void main()

{ int m=0,t=1,n;

while( _____ 1 ________); // scanf(“%d”,&n), n<=0

while(!(t<=n&&t*2>=n)){

_____ 2 _____ // t=t*2;

m++;

}

printf(“%d\n”,m);

}

8-5 将满足条件pow(1.05,n)<1e6<pow(1.05,n+1)的n及其相应pow(1.05,n)值以格式"%d, %.0f"写入到考

生文件夹中Paper子文件夹下的新建文件Design2.dat。P14

#include <stdio.h>

#include <math.h>

void main()

{ float y=1.05; int n=1; FILE *p;

/*考生在这里添加代码*/

for (n=1; ;n++)

if (pow(1.05,n)<1e6 && pow(1.05,n+1)>1e6) break ;

p=fopen("Design2.dat","w");

/***添加代码结束***/

fprintf(p,"%d,%.0f",n,pow(1.05,n));

fclose(p);

}

【以下算法比较特别,考虑强记】

8-6 运行时输入n,则输出n的所有质数因子。例如:n=13860,则输出2、2、3、3、5、7、11。PP12

#include <stdio.h>

void main()

{ int n,i;

scanf("%d",&n);

/****** 1 ******/

i=1; // i=2;

while(n>1)

if(n%i==0) {

printf("%d\t",i);

n/=i;

}

else

/******** 2 *******/

n++; // i++;

8-7 若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。如:220、284是1对亲密数,284、220也是1对亲密数。在6~5000内找出所有的亲密数对,并将每对亲密数用语句fprintf( p, "%6d, %6d\n", a, b)写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。【题目不完整??】

void main()

{ FILE *p; int a,b,c,k;

p=fopen("design.dat","w");

/*考生在这里添加代码*/

for(k=6;k<=5000;k++)

{ b=0; c=0;

for(a=1;a<k;a++)

if (k%a==0) b+=a;

for(a=1;a<b;a++)

if (b%a==0) c+=a;

if (k==c&&k!=b) fprintf(p,"%6d,%d\n",k,b);

}

fclose(p);

}

在6至5000内找出所以的亲密数对,并将每对亲密数用语句fprintf(p,’%6d,%6d\n’,a,b)写入到考生文件夹下的新建文件Design1.dat

#include <stdio.h>

void main()

{ FILE *p; int a,b,c,i;

p=fopen("design1.dat","w");

}

9. 数组、矩阵、排序

9-1将数组a的每1行均除以该行上的主对角线元素(第1行除以a[0][0],第2行除以a[1][1],……),然后将a数组写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。

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]=a[i][j]/t;

}

p=fopen("Design2.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);

}

9-2调用函数f,去除数组中的负数,输入数组x[7],输出结果为:1 3 4 6。 PP7

//【以下f 函数的功能是将数组 a里的负数删除, 数组 a里的元素个数*m 所指向的单元中】 #include <stdio.h>

void f(int *a,int *m) { int i, j ;

for(i=0;i<*m;i++)

if(a[i]<0) { //负数!开删

for(j=i--;j<*m-1;j++) a[j]=a[j+1];

_____1_____; // *m = *m-1; 【删除一个负数时,数组 a里的元素个数减少一个】

}

}

void main()

{ int i,n=7,x[7]={1,-2,3,4,-5,6,-7};

_______2_______; // f (x, &n) ;

for(i=0;i<n;i++) printf("%5d",x[i]);

printf("\n");

}

9-3 求出a中各相邻两个元素的和,并将这些和存放在数组b中,按每行3个元素的形式输出。例如:

b[1]=a[0]+a[1],……,b[9]=a[8]+a[9]。PP3

#include <stdio.h>

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++)

浙江省计算机二级考试C语言上机题库27_计算机二级c语言上机题库

b[i]=______1______; /* 计算b数组中的元素 */ // a[i-1]+a[i]

for (i=1; i<10; i++)

{ printf("%3d",b[i]);

if (______2______) printf("\n"); /* 每行打印3个数据 */ // i%3= =0

}

}

9-4 在整数数组a中找出偶数放到b数组中,对b数组按从小到大的顺序进行排序后以格式"%3d"每行3个数写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。P2【注:与普通排序比较,这里多了一个偶数处理,偶数的个数要自行记住,程序中使用变量 n 。】

#include <stdio.h>

void main()

{ FILE *p;

int i,j,temp,n=0;

int a[10]={7,6,20,3,14,88,53,62,10,29},b[10];

/*考生在这里添加代码*/

for (i=0;i<10;i++) // 第一步,先形成b数组

if (a[i]%2==0) b[n++]=a[i];

for (i=0;i<n-1;i++) //第二步,排序。这里用冒泡法,也可以采用选择法

for (j=0; j<n-1-i; j++)

if (b[j]>b[j+1])

{ temp=b[j]; b[j]=b[j+1]; b[j+1]=temp; }

p=fopen("Design1.dat","w"); // 第三步,输出

for (i=0;i<n;i++)

if (i%3==0) fprintf(p,"\n%3d",b[i]);

else fprintf(p,"%3d",b[i]);

fclose(p);

}

9-5 用选择法对10个整数按升序排序。

#include <stdio.h>

#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<N;i++) printf("%5d",a[i]);

for (i=0;i<N-1;i++) /* 排序操作 */

{ min = i;

for (j=i+1; j<N; j++)

/****** 1 ******/

if (a[min]<=a[j]) min =j; // if ( a[min]>a[j] ) min =j; 升序呀

/****** 2 ******/

temp=a[min]; a[min]=a[j]; a[j]=temp; /*数据交换*/

// 改成 temp=a[min]; a[min]=a[i]; a[i]=temp;

}

printf("\nThe sorted numbers: \n"); /* 输出排序结果 */

for (i=0;i<N;i++) printf("%5d",a[i]);

printf("\n");

}

9-6 将字符串s中的所有字符按ASCII值从小到大重新排序后,将排序后的字符串写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。

#include <stdio.h>

#include <string.h>

void main()

{ FILE *p; char *s="634,.%@\\w|SQ2",c;

int i,j,k,n=strlen(s);

/*考生在这里添加代码*/

char str[40];

strcpy(str, s);

for(i=0;i<n-1;i++) //这里用选择法,也可以采用冒泡法排序

{ k=i;

for(j=i+1;j<n;j++)

if (str[k]>str[j] ) k=j;

c=str[i]; str[i]=str[k]; str[k]=c;

}

s = str ;

p=fopen("Design2.dat","w");

/***添加代码结束***/

for(i=0;i<n;i++) fputc(s[i],p);

fclose(p);

}

10. 结构体

10-1该程序计算四位学生的平均成绩,保存在结构中,然后列表输出这些学生的信息。

【本题目的考点是结构体数据操作的记号问题】PP6

#include <stdio.h>

struct STUDENT

{ char name[16]; int math; int english; int computer; int average; };

void GetAverage(struct STUDENT *pst) /* 计算平均成绩 */

{ int sum=0;

sum = ______1______; // 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(______2______); // 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);

}

}

10-2 输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。

PP14本题命题有误?

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

void main()

{ int i,n;

/***** 1 *****/

struct axy { float x,y; } a; // struct axy { float x,y; } *a;

scanf("%d",&n);

a=(float*) malloc(n*2*sizeof(float));

for(i=0;i<n;i++)

/***** 2 *****/

scanf("%f%f",a[i].x,a[i].y); // scanf("%f%f",&a[i].x,&a[i].y);

for(i=0;i<n;i++)

if(sqrt(a[i].x*a[i].x+a[i].y*a[i].y)<=5)

printf("%f,%f\n",a[i].x,a[i].y);

}

11. 递归

11-1用递归法将一个六位整数n转换称字符串。例如:输入123456,应输入字符串"123456"。PP2

#include<stdio.h>

void itoa(long i,char *s)

{ if(i==0)

return;

/****** 1 ******/

*s = '1'+i%10; // *s=i%10+'0';

itoa(i/10,s-1);

}

void main()

{ long n;

char str[7]="";

scanf("%ld",&n);

/****** 2 ******/

itoa(n,str+6); // itoa(n,str+5);

printf("%s",str);

}

12. 素数

12-1 计算500~800区间内素数的个数cnt和素数和sum。请编写函数JSValue()实现程序的要求。最后把

cnt和sum的值写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。P10

#include<stdio.h>

int cnt,sum;

void JSValue()

{ int i,j,half;

/*考生在这里添加代码*/

for(i=500;i<=800;i++)

{ half = i/2;

for(j=2; j<half; j++ )

if ( i%j= =0) break;

if ( j >= half ) { cnt++; sum+=i; }

}

/***添加代码结束***/

}

void main()

{ FILE *p;

p=fopen("design.dat","w");

JSValue();

fprintf(p,"%d,%d",cnt,sum);

fclose(p);

}

13. 最大公约数(附:最小公倍数)

13-1输入m、n(要求输入数均大于0)。输出它们的最大公约数。PP11

#include<stdio.h>

void main()

{ int m, n, k;

while ( scanf("%d%d", &m, &n), ______1______ ); // m<=0||n<=0

for ( ; n%k!=0 || m%k!=0 ; k--) ; // k=m>n?n:m 或k=n或k=m

printf("%d\n", k);

}

14. 其他(另类)

14-1输入三个整数,按由小到大的顺序输出这三个数。【本题的考点是函数的参数确认】PP15

#include <stdio.h>

void swap(______1______) // int *pa, int *pb

{ /*交换两个数的位置*/

int temp;

temp = *pa;

*pa = *pb;

*pb = temp;

} void main()

{ int a,b,c,temp; 这个 temp 变量无用

scanf("%d%d%d",&a,&b,&c);

if(a>b)

swap(&a,&b);

if(b>c)

swap(&b,&c);

if(______2______) // if ( a>b )

swap(&a,&b);

printf("%d,%d,%d",a,b,c);

}

14-2调用函数f计算代数多项式1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x当x=1.7时的值。

【本题的考点是函数的参数确认】PP13

#include <stdio.h>

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( _______1________ ) // float x, float *a, int n

{ float y=a[0], t=1; int i;

for(i=1; i<n; i++) { t=t*x; y=y+a[i]*t; }

_____2_____ // return y;

}

二 : 计算机二级C语言上机真题 (57)【附详解】

计算机二级C语言上机真题
【真题1】 给定程序的功能是把a数组中的n 个数,和b 数组中逆序的n 个数一一
对应相乘、求平方,结果存在c 数组中。[www.61k.com)
例如:当a 数组中的值是:1、3、5、7、8,b 数组中的值是:2、3、4、5、8
调用该函数后,c 中存放的数据是:64、225、400、441、256
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。
#include < stdio.h >void fun(int a[], int b[], int c[], int n)
{ int i;
for (i=0; i< n; i++)
/**************found**************/
___1___ = (a[i] * b[n-1-i]) *(a[i] * b[n-1-i]);
}
main()
{ int i, a[100]={1,3,5,7,8}, b[100]={2,3,4,5,8}, c[100];
/**************found**************/
fun(___2___, 5);
printf("The result is: ");
/**************found**************/
for (i=0; i< 5; i++) printf("%d ", ___3___);
printf("\n");
}
(2011年2月)
解析: 本题的考核点是for 循环的使用。
提示思路:本题通过for 循环,使用公式c[i] = (a[i] * b[n-1-i]) *(a[i] *
b[n-1-i]),求得数组a与数组b逆序之积的平方,将计算结果存在c 数组中。
答案:【1】c[i] 【2】a,b,c 【3】c[i]
【真题2】 给定程序modi.c 是:计算S=f(f(-1.0)+f(5.0))的值。当程序正确
时,结果为:2488.000000。f(x)函数定义如下:
┌2x^2+3x+4 (x< =2)
设f(x)=│
└-2x^2+3x-4 (x >2)
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < conio.h >#include < stdio.h >#include < math.h >double
f(double x)
{ double y;
/************found************/
If (x< =2.0)
y=2.0*x*x+3.0*x+4.0;
else
y=-2.0*x*x+3.0*x-4.0;
/************found************/
return y
}
main()
{clrscr();
printf("%f\n",f(f(-1.0)+f(5.0)));
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
本题中的第一个错误:在C 语言中,命令语句应为小写字母,所以程序中语句
"If (x< =2.0)"应改为"if (x< =2.0)";
本题中的第二个错误:在C 语言中,应以分号作为语句的分隔符,所以程序中
语句"return y"应改为"return y;"。
【真题3】 请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值
返回。二维数组中的值在主函数中赋予。
例如:二维数组中的值为
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
则函数值为61。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#define M 4
#define N 5
int fun (int a[M][N])
{……}
main()
{ int aa[M][N]={{1,3,5,7,9},
{2,9,9,9,4},
{6,9,9,9,8},
{1,3,5,7,0}};
int i,j,y;
clrscr();
printf("The original data is:\n");
for (i=0;i< M;i++)
{ for(j=0;j< N;j++) printf("%6d",aa[i][j]);
printf("\n");
}
y=fun(aa);
printf("\nThe sum: %d\n",y);
printf("\n");
}
(2011年2月)
解析: 本题的考核点是c 语言中嵌套循环语句和条件判断语句的使用。
提示思路:二维数组的周边元素的特点是:它有一个下标为0 或为数组上界。
所以我们只需判断数组的下标是否为0或数组上界即可。按行、列进行循环可
以保证符合条件的元素只被运算一次。
int fun ( int a[M][N] )
{int i, j, sum = 0;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
if ((i == 0)||(i == M - 1)||(j == 0)||(j == N - 1) )/*判断a[i][j]是否
为数组中的第一行或最后一行或第一列或最后一列*/
sum += a[i][j];/*对a数组的周边元素求和*/
return sum;
}

原文链接 www.61k.com .php/archives/3549

三 : 计算机二级C语言上机题库及答案(100套)

计算机二级 c 语言上机题库及答案

内部资料,切勿外传!

.第 1 套

填空题

请补充 FUN 函数,FUN 函数的功能是求 10 的阶乘。 注意:部分源程序给出如下。

请勿改动主函数 main 和其他函数中的任何内容,

仅在 fun 函数的横线上填入所编写的若干表达式或语句。 试题程序:

#include <stdio.h>

long fun(int n)

{

}

main()

{

printf("10!=%ld\n", fun(10)); }

第 1 处填空:n>1 或 1<n

第 2 处填空:n-1

第 3 处填空:1 或 11 或 1L

改错题

下列给定程序的功能是:读入一个整数 K(2〈=K〈=10000),

打印它的所有因子(即所有为素数的因子)。例如,若输入整数 2310,则应输出:2、3、5、7、11。

请改正程序中的错误,使程序能得出正确的结果。

注意:不要改动 main 函数,不得增行或删行,也不得更改程序

的结构!

试题程序:

#include <conio.h>

#include <stdio.h>

/********found********/

IsPrime(int n);

{

int i, m;

m = 1;

/********found********/

for (i=2; i<n; i++)

if !(n%i)

{

m = 0;

break;

}

return(m);

}

main()

{

int j, k;

printf("\nplease enter an integer number between 2 and 10000:");

scanf("%d", &k);

printf("\n\nThe prime factor(s) of %d is(are):", k); for (j=2; j<k; j++)

if ((!(k%j)) && (IsPrime(j)))

printf(" %4d,", j);

printf("\n");

}

第 1 处:Isprime(int n);应改为 Isprime(int n)

第 2 处:if !(n%i)应该为 if(!(n%i))

编程题

M 个人的成绩存放在 score 数组中,请编写函数 fun,它的 功能是:返回低于平均分的认输,并将低于平均分的分数放在 below 所指的数组中。

例如,当 score 数组中的数据为 10、20、30、40、50、60、 70、80、90 时,函数返回的认输应该是 4,below 中的数据应 我 10、20、30、40。 注意:部分源程

序给出如下。

请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。

试题程序:

#include <conio.h>

#include <stdio.h>

#include <string.h>

int fun(int score[],int m, int below[])

{

}

main()

{

int i,n,below[9];

int score[9]={10,20,30,40,50,60,70,80,90}; FILE *out;

n=fun(score,9,below);

printf("\nBelow the average score are :"); out=fopen("out.dat", "w");

for(i=0;i<n;i++)

{

printf("%d ",below[i]); fprintf(out, "%d\n", below[i]);

}

fclose(out);

}

答案是:

int fun(int score[], int m, int below[]) {

int I, k=0,aver=0;

for(i=0;i<m;i++)

aver+=score[i];

aver/=m;

for(i=0;i<m;i++)

if(score[i]<aver)

{

below[k]=score[i];

k++;

}

return k; } 第 2 套

填空题

请在函数 FUN 的横线上填写若干表达式,使从键盘上输入 一个整数 N,输出斐波纳契数列。斐波纳契数列是一种整数数列, 其中每数等于前面两数之和,如:0 1 1 2 3 5 8 13…..

请勿改动主函数 main 和其他函数中的任何内容,仅在 fun 函数 的横线上填入所编写的若干表达式或语句。

试题程序:

#include <stdio.h>

int fun(int n);

main() {

int i, n = 0;

scanf("%d", &n);

for (i=0; i<n; i++)

printf("%d ", fun(i));

}

本文标题:计算机二级c语言上机题库-浙江省计算机二级考试C语言上机题库27
本文地址: http://www.61k.com/1080133.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1