计算机二级C程序设计上机模拟题

更新时间:2023-09-02 11:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

浙江省, 计算机, 程序设计, 上机, 模拟

第三部分 C程序设计上机模拟题

(一) 上机修改题

1. 在考生目录下,有Modify.c程序,该程序中”/******N******/”的下一行中

有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:输入m、n(要求输入数均大于0),输出它们的最小公倍数 /*find the lease common multiple of m and n*/

#include <stdio.h>

void main()

{ int m,n,k;

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

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

for(k=m;k%n!=0;)

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

k=k+m%n; // k=k+m

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

}

2.

有错误,

3+33+333+3333+33333+333333

#include <stdio.h>

void main()

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

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

s=0; // int 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("%d\n",s);

}

3.

有错误,

#include <stdio.h>

#include <math.h> 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:运行时若输入a、n分别为3、6,则输出下列表达式的值: 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:运行时输入n,输出n各位数字之和(如n=1308则输出12,n=-3204 则输出9)。

void main()

{ int n,s=0;

scanf("%d",&n);

n=fabs(n);

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

while(n>1) { // n

s=s+n%10;

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

n=n%10; // n=n/10;

}

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

}

4.

有错误,

#include <stdio.h>

void main()

{ char x[80],y[26]; int i,j,ny=0;

gets(x);

for(i=0;x!='\0';i++)

if(x>='A'&&x<='Z') {

for(j=0;j<ny;j++)

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

if(y==x[j]) continue; // if(y[j]==x) break;

if(j==ny) { y[ny]=x; ny++; }

}

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

for(i=0;i<26;i++) // i<ny

printf("%c ",y);

printf("\n");

}

5.

项的

#include <stdio.h>

#include <math.h>

void main( )

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

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

do{ /***** 1 ****/ 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:输入1个字符串,输出其中所出现过的大写英文字母。如运行时输入字符串"FONTNAME and FILENAME",应输出"F O N T A M E I L"。 在考生目录下,有Modify.c程序,该程序中"/***** N ****/"的下一行 中有错误, 请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入x、eps,计算多项式1-x+x*x/2!-x*x*x/3!+...的和直到末绝对值小于eps为止。

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

s += t;

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

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

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

}

6. 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下

一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:分别统计字符串中所有英文字母中的各元音字母个数。 #include <stdio.h>

#include <ctype.h>

void main()

{ char a[80]; int n[5]={0},i;

gets(a);

for(i=0; a!=’\0’; i++)

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

switch(tolower(a+i)) { // switch(tolower(a))

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]++; break; // ‘u’

}

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

}

7. 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下

一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负) 该程序功能:输入n(0<n<10)后,输出1个数字金字塔。如输入n为4, 则输出:

1

222

33333

4444444

#include <stdio.h>

void main()

{ int i,j,n;

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

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

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

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

putchar(' ');

for(j=1;j<=2*i-1;j++)

putchar((char)(i+48));

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

putchar(\n); // ‘\n’

}

}

8. 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中 有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:运行时输入10个数,然后分别输出其中的最大值、最小值。 #include <stdio.h>

void main()

{ float x,max,min;

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

for(int i=1;i<=10;i++) { // C中不能这样用, 改为:int i; for( i=1; i<=10; i++)

scanf("%f",&x);

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

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

if(x>max) max=x;

if(x<min) min=x;

}

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

}

9. 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中有错误,

请改正(注意:不得加行、减行、加句、减句,否则后果自负)。

该程序功能:运行时输入n,输出n的所有质数因子(如n=13860,则输出2、2、3、3、

5、7、11)。

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

}

10. 在考生目录下,有Modify.c程序,该程序中“/***** N *****/”的下一行中有错误,

请改正(注意:不得加行、减//行、加句、减句,否则后果自负)。

该程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的

大写字母后,输出该字符串。

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void main()

{ int n,i;

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

char str; // char *str

scanf("%d\n",&n); str=(char*)malloc(n); gets(str);

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

for(i=1;i<strlen(str);i++) // i=0

if(str>='a'&& str<='z') str=str-32 ;

puts(str);

}

1.

需要

自负)。

