#include <stdio.h> int findmax(int *x,int *num,int n); int main() { int a[10],num,max,n; for(n=0;n<10;n++) scanf("%d",&a[n]); max=findmax(a,&num,n); printf("最大值%d共有%d个",max,num); return 0; } int findmax(int *x,int *num,int n) { int i,j,temp,max; for(i=0;i<n;i++) { temp=*(x+i); for(j=i+1;j<=n;j++) { temp=*(x+i); if(*(x+i)<*(x+j)) { *(x+i)=*(x+j); *(x+j)=temp; } } } max=*(x+n); for(i=0;i<=n;i++) { if(*(x+i)==*(x+n)) { *(num)++; } } return max; }哪里有问题【问题描述】 输入10个数,查找这些数中的最大数及个数。 【输入形式】 输入任意10个数,用空格分开。 【输出形式】 文字组成的的提示信息 【样例输入】 1 3 5 3 8 2 8 8 7 2 【样例输出】 最大值8共有3个
时间: 2024-03-30 11:35:45 浏览: 35
这段代码存在以下问题:
1. 在函数findmax中,for循环的终止条件应该是j<n而不是j<=n,因为数组的下标是从0开始的,最后一个元素的下标是n-1。
2. 在函数findmax中,第一个for循环中的temp=*(x+i)应该放在循环内部的第一行,而不是循环外部。
3. 在函数findmax中,第二个for循环的终止条件应该是i<n而不是i<=n,因为最后一个元素已经被赋值给了max,不需要再比较一次。
4. 在主函数中,应该在读入数据后再计算max和num的值,而不是在函数findmax中计算。
下面是修改后的代码:
相关问题
#include <stdio.h> int findmax(int *x,int *num,int n); int main() { int a[10],num,max,n; for(n=0;n<10;n++) scanf("%d",&a[n]); max=findmax(a,&num,n); printf("最大值%d共有%d个",max,num); return 0; } int findmax(int *x,int *num,int n) { int i,j,temp; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { temp=*(x+i); if(*(x+i)<*(x+j)) { *(x+i)=*(x+j); *(x+j)=temp; } } } for(i=0;i<n;i++) { if(*(x+i)==*(x+n-1)) { *(num)++;} } return *(x+n-1); }哪里有问题
在调用函数 `findmax` 时,`n` 的值还没有被初始化。应该在输入数组 `a` 的时候获取它的长度并且传递给函数。所以需要将 `n` 的声明提到输入数组的前面,并在输入数组后调用 `findmax` 函数。修改后的代码如下:
```c
#include <stdio.h>
int findmax(int *x, int *num, int n);
int main() {
int a[10], num = 0, max, n;
for (n = 0; n < 10; n++) {
scanf("%d", &a[n]);
}
max = findmax(a, &num, n);
printf("最大值%d共有%d个", max, num);
return 0;
}
int findmax(int *x, int *num, int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
temp = *(x + i);
if (*(x + i) < *(x + j)) {
*(x + i) = *(x + j);
*(x + j) = temp;
}
}
}
for (i = 0; i < n; i++) {
if (*(x + i) == *(x + n - 1)) {
*(num)++;
}
}
return *(x + n - 1);
}
```
编程输入10个数,找出其中的最大值及其所在的数组下标位置。找出其中错误并改正之。 #include <stdio.h> int FindMax(int num[], int n, int *pMaxPos); main() { int num[10], maxValue, maxPos, minValue, minPos, i; printf("Input 10 numbers:\n "); for (i=0; i<10; i++) { scanf("%d", num[i]); } maxValue = FindMax(num, 10, *maxPos); printf("Max=%d, Position=%d\n",maxValue, maxPos); } int FindMax(int num[], int n, int *pMaxPos) { int i, max; max = num[0]; for (i = 1, i < n, i++) { if (num[i] > max) { max = num[i]; *pMaxPos = i; } } return max; }
有几个错误需要修改,具体如下:
1. 在函数 `FindMax` 的参数 `pMaxPos` 前应该加上 `*`,即 `int *pMaxPos`,表示传入的是指针类型。
2. 在 `main` 函数中,调用 `FindMax` 函数时,第三个参数应该是一个指针类型,即应该传入 `&maxPos` 而不是 `*maxPos`。
3. 在 `main` 函数中,调用 `scanf` 函数时,应该加上 `&`,即应该写成 `scanf("%d", &num[i]);`。
4. 在 `FindMax` 函数中,`for` 循环的条件中,应该用逗号分隔,即应该写成 `for (i = 1; i < n; i++)`。
修改后的代码如下所示:
```
#include <stdio.h>
int FindMax(int num[], int n, int *pMaxPos);
int main() {
int num[10], maxValue, maxPos, i;
printf("Input 10 numbers:\n");
for (i = 0; i < 10; i++) {
scanf("%d", &num[i]);
}
maxValue = FindMax(num, 10, &maxPos);
printf("Max=%d, Position=%d\n", maxValue, maxPos);
return 0;
}
int FindMax(int num[], int n, int *pMaxPos) {
int i, max;
max = num[0];
for (i = 1; i < n; i++) {
if (num[i] > max) {
max = num[i];
*pMaxPos = i;
}
}
return max;
}
```
阅读全文