C - 简单程序不适用于负数组数字



我刚开始学习C语言。到目前为止,我已经掌握了非常基本的知识。目前,我正在根据大学的练习编写一些非常简单的程序。

我目前的练习是:编写一个程序,在n元素数组中找到两个最大的元素(2≤n≤10( 并输出这两个元素的和

问题是,我编写的代码只适用于正数,不适用于负数。

当前代码:

#include <stdio.h>
int main() {
int seka[] = {0,0,0,0,0,0,0,0,0,0}; //array in lithuanian = seka
int k; //variable to determine array size
int m = seka[0];
int n = seka[0];
int y = 0;
scanf ("%d",&k);
for(int i = 0; i < k; ++i){
scanf ("%d",&seka[i]);
}
for(int j = 0; j < k; ++j){
if (seka[j] > m)
m = seka[j];
}
for(int o = 0; o < k; ++o){
if (seka[o] == m)
y = y + 1;
}
if(y >= 2){
n = m;
}
else
{
for(int l = 0; l < k; ++l){
if(seka[l] != m)
if (seka[l] > n)
n = seka[l];
}
}
printf ("%d", m + n);
return 0;
}

使用的输入:

5
4 9 5 6 3

输出:

15

但如果输入为负数:

6
-5 -8 -6 -2 -5 -8

输出为:

0

我知道这不是解决给定问题的最有效方法,但我仍在学习,我希望你能帮助我找到问题的根源。

在您的帮助下修复了我的代码,现在可以正常工作了

固定代码:

#include <stdio.h>
int main() {
int seka[] = {0,0,0,0,0,0,0,0,0,0}; //array in lithuanian = seka
int k; //variable to determine array size
int y = 0;
scanf ("%d",&k);
for(int i = 0; i < k; ++i){
scanf ("%d",&seka[i]);
}
int m = seka[0];
for(int j = 1; j < k; ++j){
if (seka[j] > m)
m = seka[j];
}
for(int o = 0; o < k; ++o){
if (seka[o] == m)
y = y + 1;
}
int n;
for(int l = 0; l < k; ++l){
if(seka[l] != m)
if (seka[l] < n)
n = seka[l];
}
if(y >= 2){
n = m;
}
else
{   
for(int l = 0; l < k; ++l){
if(seka[l] != m)
if (seka[l] > n)
n = seka[l];
}
}
printf ("%d", m + n);
return 0;
}

使用更新最大值

for(int j = 0; j < k; ++j){
if (seka[j] > m)
m = seka[j];
}

但是你用初始化它

m = seka[0];

问题是用户尚未设置seka[0],因此其值为0。这就是为什么最大值不能小于0。


为了修复它,只需用数组的第一个元素初始化最大值,但在用户输入之后。然后从索引1:开始循环

m = seka[0];
for(int j = 1; j < k; ++j){
if (seka[j] > m)
m = seka[j];
}

最新更新