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