PTA从键盘输入n个整数,求出这n个数的平均值及其中的最大数和最小数。 从键盘输入一个正整数,要求编程实现以下功能: 求出这个数是几位数,并输出其位数; ② 输出这个数的逆序数。

题目一

从键盘输入n(3<=n<=20)个整数,求出这n个数的平均值及其中的最大数和最小数。
输入格式:
在第一行输入一个介于3至20之间的整数n,在第二行输入n个整数,中间用一个空格分隔数据。
输出格式:
依次输出平均值(保留2位小数),最大值,最小值,中间用逗号,分隔,最后换行。
保留两位小数这个地方,emmm,明显的需要浮点数对吧
最大值一定不为0对吧,所以开始的时候可以将最大值赋值为0,最小值就不能这么做了,因为不确定。
感觉审题不认真挺吃亏的

答案一(没有用数组)

#include<stdio.h>
int main()
{
    int n,i,a,sum,max,min;
    float ave;
    scanf("%d",&n);
    sum=max=i=0;
    while(i<n)
    {
        scanf("%d",&a);
        sum=sum+a;
        if(max<a)
        max=a;
        if(i==0)
        min=a;
        if(min>a)
        min=a; 
        i++;      
    }
    /*可以替换为
    for(i=0;i<n;i++)
    {
    	scanf("%d",&a);
        sum=sum+a;
        if(max<a)
        max=a;
        if(i==0)
        min=a;
        if(min>a)
        min=a; 
    }*/
    ave=sum*1.0/n;
    printf("%.2f,%d,%d\n",ave,max,min);
    return 0;
}

答案二(用的数组,这个答案不是我写的。。。。。。这个题的要求没啥必要用数组,而且这个答案也不完美。。。学过的第一眼就看出来数组长度有问题,如果数多的话这个根本就不适用了,有时间大家可以改着玩玩,wo xian liu le!改别人的代码太费劲了)

#include<stdio.h>
int main()
{
	int i,j, t, n;
	float sum = 0.00;
	int a[1000];
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf("%d",&a[i]);
		sum = sum + a[i];
	}
	for (i = 0; i < n-1;i++)
		for (j = i + 1; j < n;j++)
			if (a[i] > a[j])
			{
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
	printf("%.2f,%d,%d\n", sum /n,a[n-1], a[0]);
	return 0;
}

题目二(这个题目我没做出来。。。。。。。。)

从键盘输入一个正整数(不超过9位,即最多9位),要求编程实现以下功能:
① 求出这个数是几位数,并输出其位数;
② 输出这个数的逆序数。
输入格式:
输入一个正整数(不超过9位,即最多9位)。
输出格式:
输出刚刚输入的正整数,包含的位数及其逆序数,中间用英文逗号分隔开,最后换行。
自己的错误的。。。。。

#include<stdio.h>
#include<math.h>
int main()
{
    int a,b,c,d,e,f,m;
    int k;
    a=c=d=0;
    scanf("%d",&k);
    a=k;
    b=0;
    while(k!=0)						//也是为了退出循环,这里k会变化  所以上一句我把k存到a里面了
    {
        k=k/10;
        b++;						//这个就是我打算求位数的计数器b
    }
    e=1;
    while(e<=b)
    {
        f=a%10;
        a=a/10;
        c=f*pow(10,(b-e))+c;				//个人感觉是这个出了问题,但是才疏学浅搞不懂
        e++;
    }
    printf("%d,%d,%d",a,b,c);
    return 0;
}
//我自己的错误代码  希望大家能够帮忙找找错误。我跑的时候就直接int main()这里就error了  
//我不太清楚原理,大牛看到的话帮帮我

用pow函数报错。这是个死胡同,我走不出来了,希望大家指点我一下!(抱拳)
下面这个是改正以后的,没有用pow函数。里面的while可以用for替换,为了容易看,我就不换了。

答案一


#include<stdio.h>
int main()
{
    int a,b,c,d,e,f,m;
    int k;
    a=c=d=b=0;
    scanf("%d",&k);
    a=k;
    m=a;
    while(k!=0)
    {
        k=k/10;
        b++;
    }
    e=0;
    while(e<b)
    {
        c=c*10+a%10;
        a=a/10;
        e++;
    }
    printf("%d,%d,%d",m,b,c);
    return 0;
}

答案二(更简单一些,判断数位拿到下面顺便做了,就不需要像答案一单独判断了。)

#include <stdio.h>
int main()
{
    int x, a,c=0,b=0; 				//这边b不置零的话会有随机数的影响,可能会出现位数不对的情况
    scanf("%d",&x);
    a=x;
    while(x!=0)					//判断条件,保证能够顺利退出
    {
        c=c*10+x%10;
        x=x/10;
        b++;				//不管正反  这个数的位数始终都是不变的对吧 所以位置在哪都行
    }
    printf("%d,%d,%d",a,b,c);
    return 0;
}

答案三(用的数组做的)

#include<stdio.h>
int main()
{
    long a,n=0,b[10],i;
    scanf("%ld",&a);
    printf("%ld,",a);
    while(a>0)
    {
        b[n]=a%10;
        a=a/10;    
        n++; 
    }
    printf("%d\,",n);
    for(i=0;i<n;i++)
    printf("%d",b[i]);
    return 0;
}
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值