浙江省计算机二级c语言上机考试真题.docx
《浙江省计算机二级c语言上机考试真题.docx》由会员分享,可在线阅读,更多相关《浙江省计算机二级c语言上机考试真题.docx(59页珍藏版)》请在冰豆网上搜索。
浙江省计算机二级c语言上机考试真题
浙江省二级c语言上机考试真题
介绍:
浙江省二级c语言考试分为笔试和上机考试两块.取笔试和上机中分数较低的那个作为计算机二级的最终成绩,最后证书上按档次划分等级,其中60-79及格,80-89良好,90-100优秀。
笔试部分分两块,一块是24道选择题(六道程序题,每题中间有四个空,每空有四个选项供选择),浙江省的计算机笔试选择题不考概念性内容,所以大家不用费心,另一块是程序编写,手写两个完整程序,一道循环数组(结合),一道是函数或指针。
上机部分分两块,一块是计算机基本操作,即从access,ppt,excel,outlook,word,网页制作,文件夹操作中随机选择四道,另一块是编程,编程题可以打开编程软件c-free来做,编程中共五道题,一道改错,两道填空,最后两道是编写程序。
(一)程序改错:
1,10个数求最大最小值
该程序中“/*****N*****/”的下一行中有错误,
请改正(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
运行时输入10个数,然后分别输出其中的最大值、最小值。
#include
voidmain()
{floatx,max,min;inti;
/********1*******/
for(i=0;i<=10;i++){
scanf("%f",&x);
/*******2********/
if(i=1){max=x;min=x;}
if(x>max)max=x;
if(x
}
printf("%f,%f\n",max,min);
}
∙#include
∙intmain()
∙{floatx,max,min;inti;
∙/********1*******/
∙for(i=1;i<=10;i++){
∙scanf("%f",&x);
∙/*******2********/
∙if(i==1){max=x;min=x;}
∙if(x>max)max=x;
∙if(x∙}
∙printf("%f,%f\n",max,min);
∙}
2,字符串反序连接
下面程序中“*****N*****”的下一行中有错误,请改正(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
输入一个字符串,将组成字符串的所有字符先按顺序存放到字符串t中,再将字符串中的字符按逆序连接到字符串t的后面。
例如:
输入"ABCD",则字符串t为"ABCDDCBA"。
#include
#include
voidfun(char*s,char*t)
{
inti,sl;
sl=strlen(s);
for(i=0;i
t[i]=s[i];
for(i=0;i
/********1********/
t[sl+i]=s[sl-i];
/********2********/
t[sl]="\0";
}
voidmain()
{
chars[100],t[100];
scanf("%s",s);
fun(s,t);
printf("%s",t);
}
∙#include
∙#include
∙voidfun(char*s,char*t)
∙{
∙inti,sl;
∙sl=strlen(s);
∙for(i=0;i∙t[i]=s[i];
∙for(i=0;i∙t[sl+i]=s[sl-1-i];
∙/********2********/
∙t[2*sl]='\0';
∙}
∙voidmain()
∙{
∙chars[100],t[100];
∙scanf("%s",s);
∙fun(s,t);
∙printf("%s",t);
∙}
3,求n的所有质数因子
下面程序中“/*****N*****/”的下一行中有错误,请改正(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
运行时输入n,输出n的所有质数因子(如n=13860,则输出2、2、3、3、5、7、11)。
#include
voidmain()
{intn,i;
scanf("%d",&n);
/******1******/
i=1;
while(n>1)
if(n%i==0){
printf("%d\t",i);
n/=i;
}
else
/********2*******/
n++;
}
∙#include
∙voidmain()
∙{intn,i;
∙scanf("%d",&n);
∙/******1******/
∙i=2;
∙while(n>1)
∙if(n%i==0){
∙printf("%8d",i);
∙n/=i;
∙}
∙else
∙/********2*******/
∙i++;
∙}
4,数字转字符
下面程序中“/*****N*****/”的下一行中有错误,请改正(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
用递归法将一个六位整数n转换成字符串,例如输入123456,应输出字符串"123456"。
#include
voiditoa(longi,char*s)
{
if(i==0)
return;
/******1******/
*s='1'+i%10;
itoa(i/10,s-1);
}
voidmain()
{
longn;
charstr[7]="";
scanf("%ld",&n);
/******2******/
itoa(n,str+6);
printf("%s",str);
}
∙#include
∙voiditoa(longi,char*s)
∙{
∙if(i==0)
∙return;
∙/******1******/
∙*s='0'+i%10;
∙itoa(i/10,s-1);
∙}
∙intmain()
∙{
∙longn;
∙charstr[7]="";
∙scanf("%ld",&n);
∙/******2******/
∙itoa(n,str+5);
∙printf("%s",str);
∙}
6,删除非英文字母
下面程序中“*****N*****”的下一行中有错误,请改正(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
例如:
输入"abc123+xyz.5",应输出"abcxyz"。
#include
#include
voidmain()
{
charstr[256];
inti,j,k=0,n;
gets(str);
n=strlen(str);
for(i=0;i
/********1********/
if(str[i]>='a'&&str[i]<='z')
{
/********2********/
str[k]=str[i];i++;
}
str[k]='\0';
printf("%s\n",str);
}
∙#include
∙#include
∙voidmain()
∙{charstr[256];
∙inti,j,k=0,n;
∙gets(str);
∙n=strlen(str);
∙for(i=0;i∙/********1********/
∙if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
∙{
∙str[k]=str[i];k++;
∙}
∙str[k]='\0';
∙printf("%s\n",str);
∙}
7,距离坐标原点
下面程序中“/*****N*****/”的下一行中有错误,请改正(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。
#include"stdio.h"
#include"math.h"
#include"stdlib.h"
voidmain()
{
inti,n;
/*****1*****/
structaxy{floatx;floaty;}a[n];
scanf("%d",&n);
a=(float*)malloc(n*2*sizeof(float));
for(i=0;i
/*****2*****/
scanf("%f,%f",a[i].x,a[i].y);
for(i=0;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);
}
#include
#include
#include
voidmain()
{
inti,n;
/*****1*****/
structaxy{floatx,y;}a;
scanf("%d",&n);
a=(float*)malloc(n*2*sizeof(float));
for(i=0;i/*****2*****/
scanf("%f%f",a[i].x,a[i].y);
for(i=0;iif(sqrt(a[i].x*a[i].x+a[i].y*a[i].y)<=5)
printf("%f,%f\n",a[i].x,a[i].y);
}
**试题本身有错误,a=(structaxy*)malloc(n*2*sizeof(float));
8,多项式值
下面程序中“/*****N*****/”的下一行中有错误,请改正(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
输入x和正数eps,计算多项式1-x+x*x/2!
-x*x*x/3!
+...的和直到末项的绝对值小于eps为止。
#include
#include
voidmain()
{floatx,eps,s=1,t=1,i=1;
scanf("%f%f",&x,&eps);
do{
/*****1*****/
t=-t*x/++i;
s+=t;
/*****2*****/
}while(fabs(t)
printf("%f\n",s);
}
∙#include
∙#include
∙intmain()
∙{floatx,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);
∙}
9,n个3和
下面程序中“/*****N*****/”的下一行中有错误,请改正(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
运行时若输入a、n分别为3、6,则输出下列表达式的值:
3+33+333+3333+33333+333333
#include
voidmain()
{inti,a,n;longt=0;
/*********1*******/
ints=0;
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++){
/*******2******/
t=(i-1)*10+a;
s=s+t;
}
s=s*a;
printf("%ld\n",s);
}
∙#include
∙intmain()
∙{inti,a,n;longt=0;
∙/*********1*******/
∙longs=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);
∙}
10,10升排序
下面程序中“/*****N*****/”的下一行中有错误,请改正(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
用选择法对10个整数按升序排序。
#include"stdio.h"
#defineN10
voidmain()
{
inti,j,min,temp;
inta[N]={5,4,3,2,1,9,8,7,6,0};
printf("\nThearrayis:
\n");/*输出数组元素*/
for(i=0;i
printf("%5d",a[i]);
for(i=0;i
{
min=i;
for(j=i+1;j
/******1******/
if(a[min]<=a[j]){
/******2******/
temp=a[min];a[min]=a[j];a[j]=temp;}/*数据交换*/
}
printf("\nThesortednumbers:
\n");/*输出排序结果*/
for(i=0;i
printf("%5d",a[i]);
printf("\n");
}
∙#include"stdio.h"
∙#defineN10
∙intmain()
∙{
∙inti,j,min,temp;
∙inta[N]={5,4,3,2,1,9,8,7,6,0};
∙printf("\nThearrayis:
\n");/*?
?
?
?
?
?
?
?
?
?
?
?
*/
∙for(i=0;i∙printf("%5d",a[i]);
∙for(i=0;i∙{
∙min=i;
∙for(j=i+1;j∙/******1******/
∙if(a[min]>=a[j]){
∙/******2******/
∙temp=a[min];a[min]=a[j];a[j]=temp;}/*?
?
?
?
?
?
?
?
*/
∙}
∙printf("\nThesortednumbers:
\n");/*?
?
?
?
?
?
?
?
?
?
?
?
*/
∙for(i=0;i∙printf("%5d",a[i]);
∙printf("\n");
∙}
(二)程序填空
1,求最大公约数
下面程序中"____N____"是根据程序功能需要填充部分,请完成程序填充(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
输入m、n(要求输入数均大于0),输出它们的最大公约数。
#include
voidmain()
{intm,n,k;
while(scanf("%d%d",&m,&n),_______1______);
for(____2____;n%k!
=0||m%k!
=0;k--);
printf("%d\n",k);
}
∙#include
∙voidmain()
∙{intm,n,k;
∙while(scanf("%d%d",&m,&n)!
=EOF&&m<=0||n<=0);
∙{for(k=m;n%k!
=0||m%k!
=0;k--);
∙printf("%d\n",k);
∙}
∙}
2,分别统计字符串中各字符
下面程序中"____N____"是根据程序功能需要填充部分,请完成程序填充(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
分别统计字符串中英文字母、数字和其他字符出现的次数。
#include
#include
voidmain()
{chara[80];intn[3]={0},i;
gets(a);
for(i=0;a[i]!
='\0';i++)
{if(/*-------1---------*/)/*统计字母个数*/
n[0]++;
elseif(/*------2------*/)/*统计数字个数*/
n[1]++;
else
n[2]++;
}
for(i=0;i<3;i++)printf(/*------3------*/);
}
∙#include
∙#include
∙intmain()
∙{chara[80];intn[3]={0},i;
∙gets(a);
∙for(i=0;a[i]!
='\0';i++)
∙{if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z')
∙n[0]++;
∙elseif(a[i]>='0'&&a[i]<='9')
∙n[1]++;
∙else
∙n[2]++;
∙}
∙for(i=0;i<3;i++)printf("%d\n",n[i]);
∙}
3,求相邻两元素和
下面程序中"____N____"是根据程序功能需要填充部分,请完成程序填充(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
求出a中各相邻两个元素的和,并将这些和存放在数组b中,按每行3个元素的形式输出。
例如:
b[1]=a[1]+a[0],…………,b[9]=a[9]+a[8]。
#include
voidmain()
{
inta[10],b[10],i;
printf("\nInput10numbers:
");
for(i=0;i<10;i++)/*数组输入*/
scanf("%d",&a[i]);
for(i=1;i<10;i++)
b[i]=_______1_____;/*计算b数组中的元素*/
for(i=1;i<10;i++)
{
printf("%3d",b[i]);
if(_____2_______)printf("\n");/*每行打印3个数据*/
}
}
∙#include
∙voidmain()
∙{
∙inta[10],b[10],i;
∙printf("\nInput10numbers:
");
∙for(i=0;i<10;i++)
∙scanf("%d",&a[i]);
∙for(i=1;i<10;i++)
∙b[i]=a[i]+a[i-1];
∙for(i=1;i<10;i++)
∙{
∙printf("%3d",b[i]);
∙if(i%3==0)printf("\n");
∙}
∙}
4求数字和
下面程序中"____N____"是根据程序功能需要填充部分,请完成程序填充(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。
#include
#include
voidmain()
{
intn,s=0;
scanf("%d",&n);
______1______
while(n!
=0){
______2______
n=n/10;
}
printf("%d\n",s);
}
∙#include
∙#include
∙voidmain()
∙{
∙intn,s=0;
∙scanf("%d",&n);
∙if(n<0){n=-n;}
∙while(n!
=0){
∙s=s+n%10;
∙n=n/10;
∙}
∙printf("%d\n",s);
∙}
5,求整数位数
下面程序中"____N____"是根据程序功能需要填充部分,请完成程序填充(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
输入1个整数后,输出该数的位数(若输入3214则输出4,输入-23156则输出5)。
#include
voidmain()
{intn,k=0;
scanf("%d",&n);
while(n!
=0){
k++;
n=n/10;
}
printf("%d\n",k);
}
∙#include
∙voidmain()
∙{intn,k=0;
∙scanf("%d",&n);
∙while(n!
=0){
∙k++;
∙n=n/10;
∙}
∙printf("%d\n",k);
∙}
6,数列2项和
下面程序中"____N____"是根据程序功能需要填充部分,请完成程序填充(注意:
不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
数列的第1、2项均为1,此后各项值均为该项前二项之和。
计算数列第30项的值。
#include
longf(intn);
voidmain()
{
printf("%ld\n",_____1____);
}
longf(intn)
{
if(_______2______)
return1;
else
return______3_____;
}
∙#include