之前 的程序 要求 是 输入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 R语言Rstudio突然无法启动
- ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
- ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
- ¥15 用windows做服务的同志有吗
- ¥60 求一个简单的网页(标签-安全|关键词-上传)
- ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值