第八次上机实验-数字排序和移位.ppt_第1页
第八次上机实验-数字排序和移位.ppt_第2页
第八次上机实验-数字排序和移位.ppt_第3页
第八次上机实验-数字排序和移位.ppt_第4页
第八次上机实验-数字排序和移位.ppt_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

数字排序 数字或字符移位 已知在文件in dat中存有200组数据 每组有3个数 每个数均是三位数 函数readDat 是读取这200组数据存放到结构数组aa中 请编制函数jsSort 其函数的功能是 要求在200组数据中找出条件为每组数据中的第二个数大于第一个数加第三个数之和 其中满足条件的个数作为函数jsSort 的返回值 同时把满足条件的数据存入结构数组bb中 再对bb中的数据按照每组数据的第二个数加第三个之和的大小进行降序排列 第二个数加第三个数的和均不相等 排序后的结果仍重新存入结构数组bb中 最后调用函数writeDat 把结果bb输出到out dat文件中 注意 部分源程序存在文件PROG1 C文件中 请勿改动数据文件in dat中的任何数据 主函数main 读函数readDat 和写函数writeDat 的内容 69套 include includetypedefstruct intx1 x2 x3 Data Dataaa 200 bb 200 voidreadDat voidwriteDat intcount intjsSort voidmain intcount readDat count jsSort 返回满足条件的个数 writeDat count voidreadDat FILE in inti in fopen c test in dat r for i 0 i 200 i fscanf in d d d 分析 实际是一个排序问题数组元素为结构体类型步骤 1 先把满足条件的数据存入bb数组中 元素个数由jsSort 函数返回2 对bb数组中的元素进行排序 代码 intjsSort 200组数据中找出条件为每组数据中的第二个数大于第一个数加第三个数之和的数存入bb数组中 对bb数组进行排序 按每组数据的第二个数加第三个之和的大小进行降序排列 返回countb的值 定义i j countb变量 for i 0 iaa i x1 aa i x3 bb countb aa i for i 0 i countb 1 i for j i 1 j countb j if bb i x2 bb i x3 bb j x2 bb j x3 t bb i bb i bb j bb j t returncountb inti j countb 0 Datat 数字移位 已知在文件in dat中存有若干个 个数 200 四位数字的正整数 函数readdat 读取这若干个正整数并存入数组xx中 请编制函数calvalue 其功能要求 1 求出这文件中共有多少个正整数totnum 2 求这些数右移1位后 产生的新数是奇数的数的个数totcnt 以及满足此条件的这些数 右移前的值 的算术平均值totpjz 最后调用函数writedat 把所求的结果输出到文件out dat中 部分源程序已给出 请勿改动主函数main 读数据函数readdat 和输出数据函数writedat 的内容 include include defineMAXNUM200intxx MAXNUM inttotnum 0 inttotcnt 0 doubletotpjz 0 0 intreaddat void voidwritedat void voidcalvalue void voidmain inti clrscr for i 0 i MAXNUM i xx i 0 readdat calvalue printf totnum d n totnum printf totcnt d n totcnt printf totpjz 2lf n totpjz writedat intreaddat void FILE fp inti 0 if fp fopen in dat r NULL return1 while feof fp fscanf fp d 定义了200个元素的数组 数组每个元素的初值为0 从文件中依次读取数据到xx数组中 代码 voidcalvalue void inti data for i 0 xx i 0 i totNum data xx i 1 if data 2 0 totCnt totPjz xx i totPjz totCnt 分析 xx数组200个元素中前面若干数据为正整数 后面全是0 对xx i 依次判断 所以要循环循环结束条件为xx i 为0 循环体中1 记数totnum 2 xx i 右移操作xx i 1表示右移一位xx i 13 判断data为偶数记数totcnt 同时累加xx i 字符移位问题 函数ReadDat 实现从文件IN DAT中读取一篇英文文章存入到字符串数组xx中 请编制函数CharConvA 其函数的功能是 以该文章中的行为单位把字符串中的最后一个字符的ASCII值右移4位二进制位 高位补0后加最后第二个字符的ASCII值 得到最后一个新的值 最后第二个字符的ASCII值右移4位二进制位 高位补0后加最后第三个字符的ASCII值 得到最后第二个新的值 以此类推一直处理到第二个字符 注意 第一个字符的ASCII值加原最后一个字符的ASCII值 得到第一个新的值 得到的新值分别存放在原字符串对应的位置上 之后把已处理的结果仍按行重新存入数组xx中 最后main 函数调用函数WriteDat 把结果xx输出到文件OUT DAT中 原始数据文件存放的格式是 每行的宽度均小于80个字符 含标点符号和空格 并也按字符处理 注意 部分源程序存放在PROG1 C中 请勿改动主函数main 读数据函数ReadDat 和输出数据函数WriteDat 的内容 33套 include includecharxx 50 80 intmaxline 0 文章的总行数 intReadDat void voidWriteDat void voidCharConvA void voidmain if ReadDat printf 数据文件IN DAT不能打开 n 007 return CharConvA 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 i maxline i printf s n xx i fprintf fp s n xx i fclose fp 分析 由于是对每行字符串进行处理 所以循环次数为行数maxline在该循环内对字符串xx i 每个字符进行变换 所以又包含一层循环 循环次数为每行的字符数strlen xx i 代码 voidCharConvA void inti j len chartmp for i 0 i maxline i 所有字符串存放在xx 50 80 中要处理maxline行字符串for循环 for j len 1 j 1 j xx i j xx i j 4 xx i j 1 循环体内 对第i行字符串每个字符处理需求得xx i 包含的字符数 len strlen xx i 字符串中的最后一个字符的ASCII值右移4位二进制位 高位补0后加最后第二个字符的ASCII值 得到最后一个新的值 最后第二个字符的ASCII值右移4位二进制位 高位补0后加最后第三个字符的ASCII值 得到最后第二个新的值 tmp xx i len 1 xx i 0 tmp 第一个字符的ASCII值加原最后一个字符的ASCII值 函数ReadDat 实现从文件IN DAT中读取一篇英文文章存入到无符号字符串数组xx中 请编制函数StrCharJL 其函数的功能是 以行为单位把字符串中的所有字符的ASCII值左移4位二进制位 低位补0 如果左移后 其值小于等于32或大于100 则原字符保持不变 留在原字符串对应的位置上 否则就把左移后的值再加上原字符的ASCII值 得到新的值仍存入原字符串对应的位置上 之后把已处理的字符串仍按行重新存入无符号字符串数组xx中 最后main 函数调用函数WriteDat 把结果xx输出到文件OUT DAT中 原始数据文件存放的格式是 每行的宽度均小于80个字符 含标点符号和空格 注意 部分源程序存放在PROG1 C中 请勿改动主函数main 读函数ReadDat 和输出函数WriteDat 的内容 57套 include includeunsignedcharxx 50 80 intmaxline 0 文章的总行数 intReadDat void voidWriteDat void voidStrCharJL void voidmain if ReadDat printf 数据文件IN DAT不能打开 n 007 return StrCharJL 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 i maxline i printf s n xx i fprintf fp s n xx i fclose fp 代码 需要对每行进行处理利用外循环for语句 依次读取文章中的每一行xx i 再利用内循环for语句 依次对该字符xx i j 的ASCII值进行左移操作 接着判断新值是否小于等于32或大于100 若满足 则原字符保持不变 否则把新值仍存放在原字符串对应的位置上 voidStrCharJL void unsignedchartmp inti j for i 0 i100 xx i j tmp 函数ReadDat 实现从文件IN DAT中读取一篇英文文章存入到字符串数组xx中 请编制函数StrCharJR 其函数的功能是 以该文章中的行为单位把字符串中的所有字符的二进制ASCII值右移4位 高位补0 然后把右移后的字符ASCII值再加上原字符的ASCII值 得到新的值仍存入原字符串对应的位置上 之后把已处理的结果仍按行重新存入数组xx中 最后main 函数调用函数WriteDat 把结果xx输出

温馨提示

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

评论

0/150

提交评论