
题目
解决代码及点评
/************************************************************************/ /* 22. 有一批实数,用零作终止标记。请编程序找出这批数中的最大值及最小值, 并输出该最大值数是这批数中的第几个数(若最大值数多次出现,只打印出第一个的位置)。 又问:若打印出每个最大值数的位置,程序应如何修改? */ /************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> int FindMin18(float * arr,int n) { int min=0; for (int i=1;i<n;i++) { if (arr[min]>arr[i]) { min=i; } } return min; } int FindMax18(float * arr,int n) { int max=0; for (int i=1;i<n;i++) { if (arr[max]<arr[i]) { max=i; } } return max; } void FindMaxMax18(float * arr,int n) { int max=0; for (int i=1;i<n;i++) { if (arr[max]<arr[i]) { max=i; } } for (int j=0;j<n;j++) { if (arr[j]==arr[max]) { printf("%5d",j+1); } } } //用一个数组保存相应的个数 void main() { float arr[100]={0};// 设置最长输入为100个 int i=0; while(1) { scanf_s("%f",&arr[i]); float temp=arr[i]; if (temp==0) { break; } i++; } for (int j=0;j<i;j++) { printf("%5f",arr[j]); } printf("\n"); printf("最大值数为%f第一次出现位置为%d\n",arr[FindMax18(arr,i)],FindMax18(arr,i)+1); printf("最小值数为%f\n",arr[FindMin18(arr,i)]); printf(" 打印出最大值所有位置\n"); FindMaxMax18(arr,i); system("pause"); }
代码编译以及运行
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
程序运行结果