标题:输入一些整数,求min max 平均值 ,第一行表示输入的整数个数,第二个是输入 ...
只看楼主
smartpig
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-5-17
结帖率:100%
已结贴  问题点数:10 回复次数:4 
输入一些整数,求min max 平均值 ,第一行表示输入的整数个数,第二个是输入的数据,问题在注释里
#include<stdio.h>
#define NIF 1000000000
int main()
{
    int x,n=0,min=NIF,max=-NIF,s=0,kase=0;
    while(scanf("%d",&n)==1&&n)//0:这里为什么还要判断==1&&n,是什么意思?
    {
        int s=0;//1: 上边定义一个了s=0,为什么在这里还得写?
        for(int i=0;i<n;i++){
            scanf("%d",&x);
            s+=s;
            if(x<min)min=x;
            if(x>max)max=x;   
        }
        if(kase)printf("\n");//2 :这个什么意思,有什么作用么?
        printf("Csae %d:%d %d %.3f\n",++kase,min,max,(double)s/n);        
    }   
    return 0;
}

[此贴子已经被作者于2021-5-17 16:01编辑过]

搜索更多相关主题的帖子: 输入 整数 int min max 
2021-05-17 15:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
while(scanf("%d",&n)==1&&n)//0:这里为什么还要判断==1&&n,是什么意思?
scanf("%d",&n) 的返回值指示的是“成功读取到的字段数目”,
while(scanf("%d",&n)==1&&n) 应该这么分段 while( scanf("%d",&n)==1 && n!=0 ),也就是“当成功读取数据到n中,且n不是0时”
从代码 while(scanf("%d",&n)==1&&n) 可以看出你贴出来的题目要求似乎不对, 不是“第一行表示输入的整数个数,第二个是输入的数据”,而是“每次‘第一行表示输入的整数个数,第二个是输入的数据’,直到输入0或输入出错为止。

int s=0;//1: 上边定义一个了s=0,为什么在这里还得写?
估计上面的s是哪个烂叉叉定义的。

if(kase)printf("\n");//2 :这个什么意思,有什么作用么?
'\n'是换行符,估计题目要求每个输出case间需要间隔一行。

代码中有好多低级错误,修改后如下:(但要注意,以下代码未必符合题意,因为你根本就没给出完整的题目要求,只有神仙能猜出题目要求
程序代码:
#include <stdio.h>
#include <limits.h>

int main( void )
{
    for( size_t index=0,n; scanf("%zu",&n)==1 && n!=0; ++index )
    {
        int minval = INT_MAX;
        int maxval = INT_MIN;
        double sum = 0;

        for( size_t i=0; i!=n; ++i )
        {
            int value;
            scanf( "%d", &value );

            if( value < minval )
                minval = value;
            if( value > maxval )
                maxval = value;
            sum += value;
        }

        printf( "Case %zu:%d %d %.3f\n\n", index+1, minval, maxval, sum/n );
    }
}
2021-05-17 16:44
smartpig
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-5-17
得分:0 
回复 楼主 smartpig
题目要求:输入一些整数,求出他的最小值,最大值和平均值(保留三位数)。输入保证这些数都是不超过1000的整数。输入包含多组数据,每组数据第一行是整数个数你,第二行是n个整数。n=0为输入结束标志,程序应当忽略这组数据。相邻两组数据之间应该输出一个空行。
1.那也就是说s=0,其中的是定义多余的?
2.if(kase)printf("n\")是判断的什么意思?
您可以给讲一下么?
2021-05-17 17:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
2.if(kase)printf("n\")是判断的什么意思?
判断是不是第一个case,如果不是的话,先输出个空行。
2021-05-17 20:39
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
得分:0 
int main()
{
    int x,n=0,min=NIF,max=-NIF,s=0,kase=0;// 这个s重定义并没有用到
    while(scanf("%d",&n)==1&&n)// 这种判断方式是错误的, 一定等号右边加了一个括号(1&&n)程序会出现错误
    {
        int s=0;    // 这个s相加没有任何意义, 因为它的值总是0
        for(int i=0;i<n;i++){
            scanf("%d",&x);
            s+=s;
            if(x<min)min=x;
            if(x>max)max=x;     // min和max并不是宏一但循环2次就会改变数值出现错误
        }
        if(kase)printf("\n");// 这行代码可以删掉, 没有任何意义, 多余, 下行已经加了\n
        printf("Csae %d:%d %d %.3f\n",++kase,min,max,(double)s/n);  // s总是0, s/n并不能得出平均数
    }   
    return 0;
}
2021-05-17 21:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505760-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.105715 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved