#include<stdio.h> #include<string.h> void abc(int a[],int n) { int *p=a; int i; int max=*p; int maxi=0; int l; l=strlen(a); for(i=0;i<l;i++) { if(*p>max) { max=*p; maxi=i; } p++; } } int main() { int a[25]; int n,max,maxi; while(scanf("%d",&n)!=EOF&&n!=0) { for(int i=0;i<n;i++) { scanf("%d",&a[i]); } abc(a,n); printf("%d %d",max,maxi); printf("\n"); } return 0; }这串代码有什么问题
时间: 2024-03-25 07:42:09 浏览: 107
这段代码存在以下问题:
1. 函数的返回值类型是void,没有返回max和maxi,导致主函数无法输出正确结果。
2. 函数中的l是字符串的长度,但是a是一个整型数组,strlen函数不能用于该数组。
3. 函数中的max和maxi没有进行初始化,可能导致输出错误的结果。
4. 函数中没有考虑如果数组为空或者只有一个元素的情况。
5. 主函数中没有对变量max和maxi进行定义,也没有调用函数abc。
6. 在循环中,应该使用i<n而不是i<25,因为数组长度是n而不是25。
改进后的代码如下:
```c
#include<stdio.h>
void abc(int a[], int n, int *max, int *maxi) {
int i;
*max = a[0];
*maxi = 0;
for (i = 0; i < n; i++) {
if (a[i] > *max) {
*max = a[i];
*maxi = i;
}
}
}
int main() {
int a[25];
int n, max, maxi;
while (scanf("%d", &n) != EOF && n != 0) {
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
abc(a, n, &max, &maxi);
printf("%d %d\n", max, maxi);
}
return 0;
}
```
阅读全文