计算机等级考试三级编程题及答案2Word格式.docx
《计算机等级考试三级编程题及答案2Word格式.docx》由会员分享,可在线阅读,更多相关《计算机等级考试三级编程题及答案2Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
/*文件读取结束,则退出*/
}
fclose(fp);
return0;
}
voidCompute(void)
inti;
/*循环控制变量*/
1000;
i++)/*依次取每个数*/
if(xx[i]%2!
=0)
odd++;
/*求出xx中奇数的个数odd*/
else
even++;
/*求出xx中偶数的个数even*/
aver+=xx[i];
/*求出xx中元素的总和*/
}
aver/=MAX;
/*求出xx中元素的平均值*/
i++)
totfc+=(xx[i]-aver)*(xx[i]-aver)/MAX;
voidmain()
inti;
MAX;
xx[i]=0;
if(ReadDat())
printf("
数据文件IN.DAT不能打开!
\007\n"
return;
Compute();
printf("
ODD=%d\nEVEN=%d\nAVER=%lf\nTOTFC=%lf\n"
odd,even,aver,totfc);
WriteDat();
voidWriteDat(void)
fp=fopen("
OUT.DAT"
w"
fprintf(fp,"
%d\n%d\n%lf\n%lf\n"
2.(42)
请编写函数voidcountValue(int*a,int*n),它的功能是:
求出1到1000之内能被7或11整除但不能同时被7和11整除的所有整数并存放在数组a中,并通过n返回这些数的个数。
voidwriteDAT();
voidcountValue(int*a,int*n)
/*定义循环控制变量*/
*n=0;
/*初始化计数器变量*/
for(i=1;
=1000;
i++)/*在这个范围内寻找符合条件的数*/
if((i%7==0&
&
i%11!
=0)||(i%7!
=0&
i%11==0))
/*如果当前的数可以被7整除而不可以被11整除,或者可以被11整除而不可以被7整除*/
*a=i;
/*保存符合条件的数*/
*n=*n+1;
/*统计个数*/
a++;
voidmain()
intaa[1000],n,k;
system("
CLS"
countValue(aa,&
n);
for(k=0;
k<
n;
k++)
if((k+1)%10==0)
%5d"
aa[k]);
elseprintf("
writeDAT();
voidwriteDAT()
out.dat"
if((k+1)%10==0)
elsefprintf(fp,"
3.(59)
函数readDat()是从文件03in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。
请编制函数jsSort(),其功能是:
以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中。
最后调用函数writeDat()把结果xx输出到文件out.dat中。
条件:
从字符串中间一分为二,左边部分按字符的ASCII值降序排序,右边部分按字符的ASCII值升序排序。
如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。
例如:
位置 0 1 2 3 4 5 6 7 8
源字符串 a b c d h g f e
1 2 3 4 9 8 7 6 5
处理后的字符串 d c b a e f g h
4 3 2 1 9 5 6 7 8
charxx[20][80];
voidreadDat();
voidwriteDat();
voidjsSort()
inti,j,k;
intstr,half;
/*定义存储字符串长度的变量*/
chartemp;
/*定义数据交换时的暂存变量*/
20;
i++)/*逐行对数据进行处理*/
str=strlen(xx[i]);
/*求各行字符串的总长度*/
half=str/2;
/*求总长度的一半*/
half-1;
j++)/*左边部分按字符的ASCII值降序排序*/
for(k=j+1;
half;
if(xx[i][j]<
xx[i][k])
{
temp=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=temp;
}
if(str%2==1)/*如果原字符串长度为奇数,则跳过最中间的字符,使之不参加排序*/
half++;
for(j=half;
str-1;
j++)/*右边部分按字符的ASCII值升序排序*/
str;
if(xx[i][j]>
{
readDat();
jsSort();
writeDat();
voidreadDat()
FILE*in;
inti=0;
char*p;
in=fopen("
in.dat"
while(i<
20&
fgets(xx[i],80,in)!
=NULL)
p=strchr(xx[i],'
\n'
if(p)
*p=0;
i++;
fclose(in);
voidwriteDat()
FILE*out;
out=fopen("
i++)
%s\n"
xx[i]);
fprintf(out,"
fclose(out);
4.(06)
在文件04IN.DAT中有200个正整数,且每个数均在1000至9999之间。
函数readDat()的功能是读取这200个数存放到数组aa中。
请编制函数jsSort(),该函数的功能是:
要求按每个数的后3位的大小进行降序排列,将排序后的前10个数存入数组bb中,如果出现后3位相等的数,则对这些数按原始4位数据进行升序排列。
最后调用函数writeDat()把结果bb输出到文件OUT.DAT中。
处理前90125099601270258088
处理后50998088702560129012
#include<
intaa[200],bb[10];
inttemp;
199;
i++)/*用选择法对数组进行排序*/
for(j=i+1;
200;
if(aa[i]%1000<
aa[j]%1000)/*按照每个数的后3位大小进行降序排序*/
temp=aa[i];
aa[i]=aa[j];
aa[j]=temp;
elseif(aa[i]%1000==aa[j]%1000)/*如果后3位数相等*/
if(aa[i]>
aa[j])/*则要按原4位数的值进行升序排序*/
{
aa[i]=aa[j];
aa[j]=temp;
}
i++)/*将排序后的前10个数存入数组b中*/
bb[i]=aa[i];
readDat();
jsSort();
writeDat();
FILE*in;
inti;
in=fopen("
"
);
for(i=0;
i<
200;
i++)fscanf(in,"
&
aa[i]);
fclose(in);
FILE*out;
out=fopen("
for(i=0;
10;
i++)
i=%d,%d\n"
i+1,bb[i]);
fprintf(out,"
%d\n"
bb[i]);
fclose(out);
5.(18)
编写一个函数findStr(),该函数统计一个长度为2的字符串在另一个字符串中出现的次数。
例如,假定输入的字符串为"
asdasasdfgasdaszx67asdmklo"
,子字符串为"
as"
,函数返回值是6。
函数ReadWrite()的功能是实现从文件05in.dat中读取两个字符串,并调用函数findStr(),最后把结果输出到文件out.dat中。
voidReadWrite();
intfindStr(char*str,char*substr)
intn=0;
/*定义计数器变量,统计出现次数*/
char*p,*r;
/*定义指针变量来分别指向两个字符串*/
while(*str)/*如果字符串没有结束,则一直循环下去*/
p=str;
/*指针p指向字符串首地址*/
r=substr;
/*指针r指向子字符串首地址*/
while(*r)/*若子字符串没有结束,则循环继续*/
if(*r==*p)/*如果子字符串的第一个字符等于字符串中的该字符,则继续比较下一个字符*/
r++;
p++;
else
break;
/*否则退出循环*/
if(*r=='
\0'
)/*如果子字符串在字符串中出现了一次*/
n++;
/*则n加1,进行统计*/
str++;
/*指向字符串中的下一个字符*/
returnn;
/*返回统计结果n*/
charstr[81],substr[3];
intn;
输入原字符串:
"
gets(str);
输入子字符串:
gets(substr);
puts(str);
puts(substr);
n=findStr(str,substr);
n=%d\n"
n);
ReadWrite();
voidReadWrite()
charch,str[81],substr[3];
intn,len,i=0;
FILE*rf,*wf;
rf=fopen("
wf=fopen("
while(i<
5)
fgets(str,80,rf);
fgets(substr,10,rf);
len=strlen(substr)-1;
ch=substr[len];
if(ch=='
||ch==0x1a)
substr[len]=0;
fprintf(wf,"
fclose(rf);
fclose(wf);
6.(40)
某级数的前两项A1=1,A2=1,以后各项具有如下关系:
An=An-2+2An-1
下列程序的功能是:
要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:
Sn<
M且Sn+1≥M,这里Sn=A1+A2+…+An,并依次把n值存入数组单元b[0],b[1],b[2]中,请编制jsValue()函数来实现此功能,最后调用函数writeDat()把数组b的值输出到out.dat文件中。
intb[3];
voidjsValue()
intn=1;
/*计数器变量,保存求得的项数*/
inta1=1,a2=1,an;
/*用来保存级数的值*/
intsum0,sum;
/*用来存储级数的和的变量*/
sum0=a1+a2;
/*计算前两项的级数和*/
while
(1)/*无条件循环,循环体内有控制是否结束循环的语句*/
an=a1+a2*2;
/*求下一个级数*/
sum=sum0+an;
/*求级数和*/
a1=a2;
/*将a2赋给a1*/
a2=an;
/*将an赋给a2*/
/**/
if(sum0<
100&
sum>
=100)/*如果满足Sn<
100且sn+1>
=100*/
b[0]=n;
/*则将n存入数组单元b[0]中*/
1000&
=1000)/*如果满足Sn<
1000且sn+1>
=1000*/
b[1]=n;
/*则将n存入数组单元b[1]中*/
10000&
=10000)/*如果满足Sn<
10000且sn+1>
=10000*/
b[2]=n;
/*则将n存入数组单元b[2]中*/
/*并强行退出循环*/
sum0=sum;
/*将sum赋给sum0,为下一次循环的求和作准备*/
jsValue();
M=100,n=%d\nM=1000,n=%d\nM=10000,n=%d\n"
b[0],b[1],b[2]);
%d\n%d\n%d\n"
7.(38)
利用以下所示的简单迭代方法求方程:
cos(x)-x=0的一个实根。
xn+1=cos(xn)
迭代步骤如下:
(1)取x1初值为0.0。
(2)x0=x1,把x1的值赋给x0。
(3)x1=cos(x0),求出一个新的x1。
(4)若x0-x1的绝对值小于0.000001,执行步骤(5),否则执行步骤
(2)。
(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。
请编写函数countValue()实现程序要求,最后调用函数writeDAT()把结果输出到文件out.dat中。
math.h>
floatcountValue()
floatx0,x1=0.0;
/*定义两个浮点型变量进行迭代*/
while
(1)/*无条件循环*/
x0=x1;
/*将x1赋值给x0*/
x1=cos(x0);
/*求出新的x1*/
if(fabs(x0-x1)<
1e-6)break;
/*若x0-x1的绝对值小于0.000001,则结束循环*/
returnx1;
/*返回x1的值*/
实根=%f\n"
countValue());
%f\n"
cos(countValue())-countValue());
writeDAT();
voidwriteDAT()
FILE*wf;
8.(19)
函数ReadDat()的功能是实现从文件08IN.DAT中读取一篇英文文章存入到字符串数组xx中。
请编制函数SortCharD(),该函数的功能是:
以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT.DAT中。
例如,原文:
dAe,BfC
CCbbAA
结果:
fedCBA,
bbCCAA
原始数据文件存放的格式是:
每行的宽度均小于80个字符,含标点符号和空格。
charxx[50][80];
intmaxline=0;
intReadDat(void);
voidSortCharD()
intstr;
/*存储字符串的长度*/
for(i=0;
maxline;
i++)/*以行为单位获取字符*/
/*求得当前行的字符串长度*/
j++)/*对字符按从大到小的顺序进行排序*/
if(ReadDat())
\n\007"
SortCharD();
while(fgets(xx[i],80,fp)!
=NULL)
if(p)
maxline=i;
voidWriteDat()
9.(14)
函数ReadDat()的功能是实现从文件09ENG.IN中读取一篇英文文章,存入到字符串数组xx中。
请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,结果仍存入数组xx对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS.DAT中。
替代关系:
f(p)=p*11mod256(p是数组xx中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)的值小于等于32或大于130,则该字符不变,否则将f(p)所对应