怎样用c语言任意输入几个数去掉最大值和最小值求平均值
方法实现有多种:
一、最直观的方式:
1、将输入的十个数,存到数组中;
2、遍历数组,找到最大值和最小值;
3、从数组中将最大值和最小值移除;
4、将剩余的8个数值累加,并将和值除以8,得到平均值;
5、输出结果。
二、优化方式:
分析原始算法,需要循环多次,包括输入,查找最值,移除,累加等。针对此,可以进行优化。
1、查找最大值和最小值可以通过一个循环完成;
2、由于只是要计算最终的平均值,所以可以不从数组移除,而是累加10个数的和值,再减去两个最值;
3、输入时可以不保存数组,而是输入一个处理一个,降低空间开销;
4、输入时可以同时执行累加及查找最值操作。
三、经过优化,代码可以书写如下:
#include int main(){ float aver=0; int i,n,max,min; scanf("%d",&max); aver=min=max;//输入第一个数,当做初始的最大最小值。此时和值也为该值。 for(i = 1;in)min=n;//查找最小值。 } aver-=min+max;//在和值中减去两个最值。 aver/=8;//计算平均值。 printf("%f
", aver);//输出结果。 return 0;}
#include
int main()
{
int i;
int a[10];
int sum=0;;
int min,max;
int aver;
printf("input ten numbers:");
for(i=0;i<10;i++)
{
scanf("%d
",&a[i]);
}
min=a[0];
max=a[0];
for(i=0;i<10;i++)
{
if(min>a[i])
min=a[i];
if(max<a[i])
max=a[i];
sum=sum+a[i];
}
aver=(sum-min-max)/8;
printf("%d",aver);
return 0;
}
只能帮你到这儿了,自己调试吧。。
单纯判断最大值最小值求平均很容易。
但题目要求输入任意个数,也就是不能预设数组大小。
如果不考虑数字存储,只是单纯判断最大最小然后求平均,可以定义变量sum来累加输入的值,然后有max和min变量记录最大值和最小值,最后sum减去max和min求平均就可以了。
但是如果想要同时把输入的数字保存到数组中。那么需要动态申请内存。
我下面代码按照最后一种情况写。
代码功能说明:
连续输入任意个数字空格分割,回车确认。(注意:数字空格回车以外的键,按了也没用,也不支持退格键删除)。
在动态存储数字到数组的同时,使用max和min指针记录最大值和最小值对应数组的内存地址。
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
int main()
{
int *nums=NULL,*nSave=NULL,i,len=0,n=0,c=0,lc=0,*max,*min,sum=0;
printf("输入任意数字空格分割(输入回车键结束输入,不支持退格删除):
");
while(1)
{
lc=c;
c=getch();
if((c==' ' || c=='') && (lc>='0' && lc<='9'))//当前输入字符是空格或者回车且前一个输入的字符是数字,创建内存空间并记录数字
{
printf("%c",c);
if(!nums)
{
nums=(int *)malloc(sizeof(int));
if(!nums)
{
printf("内存申请失败!
");
return 1;
}
max=min=&nums[len];
}
else
{
nSave=(int *)realloc(nums,sizeof(int)*(len+1));
if(!nSave)
{
printf("内存申请失败!
");
return 1;
}
nums=nSave;
if(*max<n)
max=&nums[len];
if(*min>n)
min=&nums[len];
}
nums[len]=n;
n=0;
len++;
}
else if(c>='0' && c<='9')
printf("%c",c),n=n*10+c-'0';
if(c=='')
{
printf("
");
break;
}
}
//------打印输入的数组
printf("输入的数组为:
");
for(i=0;i<len;i++)
printf("%d ",nums[i]);
printf("
");
//------求平均
for(i=0;i<len;i++)
if(&nums[i]!=max && &nums[i]!=min)
sum+=nums[i];
printf("去除最大值和最小值后的平均值为:%f
",sum*1.0/(len-2));
return 0;
}
#include<stdio.h>
int main()
{ int n,x,max=-99999999,min=9999999,s=0,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&x);
s+=x;
if(x>max)max=x;
if(x<min)min=x;
}
printf("%.2f
",(s-max-min)/(n-2.0));
return 0;
}
C语言中,怎么实现任意输入?
直接编译,程序输出结果中任意输入三个数字,程序执行结果如下图所示:
c语言如何输入任意个字符?
在 C 语言中,可以使用以下函数来输入任意个字符:fgets 函数:该函数可以从标准输入流 stdin 中读取任意个字符,直到读到换行符或文件结束标志为止。例如:Copy codechar str[100];if (fgets(str, 100, stdin) == NULL) { \/\/ 读取失败} else { \/\/ 读取成功}getchar 函数:该函数可以从标...
c语言如何输入任意个字符输出对应的字母?
在C语言中,可以使用`scanf`函数来输入字符,并使用`printf`函数输出对应的字母。下面是一个简单的示例代码,演示了如何输入任意个字符并输出对应的字母:在这个示例中,程序会不断输入字符,并在每次输入后输出对应的字母,直到输入字符'q'时退出循环。注意在`scanf`函数中的`%c`前加了一个空格,这是...
C语言怎么实现字符串的任意输入
使用gets函数即可实现输入任意字符串。1、gets函数:原型:char * gets(char * buffer);功能:从stdin流中读取字符串,直至读到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为 \\0 空字符,并以此结束字符串;说明:当使用unic...
用C语言编写从键盘上任意输入10整数,要求按从小到大的顺序在屏幕上显示...
main(){ int a[10],i,j,q;printf("input ten num:");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)for(j=i+1;j<10;j++)if(a[i]>a[j]){ q=a[i];a[i]=a[j];a[j]=q;} for(i=0;i<10;i++)printf("%d",a[i]);getch();return 0;} ...
在C语言中如何定义并输入任意个数据
用一个特定的数字表示结束,比如0, 当用户输入0 的时候就停止,可以参考下面的代码:int a[100],i, count;i =0;while(scanf("%d", &a[i]) != EOF) { if (a[i] == 0) break; \/\/ 用户输入了0,表示结束。i++;} count = i-1;...
如果在c语言里我要输入任意东西,也就是数字字母符号什...
定义形式为:char str[100];\/*你可以输入任意的99个字符或是数字,随便输入什么。*\/ 用getchar()函数可接受任何字符,包括回车、esc等键的字符。如:int i;char str[100];for (i=0;i<100;i++){ str[i]=getchar();} 或者将 for (i=0;i<100;i++){ str[i]=getchar();} 替换为...
c语言 从键盘上任意输入一个字符(字母大小写,数字,控制字符和其他字符...
include <string.h>#include<stdio.h>#define N 99main(){ char s[N]; int i,sum,num=0,letter=0,space=0,other=0; gets(s); sum=strlen(s); for(i=0;i<sum;i++) { if(s[i]==' ') space++; if((s[i]>=65&&s[i]<=90)||(s[i]>=97&&s[i]<=122)...
C语言:由键盘任意输入一个整数(变量zs)、一个实数(变量
代码编写示例如下:include<stdio.h>int main(){ int zs; double ss; printf("请输入1个整数和1个实数,以分号间隔:"); scanf("%d;%lf",&zs,&ss); double sh=ss\/zs; printf("%.8f",sh); return 0;}运行截图:...
如何用C语言编写一个程序,输入任意输入一个正整数,反序输出每一位_百度...
include <stdio.h> int main(){ int n;scanf("%d", &n);do { printf("%d", n % 10);}while(n \/= 10);printf("\\n");return 0;}
历斌厄多: #include<stdio.h> int main() { int a[10]; int max,min,maxi,minj; int i; float aver=0.00; printf("请输入十个数:\n"); for(i=0; i<10; i++) { scanf("%d",&a[i]); } printf("您输入的十个数是:\n"); for(i=0; i<10; i++) { printf("%d ",a[i]); } printf("\n...
琼中黎族苗族自治县13415755691: 如何用c语言写十个数,去掉最大数与最小数剩下的求平 - ?
历斌厄多: 从键盘输入10个数,保存到数组中,找到最大值最小值的序号即可. #include void main() { int num[10],min=0,max=0,avg=0,i; printf("请输入十个数!\n"); for(i=0;i<10;i++) { scanf("%d ",&num[i]); if(num[i]>num[max]) max=i; if(num[i] min=i; } for(i=0;i<10;i++) if((i!=max)&&(i!=min)) avg+=num[i]; printf("去掉最大值、最小值后的平均值为:%f\n",avg/(8.0)); }
琼中黎族苗族自治县13415755691: 大神,在C语言中怎么在数组中删除最大和最小的元素 - ?
历斌厄多: 先找到最大元素和最小元素下标. 然后把后续的依次前移即可. 比如 int del_max_min(int *a, int n ) {int maxi, mini,i,j;maxi=mini=0;for(i = 1;i<n; i++)if(a[maxi]<a[i]) maxi=i;else if(a[mini]>a[i])mini=i;for(i=j=0;i<n;i++)if(i!=maxi&&i!=mini)a[j++]=a[i];return j; }返回的是删除后 a中元素个数.
琼中黎族苗族自治县13415755691: C语言,输入五个数,去掉一个最大值和一个最小值,求剩余三个数的平均值 - ?
历斌厄多: #include float* GetMaxInNumArray(float* numarray) { int i = 0; float maxtemp = 0.00; float *max = numarray; maxtemp = *numarray; while(*(numarray+i) != -1.0) { if(*(numarray+i) > maxtemp) { max = (numarray+i); maxtemp = *(numarray+i);}i++;}...
琼中黎族苗族自治县13415755691: 在C语言程序中,随便输入十个数,去掉两个最大的数和两个最小的数,怎么编程 - ?
历斌厄多: 可以用冒泡排序#include "stdio.h" void main() { int a[10]; int i, j, temp; // 输入10个整型数据 printf("Please input ten numbers: \n"); for (i = 0; i scanf("%d", &a[i]); // 排序 for (i = 0; i { for (j = 0; j if (a[j] > a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } // 打印排序结果 for (i = 2; i printf("%d\n", a[i]); return 0; }
琼中黎族苗族自治县13415755691: 用c语言编写"输入10个无序的整数,去掉一个最大值和最小值,然后求其平均值" - ?
历斌厄多: #include<stdio.h> int main() { int i; int a[10]; int sum=0;; int min,max; int aver; printf("input ten numbers:"); for(i=0;i<10;i++) { scanf("%d\n",&a[i]); } min=a[0]; max=a[0]; for(i=0;i<10;i++) { if(min>a[i]) min=a[i]; if(max<a[i]) max=a[i]; sum=sum+a[i]; } ...
琼中黎族苗族自治县13415755691: C语言程序设计用循环语句输入十个数,去掉最大值和一个最小值,求平均值 - ?
历斌厄多: #include <stdio.h> float Average(float a[]); int main(void) { float a[10]; for(int i = 0;i < 10;i++) { printf("输入第%d个数:\n",i+1); scanf("%f",&a[i]); } printf("去掉最大最小值后的平均值为: %.2f\n",Average(a)); return 0; } float Average(float a[]) ...
琼中黎族苗族自治县13415755691: c语言 输入若干个数 以 - 1结束 去掉最大值和最小值 求平均值 - ?
历斌厄多: 可以不用数组实现. #includevoid main() { int i; float tmp, max = -32768.0, min = 32767.0, sum = 0.0; for (i = 0; imax) max = tmp; if (tmp
琼中黎族苗族自治县13415755691: C语言问题,任意输入十个数,去掉其中最大值和最小值,求剩余数的平均值,求教~ - ?
历斌厄多: 方法实现有多种: 一、最直观的方式: 1、将输入的十个数,存到数组中; 2、遍历数组,找到最大值和最小值; 3、从数组中将最大值和最小值移除; 4、将剩余的8个数值累加,并将和值除以8,得到平均值; 5、输出结果. 二、优化方式: ...
琼中黎族苗族自治县13415755691: C语言输入10个数去掉最大值最小值求剩下数的和 - ?
历斌厄多: 这题考察数组的知识,代码如下: #include<stdio.h> int main() { int a[10],n,max,min,maxxiabiao,minxiabiao; for(n=0;n<=9;n++) { scanf("%d",&a[n]); } max=min=a[0]; maxxiabiao=minxiabiao=0; for(n=0;n<=9;n++) { if(a[n]>max) { max=a[n]; ...