while ,do while,for,循环的区别,求解答

qq_36639412 2016-12-12 01:48:23
while语句为假则不执行,do while 至少执行一次,for循环该怎么用??条件为假了就不执行?
...全文
635 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-12-19
  • 打赏
  • 举报
回复
引用 25 楼 qq_36639412 的回复:
[quote=引用 19 楼 hongwenjun 的回复:]
char* csTrim_v2(char* cs)
{
    char* ret = cs;
    char* pc = new char[strlen(cs) + 1];

    int pos = strspn(cs , "\t \n");     // 查找非空白处pos
    strcpy(pc , cs + pos);

    char* end = pc;
    while (*end++)     // 找到字符串末位的'\0',
        ;              // 因为上面 end++,实际指针在 '\0'的后一个
    end -= 2;          // 所以退2格,回到字符串最后一个字母

    while (*end == ' ' || *end == '\t' ||  *end == '\n') {
        *end-- = '\0';
    }
    strcpy(cs , pc);

    delete[] pc;
    return ret;
}


char* cs_strrev(char* string)
{
    char* start = string;
    char* left = string;
    char ch;

    while (*string++) // 找到string 末位的'\0',
        ;             // 因为上面 string++,实际指针在 '\0'的后一个
    string -= 2;      // 所以退2格,回到字符串最后一个字母
    while (left < string) {
        ch = *left;    // 通过临时变量 ch 进行交换
        *left++ = *string;
        *string-- = ch;
    }
    return(start);
}
使用 while 可以把代码写的简短。

