有关C语言的数据统计和编程问题 高手请进

"); printf("/n");}main(int argc i+1 fn); for(i=0;i<50;i++) { if(result[i] 代码如下:#include "stdafx.h"#include <stdio.h>#include <malloc.h>#include <ctype.h>#include <stdlib.h>#include <math.h>#include <string.h>typedef enum _enum_WORKSTATE{ WS_IDLE 直接输入可执行文件名+文件名就可以得到结果 编译后 然后在main()函数后面加上:int searchnum=1;while(searchnum /nana /a 分析文件c://data.txt/nana fn 分析文件fn/n"); if(argc==1) { printf("请输入文件名:"); scanf("%s" result[i]); pos=1; } } if(pos==0)printf("没有符合条件的数值 答案补充 好了 你留个信箱 我已经帮你调好了 输入0代表退出");} 答案补充 这个问问补充回答不分行了 程序一定要自己写才有进步. 有高手的话讲一下最高效的算法. //To 楼主 暂时我想不出来了 一定还会有更高效的算法 供你参考一下. //这个属于经典算法的范畴 用类c的语言给你描述一下过程 这个是我的一个思路 语法也忘记的差不多了 将这个数字加入结果数组中.以便下一次比较. if(isRepeat ==0) { intResult[i] = intInputList[i]; intTimes[i] = 1; } } //P.S. 我有若干年没有写过c程序了 那么就在出现过的位置下面记录出现的次数. isRepeat = 1; } } //如果比较之后发现没有出现重复 最差的情况是用户一个重复的输出也没有. for(j=0;j<50;j++) { if(intResult[j] == intInputList[i]) //是否这个数组在结果数组出现过. { Times[j] += 1; //如果出现了 是否有重复的. //因为最大输入为50 &intInputList[i]); isRepeat = 0; //用户刚刚输入的数字与结果数组比较 result[search-1]);else if(search =0x0d && tmp =0x0a) { workstate=WS_IDLE; i--; } break; } break; case WS_WAITLN:/*等待回车换行符*/ switch(substate) { case 0: if(tmp == 0x0d || tmp == 0x0a)substate = 1; break; case 1: if(tmp =0x0d && tmp isdigit(tmp)) { rnum=atoi(&buf[pos]); if(rnum>0 && rnum <=50)result[rnum-1]++; substate=0; i--; } break; case 2: if(tmp =0x0a) { workstate=WS_STAT; substate=0; i--; } break; } break; case WS_STAT:/*统计*/ switch(substate) { case 0: if(isdigit(tmp)) { pos=i; substate=1; } else if(tmp==0x0d || tmp==0x0a)substate=2; break; case 1: if( =0x0d && tmp isdigit(tmp)) { substate=2; i--; } else { workstate=WS_WAITLN; substate=0; } break; case 2: if(tmp==0x0d || tmp==0x0a)substate=3; break; case 3: if(tmp =0) { printf("%d出现的次数为:%d/n" i--; break; } break; } } free(buf); fclose(fp); pos =0; printf("文件%s的分析结果为:/n" fp); /*开始分析*/ for(i=0;i<num;i++) { tmp=buf[i]; switch(workstate) { case WS_IDLE:/*空闲状态*/ substate = 0; if(tmp=='1')workstate=WS_JUDGE; else workstate=WS_WAITLN; break; case WS_JUDGE:/*判断是否符合10的条件*/ switch(substate) { case 0: if(tmp == '0')substate=1; else { workstate=WS_WAITLN; if(tmp==0x0d || tmp==0x0a)substate=1; else substate=0; } break; case 1: if( =0){printf("请输入您想要查询的数(1~50) "c://data.txt"); else strcpy(fn "/a"))strcpy(fn fn); } else { if(strcmp(argv[1] char *argv[]){ char fn[255]; printf("文件分析软件的使用方法为:/nana 输入分析的文件名 =0)printf("请输入1~50之间的数 =0x0A)workstate = WS_IDLE num 1 SEEK_SET); fread(buf 0 SEEK_END); int num=ftell(fp); /*读入文件内容*/ buf=(char*)malloc(num+1); fseek(fp 0 "r"); if(fp==NULL)return; for(i=0;i<50;i++)result[i]=0; /*取得文件长度*/ fseek(fp rnum; int result[50]; WORKSTATE workstate=WS_IDLE; int substate=0; FILE *fp=fopen(fn pos tmp; int i WS_WAITLN}WORKSTATE;void anaFile(char *fn){ /*打开文件*/ char *buf WS_STAT WS_JUDGE 已经完全调试好了:可以正常使用 把result[50]改为全局变量 你试一下 ||| int i =0; int intInputList[50]; //用于存放用户输入的50个数字. int intResult[50]; //用于存放结果 int intTimes[50];//用于存放对应位置的结果出现的次数. int isRepeat = 0; for(i=0; i<50; i++) {//要求输入50个数字 scanf("%d" search &search);if(search>0 && search <=50)printf("数字%d出现的次数为:%d" 输入0退出:");scanf("%d" argv[1]); } anaFile(fn); return 0;} 答案补充 如果想显示某个值出现的次数的话 已经发给你了 我把文件发给你
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值