#include <stdio.h>

void main()

{ int m,n,k;

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

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

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

}

2.

需要填充

#include <stdio.h>

#include <math.h>

int f(int n)

{ int 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);

} (二) 上机填充题 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果该程序功能:输入m、n(要求输入数均大于0),输出它们的最大公约数。 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:函数f将1个整数首尾倒置,程序输出结果应为"54321 -76543"。

void main()

{ printf("%d\t",f(12345)); printf("%d\n",f(-34567)); }

3. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充

部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:输入1个整数后,输出该数的位数若输入3214则输出4,输入-23156

则输出5)。

#include <stdio.h>

void main()

{ int n,k=0;

scanf("%d",&n);

while( 1 ) { // n%10

k++;

2 ; // n=n/10

}

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

}

4. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充

部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:运行时输出下列结果。

abcdefg

abcde

abc

a

#include <stdio.h>

void main()

{ int i,j; char k;

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

for(j=1;j<i;j++) putchar(' ');

1 ; // k=’a’

for(j=9-2*i;j>0;j--) {

k=(char)k++;

printf(“%c”, 2 ); // k-1

}

putchar('\n');

}

}

5. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充

部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:输入整数n(n>0)求m,使得2的m次方小于或等于n、2的m+1次方大于或等于n。

#include <stdio.h>

void main()

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

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

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

_____ 2 _____ // t=t*2;

i++;

}

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

}

6.

需要填充

#include <stdio.h>

#include <math.h>

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

void main() //

{ int i; float max;

_____ 1 _____ // max=f(1);

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

______ 2______ // if(f(i)>max) max=f(i);

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

}

7.

需要填充

#include <stdio.h>

void f(int *a,int *m)

{ int i,j;

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

if(a<0) {

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

_____1_____; // *m=*m-1;

}

}

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

printf("\n");

} 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。 运行结果:49.455978 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:函数f除去数组中的负数,输出结果为:1 3 4 6

8. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充

部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:输入n和平面上n个点的坐标,计算各点间距离的总和。 #include <stdio.h>

#include <math.h>

#define f(x1,y1,x2,y2) sqrt(pow(x2-x1,2)+pow(y2-y1,2))

1 // #include <malloc.h> 或 #include <stdlib.h>

void main()

{ float *x,*y,s=0; int i,j,n;

scanf("%d",&n);

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

y=x+ 2 ; // n

for(i=0;i<n;i++) scanf("%f%f",x+i,y+i);

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

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

s+=f(x,y,x[j],y[j]);

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

}

9.

需要填充

#include <stdio.h>

float f( 1 ) // float **x, int m, int n //

{ float y=0; int i,j;

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

y=y+*(*(x+i)+j);

return y;

}

void main()

{ float a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*b[3];

int i;

for(i=0;i<3;i++) b= 2 ; // &a[0]

printf("%.2f\n",f(b,3,4));

}

10.

能需要填充

#include <stdio.h>

float f(float *x,int n,int flag) //

{ float y; int i;

1 ; // y=x[0] 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:调用函数f,求二维数组a中全体元素之和。 运行结果:78.00 或 a 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:调用函数f,求a数组中最大值与b 数组中最小值之差。 运行结果:11

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

if(flag*x>flag*y)

y=x;

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,1) - 2 ) ); // f(b,5,-1)

}

11.

能需要填充

1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x

#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*t;

}

2 ; // return y

}

12.

能需要填充

#include <stdio.h>

#include <math.h> //

int f(float a,float b,float c,float *x1,float *x2)

{ if(b*b-4*a*c<0) 1 ; // 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( 2 )) printf("

else printf("%.2f %.2f\n",u1,u2);

} 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f计算代数多项式 当x=1.7时的值。 运行结果:81.930756 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f用以求1元2次方程 x*x+5*x-2=0 的实根。 运行结果:0.37 -5.37 实数范围内无解\n"); // f(a,b,c,&u1,&u2)