/*-----------------------------------------------*/
使用  for  可以方便表示一个区间 遍历

  // iterate foo: inserting into bar
  for (auto it = std::begin(foo); it!=std::end(foo); ++it)
    bar.push_back(*it);

  // iterate bar: print contents:
  std::cout << "bar contains:";
  for (auto it = std::begin(bar); it!=std::end(bar); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';
while,do whil是不是先算表达式如果为真再执行语句,最后I++?还是i++在哪就算哪?[/quote] while先计算 do while最后算 是的
qq_36639412 2016-12-19
  • 打赏
  • 举报
回复
引用 19 楼 hongwenjun 的回复:
char* csTrim_v2(char* cs)
{
    char* ret = cs;
    char* pc = new char[strlen(cs) + 1];

    int pos = strspn(cs , "\t \n");     // 查找非空白处pos
    strcpy(pc , cs + pos);

    char* end = pc;
    while (*end++)     // 找到字符串末位的'\0',
        ;              // 因为上面 end++,实际指针在 '\0'的后一个
    end -= 2;          // 所以退2格,回到字符串最后一个字母

    while (*end == ' ' || *end == '\t' ||  *end == '\n') {
        *end-- = '\0';
    }
    strcpy(cs , pc);

    delete[] pc;
    return ret;
}


char* cs_strrev(char* string)
{
    char* start = string;
    char* left = string;
    char ch;

    while (*string++) // 找到string 末位的'\0',
        ;             // 因为上面 string++,实际指针在 '\0'的后一个
    string -= 2;      // 所以退2格,回到字符串最后一个字母
    while (left < string) {
        ch = *left;    // 通过临时变量 ch 进行交换
        *left++ = *string;
        *string-- = ch;
    }
    return(start);
}
使用 while 可以把代码写的简短。

/*-----------------------------------------------*/
使用  for  可以方便表示一个区间 遍历

  // iterate foo: inserting into bar
  for (auto it = std::begin(foo); it!=std::end(foo); ++it)
    bar.push_back(*it);

  // iterate bar: print contents:
  std::cout << "bar contains:";
  for (auto it = std::begin(bar); it!=std::end(bar); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';
while,do whil是不是先算表达式如果为真再执行语句,最后I++?还是i++在哪就算哪?
qq_36639412 2016-12-19
  • 打赏
  • 举报
回复
引用 20 楼 zhu339111520 的回复:
看楼上长篇大论的,实际上有个叼区别,毛区别都没得,随便你用啥,具体看业务 一般情况下线程执行的时候用while循环,遍历固定的数的时候用for循环,do...while写了这么多年代码从来没用过
先算表达式、语句、再I++?是不是这种顺序
qq_36639412 2016-12-19
  • 打赏
  • 举报
回复
引用 22 楼 paschen 的回复:
[quote=引用 21 楼 qq_36639412 的回复:] [quote=引用 17 楼 paschen 的回复:] [quote=引用 16 楼 qq_36639412 的回复:] [quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
I++怎么算,for比较好理解是固定表达式,最后算i++,while, do while怎么算过程顺序,I++什么时候算,
引用 15 楼 paschen 的回复:
[quote=引用 11 楼 qq_36639412 的回复:] [quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
表达式I++应该怎么算,for是固定值表达式最后算i++,while,do while呢?[/quote] while,do while中你把i++放哪就在哪计算啦[/quote] 比如int i=0,j=1,sum; while (i<=100;i++) { sum=i+j; printf("%d\n",j); 这个位置的j++怎么算的?[/quote] 没有while (i<=100;i++)这种用法,建议楼主先把基础打好了[/quote] 意思就是说这些i++最后算还是左到右,上到下顺序,[/quote] 没有while (i<=100;i++)这种用法,你可以写成: while (i<=100) { //......... i++; }[/quote] 先算表达式然后语句再i++?
paschen 2016-12-18
  • 打赏
  • 举报
回复
引用 21 楼 qq_36639412 的回复:
[quote=引用 17 楼 paschen 的回复:] [quote=引用 16 楼 qq_36639412 的回复:] [quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
I++怎么算,for比较好理解是固定表达式,最后算i++,while, do while怎么算过程顺序,I++什么时候算,
引用 15 楼 paschen 的回复:
[quote=引用 11 楼 qq_36639412 的回复:] [quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
表达式I++应该怎么算,for是固定值表达式最后算i++,while,do while呢?[/quote] while,do while中你把i++放哪就在哪计算啦[/quote] 比如int i=0,j=1,sum; while (i<=100;i++) { sum=i+j; printf("%d\n",j); 这个位置的j++怎么算的?[/quote] 没有while (i<=100;i++)这种用法,建议楼主先把基础打好了[/quote] 意思就是说这些i++最后算还是左到右,上到下顺序,[/quote] 没有while (i<=100;i++)这种用法,你可以写成: while (i<=100) { //......... i++; }
qq_36639412 2016-12-18
  • 打赏
  • 举报
回复
引用 17 楼 paschen 的回复:
[quote=引用 16 楼 qq_36639412 的回复:] [quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
I++怎么算,for比较好理解是固定表达式,最后算i++,while, do while怎么算过程顺序,I++什么时候算,
引用 15 楼 paschen 的回复:
[quote=引用 11 楼 qq_36639412 的回复:] [quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
表达式I++应该怎么算,for是固定值表达式最后算i++,while,do while呢?[/quote] while,do while中你把i++放哪就在哪计算啦[/quote] 比如int i=0,j=1,sum; while (i<=100;i++) { sum=i+j; printf("%d\n",j); 这个位置的j++怎么算的?[/quote] 没有while (i<=100;i++)这种用法,建议楼主先把基础打好了[/quote] 意思就是说这些i++最后算还是左到右,上到下顺序,
paschen 2016-12-16
  • 打赏
  • 举报
回复
引用 11 楼 qq_36639412 的回复:
[quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
表达式I++应该怎么算,for是固定值表达式最后算i++,while,do while呢?[/quote] while,do while中你把i++放哪就在哪计算啦
赵4老师 2016-12-16
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察
赵4老师 2016-12-16
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!) VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
FD_2013 2016-12-16
  • 打赏
  • 举报
回复
看楼上长篇大论的,实际上有个叼区别,毛区别都没得,随便你用啥,具体看业务 一般情况下线程执行的时候用while循环,遍历固定的数的时候用for循环,do...while写了这么多年代码从来没用过
hongwenjun 2016-12-16
  • 打赏
  • 举报
回复
char* csTrim_v2(char* cs)
{
    char* ret = cs;
    char* pc = new char[strlen(cs) + 1];

    int pos = strspn(cs , "\t \n");     // 查找非空白处pos
    strcpy(pc , cs + pos);

    char* end = pc;
    while (*end++)     // 找到字符串末位的'\0',
        ;              // 因为上面 end++,实际指针在 '\0'的后一个
    end -= 2;          // 所以退2格,回到字符串最后一个字母

    while (*end == ' ' || *end == '\t' ||  *end == '\n') {
        *end-- = '\0';
    }
    strcpy(cs , pc);

    delete[] pc;
    return ret;
}


char* cs_strrev(char* string)
{
    char* start = string;
    char* left = string;
    char ch;

    while (*string++) // 找到string 末位的'\0',
        ;             // 因为上面 string++,实际指针在 '\0'的后一个
    string -= 2;      // 所以退2格,回到字符串最后一个字母
    while (left < string) {
        ch = *left;    // 通过临时变量 ch 进行交换
        *left++ = *string;
        *string-- = ch;
    }
    return(start);
}
使用 while 可以把代码写的简短。

/*-----------------------------------------------*/
使用  for  可以方便表示一个区间 遍历

  // iterate foo: inserting into bar
  for (auto it = std::begin(foo); it!=std::end(foo); ++it)
    bar.push_back(*it);

  // iterate bar: print contents:
  std::cout << "bar contains:";
  for (auto it = std::begin(bar); it!=std::end(bar); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';
hongwenjun 2016-12-16
  • 打赏
  • 举报
回复
使用 while 可以把代码写的简短。 使用 for 可以方便表示一个区间 遍历 do 好像不太好看
paschen 2016-12-16
  • 打赏
  • 举报
回复
引用 16 楼 qq_36639412 的回复:
[quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
I++怎么算,for比较好理解是固定表达式,最后算i++,while, do while怎么算过程顺序,I++什么时候算,
引用 15 楼 paschen 的回复:
[quote=引用 11 楼 qq_36639412 的回复:] [quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
表达式I++应该怎么算,for是固定值表达式最后算i++,while,do while呢?[/quote] while,do while中你把i++放哪就在哪计算啦[/quote] 比如int i=0,j=1,sum; while (i<=100;i++) { sum=i+j; printf("%d\n",j); 这个位置的j++怎么算的?[/quote] 没有while (i<=100;i++)这种用法,建议楼主先把基础打好了
qq_36639412 2016-12-16
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
I++怎么算,for比较好理解是固定表达式,最后算i++,while, do while怎么算过程顺序,I++什么时候算,
引用 15 楼 paschen 的回复:
[quote=引用 11 楼 qq_36639412 的回复:] [quote=引用 2 楼 paschen 的回复:] for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
表达式I++应该怎么算,for是固定值表达式最后算i++,while,do while呢?[/quote] while,do while中你把i++放哪就在哪计算啦[/quote] 比如int i=0,j=1,sum; while (i<=100;i++) { sum=i+j; printf("%d\n",j); 这个位置的j++怎么算的?
qq_36639412 2016-12-15
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
for (A;B;C) D;
//等价于
{
 A;
 while (1) {
  if (!(B)) break;
  D;
  C;
 }
}
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
 if (条件1) break;
 //...
 if (条件2) continue;
 //...
 if (条件3) return;
 //...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while (!feof(f)) {
 a=fgetc(f);
 //...
 b=fgetc(f);//可能此时已经feof了!
 //...
}
而这样写就没有问题:
while (1) {
 a=fgetc(f);
 if (feof(f)) break;
 //...
 b=fgetc(f);
 if (feof(f)) break;
 //...
}
类似的例子还可以举很多。
整数I++表达式的类型怎么算,for是固定表达式,最后算I++,for比较好理解,那while ,do while怎么算I++的顺序
qq_36639412 2016-12-15
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
for (表达式1;表达式2;表达式3) { 循环体语句 } for语句执行过程: (1) 计算表达式1的值; (2) 计算表达式2的值,若表达式的值为真(或非0),则执行循环体; (3) 计算表达式3的值; (4) 再次计算表达式2的值,并重复以上过程; (5) 直到表达式2的值为假(或为0),则结束该循环。
表达式I++应该怎么算,for是固定值表达式最后算i++,while,do while呢?
qq_36639412 2016-12-15
  • 打赏
  • 举报
回复
引用 1 楼 shihengzhen101 的回复:
给你写个等价的语句吧,你对比一下就明白了,执行顺序是一样的,就是求1到10的和,结果放到变量sum中 while循环

	int num = 1;
	int sum = 0;
	while(num <= 10)
	{
		sum = sum + num;
                ++num;
	}
	printf("%d\n", sum);
do while循环

	int num = 1;
	int sum = 0;
	do
	{
		sum = sum + num;
		++num;
	}while(num <= 10)

	printf("%d\n", sum);
for循环

	int num = 1;
	int sum = 0;
	for (num = 1; num <= 10; ++num)
	{
		sum = sum + num;
	}
	printf("%d\n", sum);
执行步骤都是一样的,你对比一下就好
那关于I++,for比较好理解是固定表达式1,2表达式,语句,3就是最后算I++, while,do while,怎么算I++的?
AlbertS 2016-12-13
  • 打赏
  • 举报
回复
引用 8 楼 qq_36639412 的回复:
[quote=引用 1 楼 shihengzhen101 的回复:] 给你写个等价的语句吧,你对比一下就明白了,执行顺序是一样的,就是求1到10的和,结果放到变量sum中 while循环

	int num = 1;
	int sum = 0;
	while(num <= 10)
	{
		sum = sum + num;
                ++num;
	}
	printf("%d\n", sum);
do while循环

	int num = 1;
	int sum = 0;
	do
	{
		sum = sum + num;
		++num;
	}while(num <= 10)

	printf("%d\n", sum);
for循环

	int num = 1;
	int sum = 0;
	for (num = 1; num <= 10; ++num)
	{
		sum = sum + num;
	}
	printf("%d\n", sum);
执行步骤都是一样的,你对比一下就好
谢了,现在分类比之前清晰一些了,while先执行循环控制条件表达式,在执行循环体语句,do while就是反过来,先循环体语句,所以至少执行一次,再执行条件表达式,for就是表达式1、2、3,循环初始化、循环条件、循环赋值,[/quote] 嗯嗯,就是这个意思
qq_36639412 2016-12-12
  • 打赏
  • 举报
回复
引用 1 楼 shihengzhen101 的回复:
给你写个等价的语句吧,你对比一下就明白了,执行顺序是一样的,就是求1到10的和,结果放到变量sum中 while循环

	int num = 1;
	int sum = 0;
	while(num <= 10)
	{
		sum = sum + num;
                ++num;
	}
	printf("%d\n", sum);
do while循环

	int num = 1;
	int sum = 0;
	do
	{
		sum = sum + num;
		++num;
	}while(num <= 10)

	printf("%d\n", sum);
for循环

	int num = 1;
	int sum = 0;
	for (num = 1; num <= 10; ++num)
	{
		sum = sum + num;
	}
	printf("%d\n", sum);
执行步骤都是一样的,你对比一下就好
谢了,现在分类比之前清晰一些了,while先执行循环控制条件表达式,在执行循环体语句,do while就是反过来,先循环体语句,所以至少执行一次,再执行条件表达式,for就是表达式1、2、3,循环初始化、循环条件、循环赋值,
小灸舞 版主 2016-12-12
  • 打赏
  • 举报
回复
本质上没区别,不同写法。
加载更多回复(6)

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