首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

自各儿写的程序 不知道错在什么地方 求解~

2012-07-31 
自己写的程序不知道错在什么地方 求解~~//程序功能:输入十个整数;找出最大数、最小数、并求出平均数#include

自己写的程序 不知道错在什么地方 求解~~
//程序功能:输入十个整数;找出最大数、最小数、并求出平均数
#include <stdio.h>
int max,min;
int list(int * p)
{

int t,i,j;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
{
if(*(p+i)>*(p+j))
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
for(i=0;i<10;i++)
printf("%d",*(p+i));
max=*(p+9);
min=*p;
return 0;
}
float ave(int * q)
{
float sum=0;
for(int i=0;i<10;i++)
sum=sum+(*(q+i));
return sum/10;

}
void main(void)
{
int a[10];
printf("请输入十个整数:");
for(int i=0;i<10;i++)
scanf("%d",&a[i]);
list(a);
  printf("\n max=%d \nmin=%d\n",max,min); 
printf("average is :%g \n",ave(a));

}

[解决办法]
1、main 函数中max 和min 未定义

C/C++ code
#include <stdio.h>#define N 10void Find(int * p, int *max, int *min){    int i = 0;    *min = *max = p[0];    for(i = 0; i < N; i++)    {        if(p[i] > *max)        {            *max = p[i];        }        if(p[i] < *min)        {            *min = p[i];        }    }}float ava(int * p){    int i = 0;    float sum = 0;    for(i = 0;i < N; i++)    {        sum += p[i];    }    return sum / N;}int main(){    int min,max;    int arr[] = {1,32,43,34,65,65,23,4,12,10};    Find(arr, &max, &min);    printf("min = %d, max = %d\n", min, max);    printf("ava = %f\n", ava(arr));    return 0;}
[解决办法]
C/C++ code
#include <stdio.h>int max,min;   /* 尽量不要使用全局变量吧,虽然全局变量使用方便,但是也有其不好的,通过参数可以实现*/int list(int * p){int t,i,j;    for(i=0;i<10;i++)   /* 冒泡派讯,建议把这个功能单独拿出来作为一个函数来实现。*/       for(j=1;j<10 - i - 1;j++) /*冒泡排序 */       {           if(*(p+i)>*(p+j)) { /* 这儿应该是下面三条语句的判断语句 */               t=*(p+i);               *(p+i)=*(p+j);               *(p+j)=t;           }       }    for(i=0;i<10;i++)        printf("%d ",*(p+i));    putchar('\n');    max=*(p+9);    min=*p;    return 0;}float ave(int * q){   int i;   float sum=0;   for(i=0;i<10;i++)       sum=sum+(*(q+i));   return sum/10;}void main(void){int a[10];printf("请输入十个整数:");for(int i=0;i<10;i++)scanf("%d",&a[i]);list(a);  printf("\n max=%d \nmin=%d\n",max,min);  printf("average is :%g \n",ave(a));}
[解决办法]
问题出在for(j=i+1;j<10;j++)
 {
 if(*(p+i)>*(p+j))
 t=*(p+i);
 *(p+i)=*(p+j);
 *(p+j)=t;
 }
这里的if条件后面要加{},不然就算条件不成立*(p+i)=*(p+j);
 *(p+j)=t;还是会执行;还有你的输入数据格式最好加个逗号scanf("%d,",&a[i]);
可以试试
[解决办法]
4#正解,补充三点,一是输入数据格式最好加逗号不需要,二是list函数中输出10个整数时注意输出格式,三是2#关于全局变量使用的建议不错,如果只是要求找出最大最小值排序不必要。
[解决办法]
直接调用标准库函数qsort
[code=c/c++]
#include <stdio.h>
#include <stdlib.h>

int compare(const void* pA, const void* pB) {
  return (*(int *)pA - *(int *)pB);
}

int main(int argc, const char** argv) {
  int a[10];
  int sum = 0;

  printf("Please input 10 integer(s):");
  int i = 0;
  for(; i < 10; ++i) {
    scanf("%d",&a[i]);
    sum += a[i];
  }
  qsort(a, 10, sizeof(*a), compare);

  printf("Max=%d Min=%d Ave=%f\n", a[9], a[0], sum/10.0); 


  return 0;
}

[/code]

热点排行