13. 在考生目录下,有Modify2.c程序,该程序中"____ N ____"是根据程序功能需要填充

部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:函数f将数组循环左移k个元素,输出结果为:4 5 6

7 1 2 3

#include <stdio.h>

void f(int *a,int n,int k)

{ int i,j,t;

for(i=0;i<k;i++) {

1 ; // t=a[0]

for( 2 ) // j=1;j<n;j++

a[j-1]=a[j];

a[n-1]=t;

}

}

void main()

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

f( x , 7 , 3);

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

printf("%5d",x);

printf("\n");

}

14. 在考生目录下,有Modify.c程序,该程序中"____ N

____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句

,否则后果自负)。该程序功能:调用函数f,将字符串中的所有字符逆序存放,然后输出。例如,

输入字符串为"123456",则程序的输出结果为"654321"。

#include <stdio.h>

#include <string.h>

void main()

{ char s[60],*f(char*);

gets(s);

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

}

1 f(char* x) // char *

{ char t; int i,n;

2 ; // n=strlen(x)

for(i=0;i<n/2;i++) {

t=x; x=x[n-1-i]; x[n-1-i]=t;

}

return x;

}

15. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功

能需要填充

部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:调用函数f,从字符串中删除所有的数字字符。

#include <stdio.h>

#include <string.h>

#include <ctype.h>

void f(char *s)

{ int i=0;

while(s!='\0')

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

else 2 ; // i++

}

void main()

{ char str[80];

gets(str);

f(str);

puts(str);

}

16. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填

充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。

该程序功能:输出6~1000之间的完数(1个数的因子和等于其自身的数:6=1+2+3、

28=1+2+4+7+14,则6、28都是完数)。

#include <stdio.h>

void main() // 运行结果:6 28 496

{ int i,j,s;

for(i=6;i<=1000;i++) {

1 ; // s=0;

for(j=1; 2 ;j++) // j<i

if(i%j==0)

s+=j;

if(s==i) printf("%d\n",s);

}

}

TOP

天涯海角 发短消息

加为好友

天涯海角 当前离线

UID2 帖子34329 主题8167 精华30 积分183978 经验37043 点 威望11 点 和山币74943 个 魅力34905 点

贡献0 点 阅读权限200 性别男 在线时间13855 小时 注册时间2005-9-16 最后登录2012-2-22

和山论坛管理员

UID2 帖子34329 主题8167 和山币74943 个 贡献0 点 性别男 注册时间2005-9-16 板凳

发表于 2008-4-18 16:32 | 只看该作者

(三)上机编程题

1. 程序设计题:考生目录下有Design.c程序,请完成以下功能:

z=f(x,y)=(3.14*x-y)/(x+y),若x、y取值为区间[1,6]的整数,找出使z取最小值

的x1、y1,并将x1、y1以格式"%d,%d"写入到考生目录下,新建文件design.dat。

#include <stdio.h>

void main()

// 运行结果:x1=1, y1=6

{

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

int x,y,x1,y1;

/* 此处起要求考生自己编制程序 */

min=100;

if((p=fopen("design.dat","w"))==NULL)

{

printf("cannot open in FILE\n");

exit(0);

}

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

fprintf(p, “%d,%d”,x1,y1);

fclose(p);

}

float f(float u,float v)

{

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

}

2.

程序设计题:函数root返回满足条件f(a)*f(b)<0的方程在[a,b]区间内的1个实

根。在区间[2,5]、限差为0.00001。用区间对分法求解,将方程 x*x-5sin(x)-4=0

的根以格式"%9.6f"写入到考生目录下新建的文件design.dat?

#include <stdio.h>

#include <math.h>

// 运行结果:2.580667

float g(float x)

{

return x*x-5*sin(x)-4; }

float root(float a,float b,float eps,float(*f)(float))

