作品得分问题,想试着用指针解决可是得不到期望结果,还请各位指点一下
#include
int main ()
{
int n,*p,t;
int i,j;
int sum=0;
double average;
scanf("%d",&n);
int grade[n];
for(i=0; i<n; i++)
{
scanf("%d",&grade[i]);
sum+=grade[i];
}
p=grade;
int max=*p,min=*(p+n-1);
for(i=0; i<n;i++,p++)
{
if(min>*(p+i))
{
min=*(p+i);
}
if(max<*(p+i))
{
max=*(p+i);
}
}
average=(sum-max-min)*1.0/n;
printf("%.2lf\n",average);
return 0;
}
错误太多了 大部分是数据类型的错误
#include<stdio.h>
int main ()
{
int n,t;
double *p;
int i,j;
double sum=0;
double average;
scanf("%d",&n);
double grade[n];
for(i=0; i<n; i++)
{
scanf("%lf",&grade[i]);
sum+=grade[i];
}
p=grade;
double max=*p,min=*p;
for(i=0; i<n;i++)
{
if(min>*(p+i))
{
min=*(p+i);
}
if(max<*(p+i))
{
max=*(p+i);
}
}
average=(sum-max-min)/(n-2);
printf("%.2lf\n",average);
return 0;
}
其实你写的大体是对的,主要错误在循环哪里,不需要p++,因为对数组取值你是通过*(p+i)来完成的,只要移动i就够了。
另外,算平均值时人数要-2(因为去掉了最高分最低分)
我把常规写法和你的指针写法都贴在下面,供你参考。如果对你有帮助,请采纳。
常规写法
#include <limits.h>
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
double sum = 0;
double c;
double max = 0;
double min = LONG_MAX;
for (int i = 0; i < n; i++) {
scanf("%lf", &c);
sum += c;
if (c > max)
max = c;
if (c < min)
min = c;
}
double avg = (sum - max - min) / (n - 2);
printf("%.2lf\n", avg);
return 0;
}
指针写法
#include <stdio.h>
int main () {
int n, *p, t;
int i, j;
int sum = 0;
double average;
scanf("%d", &n);
int grade[n];
for (i = 0; i < n; i++) {
scanf("%d", &grade[i]);
sum += grade[i];
}
p = grade;
int max = *p, min = *(p + n - 1);
for (i = 0; i < n; i++) {
if (min > *(p + i)) {
min = *(p + i);
}
if (max < * (p + i)) {
max = *(p + i);
}
}
average = (sum - max - min) * 1.0 / (n - 2);
printf("%.2lf\n", average);
return 0;
}
average=(sum-max-min)*1.0/n;错了啊,最高分最低分去掉,就少了2个人啊
average=(sum-max-min)*1.0/(n-2);