#include<stdio.h> //需要引入的文件 //如提示运行通过,但解题失败,认真对比预期输出和实际输出之间的差异 int n; void fun(float a[] ,float *min,float *max,float *aveg) { int i; *min=*max=*aveg=a[0]; for (i=1;i<n;i++) { if(a[i] < *min) { *min=a[i]; } if(a[i]>*max) { a[i]=*max; } *aveg +=a[i]; } *aveg=*aveg/n; } int main() { scanf("%d",&n); float a[99]; float aveg, min, max; for (int i = 0; i < n; i++) scanf("%f", &a[i]); fun(a, &max, &min, &aveg); printf("max:%.2f\nmin:%.2f\naveg:%.2f\n", max, min, aveg);//这里被卡输出了 我习惯平均数用avg 题目是aveg //put your codes here. return 0; }
时间: 2023-12-03 18:43:29 浏览: 49
这段代码实现了对输入的数组进行最大值、最小值和平均值的计算,并输出结果。但是在函数 `fun` 中,第 12 行的代码存在错误,应该将 `a[i]=*max;` 改为 `*max=a[i];`,即:
```c
if (a[i] > *max) {
*max = a[i];
}
```
另外,题目要求保留两位小数,可以在输出时使用 `%.2f` 格式控制符,如下所示:
```c
printf("max: %.2f\nmin: %.2f\naveg: %.2f\n", max, min, aveg);
```
相关问题
#include<stdio.h> //需要引入的文件 //如提示运行通过,但解题失败,认真对比预期输出和实际输出之间的差异 int n; void fun(float a[] ,float *min,float *max,float *aveg) { int i; *min = *max= *aveg = a[0]; for (i=1;i<n;i++) { if(a[i] < *min) { *min=a[i]; } if(a[i]>*max) { a[i]=*max; } *aveg +=a[i]; } *aveg=*ave/n; } int main() { scanf("%d",&n); float a[99]; float aveg, min, max; for (int i = 0; i < n; i++) scanf("%f", &a[i]); fun(a, &max, &min, &aveg); printf("max:%.2f\nmin:%.2f\naveg:%.2f\n", max, min, aveg);//这里被卡输出了 我习惯平均数用avg 题目是aveg //put your codes here. return 0; }
这段代码存在以下错误:
1. 在 `fun` 函数中,最大值的更新语句 `a[i]=*max;` 应该改为 `*max=a[i];`。
2. 在 `fun` 函数中,计算平均数时, `*aveg=*ave/n;` 应该改为 `*aveg=*aveg/n;`。
3. 在 `fun` 函数中,最大值、最小值、平均数的初始化语句 `*min = *max= *aveg = a[0];` 应该放在循环语句之前,否则会出现无法正确计算的问题。
修改后的代码如下:
```
#include <stdio.h>
void fun(float a[], float *min, float *max, float *aveg) {
int i;
*min = *max = *aveg = a[0];
for (i = 1; i < n; i++) {
if (a[i] < *min) {
*min = a[i];
}
if (a[i] > *max) {
*max = a[i];
}
*aveg += a[i];
}
*aveg = *aveg / n;
}
int main() {
int n;
scanf("%d", &n);
float a[99], aveg, min, max;
for (int i = 0; i < n; i++) {
scanf("%f", &a[i]);
}
fun(a, &min, &max, &aveg);
printf("max:%.2f\nmin:%.2f\naveg:%.2f\n", max, min, aveg);
return 0;
}
```
用c语言编写求一元二次方程的根 描述 求ax2+bx+c=0方程的根。a,b,c由键盘输入,设b2-4ac>0。 注意: 1、a、b、c三个变量由一条输入语句输入,中间用逗号分隔,无需考虑虚根情况。 2、求平方根需要使用函数sqrt(),例如sqrt(b*b-4*a*c),需提前使用#include<math.h> 将库文件引入。 解题思路:首先要知道求方程式的根的方法。由数学知识已知:如果b2-4ac≥0,则一元二次方程有 两个实根:x1=-b+vb2-4ac 2a 20 x2=-b-v62-4ac,将分式分为两项:p=50q-vb2-4ac 2a 则 x1=p+q,x2=p-q,有了这些式子,只要知道a,b.c的值,就能顺利地求出方程的两个根的代码
以下是用C语言编写求一元二次方程根的代码:
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, x1, x2, delta;
printf("请输入一元二次方程的系数a,b,c(中间用逗号分隔):");
scanf("%lf,%lf,%lf", &a, &b, &c);
delta = b * b - 4 * a * c;
x1 = (-b + sqrt(delta)) / (2 * a);
x2 = (-b - sqrt(delta)) / (2 * a);
printf("方程的根为:x1=%.2lf, x2=%.2lf\n", x1, x2);
return 0;
}
解释:
1. 首先定义了变量a、b、c、x1、x2和delta,分别表示方程的系数、根和判别式。
2. 通过printf函数输出提示信息,让用户输入方程的系数a、b、c。
3. 使用scanf函数读取用户输入的系数,并将它们存储在对应的变量中。
4. 计算判别式delta,如果delta小于0,则方程无实数根,但由于题目中已经说明了b2-4ac>0,因此无需考虑虚根情况。
5. 根据求根公式计算方程的两个根x1和x2。
6. 使用printf函数输出方程的两个根,保留两位小数。
7. 程序结束。
阅读全文