{

float c;

while(c=(a+b)/2,fabs(f(c))>=eps&&fabs(b-a)>=eps)

if(f(a)*f(c)<0)

b=c;

else

a=c;

return c;

}

void main()

{

/* 此处起要求考生自己编制程序 */

float a=2,b=5,c,(*f)(float);

FILE

*fp;

if((fp=fopen(”design.dat”,”w”))==NULL)

{

printf(”Cannt open FILE”);

exit(0);

}

f=g;

c=root(a,b,1e-5,f);

fprintf(fp,”%9.6f”,c);

fclose(fp);

}

3.

程序设计题:考生目录下有Design.c程序,请完成以下功能: x,y表示点d(i) 的平面坐标,求d(0)至d(1)、d(1)至d(2)、...、d(4)至d(0)的连线所构成的

5边形面

积,并将所求面积以格式"%.4f"写到考生目录下新建文件design.dat。

#include <stdio.h>

d(0)

d(1)

d(2)

d(4)

d(3)

#include <math.h>

void main()

{

FILE *p;

int i;

float s,a,b,c,sdim=0;

float x[5]={-4.5,0.5,4.2,2.7,-3};

float y[5]={2.3,4.7,1.3,-2.5,-3.3};

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

/* 此处起要求考生自己编制程序 */

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

{

a=sqrt((x[0]-x)*(x[0]-x)+(y[0]-y)*(y[0]-y));

b=sqrt((x-x[i+1])* (x-x[i+1])+(y-y[i+1])*(y-y[i+1]));

c=sqrt((x[0]-x[i+1])* (x[0]-x[i+1])+(y[0]-y[i+1])*(y[0]-y[i+1]));

s=(a+b+c)/2;

sdim+=sqrt(s*(s-a)*(s-b)*(s-c));

}

fprintf(p,"%.4f",sdim);

// 运行结果:46.7800

fclose(p);

}

4.程序设计题:考生目录下有Design.c程序,请完成以下功能:对x=1,2,...,10,

求函数f(x)=x-10*cos(x)-5*sin(x)的最大值,并将该数以格式"%.3f"写到考生目录下新建

文件design.dat。 下载 (5.03 KB)

2008-4-18 16:32

#include <stdio.h>

#include <math.h>

void main()

// 运行结果:21.111

{

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

/* 此处起要求考生自己编制程序 */

if((p=fopen("design.dat","w"))==NULL)

{

printf("cannot open in FILE\n");

exit(0);

}

max=f(1);

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

if(max<f(x))

max=f(x);

fprintf(p,

fclose(p);

}

float f(float y)

{

y=y-10*cos(y)-5*sin(y);

return (y);

}

5.

中的所有

#include <stdio.h>

#include <string.h>

”%.3f”,max); 程序设计题:考生目录下有Design.c程序,请完成以下功能:将字符串s字符按ASCII值从小到大重新排序后,将排序后的字符串写入到考生目录下新的文件design.dat。

void main()

// 运行结果:%,.2346@QS\w|

{

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

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

/* 此处起要求考生自己编制程序 */

if((p=fopen("design.dat","w"))==NULL)

{

printf("cannot open in FILE\n");

exit(0);

}

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

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

if(*(s+i)>*(s+j))

{

c=*(s+i); *(s+i)=*(s+j); *(s+j)=c; }

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

fputc(s,p);

fclose(p);

}

6. 程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x、y表示

平面上某点坐标,统计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 <stdio.h>

#include <math.h>

// 运行结果:3

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

/* 此处起要求考生自己编制程序 */

if((p=fopen("design.dat","w"))==NULL)

{

printf("cannot open in FILE\n");

exit(0);

}

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

if((sqrt((x-1)*(x-1)+(y+0.5)*(y+0.5))<=5)&&

sqrt(((x-0.5)*(x-0.5)+(y*y))<=6))

k++;

本文来源:https://www.bwwdw.com/article/35ai.html

Top