扒皮微博母神aki:读入20个整数,统计出非负数个数及其和,且按从小到大的次序 输出

来源:百度文库 编辑:高校问答 时间:2024/05/07 02:44:17
用数组的相关知识解决

首先用个冒泡进行排序,再判断非负数个数,再将非负数个数装入另一个数组
:

#include<stdio.h>
void main(){
int a[20],i,j,k=0,sum=0,t;
int b[20];int l=0;
for(i=0,i<20;i++)
scanf("%d",&a[i]);
/*以下是冒泡排序*/
for(i=0;i<20;i++)
{for(j=i+1;j<20;j++)
{if(a[i]>a[j])
t=a[i];a[i]=a[j];a[j]=t; }
}
/*以下是判断数组中的非负数及求非负数的个数*/
for(i=0;i<20;i++)
{if(a[i]>=0) ++k;
b[l]=a[i];++l;}
/*以下是求非负数的和*/
for(i=0;i<=l;i++)
sum=sum+b[i];
/*以下是输出排好序后的整个数组*/
for(i=0;i<20;i++)
printf("suzhu:%d ",a[i]);
/*以下是输入出非负数的个数及非负数的和*/
printf("\n sum=%d,geshu=%d",sum,k);
}
//----------------------------------------------------------------
程序未经调试可能存在一些小错误。但基本思想是这样的,你也可以把程序简化。
如果你还想把非负数给输出来的话,只须要输出b数组就行了,而且b数组也决对是从小到大排好序的。
一楼的b数组可能会存在没有初始化的问题而出现乱盛码也加上了。
要注意这个问题!~!

#include<stdio.h>
main()
{
int i,j,k,temp,count=0,sum=0,a[20],b[20];
printf("plz input 20 numbers:");
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0,j=0;i<20;i++)
if(a[i]>=0)
{
count++;
sum+=a[i];
b[j]=a[i];
j++;
}
printf("非负数的个数为%d,和为%d\n",count,sum);
for(i=0;i<count-1;i++)
{
k=i;
for(j=i+1;j<count;j++)if(b[j]<b[k])k=j;
temp=b[k];b[k]=b[i];b[i]=temp;
}
printf("非负数从小到大输出为:\n");
for(i=0;i<count;i++)
printf("%d,",b[i]);

}

#include<iostream.h>

void main()
{
int a[]={20, -10, 20, 2,-2,60,19};
int count = 0;
for(int i = 0;i<sizeof(a)/sizeof(int);i++)
{
for(int j = i + 1;j<sizeof(a)/sizeof(int);j++)
{
if(a[i]>a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
if(a[i]<0)
count++;
}
cout<<count<<endl;
for(i = 0;i<sizeof(a)/sizeof(int);i++)
cout<<a[i]<<"\t";
cout<<endl;
}