以下程序的功能是计算十个数据的平均值。找出其中的错误并改正之。 #include <stdio.h> void main(void) { int i, sum; float avg; int sc[10], *p = sc; for (i=0, i<10, i++) { scanf("%d", p); p++; sum += *p; } avg = sum / 10; printf("avg=%f\n", avg); }
时间: 2024-02-14 10:10:20 浏览: 220
以下是改正后的程序:
```
#include <stdio.h>
void main(void) {
int i, sum = 0;
float avg;
int sc[10], *p = sc;
for (i = 0; i < 10; i++) {
scanf("%d", p);
sum += *p;
p++;
}
avg = (float) sum / 10;
printf("avg=%f\n", avg);
}
```
主要的错误是:
1. `sum` 没有初始化,导致计算平均值时会出现错误。
2. 在循环条件中使用了逗号运算符,应该使用分号。
3. 在计算平均值时,整数除法会导致结果被截断,应该将其中一个操作数强制转换为浮点数。
相关问题
6-6 实数数组 - 6. 数据的统计 - 平均值(*) 分数 10 请编写函数,求实数数组元素的平均值。 函数原型 double ArrayAvg(const double *array, int size); 说明:array 为数组的起始地址,size 为数组元素个数。函数值为数组 array 中 size 个实数的平均值。 裁判程序 #include <stdio.h> #include <stdlib.h> #define arraySize 1024 void ArrayInput(double *array, int size); double ArraySum(const double *array, int size); double ArrayAvg(const double *array, int size); int main() { double a[arraySize]; int n; scanf("%d", &n); if (n < 1 || n > arraySize) { puts("Error!"); exit(1); } ArrayInput(a, n); printf("%g\n", ArrayAvg(a, n)); return 0; } ...... /* 你提交的代码将被嵌在这里 */ 说明:ArrayInput 函数输入数组,ArraySum 函数求总和。
实现代码如下:
```c++
double ArrayAvg(const double *array, int size) {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += array[i];
}
return sum / size;
}
```
该函数的思路很简单,就是遍历整个数组,累加每个元素的值,最后除以元素个数即可得到平均值。注意要将 sum 和 size 声明为 double 类型,这样除法运算才会得到精确的结果。
用c语言写利用分治算法求一个n运算数组的最大元素和最小元素 【输入形式】输入两行,第一行为一个整数n(n<100).第二行为数组的n个元素; 【输出形式】输出两个数,一个是数组最大元素的值,一个是数组最小元素的值,中间用空格隔开 【样例输入】 8 8 3 2 9 7 1 5 4 【样例输出】 9 1 【样例说明】 数组中有8个元素,最大值为9,最小值为1 ; 【算法伪代码】 image.png #include <stdio.h> #include <stdlib.h> void maxmin(int A[],int l,int r,int *maxval,int *minval) { } int main() { int maxv,minv; int A[100]; int i,n; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&A[i]); } maxmin(A,0,n-1,&maxv,&minv); printf("%d %d",maxv,minv); return 0; }
以下是利用分治算法求一个n运算数组的最大元素和最小元素的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
void maxmin(int A[], int l, int r, int *maxval, int *minval)
{
if (l == r) // 只有一个元素
{
*maxval = A[l];
*minval = A[l];
return;
}
if (l + 1 == r) // 只有两个元素
{
if (A[l] > A[r])
{
*maxval = A[l];
*minval = A[r];
}
else
{
*maxval = A[r];
*minval = A[l];
}
return;
}
int mid = (l + r) / 2;
int max1, min1, max2, min2;
maxmin(A, l, mid, &max1, &min1);
maxmin(A, mid + 1, r, &max2, &min2);
*maxval = max1 > max2 ? max1 : max2;
*minval = min1 < min2 ? min1 : min2;
}
int main()
{
int maxv, minv;
int A[100];
int i, n;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &A[i]);
}
maxmin(A, 0, n - 1, &maxv, &minv);
printf("%d %d", maxv, minv);
return 0;
}
```
其中,maxmin函数中的分治算法思想是:将数组A[l...r]平均分成两个子数组A[l...mid]和A[mid+1...r],然后分别递归求解这两个子数组的最大值和最小值,最后将这两个子数组的最大值和最小值合并成整个数组的最大值和最小值。递归的结束条件是只有一个元素或者只有两个元素。
阅读全文