#include<stdio.h>
int f(int a[], int n, int *pmax, int *pmin);
int main() {
int n;
int a[n];
int sum;
int *pmax, *pmin;
scanf("%d", &n);
scanf("%d", a[n]);
sum= f( a[], n,int *pmax,int *pmin);
printf("%d%d%d", sum, pmax, pmin);
}
int f(int a[], int n, int* pmax, int* pmin)
{
int sum, n,i=0;
for (int i = 0; i < n; i++)
sum += a[i];
*pmax = a[0];
if (*pmax < a[i])
*pmax = a[i];
if (*pmin > a[i])
*pmin = a[i];
}
这是我写的,有很多问题
1首先,函数里的应该和声明里的是一样的,地址就是地址应该出现地址,我还记得在寝室,室友听到过 、
2然后是函数没有返回值
3然后是重定义,不应该在主函数和缝合函数一起比如我的n
4还有定义的时候就不要在定义和函数里的形参一样的变量名了,定义别的
5还有一个,我遍历数组都没有遍历
6函数里的sum我没有定义初始值(一定要定义,不然默认是随机数)
7然后在计算最大最小的时候,循环和定义那个*pmax的值的位置关系出了问题,应该在循环之前写出来,不然每次都会重定义一遍,就会出问题
总结:1,每次写完函数都要写上return
2每次定义不管接下来会不会赋值,都先给他赋值
3定义变量值永远在前
上面是我无数遍拷打gpt,加上自己反复的检查出来的问题
下面是gpt第一遍就对了的代码(室友的差不多)
#include <stdio.h>
int f(int a[], int n, int *pmax, int *pmin) {
int sum = 0;
*pmax = *pmin = a[0]; // 初始化最大值和最小值为数组的第一个元素
for (int i = 0; i < n; i++) {
sum += a[i]; // 计算总和
if (a[i] > *pmax) {
*pmax = a[i]; // 更新最大值
}
if (a[i] < *pmin) {
*pmin = a[i]; // 更新最小值
}
}
return sum; // 返回总和
}
int main() {
int n, max, min;
int sum;
// 输入数组大小和数组元素
scanf("%d", &n);
int a[n];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 调用函数计算最大值、最小值和总和
sum = f(a, n, &max, &min);
// 输出最大值、最小值和总和
printf("%d %d %d\n", max, min, sum);
return 0;
}