三级.docx
《三级.docx》由会员分享,可在线阅读,更多相关《三级.docx(269页珍藏版)》请在冰豆网上搜索。
三级
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第01套:
程序PROG1.C的功能是:
计算500~800区间内素数的个数cnt,并按所求素数
的值从大到小的顺序,计算其间隔减、加之和,即第1个素数-第2个素数+第3个
素数-第4个素数+第5个素数...的值sum。
请编写函数countValue()实现程序的
要求,最后main()函数调用函数writeDAT()把结果cnt和sum,输出到文件OUT.DAT
中。
注意:
部分源程序存放在PROG1.C中。
请勿改动主函数main()和输出数据函数writeDAT()的内容。
参考答案:
#include
intcnt,sum;
voidwriteDAT();
intisPrime(intnum)
{
inti;
for(i=2;i<=num/2;i++)
if(num%i==0)return0;
return1;
}
voidcountValue()
{
inti,j=-1;
for(i=800;i>500;i--){
if(isPrime(i)){
cnt++;
j*=-1;
sum+=j*i;
}
}
}
voidmain()
{
cnt=sum=0;
countValue();
printf("素数的个数=%d\n",cnt);
printf("按要求计算的值=%d\n",sum);
writeDAT();
}
voidwriteDAT()
{
FILE*fp;
fp=fopen("c:
\\test\\OUT.DAT","w");
fprintf(fp,"%d\n%d\n",cnt,sum);
fclose(fp);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第02套:
程序PROG1.C的功能是:
计算出自然数SIX和NINE满足条件
SIX+SIX+SIX=NINE+NINE的个数cnt,以及满足此条件所有的SIX与NINE
的和SUM。
请编写函数countValue()实现程序的要求,最后main()函数调用函数
writeDAT()把结果cnt和sum,输出到文件OUT.DAT中。
其中的S,I,X,N,E各代表一个十进制数字,允许代表的数字相同,但S和N不能
为0。
例如:
944+944+944=1416+1416
注意:
部分源程序存放在PROG1.C中。
请勿改动主函数main()和输出数据函数writeDAT()的内容。
参考答案:
#include
intcnt,sum;
voidwriteDAT();
voidcountValue()
{
ints,i,x,n,e,six,nine;
for(s=1;s<10;s++)
for(i=0;i<10;i++)
for(x=0;x<10;x++)
\TABfor(n=1;n<10;n++)
\TABfor(e=0;e<10;e++){
\TABsix=s*100+i*10+x;
\TABnine=n*1000+i*100+n*10+e;
\TABif((3*six)==(2*nine)){
\TABcnt++;sum+=six+nine;
\TABprintf("six=%d,nine=%d\n",six,nine);
\TAB}
\TAB}
}
voidmain()
{
cnt=sum=0;
countValue();
printf("满足条件的个数=%d\n",cnt);
printf("满足条件所有的SIX与NINE的和=%d\n",sum);
writeDAT();
}
voidwriteDAT()
{
FILE*fp;
fp=fopen("c:
\\test\\OUT.DAT","w");
fprintf(fp,"%d\n%d\n",cnt,sum);
fclose(fp);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第03套:
请编写函数voidcountValue(int*a,int*n),它的功能是:
求出1到1000之
内能被7或11整除但不能同时被7和11整除的所有整数,其结果按从小到大的顺序放
在数组a中,并通过形式参数n传递这些数的个数。
注意:
部分源程序存在文件PROG1.C文件中。
请勿改动主函数main()和输入输出数据函数writeDAT()的内容。
参考答案:
#include
#include
voidwriteDAT();
voidcountValue(int*a,int*n)
{
inti;
*n=0;
for(i=7;i<=1000;i++)
if(((i%7)==0||(i%11)==0)&&(i%77!
=0))a[(*n)++]=i;
}
main()
{
intaa[1000],n,k;
countValue(aa,&n);
for(k=0;kif((k+1)%10==0)printf("%5d\n",aa[k]);
elseprintf("%5d",aa[k]);
writeDAT();
}
voidwriteDAT()
{
intaa[1000],n,k;
FILE*fp;
fp=fopen("c:
\\test\\out.dat","w");
countValue(aa,&n);
for(k=0;kif((k+1)%10==0)fprintf(fp,"%5d\n",aa[k]);
elsefprintf(fp,"%5d",aa[k]);
fclose(fp);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第04套:
已知数据文件IN.DAT中存有300个四位数,并已调用读函数readDat()把这些
数存入数组a中,请编制一函数jsValue(),其功能是:
求出千位数上的数加百位数
上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足此条件的四位
数依次存入数组b中,然后对数组b的四位数按从大到小的顺序进行排序。
最后
main()函数调用写函数writeDat()把数组b中的数输出到文件OUT.DAT中。
例如:
7153,7+1=5+3,则该数满足条件存入数组b中,且个数cnt=cnt+1。
8129,8+1!
=2+9,则该数不满足条件忽略。
注意:
部分源程序存在文件PROG1.C文件中。
程序中已定义数组:
a[300],b[300],已定义变量:
cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和
写函数writeDat()的内容。
参考答案:
#include
inta[300],b[300],cnt=0;
voidreadDat();
voidwriteDat();
jsValue()
{
inti,j,qw,bw,sw,gw,tmp;
for(i=0;i<300;i++){
qw=a[i]/1000;
bw=(a[i]-qw*1000)/100;
sw=(a[i]-qw*1000-bw*100)/10;
gw=a[i]%10;
if(qw+bw-sw-gw==0)b[cnt++]=a[i];
}
for(i=0;ifor(j=i+1;jif(b[i]
tmp=b[j];
b[j]=b[i];
b[i]=tmp;
}
}
}
}
main()
{
inti;
readDat();
jsValue();
writeDat();
printf("cnt=%d\n",cnt);
for(i=0;i}
voidreadDat()
{
FILE*fp;
inti;
fp=fopen("c:
\\test\\in.dat","r");
for(i=0;i<300;i++)fscanf(fp,"%d,",&a[i]);
fclose(fp);
}
voidwriteDat()
{
FILE*fp;
inti;
fp=fopen("c:
\\test\\out.dat","w");
fprintf(fp,"%d\n",cnt);
for(i=0;ifclose(fp);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第05套:
已知数据文件IN.DAT中存有300个四位数,并已调用读函数readDat()把这些
数存入数组a中,请编制一函数jsValue(),其功能是:
求出个位数上的数减千位数
上的数减百位数上的数减十位数上的数大于零的个数cnt,再求出所有满足此条件
的四位数平均值pjz1,以及所有不满足此条件的四位数平均值pjz2。
最后main()函
数调用写函数writeDat()把结果cnt,pjz1,pjz2输出到OUT.DAT文件。
例如:
1239,9-1-2-3>0,则该数满足条件,参加计算平均值pjz1,且个数
cnt=cnt+1。
8129,9-8-1-2<0,则该数不满足条件,参加计算平均值pjz2。
注意:
部分源程序存在文件PROG1.C文件中。
程序中已定义数组:
a[300],已定义变量:
cnt,pjz1,pjz2
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和
写函数writeDat()的内容。
参考答案:
#include
inta[300],cnt=0;
doublepjz1=0.0,pjz2=0.0;
voidreadDat();
voidwriteDat();
jsValue()
{
inti,qw,bw,sw,gw;
for(i=0;i<300;i++){
qw=a[i]/1000;
bw=(a[i]-qw*1000)/100;
sw=(a[i]-qw*1000-bw*100)/10;
gw=a[i]%10;
if(gw-qw-bw-sw>0){
pjz1+=a[i];
cnt++;
}
elsepjz2+=a[i];
}
pjz1/=cnt;
pjz2/=(300-cnt);
}
main()
{
inti;
readDat();
jsValue();
writeDat();
printf("cnt=%d\n满足条件的平均值pzj1=%7.2lf\n不满足条件的平均值pzj2=%7.2lf\n",cnt,pjz1,pjz2);
}
voidreadDat()
{
FILE*fp;
inti;
fp=fopen("c:
\\test\\in.dat","r");
for(i=0;i<300;i++)fscanf(fp,"%d,",&a[i]);
fclose(fp);
}
voidwriteDat()
{
FILE*fp;
fp=fopen("c:
\\test\\out.dat","w");
fprintf(fp,"%d\n%7.2lf\n%7.2lf\n",cnt,pjz1,pjz2);
fclose(fp);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第06套:
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx
中;请编制函数SortCharA(),其函数的功能是:
以行为单位对字符按从小到大
的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中。
最后main()函
数调用函数WriteDat()把结果xx输出到文件OUT.DAT中。
例:
原文:
dAe,BfC.
CCbbAA
结果:
.ABCdef
AACCbb
原始数据文件存放的格式是:
每行的宽度均小于80个字符,含标点符号和空
格。
注意:
部分源程序存放在PROG1.C中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()
的内容。
参考答案:
#include
#include
charxx[50][80];
unsignedintmaxline=0;/*文章的总行数*/
intReadDat(void);
voidWriteDat(void);
voidSortCharA(void)
{
charch;
unsignedinti,j,k;
for(i=0;ifor(j=0;jfor(k=j;k\TABif(xx[i][j]>xx[i][k]){
ch=xx[i][k];
xx[i][k]=xx[i][j];
xx[i][j]=ch;
}
}
}
}
}
voidmain()
{
if(ReadDat()){
printf("数据文件IN.DAT不能打开!
\n\007");
return;
}
SortCharA();
WriteDat();
}
intReadDat(void)
{
FILE*fp;
inti=0;
char*p;
if((fp=fopen("c:
\\test\\IN.DAT","r"))==NULL)return1;
while(fgets(xx[i],80,fp)!
=NULL){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
}
maxline=i;
fclose(fp);
return0;
}
voidWriteDat(void)
{
FILE*fp;
unsignedinti;
fp=fopen("c:
\\test\\OUT.DAT","w");
for(i=0;iprintf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第07套:
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx
中;请编制函数StrOR(),其函数的功能是:
以该文章中的行为单位依次扫描一
行字符串中的小写字母o,每次将小写母o的左右字符串部分作交叉换位,即左边字
符串移到小写字母o的右边,而原先右边的则反之,并把小写母o删除,依次直至这
一行中的小写母o处理完,之后把已处理的字符串仍按行重新存入字符串数组xx中。
最后main()函数调用函数WriteDat()把结果xx输出到文件OUT.DAT中。
例如原文:
youhavethecorrectrecord.
第1个o:
uhavethecorrectrecord.y
第2个o:
rrectrecord.yuhavethec
第3个o:
rd.yuhavethecrrectrec
提示:
对于每一行字符串数组处理有如下一种递归调用算法可供参考:
查找字符串中首个小写字母'o'的位置;没有找到'o',则结束递归调用;
找到'o',则按题意对字符串进行处理,形成新的字符串,然后返回,继续进行
递归调用。
原始数据文件存放的格式是:
每行的宽度均小于80个字符,含标点符号和空
格。
注意:
部分源程序存放在PROG1.C中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()
的内容。
参考答案:
#include
#include
charxx[50][80];
intmaxline=0;/*文章的总行数*/
intReadDat(void);
voidWriteDat(void);
voidStrOR(void)
{
inti;
charbefore[80],after[80],*p;
for(i=0;iwhile
(1){
p=strchr(xx[i],'o');
if(p!
=NULL){
\TABstrcpy(after,xx[i]+(p-xx[i]+1));
\TAB*p=0;
\TABstrcpy(before,xx[i]);
\TABstrcpy(xx[i],after);
\TABstrcat(xx[i],before);
}
elsebreak;
}
}
}
voidmain()
{
if(ReadDat()){
printf("数据文件IN.DAT不能打开!
\n\007");
return;
}
StrOR();
WriteDat();
}
intReadDat(void)
{
FILE*fp;
inti=0;
char*p;
if((fp=fopen("c:
\\test\\IN.DAT","r"))==NULL)return1;
while(fgets(xx[i],80,fp)!
=NULL){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
}
maxline=i;
fclose(fp);
return0;
}
voidWriteDat(void)
{
FILE*fp;
inti;
fp=fopen("c:
\\test\\OUT.DAT","w");
for(i=0;iprintf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第08套:
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到无符号字符串
数组xx中;请编制函数ChA(),其函数的功能是:
以行为单位把字符串中的第一
个字符的ASCII值加第二个字符的ASCII值,得到第一个新的值,存入数组单元
xx[i][0]中(其中:
i是文章中的某行)。
第二个字符的ASCII值加第三个字符的
ASCII值,得到第二个新的值,存入数组单元xx[i][1]中。
以此类推一直处理到最
后第二个字符,最后一个字符的ASCII值加原第一个字符的ASCII值,得到最后一
个新的值,存放在原字符串对应的位置上,之后把已处理的字符串逆转后仍按行
重新存入无符号字符串数组xx中。
最后main()函数调用函数WriteDat()把结果xx
输出到OUT.DAT文件中。
原始数据文件存放的格式是:
每行的宽度均小于80个字符,含标点符号和空
格,并也按它的ASCII值作以上处理。
注意:
部分源程序存放在PROG1.C中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()
的内容。
参考答案:
#include
#include
unsignedcharxx[50][80];
intmaxline=0;/*文章的总行数*/
intReadDat(void);
voidWriteDat(void);
voidChA(void)
{
inti,j;
charyuan;
for(i=0;iyuan=xx[i][0];
for(j=0;j<(int)strlen(xx[i])-1;j++)xx[i][j]+=xx[i][j+1];
xx[i][strlen(xx[i])-1]+=yuan;
strrev(xx[i]);
}
}
voidmain()
{
if(ReadDat()){
printf("数据文件IN.DAT不能打开!
\n\007");
return;
}
ChA();
WriteDat();
}
intReadDat(void)
{
FILE*fp;
inti=