学习循环镶套时遇上的问题

为什么运行结果不一样?

int main()
{
    int b, s, g;
    for (b=1; b < 5; b++)
    {
        for (s=1; s < 5; s++)
        {
                    for (g=1; g < 5; g++)
            {
                printf("%d,%d,%d\n",b,s,g);
            }
        }
    }
    return 0;
}


int main()
{
    int b = 1, s = 1, g = 1;
    for (b; b < 5; b++)
    {
        for (s; s < 5; s++)
        {

            for (g; g < 5; g++)
            {
                printf("%d,%d,%d\n", b, s, g);
            }
        }
    }
    return 0;
}

img

img

两个循环的程序并不等价


int main()
{
    int b = 1, s = 1, g = 1;
    for (b; b < 5; b++)
    {
        s = 1;
        for (s; s < 5; s++)
        {
            g = 1;
            for (g; g < 5; g++)
            {
                printf("%d,%d,%d\n", b, s, g);
            }
        }
    }
    return 0;
}

这样才行,你那么写,外侧循环重新开始的时候,内循环变量s g的值不会归位

下面这个代码只输出四行原因是这个程序中的问题在于,s和g变量在每个外层循环执行时并没有得到重置为1,这导致内部两个循环只会在第一次执行时产生输出,并在后面的迭代中被跳过。因此,这个程序只会输出4行。


int main()
{
    int b = 1, s = 1, g = 1;
    for (b; b < 5; b++)
    {
        for (s; s < 5; s++)
        {
 
            for (g; g < 5; g++)
            {
                printf("%d,%d,%d\n", b, s, g);
            }
        }
    }
    return 0;
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7492517
  • 你也可以参考下这篇文章:学习字符串过程中,运行结果有一串烫烫烫该怎么解决
  • 除此之外, 这篇博客: 牛客竞赛语法入门班顺序结构习题【完结】中的 开学? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<bits/stdc++.h>
    using namespace std;
    int main(void)
    {
    	int a,b; cin>>a>>b;
    	int sum=(a+b)%7;
    	if(sum) cout<<sum;
    	else cout<<7;
    	return 0;
    }
    
  • 您还可以看一下 王而川老师的机器学习算法之线性模型视频教学课程中的 线性回归模型小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    可能的问题和解决方案:

    1. 内存泄漏:在循环嵌套的过程中,如果使用了动态内存分配,需要注意内存泄漏的问题。如果分配了内存但在退出循环时未释放,就会造成内存泄漏,进而影响程序性能。可以使用动态内存分配函数 malloc() 和 free() 控制内存的开辟和释放,避免泄漏。

    2. 数组越界:在循环嵌套时,需要特别注意数组的下标是否越界。如果越界,就会访问到未知的内存地址,导致程序崩溃或出现异常。可以使用断言 assert() 或者安全的 C 库函数代替危险的 strcpy()、gets() 等函数,避免数组越界问题。

    3. 语法错误:在编写循环嵌套代码时,需要特别注意语法错误因素。主要包括但不限于,缺失分号、函数括号使用错误、变量调用错误、等号与赋值符号使用错误等。可以使用 IDE 或者编译器的语法检查功能来排除语法错误。

    4. 逻辑错误:在代码中,有时候看起来逻辑可能相同,但实际上不同的输入结果会不同。这往往是因为代码逻辑存在问题。可以使用调试工具来帮助排除逻辑错误。同时,建议多关注编程细节,并学会使用注释及测试数据来辅助自己排除逻辑错误。