自己写的程序 不知道错在什么地方 求解~~
//程序功能:输入十个整数;找出最大数、最小数、并求出平均数
#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 未定义
#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;}
[解决办法]
#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]