之前 的程序 要求 是 输入10个数,找出来最小和第二小的,排到数列 第一和第二的位置
3条回答
- HannanKan 2016-11-18 14:01关注
有些特殊情况问题描述不够细致,因此程序可能存在不足之处
1.若最小数据有重复的,那么是应该吧所有的最小数据都调到前面,还是只移动一个,还是把所有的最下数据都去掉然后在前面只添加一个最小数据?
2.除最小数据外,其他数据 的位置是否能换更换
另外,我觉得不要限定10个数据的输入将更有典型性(个人观点)
看在认真回答楼主问题的份上,渴望点个赞^^#include<stdio.h> #include<malloc.h> void find(int* p, int* min1, int* min2){ //注意此处若有相同的最小值或者次小值数据,只会将其中一个调整顺序 int cnt1, cnt2; cnt1 = cnt2 = (*p); (*min1) = (*min2) = 0; for (int j = 0; j != 10; j++){ if (*(p + j) < cnt1) { *min1 = j; cnt1 = *(p + j); } else if (*(p + j) < cnt2){ (*min2) = j; cnt2 = *(p + j); } } } int main() { FILE*fp; fopen_s(&fp, "data.txt", "r"); printf("primary data\n"); int*p = (int*)malloc(sizeof(int)* 10); for (int i = 0; i != 10;i++){ fscanf_s(fp, "%d", p+i); printf("%d ",*(p+i)); } int min1, min2; int size = 10; find(p, &min1, &min2); printf("\ndata exchange\n"); printf("%d,%d\n", min1, min2); FILE* fp_w; fopen_s(&fp_w, "result.txt", "w"); if (min1 == min2){ printf("%d ", *(p + min1)); fprintf(fp_w, "%d ", *(p + min1)); } else { printf("%d %d ", *(p+ min1), *(p + min2)); fprintf(fp_w, "%d ", *(p + min1)); fprintf(fp_w, "%d ", *(p + min2)); } for (int j = 0; j < size; j++) { if (j == min1 || j == min2)continue; printf("%d ", *(p + j)); fprintf(fp_w, "%d ", *(p + j)); } fclose(fp_w); //free(q); 此处不能释放空间,因为当程序还没有结束,即在free到return 之间,程序将向目标文件写入数据,释放数组会造成错误 return 0; }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 逻辑谓词和消解原理的运用
- ¥15 请求分析基于spring boot+vue的前后端分离的项目
- ¥15 三菱伺服电机按启动按钮有使能但不动作
- ¥15 js,页面2返回页面1时定位进入的设备
- ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
- ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
- ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?