提示输入5个学生的成绩(保证分数在0~100之间),算出平均分、最高分、最低分,然后输出,请问我这哪里错了

/*
提示输入5个学生的成绩(保证分数在0~100之间),算出平均分、最高分、最低分,然后输出
分析:学生名字和成绩 结构体。
*/
#include <stdio.h>
int jisuan(int *p,int *max,int *min);
int main()
{
int a[5],avage=0,max=0,min=0;
for(int i=0;i<5;i++)
{
printf("input %d score:",i+1);
scanf("%d",&a[i]);
if(0>a[i] || a[i]>100 )
{
printf("error");
scanf("%d",&a[i]);
}
}
avage=jisuan(a,&max,&min);
printf("avage=%d,max=%d,min=%d\n",avage,max,min);
}
int jisuan(int *p,int *max,int *min)
{
int sum=0;
for(;*p!='\0';p++)
{
sum+=*p;
if(*p > *max) max=p;
if(*p < *min) max=p;
}
return sum/5;
}

#include <stdio.h>
int jisuan(int *p,int *max,int *min);
int main()
{int i=0;
int a[6] = {0},avage=0,max=0,min=100;//你定义的应该是a[6]并赋初值0,因为你这是数组,不是字符串,后面不会跟‘\0’

for(i=0;i<5;i++)
{
printf("input %d score:",i+1);
scanf("%d",&a[i]);
if(0>a[i] || a[i]>100 )
{
printf("error");
scanf("%d",&a[i]);
}
}
avage=jisuan(a,&max,&min);
printf("avage=%d,max=%d,min=%d\n",avage,max,min);
}
int jisuan(int *p,int *max,int *min)
{
int sum=0;
int i = 0;
for(;*p!='\0';p++)
{
sum+=*p;
if(*p > *max) *max=*p;
if(*p < *min) *min=*p;
}
return sum/5;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-12
if(*p > *max) max=p;
if(*p < *min) max=p;
不明白你这个想做什么?这样的话实际的max的值并没有改变。而且为什么两个都是max
sum/5;中,sum是int类型,会精度丢失追问

精度没关系。
if(*p > *max) max=p; // 如果*p值大于最大值,则将max指向p的地址
if(*p < *min) max=p; // 如果*p值小于最小值,则将min指向p的地址

追答

问题max指针是函数作用域,他在函数结束时候将被清除。

追问

不会啊,我在主函数中将max和min已经传进这个分函数了,不可能会被清空的

追答

不同的,这样,当你调用函数avage=jisuan(a,&max,&min);的时候,计算机会创建
一个临时指针叫做max(根据你的函数声明int jisuan(int *p,int *max,int *min);),然后,这个max指针存储接收到的地址,就是你传入的&max.那么很简单一个道理,当你执行max=p时发生了什么?max指针丢掉了传进来的&max,存储了p指针里的地址。然后函数调用完之后,这个创建的临时max指针被操作系统收回。实际上,你函数里做的一切都在这时化为乌有

本回答被提问者采纳
第2个回答  2014-09-12
#include <stdio.h>
//int jisuan(int *p,int *max,int *min);
int jisuan(int score[], int student_num, int *max, int *min);
int main()
{
int a[5],avage=0,max=0,min=0;
int i;
for(i=0;i<5;i++)
{
printf("input %d score:",i+1);
scanf("%d",&a[i]);
if(0>a[i] || a[i]>100 )
{
printf("error");
scanf("%d",&a[i]);
}
}
avage=jisuan(a, sizeof(a)/sizeof(int),&max,&min);
printf("avage=%d,max=%d,min=%d\n",avage,max,min);
}

int jisuan(int score[], int student_num, int *max, int *min)
{
int i = 0, sum = 0;

*max = score[0];
*min = score[0];

for (; i<student_num; i++)
{
sum += score[i];
if (*max < score[i]) *max = score[i];
if (*min > score[i]) *min = score[i];
}

return sum/5;
}

...算出平均分、最高分、最低分,然后输出,请问我这哪里错了
int main(){int i=0;int a[6] = {0},avage=0,max=0,min=100;\/\/你定义的应该是a[6]并赋初值0,因为你这是数组,不是字符串,后面不会跟‘\\0’for(i=0;i<5;i++){ printf("input %d score:",i+1);scanf("%d",&a[i]);if(0>a[i] || a[i]>100 ){ printf("error"...

从键盘输入5学生的成绩至数组中,将最低分的成绩输出。
printf("成绩最低的学生姓名是%s,成绩为%d\\n",name_min,min);return 0;}

从键盘输入若干学生的成绩(0~100)后(当输入-999时,结束输入),程序可...
def jisuan():'''从键盘输入若干学生的成绩(0~100)后(当输入-999时,结束输入),程序可计算平均成绩并输出最高分和最低分 Return max,min,avg'''scoreList=[]count=0 while(True):print "input a number:"a = float(raw_input())if(a==-999):break else:scoreList.append(a)count+=1 ...

输入5个学生4门课程的成绩,求(1)每个学生的总分(2)每门课程的平均分(3...
(1) 计算每个学生3门课程的总分和平均成绩;(2) 找出每门课程中成绩最好和成绩最差的学生,并输出这些学生的基本数据;(3) 3门课程总成绩按由高分到低分的顺序排序,输出排序后的学生的基本数据。\/ \/ VC++ 6.0测试通过。 键盘输入问题没解决,你自己去解决。 主要是要注意输入字符串的问题...

...个学生5门功课的平均成绩,每科平均成绩,然后输出最好成绩对应的学生...
for(i=0;i<10;i++,printf("\\n"))\/\/输入每个学生的成绩,这里我用随机数代替输入 for(j=0;j<5;j++){ stus[i][j]=rand()%101;printf("%d ",stus[i][j]);\/\/0~100 随机数 if(max<stus[i][j])max=stus[i][j],inxS=i+1;} printf("\\n每科平均成绩:");for(j=0;j<5...

已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成 ...
首先 for(j=0;j<4;j++)sum=sum+a[i][j];b[i]=sum\/4.0;b[i]赋值要在循环里面做。其次 排序 你这样排出来的结果应该是小到大 再次 printf("%d\\n",b[i]);b[]数组时float型的%d输出格式也不正确 我改过之后为 include <stdio.h> include <stdlib.h> int main(){ int a[5][4...

从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的...
从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时,结束输入。include<stdio.h> void main(){ float x,amax,amin;scanf("%f",&x);amax=x;amin=x;while(x>=0){ if(x>amax)amax=x;if(x<amin)amin=x;scanf("%f",&x);} printf("\\namax=%f\\namin=%f\\n"...

C语言~输入5个学生的学号,成绩,按成绩排序(升序),查找90分以上的
j+1];stu[j+1]=temp;} } } printf("学生信息如下(姓名、学号、年龄、成绩、平均分):\\n");for(i=0;i<n;i++){ printf("%s%d%d",stu.name,stu.num,stu.age);for(j=0;j<3;j++)printf("%d",stu.score[j]);printf("%.2f\\n",stu.aver);} } ...

...整数N(N<100表示学生的个数) 输入N个学生的成绩(0-100整数) 从高到...
void main(){ int n,i,j,temp=0;printf("请输入您要输入学生成绩的个数:");scanf("%d",&n);float socre[100];printf("请输入学生成绩:");for(i=0;i<n;i++)scanf("%f",&socre[i]);for(i=1;i<n;i++){ for(j=0;j<=i;j++){ if(socre[j]<socre[j+1]){ temp=...

...能输入并显示n个学生的m门考试科目的成绩、总分和平均分
1、采用逐个赋值法进行编程。首先打开编辑器创建工程并新建内容,输入标准输入输出头文件及main()主函数。2、定义总分与平均分变量。然后定义是个数值变量,并分别对其进行赋值。编辑计算总分与平均分的程序语句。输出计算求得的总分与平均分。3、首先打开编辑器创建工程并新建内容,然后在主函数中进行编辑...

相似回答