出圈问题及进制转换.doc_第1页
出圈问题及进制转换.doc_第2页
出圈问题及进制转换.doc_第3页
出圈问题及进制转换.doc_第4页
出圈问题及进制转换.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

出圈问题及进制转换.txt如果有来生,要做一棵树,站成永恒,没有悲伤的姿势。一半在土里安详,一半在风里飞扬,一半洒落阴凉,一半沐浴阳光,非常沉默非常骄傲,从不依靠从不寻找。34题 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请考生编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出到文件OUT.DAT中。设n=100,c=1,m=10.(1)将1到n个人的序号存入一维数组p中;(2)若第i个人报数后出圈,则将pi置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;(3)重复第(2)步直至圈中只剩下p1为止。部分源程序已给出。请勿改动主函数main()和输出数据函数writeDat()的内容。 #include #define N 100#define S 1#define M 10int p100,n,s,m;void WriteDat(void);void Josegh(void)void main() m=M;n=N;s=S;Josegh();WriteDat();void WriteDat(void)int i;FILE *fp;fp=fopen(out.dat , w );for(i=N-1;i=0;i-)printf( %4d ,pi);fprintf(fp, %4d ,pi);if(i % 10=0)printf(n );fprintf(fp, n );fclose(fp); -/* 注:题中第一个for()循环是先对数组p赋初值。在第二个for()中用i来控制没出圈的总人数,s1=(s1+m-1)%i的作用是找出报数后出圈人的下标,其中对i求余的作用是使报数按圈进行(即报到尾后又从头报),该算法在很多题目中都用到。由于求余的作用当报数正好到最后一个时s1为0,故而要进行if(s1=0)的判断。内嵌的for()循环是将出圈以后的人依次往前移。*/void Josegh(void)int i,j,s1,w;s1=s;for(i=1;i=2;i-)s1=(s1+m-1)%i;if(s1=0)s1=i;w=ps1-1;for(j=s1;ji;j+)pj-1=pj;pi-1=w; 38、请编制函数readdat()实现从文件in.dat中读取100个十六进制数到字符串数组xx中;再编制函数h16to2(),将xx中的十六进制数转换成二进制数并把已转换的二进制数仍存放在字符串数组xx,最后调用函数writedat()把结果输出到out.dat文件中。原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)部分源程序已给出。请勿改动主函数main()和输出数据函数writedat()的内容。#include #include #include #include #define MAX 100char xxMAX20;void WriteDat(void) ;int ReadDat(void)FILE *fp ;if(fp=fopen(in.dat,r)=NULL) return 1;fclose(fp) ;return 0 ;void H16to2(void)void main()int i ;for(i=0;iMAX;i+) memset(xx,0,20);if(ReadDat()printf(Cant open the data file in.dat!007n) ;return;H16to2();WriteDat();void WriteDat(void)FILE *fp;int i;fp=fopen(out.dat, w) ;for(i=0;iMAX;i+) fprintf(fp,%sn,xxi);fclose(fp) ;-/*注:注意该题要编写readdat()函数,其中函数itoa(data,yy,16)的作用是将整数data转换成十六进制型式的字符串存入yy中,若要转成二进制型式的字符串则用itoa(data,yy,2)。函数strtol(xxi,NULL,16)的作用是将字符型转换成整型。*/int ReadDat(void)FILE *fp ;int i,data;char yy20;if(fp=fopen(in.dat,r)=NULL) return 1;for(i=0;i100;i+)fscanf(fp,%x,&data);itoa(data,yy,16);strcpy(xxi,yy);fclose(fp) ;return 0 ;void H16to2(void)int i,data;char yy20;for(i=0;i100;i+)data=strtol(xxi,NULL,16);itoa(data,yy,2);strcpy(xxi,yy);62、请编制函数READDAT()实现从文件IN.DAT中读取100个十六进制数到字符串数组xx中;再编制函数H16TO8(),将xx中的十六进制数转换成八进制数并把已转换的八进制数仍存放在字符串数组XX中,最后调用函数WRITEDAT()把结果输出到OUT.DAT文件中.原始数据文件存放的格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000).#include #include #include #include #define MAX 100char xxMAX20;void WriteDat(void) ;int ReadDat(void)FILE *fp ;int i,data;char yy20;if(fp=fopen(in.dat,r)=NULL) return 1;for(i=0;i100;i+)fscanf(fp,%x,&data);itoa(data,yy,16);strcpy(xxi,yy);fclose(fp) ;return 0 ;void H16to8(void)int i,data;char yy20;for(i=0;i100;i+)data=strtol(xxi,NULL,16);itoa(data,yy,8);strcpy(xxi,yy);void main()int i ;for(i=0;iMAX;i+) memset(xxi,0,20);if(ReadDat()printf(Cant open the data file in.dat!007n) ;return;H16to8();WriteDat();void WriteDat(void)FILE *fp;int i;fp=fopen(out.dat, w) ;for(i=0;iMAX;i+) fprintf(fp,%sn,xxi);fclose(fp) ;/* 注:本题中用到函数itoa()来实现从整型变成字符型。*/int ReadDat(void)FILE *fp ;int i,data;char yy20;if(fp=fopen(in.dat,r)=NULL) return 1;for(i=0;i100;i+)fscanf(fp,%x,&data);ito

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论