为什么1到100循环打印,中间会断开啊

img


我不理解我不理解,为什么这个简单的1到100循环打印,中间会断开啊,72以上的数字他压根不打印了,是我电脑运行不起来这庞大的程序还是这个程序运行太快前面就没来得及打印啊?

是不是调试窗口太小了,导致只能显示后面的!

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7545096
  • 你也可以参考下这篇文章:随机生成100个整数存入一个顺序表,整数范围在[100,200)之间,输出表中所有元素;然后去掉其中所有的偶数,输出表中所有元素。
  • 除此之外, 这篇博客: c语言--查表法中的 定义大小为100的整型数组,使用随机函数给数组元素赋值。数值范围1…100,并且排序,使用冒泡排序实现。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 我们可以将其再分开实现,先给数组赋值,然后再用冒泡排序给它排个序就欧克了。

    void Print(int* br, int n)
    {
    	for (int i = 0; i < n; ++i)
    	{
    		printf("%4d", br[i]);
    		if ((i + 1) % 10 == 0)
    		{
    			printf("\n");
    		}
    	}
    }
    int FindValue(int* br, int n, int val)     //查询数组中的值,若随机值在数组中出现过了,返回-1.负责返回下标;
    {
    	assert(br != nullptr);
    	int pos = -1;
    	for (int i = 0; i < n; ++i)
    	{
    		if (br[i] == val)
    		{
    			pos = i;
    			break;
    		}
    	}
    	return pos;
    }
    
    void Init_Ar(int* br, int n)
    {
    	assert(br != nullptr);
    	int i = 0;
    	while (i < n)
    	{
    		int tmp = rand() % RANDSIZE + 1; // 1..100
    		if (FindValue(br, i, tmp) == -1)
    		{
    			br[i] = tmp;
    			++i;
    		}
    	}
    }
    int main()
    {
    	const int n = 100;
    	int ar[n] = {};
    	Init_Ar(ar, n);
    	Print(ar, n);
    	return 0;
    }
    

    这个程序,我们一个一个查询数组中的值,看是否有过重复,在Findvalue中,for循环一直是从0开始,一个一个查询,这样时间复杂度很高,我们想,有没有一种方法使得只查询一次就好,不需要每次都从0开始,所以我们下面就用到了查表法;
    也就是,我们新定义一个数组table,因为我们要1…100,所以数组大小为101,可以取到下标100,然后我们取个随机值,判断这个随机值作为table里的下标看其值否为0,为0的话,我们把这个随机值给数组br,然后让其下标里的值变为1,(我们初始化table里的值都为0),之后继续进行判断,为0的话我们继续赋值,为1的话我们进入循环再取随机值。

    void Init_Ar2(int* br, int n)
    {
    	assert(br != nullptr);
    	int i = 0;
    	int table[ARSIZE + 1] = {};
    	while (i < n)
    	{
    		int tmp = rand() % RANDSIZE + 1;
    		if (table[tmp] == 0)
    		{
    			br[i] = tmp;
    			++i;
    			table[tmp] = 1;
    		}
    	}
    }
    

    下面我们把冒泡排序加进去:

    void Swap_Int(int* ap, int* bp)
    {
    	assert(ap != nullptr && bp != nullptr);
    	int tmp = *ap;
    	*ap = *bp;
    	*bp = tmp;
    }
    void BubbleSort(int* br, int n)
    {
    	assert(br != nullptr);
    	for (int i = 1; i < n; ++i)
    	{
    		bool tag = true;
    		for (int j = 0; j < n - i; ++j)
    		{
    			if (br[j] > br[j + 1])
    			{
    				Swap_Int(&br[j], &br[j + 1]);
    				tag = false;
    			}
    		}
    		if (tag) break;
    	}
    }
    /*我们多加了一个标记tag,这样就可以使其更完善,比如我们排序的数字中,只有第一个和第二个需要排序,后面的都是顺序的,我
    们就不需要再进行循坏排序了,这会我们在循坏开始时,定义个状态bool类型的tag为true,当交换后就让其变为false,然后下面
    如果tag保持true的话,说明我们这一趟都没有排序(以及排好了),所以就直接退出就好了,不需要在进行下一趟的排序检测。*/
    
    #include<stdio.h>
    #include<stdlib.h>   // rand;
    #include<assert.h>
    #define RANDSIZE 100
    #define ARSIZE 100
    void Print(int* br, int n)
    {
    	for (int i = 0; i < n; ++i)
    	{
    		printf("%4d", br[i]);
    		if ((i + 1) % 10 == 0)
    		{
    			printf("\n");
    		}
    	}
    }
    void Init_Ar2(int* br, int n)
    {
    	assert(br != nullptr);
    	int i = 0;
    	int table[ARSIZE + 1] = {};
    	while (i < n)
    	{
    		int tmp = rand() % RANDSIZE + 1;
    		if (table[tmp] == 0)
    		{
    			br[i] = tmp;
    			++i;
    			table[tmp] = 1;
    		}
    	}
    }
    void Swap_Int(int* ap, int* bp)
    {
    	assert(ap != nullptr && bp != nullptr);
    	int tmp = *ap;
    	*ap = *bp;
    	*bp = tmp;
    }
    void BubbleSort(int* br, int n)
    {
    	assert(br != nullptr);
    	for (int i = 1; i < n; ++i)
    	{
    		bool tag = true;
    		for (int j = 0; j < n - i; ++j)
    		{
    			if (br[j] > br[j + 1])
    			{
    				Swap_Int(&br[j], &br[j + 1]);
    				tag = false;
    			}
    		}
    		if (tag) break;
    	}
    }
    int main()
    {
    	const int n = 100;
    	int ar[n] = {};
    	Init_Ar2(ar, n);
    	Print(ar, n);
    	return 0;
    }
    
  • 您还可以看一下 王晨晨老师的决胜校招-硬件面试100题课程中的 决胜校招01-单片机没有运转怎么办?小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题:

    1. 提高问题的可读性:

    您好,我遇到了一个问题,希望能得到您的帮助。我的程序是循环打印1到100的数字,但是在运行过程中,我发现程序会在打印到72时中断,后面的数字压根不打印了。我不理解这个问题是因为我的电脑运行不起来这个庞大的程序,还是因为程序运行太快前面就没来得及打印。请问这个问题该如何解决?谢谢!

    回答:

    为了提高问题的可读性,可以这样回答:

    您好,根据您的描述,我猜测您的代码可能存在某些问题,导致程序仅打印出1到72的数字。为了确定问题的具体原因,我们需要进一步调试代码。可以尝试在循环内部加上打印语句,以便观察程序的执行情况。比如:

    for(int i=1; i<=100; i++){ printf("%d ", i); //添加的打印语句 if(i % 10 == 0){ printf("\n"); //每10个数字换行 } }

    另外,如果在循环内部进行比较复杂的计算或操作,可以考虑加入一些延时或阻塞语句,以避免程序过快完成。比如:

    include //需要包含的头文件

    ... for(int i=1; i<=100; i++){ printf("%d ", i); fflush(stdout); //清空输出缓存 if(i % 10 == 0){ printf("\n"); } usleep(100000); //延时100ms }

    希望这些方法能够帮助您更好地调试程序。

    1. 添加对话引导:

    您好,感谢您使用我的服务。如果我理解正确,您的程序可以顺利地打印1到71的数字,但在打印到72时就停止了,后面的数字就没有打印出来。请问是这样吗?

    回答:

    是的,您理解得非常准确。目前您所说的问题我也遇到过,并且我非常乐意为您解答。

    1. 提供更具体的问题背景:

    您的问题描述中没有给出具体的编程语言和代码示例,这给我理解您的问题带来了困难。请问您的程序使用的是什么编程语言?能否提供一些程序的代码或者更多的信息,例如是否有报错信息等,这有助于更好地理解您的问题。谢谢!

    回答:

    抱歉,由于我并不知道您具体使用的编程语言,无法针对您的问题提出有效的解决方案。我建议您提供更多的详细信息,比如可执行代码、出现问题的错误提示等,这将更有利于我们帮助您解决问题。如果您需要更进一步的帮助,欢迎继续咨询。