c语言 输入十个整数、求解其中最大的偶数

img

img

img

堪堪学到指针这块,确实指针比较绕
使用的是VS 2022版本,这里我觉得整体的思路应该是没有错误的,如果把even函数直接放入main函数中应该是可以直接运行的,但是还是想用函数,让整体看起来更明确一点。
even函数就是用于识别数组中哪一个是偶数,并求出最大的偶数是哪一个,flag作为其中的一个标记,一开始置为1,找到第一个偶数以后就置0,说明找到了偶数,如果最后仍为1,说明并没有找到偶数,或者说是数组中并不存在偶数。
main函数只做了一个简单的输入数组的操作。
最后运行的时候出现了读取权限的错误:

img


希望看到的小伙伴能够指出其中的错误。

第4行,函数even()参数 int a改为int *a试试,因为函数需要访问数组,所以参数需要是int指针类型。

修改如下:



#include <stdio.h>

// 将函数even的参数改为int指针,以便传入数组地址来访问数组 
int even(int *a){
    
    int *pp = a ;
    int max;
    int flag=1;
    
    for(;pp<(a+10);pp++){
        if(*pp%2==0){
            if(flag){
                max=*pp;
                flag=0;
            }else if(*pp>max){
                max=*pp;
            }
        }
    }
    
    if(flag==0){
        return max;
    }else{
        printf("没有偶数");
        return -1;
    }    
} 

int main(void){
    
    int a[10]={0};
    int *p = NULL;
    for(p=a;p<(a+10);p++){
        scanf("%d",p);
    }
    
    while(getchar()!='\n');
    
    printf("最大的偶数:%d",even(a));
    
    return 0;
    
}

img

题主的代码修改如下,供参考:

#include <stdio.h>
#define N 10
int even(int* a) // int even(int a) 修改
{
    int* p = NULL, max_e = -1, flg = 0;
    for (p = a; p < a + N; p++)
    {
        if ((*p) % 2 == 0) {
            if (flg == 0 || max_e < (*p))
            {
                flg++;
                max_e = *p;
            }
        }
    }
    return max_e;
}
int main()
{
    int a[N] = { 0 }, * p = NULL, Even;
    printf("请输入十个整数:\n");
    for (p = a; p < a + N; p++)
        scanf("%d", p);
    Even = even(a);     // 修改
    if (Even != -1)     // 修改
        printf("最大的偶数数:%d", Even);
    else
        printf("输入数中无偶数!"); // 修改
    return 0;
}


#include <stdio.h>

int main() {
    int numbers[10];
    int max_even = -1; // 初始化最大偶数为-1

    printf("请输入十个整数:\n");

    // 输入十个整数
    for (int i = 0; i < 10; i++) {
        scanf("%d", &numbers[i]);
    }

    // 遍历数组,找出最大的偶数
    for (int i = 0; i < 10; i++) {
        if (numbers[i] % 2 == 0 && numbers[i] > max_even) {
            max_even = numbers[i];
        }
    }

    if (max_even != -1) {
        printf("最大的偶数是:%d\n", max_even);
    } else {
        printf("没有找到偶数\n");
    }

    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

运行截图,even函数

img


代码

#include <stdio.h>

int even(int arr[], int n) {
    int max = -1, flag = 1;
    for (int i = 0; i < n; i++) {
        if (arr[i] % 2 == 0) {
            if (flag) {
                max = arr[i];
                flag = 0;
            } else if (arr[i] > max) {
                max = arr[i];
            }
        }
    }
    return max;
}

int main() {
    int arr[10];
    printf("请输入十个整数:\n");
    for (int i = 0; i < 10; i++) {
        scanf("%d", &arr[i]);
    }
    int result = even(arr, 10);
    if (result == -1) {
        printf("数组中没有偶数\n");
    } else {
        printf("最大的偶数是:%d\n", result);
    }
    return 0;
}