c语言#include<stdio.h> #define N 10 main() { int a[10],i,j,t; float avg; for(i=0;i<N;i++) scanf("%d

#include<stdio.h>
#define N 10
main()
{
int a[10],i,j,t;
float avg;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;j++)
for(j=0;j<N-1-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
printf("Maximum:a[0]=%d\n",a[0]);
printf("Minimum:a[9]=%d\n",a[0]);
for(avg=0,i=0;i<N;i++)
avg+=a[i];
avg=avg/N;
printf("Average:%.1f\n",avg);
for(i=0;i<N;i++)
if(a[i]>=avg&&a[i-1]<=avg)
{
printf("Closest to:a[%d]=%d\n",i,a[i]);
printf("Less than:%d(%d0%)\n",i-1,i);
}
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
各位高手帮忙看看我的程序,哪里出了问题,题目是这样的1. 《仅出现一次的数》
( 教材习题5.2 ) ( filename: cp51.c )
编程序,输入10个整型数,输出这10个数中仅出
现一次的数,如没有这样的数,则输出:None. 。
例如,
输入:-12 36 72 36 87 99 87 87 -12 -35
输出:72 99 -35
输入:-12 36 72 36 87 99 72 87 -12 99
输出:None.

谢谢高手了,在下年轻,各位爱鄙视就鄙视吧 ,不怕

首先原程序有以下几个问题:
1.在排序时,for(i=0;i<N-1;j++),不能每次j++ 否则死循环;
2.if(a[j]>a[j+1]),这里的排序是递增的,但是后面的输出提示是递减的;
3.printf("Minimum:a[9]=%d\n",a[0]),不能说输出a[9]但是传参数用a[0];
4.后面打印的一些输出与题意无关,并且在程序设计的思路上,直接对数组进行排序,那么输出的顺序就不会符合题意了。

可以用这样一种思路,在输入时记录每个数字出现的频率,在输出时只输出频率为1的数字,如果一直没有输出,那么再打印None。
你可以再看一下自己的程序。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-06
上面的算法不对额,不是实现这个功能的,没有必要求其平均值啊……我自己帮你写了一个,你看看:
#include<stdio.h>
#define N 10
void main()
{
int array[N];
int i,j,temp,num=0;
printf("请输入十个整数:\n");
for(i=0;i<10;i++)
{
scanf("%d",&array[i]);
}
printf("仅出现一次的数有:\n");
for(i=0;i<10;i++)
{
for(j=i;j<10;j++)
{
if(array[j]<array[i])
{
temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
if(array[0]!=array[1])
printf("%d ",array[0]);
else num++;
for(i=1;i<9;i++)
{
if((array[i]!=array[i-1])&&(array[i]!=array[i+1]))
printf("%d ",array[i]);
else num++;
}
if(array[9]!=array[8])
printf("%d \n",array[9]);
else num++;
if(num==10)
printf("NONE!\n");
}
第2个回答  2011-01-06
你的程序是排序的,和题目要求不相关啊...
这是我写的:里面的排序可以用也可以不用
#include<stdio.h>
#define N 10
void main()
{
//int temp,min;
int a[N],i,j;
int flag[N]={1};//标记数组,1表示出现次数一次
int count=0;//计数器

//获取用户键入的十个数
printf("Enter %d numbers:",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
//选择排序,可以不需要
/*for(i=0;i<N-1;i++)
{
min=i;
//每轮选择排序选出i至N中最小的数并依次置于数组a[N]
for(j=i+1;j<N;j++)
if(a[min]>a[j])
min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}*/
//检测数组中的数字重复情况
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N;j++)
{
if(a[j]==a[i])
{
//相同的数都置零
a[i]=0;
a[j]=0;
}
}
}
//检测数组中各个数字
for(i=0;i<N;i++)
{
if(a[i]==0)
{
count++;//出现大于一次的数则计数器加一
}
else
printf("%-10d\n",a[i]);
}
if(count==N)//十个数全部都出现至少一次
printf("None\n");
}
第3个回答  2011-01-06
你这个程序根本和题目就对应不上,程序实现的功能是对数组排序,然后找出最大最小值,再找出平均值上下的两个数,你确定你没看错题?或者你找的代码对么?
第4个回答  2011-01-06
题目要输出的是“只出现一次”的数,你的程序输出的是什么你知道吗?
相似回答