上海计算机等级考试二级CB卷.docx
《上海计算机等级考试二级CB卷.docx》由会员分享,可在线阅读,更多相关《上海计算机等级考试二级CB卷.docx(20页珍藏版)》请在冰豆网上搜索。
上海计算机等级考试二级CB卷
2015二级C(B卷)
一、单项选择题(答案在最后)
二、填空题(答案在最后)
程序功能:
输入一个正整数,将其各位上为偶数得数字去除,剩余得数按原来从高位到低位得顺序组成一个新得数,并将其输出到文件out1、txt中。
例如,输入:
134456779,输出到文件:
135779、
代码:
#include
intmain(void)
{
longn;
intk,i=1;
int_____
(1)_____;
FILE *fp;
fp=fopen("out1.txt","w");
scanf("%ld",&n);
while (_____(2)_____)
{
k=_____(3)_____;
n= n/10;
if(k%2== 1)
{
z= z+k*i;
i = 10*i;
}
}
fprintf(fp,”%d\n”,z);
_____(4)_____; /* 关闭文件*/
return 0;
}
程序功能:
从键盘输入一个字符串与一个字符,统计字符串中该字符出现得次数,并输出结果、例如,输入字符串:
aBEddfghDdd,输入字符:
d,输出结果:
4。
代码:
#include<stdio。
h〉
intnum(char str[])
{
charch;
inti=0,count=0;
printf("输入字符:
");
scanf("%c",&ch);
while(_____(1)_____ )
{
if(_____
(2)_____)
count++;
i++;
}
returncount;
}
intmain(void)
{
char str[80];
intn;
printf(”输入字符串:
");
gets(_____(3)_____);
n=_____(4)_____;
printf("输出结果:
%d\n",n);
return 0;
}
三、操作题
(一)程序调试题(3小题,第1、2小题各3处错,第3小题4处错,每错误点3分,共30分)
1. 程序调试题1
调试要求:
下列程序(C:
\KS\B_2_1。
c)包含3个错误,请按题中得功能要求,调试并修改该程序(在所修改语句后加/*******/字样得注释),使其运行能得到正确得结果、将程序结果(包括B_2_1、c文件与B_2_1。
EXE文件)保存到目录C:
\KS\中。
功能说明:
输入某人某一个月得月收入(在2500元到8000元之间),计算并输出该月份她应缴得个人所得税。
个人所得税采用分段计算方法计算,具体为:
月收入不超过3500元(含3500元,以下同)免税;月收入超过3500元但不超过5000元得,超过部分得税率为3%;月收入超过5000元但不超过8000元得,超过5000元部分得税率为10%。
运行示例:
输入:
请输入月收入:
7000
输出:
个人所得税为:
245.00
说明:
月收入7000元中3500元免税,1500元得税利为3%,2000元得税利为10%、
含错误源程序:
#include <stdio。
h>
intmain(void)
{
floatsalary,tax;
printf(”请输入月收入:
");
scanf("%d",&salary);
if(salary<=3500) tax=0
else if (salary<=5000) tax=(salary—3500)*0、03;
elsetax=1500*0。
03+(salary-3500)*0。
1;
printf("个人所得税为:
%.2f\n",tax);
return 0;
}
参考答案:
#include〈stdio.h>
intmain(void)
{
floatsalary,tax;
printf("请输入月收入:
”);
scanf("%f”,&salary);/*******/
if(salary<=3500) tax=0;/*******/
else if(salary<=5000)tax=(salary-3500)*0。
03;
else tax=1500*0、03+(salary—5000)*0、1; /*******/
printf("个人所得税为:
%。
2f\n”, tax);
ﻩreturn0;
}
2. 程序调试题2
调试要求:
下列程序(C:
\KS\B_2_2。
c)包含3个错误,请按题中得功能要求,调试并修改该程序(在所修改语句后加/*******/字样得注释),使其运行能得到正确得结果。
将程序结果(包括B_2_2。
c文件与B_2_2、EXE文件)保存到目录C:
\KS\中。
功能说明:
自定义一个表示分数得结构体类型,在主函数中输入两个分数,通过调用函数计算两个分数得与,最后在主函数中输出计算得结果(不化简)。
运行示例:
含错误源程序:
#include〈stdio、h〉
structFrac
{intMol;
intDen;
};
structadd(structFrac a,structFrac b)
{structFracc;
c、Mol=a。
Mol*b、Den+a、Den*b。
Mol;
c.Den=a、Den+b、Den;
returnc;
}
intmain(void)
{struct Fracn,m,t;
printf("请输入第一个分数:
”);
scanf("%d/%d",&n.Mol,&n、Den);
printf("请输入第二个分数:
");
scanf("%d/%d”,&m、Mol,&m、Den);
t=struct add(n,m);
printf("%d/%d+%d/%d=%d/%d\n”,n、Mol,n.Den,m、Mol,m。
Den,t。
Mol,t.Den);
return0;
}
参考答案:
#include〈stdio、h〉
struct Frac
{intMol;
int Den;
};
struct Fracadd(structFrac a,structFracb)/*******/
{ structFracc;
c。
Mol=a。
Mol*b.Den+a。
Den*b。
Mol;
c、Den=a、Den*b、Den; /*******/
return c;
}
intmain(void)
{struct Fracn,m,t;
printf("请输入第一个分数:
");
scanf("%d/%d”,&n、Mol,&n、Den);
printf("请输入第二个分数:
");
scanf(”%d/%d",&m、Mol,&m.Den);
t= add(n,m); /*******/
printf("%d/%d+%d/%d=%d/%d\n",n。
Mol,n。
Den,m、Mol,m.Den,t、Mol,t、Den);
return 0;
}
3、程序调试题3
调试要求:
下列程序(C:
\KS\B_2_3.c)包含4个错误,请按题中得功能要求,调试并修改该程序(在所修改语句后加/*******/字样得注释),使其运行能得到正确得结果。
将程序结果(包括B_2_3.c文件与B_2_3、EXE文件)保存到目录C:
\KS\中。
功能说明:
输入两个由整型数构成得集合(元素个数均为5)分别放到数组A与B中,求这两个集合得交集(交集得元素由两个集合中得相同元素构成),最后输出交集中得元素。
运行示例:
含错误源程序:
#include〈stdio.h>
void inter(int s1[],ints2[],ints3[]);
intmain(void)
{
inta[5],b[5],c[5];
int i,n;
printf("请输入第一个集合内容,5个整型数\n");
for(i=0;i〈5;i++)
scanf("%d”,&a[i]);
printf("请输入第二个集合内容,5个整型数\n");
for(i=0;i〈5;i++)
scanf(”%d",&b[i]);
n=inter(a,b,c);
printf("A,B交集元素为:
\n”);
for(i=0;i〈5;i++)
printf("%4d",c[i]);
printf("\n");
return0;
}
intinter(ints1[],ints2[],ints3[])
{int j,i=k=0;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if (s1[i]==s2[j])break;
if(j<5)s3[k]=s1[i];
}
returnk;
}
参考答案:
#include〈stdio。
h〉
intinter(int s1[],ints2[],ints3[]); /*******/
intmain(void )
{
int a[5],b[5],c[5];
inti,n;
printf("请输入第一个集合内容,5个整型数\n");
for(i=0;i<5;i++)
ﻩ scanf("%d”,&a[i]);
printf(”请输入第二个集合内容,5个整型数\n");
for(i=0;i<5;i++)
scanf("%d",&b[i]);
n=inter(a,b,c);
printf(”A,B交集元素为:
\n");
for(i=0;i<n;i++) /*******/
ﻩprintf("%4d”,c[i]);
printf(”\n");
return0;
}
int inter(ints1[],ints2[],ints3[])
{ intj,i,k=0; /*******/
for(i=0;i<5;i++)
{
for(j=0;j〈5;j++)
if(s1[i]==s2[j]) break;
ﻩif(j<5)s3[k++]=s1[i] ; /*******/
}
return k;
}
(二)编程题(2小题,共35分,其中第1小题15分,第2小题20分)
1、编程题1
编程要求:
请按题中得功能要求,编写程序并能得到正确得结果、将程序结果(包括B_4_1。
c文件与B_4_1。
EXE文件)保存到目录C:
\KS\中。
程序功能:
按示例格式完成以下要求。
(1)ﻩ输入10个整数(存入数组a),再输入整数x、
(2)输出数组a中大于等于x得所有元素。
运行示例:
输入:
22 55669944 33 77 110 88 60
输出:
669977 88
参考答案:
#include#defineN10
intmain(void)
{
inta[N],i,x;
for (i=0;i scanf(”%d",&a[i]);
scanf("%d”,&x);
for (i=0;i<N;i++)
if(a[i]>=x)
printf("%d",a[i]);
printf("\n");
}
2、编程题2
编程要求:
请按题中得功能要求,编写程序并能得到正确得结果、将程序结果(包括B_4_2.c文件与B_4_2。
EXE文件)保存到目录C:
\KS\中、
程序功能:
按示例格式完成以下要求(验证数学上考拉兹猜想:
任意一个大于1正整数,连续进行特定运算,经有限步骤后,计算结果得到1)。
(1)输入整数n,如果n小于2,输出"Error”并结束运行。
(2)如果整数n为偶数,计算n/2,否则计算3*n+1,生成新得整数(仍存为n)。
(3)ﻩ如果生成得整数结果等于1,则结束运行,否则重复步骤
(2)与(3)。
运行示例1:
输入:
12
输出:
[12]{1}6{2}3 {3}10{4}5 {5}16{6}8{7}4{8}2{9}1
说明:
输入12,第1次计算生成6,第2次计算生成3,……,第9次计算生成1。
示例中{1}、{2}至{9}为生成得次数标记,[]、{}与间隔空格都必须保留。
运行示例2:
输入:
0
输出:
Error
说明:
输入为0、1或负数,输出"Error"、
参考答案:
#include〈stdio.h>
intmain(void)
{
longn;
inti,j;
scanf("%ld",&n);
if(n<=0)
{
printf(”Error\n");
return-1;
}
printf("[%ld]",n);
for (i=1;1;i++)
{
if(n%2==0)
n=n/2;
else
n =3*n+1;
printf("{%d}%ld",i,n);
if (n==1)
break;
}
printf("\n”);
return0;
}
二级C程序设计B 场参考答案
一、单选题
1。
Dﻩ2。
D3.B4、 Bﻩ5。
B6、C7。
D8. Aﻩ9。
Dﻩ10。
C
二、程序填空题参考答案
1、 ﻩ1):
【z=0】
2):
【n!
=0】【n】【n〉0】【n>=1】
3):
【n%10】【k=n%10】【n—n/10*10】
4):
【fclose(fp)】
2、1):
【str[i]!
='\0'】【str[i]】【str[i]!
=0】【i2):
【str[i]==ch】【ch==str[i]】
3):
【str】
4):
【num(str)】
三、改错题
四、编程题