#请问一下大佬为什么if语句判断不成立还是执行了后面的自加语句啊
逐语句调试过了,发现第一次for循环里面if不成立的时候只执行了m++
想了好久找不出问题
是求主元素然后输出的代码
#代码片
#include<stdio.h>
int MainEle(int s[],int n) {
int i, j;
int m=1; //相同数字个数
int p = s[0]; //主元素
for (i = 0; i < n; i++) {
for (j = i; j < n; j++) {
if (s[j] == s[i]) {
p = s[i];
m++; //有相同元素时,次数+1
}
}
if (m > n / 2) break;//
}
printf("m=%d\n", m);
if (m != 1 && m>n/2)
return p;
else return -1;
}
int main(){
int A[] = {0,5,5,3,5,7,5,5};
int n = 8;
//MainEle(A);
printf("%d\n", MainEle(A,n));
return 0;
}
#使用的是Vs2019
修改如下,改动处见注释,供参考:
#include<stdio.h>
int MainEle(int s[], int n) {
int i, j;
int m = 1; //相同数字个数
int p = s[0]; //主元素
for (i = 0; i < n - 1; i++) { // 修改 for (i = 0; i < n; i++)
for (j = i + 1, m = 1; j < n; j++) { // 修改 for (j = i; j < n; j++)
if (s[j] == s[i]) {
p = s[i];
m++; //有相同元素时,次数+1
}
}
if (m > n / 2) break;//
}
printf("m=%d\n", m);
if (m != 1 && m > n / 2)
return p;
else
return -1;
}
int main() {
int A[] = { 0,5,5,3,5,7,5,5 };
int n = 8;
//MainEle(A);
printf("%d\n", MainEle(A, n));
return 0;
}
【以下回答由 GPT 生成】
问题所在是变量m没有在每次循环开始时被重置为1。在代码中,变量m只在外层循环开始时被初始化为1,但在内层循环执行完毕后,m的值并没有被重置,导致m的值累加了多次。为了解决这个问题,你可以在内层循环结束后,手动将m的值重置为1。以下是修改后的代码:
#include <stdio.h>
int MainEle(int s[], int n) {
int i, j;
int m=1; //相同数字个数
int p = s[0]; //主元素
for (i=0; i<n; i++) {
for (j=i; j<n; j++) {
if (s[j] == s[i]) {
p = s[i];
m++; //有相同元素时,次数+1
}
}
if (m > n / 2) break;
m = 1; // 重置m的值为1
}
printf("m=%d\n", m);
if (m != 1 && m>n/2)
return p;
else return -1;
}
int main() {
int A[] = {0,5,5,3,5,7,5,5};
int n = 8;
printf("%d\n", MainEle(A,n));
return 0;
}
通过在内层循环结束后将m的值重置为1,可以确保在每次比较新的元素之前,m总是被初始化为1,从而保证正确的计数。
【相关推荐】
单步debug调试一下,看看什么情况