计算机三级网络技术的上机题

下列程序的功能是:计算500-800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其间隔加、减之各,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum。请编写函数countvalue()实现程序的要求,最后调用函数writedat()把结果cnt和sum,输出到文件out11.dat中。
注意:部分源程序已给出。
请勿改动主函数main()和输出数据函数writedat()的内容。

#include <stdio.h>
int cnt,sum;

void countvalue()
{
}

void main()
{cnt=sum=0;
countvalue();
printf("素数的个数=%d\n",cnt);
printf("按要求计算的值=%d\n",sum);
writeDat();
system("pause");
}

writeDat()
{FILE *fp;
fp=fopen("OUT11.DAT","w");
fprintf(fp,"%d\n%d\n",cnt,sum);
fclose(fp);}


--------------------------
void countValue() /*标准答案,有问题*/
{int I,j,half,yy[100];
for(I=500;I<=800;I++)
{half=I/2;
for(j=2;j<half;j++)
if (I%j==0) break;
if (j>=half) {yy[cnt]=I;cnt++;}
}
for (I=0,j=-1;I<cnt;I++)
{j=j*-1; sum+=j*yy[I];} /*此处有误!!!应为:{sum+=j*yy[I];j=j*-1; }*/
}
或者:
本题要求从大到小的顺序进行加减运算,因此这里采用从800开始循环到500这样就能保证出来的素数就是从大到小,内嵌的for()再加上if()是用来判断是否为素数。其中k用来控制加减运算。
void countValue()
{int i,j,k=1;
for(i=800;i>=500;i--)
{for(j=2;j<i;j++)
if(i%j==0) break;
if(j>=i)
{cnt++;sum+=k*i;k=-1*k;}
}
}

int ss(int m)
{ int i,k=1;
for(i=2;i<m/2;i++)
if(m%i==0) k=0;
return k; }
void countvalue()
{ int i,j=0,a[300],k=1;
cnt=0;
sum=0;
for(i=800;i>500;i--)
if(ss(i))
{ cnt++;
a[j++]=i; }
for(i=0;i<cnt;i++)
{ sum+=k*a[i];
k=-k; }}

先出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的确10倍。计算并输出这些四位自然数的个数cnt以及这些数的和sum。请编写函数countvalue()实现程序的要求,最后调用函数writedat()把结果cnt和sum,输出到文件out13.dat中。
注意:部分源程序已给出。
请勿改动主函数main()和输入输出数据函数writeDAT()的内容。

#include <stdio.h>
int cnt,sum;

void countvalue()
{
}

void main()
{cnt=sum=0;
countvalue();
printf("满足条件的自然数的个数=%d\n",cnt);
printf("满足条件的自然数的个数=%d\n",sum);
writeDat();
system("pause");
}

writeDat()
{FILE *fp;
fp=fopen("OUT13.DAT","w");
fprintf(fp,"%d\n%d\n",cnt,sum);
fclose(fp);
}


----------------------------
void countValue() /*标准答案*/
{int I,thou,hun,ten,data;
for(I=5000;I>=1000;I--)
{thou=I/1000;
hun=I%1000/100;
ten=I%100/10;
data=I%10;
if (thou+hun==ten+data&&thou+hun==(data-thou)*10)
{cnt++;sum+=I;}
}
}
或者:
void countvalue()
{ int i,a,b,c,d;
for(i=1000;i<5000;i++)
{ a=i/1000;
b=(i%1000)/100;
c=(i%100)/10;
d=i%10;
if((a+b==c+d)&&((a+b)==10*(d-a)))
{ cnt++;
sum+=i; } }
}

已知数据文件IN.DAT中存有200个四位数, 并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 如果四位数各位上的数字均是奇数, 则统计出满足此条件的个数cnt, 并把这些四位数按从大到小的顺序存入数组b中。最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意: 部分源程序存在文件PROG1.C文件中。
程序中已定义数组: a[200], b[200], 已定义变量: cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------

#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0;

void jsVal()
{
}

void readDat()
{ int i ;
FILE *fp ;
fp = fopen("in.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
fclose(fp) ;
}

void main()
{ int i ;
readDat() ;
jsVal() ;
printf("满足条件的数=%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;
printf("\n") ;
writeDat() ;
system("pause");
}

writeDat()
{ FILE *fp ;
int i ;
fp = fopen("out.dat", "w") ;
fprintf(fp, "%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;
fclose(fp) ;
}


void jsVal() /*标准答案*/
void jsVal()
{
int I,thou,hun,ten,data,j;
for(I=0;I<200;I++)
{thou=a[I]/1000; hun=a[I]%1000/100;
ten=a[I]%100/10; data=a[I]%10;
if (thou%2!=0&&hun%2!=0&&ten%2!=0&&data%2!=0)
{b[cnt]=a[I];cnt++;}
}
for(I=0;I<cnt-1;I++)
for(j=I+1;j<cnt;j++)
if(b[I]<b[j])
{data=b[I];b[I]=b[j];b[j]=data;}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值