江苏二级C历年上机Word下载.docx
- 文档编号:22466801
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:26
- 大小:26.10KB
江苏二级C历年上机Word下载.docx
《江苏二级C历年上机Word下载.docx》由会员分享,可在线阅读,更多相关《江苏二级C历年上机Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
’
voidfun1(intm,intn,intb[])
{
inti,k=0;
if(m>
n)return0;
for(i=m*m;
n*n;
i++)
if(prime(i))b[k++]=i;
voidmain()
{inta[50]={0},b[100]={0},i,m,k,j,n;
printf("
"
);
scanf("
%d"
&
n);
m=fun(a,n);
for(i=O;
m-1;
{k=fun1(a[i],a[i+1],b[O]);
%d~%d
k=%d"
a[i],a[i+1],k);
if(k<
4){printf("
false"
break;
}
for(j=0;
j<
k;
j++)
{if(j%10=O)prinff("
\n"
%5d"
b[j]);
}
getch();
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)保存在T:
盘根目录中供阅卷使用,否则不予评分。
二、编程题(24分)
在给定范围内查找k使得用公式k^2+k+17生成的整数满足以下条件:
该数的十进制表示中低3位数字相同,去掉低3位后的整数是回文数。
例如,当k=461时用公式生成的整数
是212999,该数满足所给条件。
【编程要求】
1.编写函数intfindnum(intn1,intn2,longa[][2])实现以下功能:
k依次取n1~n2范围
内的每个整数,分别用每个k及公式k2+k+17生成整数y,若y满足给定条件,则将k值及y
值保存到a指向的数组中,函数返回a数组中k的个数。
2.编写函数main实现以下功能:
声明二维数组a和变量n1、n2,输入两个整数并保存到
n1、n2中,用n1、n2及a数组作实参调用findnum函数,按所给格式输出a数组中的数据到屏
幕及文件myf2.out中。
最后将考生本人的准考证号输出到文件myf2.out中。
n1=1,n2=10000
k
number
461
212999
586
343999
3839
14741777
1.源程序文件名为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用c语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需保存在T:
盘根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T:
盘中。
参考答案
一、改错题
改为i=2
voidfun1(intm,intn,intb[])
改为int
{k=fun1(a[i],a[i+1],b[0]);
改为b
{if(j%10=0)printf("
改为j%10==0
二、编程题
intfindnum(intn1,intn2,longa[][2])
inti=0,j;
longx1,x2,x3,y,k;
for(k=n1;
k<
=n2;
k++)
{y=k*k+k+17;
x1=x2=y/1000;
x3=0;
while(x1>
0)
{x3=x3*10+x1%10;
x1=x1/10;
if(x2==x3&
&y%10==y/10%10&
&
y%10==y/100%10)
a[i][0]=k;
a[i++][1]=y;
returni;
main()
{inti,j;
longa[10][2],n1,n2;
FILE*fp;
fp=fopen("
Myf2.out"
"
w"
%d%d"
n1,&
n2);
j=findnum(n1,n2,a);
\nk\tnumber"
for(i=0;
j;
i++)prinff("
\n%ld\t%ld"
a[i][0],a[i][1]);
fprintf(fp,"
\nk\tnumber"
i++)fprintf(fp,"
\nMyexamnumberis:
0112400123"
fclose(fp);
getch();
2009秋江苏计算机等级C上机真题1
改错题:
[程序功能]
输入两个正确日期且年份在1900-9999范围内,计算
并输出两个日期之间间隔的天数,例如:
2008-8-1
和2009-8-1之间间隔的天数为365
提示:
能被4整除并且不能被100整除的年份是闰年,能
被400整除的年份也是闰年,其他年份则是平年
[测试数据与运行结果]
显示:
first
date:
输入:
1980-2-1
seconddate:
2009-8-1
输出:
10774
days
[含有错误的源程序]
#include<
#defineleap(inty)((y)%4==0&
(y)%100!
=0||(y)%400==0)
structd
{inty,m,d;
};
intdays(structdd1,structdd2)
{intmon[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
inti;
longtd=0;
for(i=d1.y;
d2.y;
td=leap(i)?
366:
365;
for(i=1;
d1.m;
td-=mon[leap(d1.y)][i];
td-=d1.d-1;
d2.m;
td+=mon[leap(d2.y)][i];
td+=d2.d-1;
returntd;
voidmain()
{structdd1,d2;
longtd;
printf("
firstdate:
scanf("
%d-%d-%d"
d1.y,d1.m,d1.d);
d2.y,d2.m,d2.d);
td=days(d1,d2);
%ld"
td);
2009春江苏计算机上机考试题型解析
上机分析典型试题
第一大类:
数值类
题型1:
素数问题
2009年三月考题:
程序功能:
找出7个默森尼数。
法国数学家默森尼曾提出下列公式:
Mp=2^p-1。
当p是素数并且Mp也是素数时,称Mp为默森尼数,例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;
而Mp=2^11-1=2047,11是素数,2047不是素数,因此2047不是默森尼数.
[编程要求]
1.编写函数voidMersenne(longa[],intm),其功能是求出前m个默森尼数并以此将它们保存到a指向的数组中,
2.编写main函数,调用Mersenne函数并保存前7个默森尼数,将运行结果输出到屏幕及结果文件myf2.out中,最后将考生的考号也保存到结果文件myf2.out中
【测试数据与运行结果】
3
7
31
127
8191
131071
524287
#defineN7
intprime(longn)
/*本函数的功能是判定素数*/
{longi;
for(i=2;
=n/2;
/*素数只能被1与自己整除,所以从2开始逐次比较*/
if(n%i==0)
return0;
return1;
voidMersenne(longa[],intm)
{longf,n,k;
inti=0;
a[i++]=3;
for(n=3;
m;
n+=2)
{f=1;
for(k=1;
k++)
/*这个for循环实现2^n*/
f*=2;
if(prime(n)&
prime(f-1))
/*两个都是素数则成立*/
a[i++]=f-1;
{longa[7];
FILE*fp;
fp=fopen("
myf2.out"
/*建立文件myf2.out*/
if(fp==NULL)
exit(0);
Mersenne(a,N);
for(i=0;
N;
{printf("
%8ld"
a[i]);
fprintf(fp,"
\mMyexamnumberis:
题型二:
整数拆分
用一组整数验证命题,任意一个百位数字与个位数字不同的三位正整数n1在经过以下操作后一定会变换到1089:
将n1的百位数与个位数字交换得到n2,求n1和n2差的绝对值得到n3,将n3的百位数字与个位数字交换得到n4;
求n3与n4的和得到n5,n5一定是1089,若n1、n3是一位数或两位数,则在高位补0使其成为三位数
例如:
n1:
123,n2:
321,n3:
198(321,-123),n4:
891,n5:
1089(198+891)
【编程要求】
1.编写函数intfun(inta[],intb[],intn),其功能是用n指向数组的前n个整数验证上述命题,将所有符合命题的整数所在数组元素的下标依次保存到b指向的数组中,函数返回b数组中数据的个数
2.编写main函数,声明a数组并用测试数据初始化,用a数组作为实参调用fun函数,将a数组中所有符合命题的整数输出到屏幕及结果文件myf2.out中,最后将考生本人的准考证号字符串也保存到结果文件myf2.out中
测试数据:
123
765
1
45
121
1345
131
67
696
3589
运行结果:
67
#defineN100
intfun(inta[],intb[],intn)
{inti,x,y,z,s,t,m,k=0;
n;
if(a[i]/1000<
1)
/*判断是三位正整数*/
{x=a[i]/100;
y=a[i]/10%10;
z=a[i]%10;
/*各位数分离*/
if(x!
=z)
/*百位数字与个位数字不同*/
{s=z*100+y*10+x;
t=s>
a[i]?
(s-a[i]):
(a[i]-s);
/*两者的差*/
x=t/100;
y=t/10%10;
z=t%10;
m=z*100+y*10+x;
if(t+m==1089)
b[k++]=i;
{inta[N]={123,765,1,45,121,1345,131,67,696,3589},b[N],n,i;
n=fun(a,b,10);
a[b[i]]);
第二大类:
字符串类
题型:
出现次数问题
函数merge的功能是:
合并两个字符串集合为一个新集合,每个字符串在新集合中仅出现一次,函数返回新集合中字符串的个数
测试数据:
s1集合:
{“while”,”for”,”switch”,”if”,”break”,”continue”}
s2集合:
{“for”,”case”,”do”,”else”,”char”,”switch”}
while
for
switch
if
break
continue
case
do
else
char
string.h>
intmerge(chars1[][10],chars2[][10],chars3[][10],intm,intn)
{inti,j,k=0;
/*这个for循环实现将s1数组值传递给s3*/
strcpy(s3[k++],s1[i]);
/*通过遍历将s1与s2进行比较两者是否相同*/
{for(j=0;
if(strcmp(s2[i],s1[j])==0)
break;
if(j==m)
/*如果不相同将s2[i]元素拷贝至s3数组中*/
strcpy(s3[k++],s2[i]);
returnk;
{inti,j;
chars1[6][10]={"
while"
for"
switch"
if"
break"
continue"
},
s2[6][10]={"
case"
do"
else"
char"
},s3[20][10];
j=merge(s1,s2,s3,6,6);
%s"
s3[i]);
第三大类:
二维数组类
行列变化问题
已知x数组中存储的n阶矩阵有一个鞍点(鞍点是指该位置上的数是所在行的最大数。
同时也是所在列的最小数),程序实现将矩阵中鞍点所在列移动到最右侧。
测试数据;
3
2
0
4
6
5
-1
9
8
-1
l0
2
运行结果;
Andian;
a[0][1]
0
3
6
9
10
#include<
#define
N
/*定义常量*/
voidexchange(inta[][N])
{inti,j,k,f,t,m,mj;
{m=a[i][0];
mj=0;
f=1;
j++)
/*这个for循环实现寻找一行的最大数*/
if(a[i][j]>
m)
{m=a[i][j];
mj=j;
for(k=0;
N&
f;
/*这个for循环实现查找列中是否是最大数*/
if(a[k][mj]<
f=0;
if(k>
=N)break;
/*寻找到鞍点*/
if(f)
{printf("
Andian;
a[%d][%d]\n"
i,mj);
/*这个for循环实现转换*/
t=a[i][mj];
for(j=mj;
N-1;
/*交换元素中的数值,实现数组元素向前移动*/
a[i][j]=a[i][j+1];
a[i][N-1]=t;
{intx[N][N]={{1,3,2,0},{4,6,5,-1},{7,9,8,0},{-1,10,3,2}},i,j;
{for(j=0;
%3d"
x[i][j]);
exchange(x);
题型2:
矩阵运算
先判断一个M×
N矩阵是否是一个Monge矩阵,再对该矩阵作转换,判断变换后的M×
N矩阵是否仍是Monge矩阵
如果一个M×
N矩阵为Monge矩阵,当且仅当i=1,2,…,m-1和j=1,2,…,n-1时
A[i,j]+A[i+1,j+1]<
=A[i,j+1]+A[i+1,j]成立
1.编写函数intMonge(inta[][5],intn),其功能是判断a指向的a行5列数组中存储的矩阵是否是Monge矩阵,若是则函数返回1,否则返回0
2.编写函数voidchange(inta[][5],intn),其功能是对a指向的n行5列数组中的矩阵作如下转换,第一行与最后一行交换,第二行与倒数第二行交换,….直到每一行都交换过一次为止
江苏计算机二级c2009春上机试题2
2009春第二套
一:
函数mergeu的功能是:
合并两个字符集合为一个新集合,每个字符串在新集合中仅出现一次,函数返回新集合中字符串的个数
s1集合{“while”,”for”,”switch”,”if”,”continue”}
s2集合{“for”,”case”,”do”,”else”,”char”,”switch”}
while
[含有错误的源代码]
s3[k++]=s1[i];
if(strcmp(s2[i],s1[j]))
if(j>
chars1[6][10]={“while”,”for”,”switch”,”if”,”break”,”continue”},
s2[6][10]={“for”,”case”,”do”,”else”,”char”,”switch”},s3[20][10];
j=merge(s1[][10],s2[][10],s3[][10],6,6);
printf(“%s“,s3[i]);
}
【要求】
1.
将上述程序录入到文件myf1.C中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.
改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句.
3.
改正后的源程序(文件名myfl.c)保存在T:
二:
编程题
从一个指定的自然数n0开始,按以下公式生成一个数列,直到
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 江苏 二级 历年 上机