在写这次代码的时候,我遇到一个比较有趣的小问题(嗯~,个人觉得比较有趣)
一开始我是这样写的:
#include<windows.h>
int main()
{
int i = 0;
int MAX = 0; //定义一个MAX最大值
int arr[10] = {0}; //定义一个有10个元素的整形数组,给它初始化为0.
printf("请任意输入10个整数:");
for(i=1; i<=10; i++)
{
scanf("%d", &arr[i]); //这样做的目的是让所输入的10个数字刚好是数组的10个元素。
}
MAX = arr[1];//先把数组中的第一个元素视作最大的,再在以下的循环中比较。
for(i=2; i<=10; i++)
{
if(arr[i] > MAX)
{
MAX = arr[i];//每次比较后,将最大的值附给MAX
}
}
printf("最大的数为:%d", MAX);
return 0;
}
嗯,乍一看,好像没啥问题,也能正确运行出来,但是,系统出现了一个警告,像这样:

但是,其实我发现,出现这样的原因是因为我出现了数组越界。arr[10]是指arr[0]~arr[9]这些元素,所以解决方法有两个。要么把arr[10]改成arr[11]。要么,就让i从0开始一直到9,而不是从1开始。(以下是我的两种改进方法)
arr[11]:
#include<stdio.h>
#include<windows.h>
int main()
{
int i = 0;
int MAX = 0; //定义一个MAX最大值
int arr[11] = {0}; //定义一个有10个元素的整形数组,给它初始化为0.
printf("请任意输入10个整数:");
for(i=1; i<=10; i++)
{
scanf("%d", &arr[i]); //这样做的目的是让所输入的10个数字刚好是数组的10个元素。
}
MAX = arr[1];//先把数组中的第一个元素视作最大的,再在以下的循环中比较。
for(i=2; i<=10; i++)
{
if(arr[i] > MAX)
{
MAX = arr[i];//每次比较后,将最大的值附给MAX
}
}
printf("最大的数为:%d", MAX);
return 0;
}
i:0~9
#include<stdio.h>
#include<windows.h>
int main()
{
int i = 0;
int MAX = 0; //定义一个MAX最大值
int arr[10] = {0}; //定义一个有10个元素的整形数组,给它初始化为0.
printf("请任意输入10个整数:");
for(i=0; i<=9; i++)
{
scanf("%d", &arr[i]); //这样做的目的是让所输入的10个数字刚好是数组的10个元素。
}
MAX = arr[1];//先把数组中的第一个元素视作最大的,再在以下的循环中比较。
for(i=1; i<=9; i++)
{
if(arr[i] > MAX)
{
MAX = arr[i];//每次比较后,将最大的值附给MAX
}
}
printf("最大的数为:%d", MAX);
return 0;
}
这样就好了,没有警告了!
在寻找10个整数中最大值的过程中,遇到了数组越界的问题。初始代码虽然能运行但触发了系统警告。问题源于使用arr[10]而实际上数组下标应从0到9。解决方法包括将arr[10]改为arr[11]或者调整循环,使i从0到9。两种改进方案消除了警告。
1385





