c语言-c循环语句简单的问题。。。

问题描述

c循环语句简单的问题。。。

int a=10;
do{a--;}while(a--);

为什么是无限循环?小括里到0不停么

解决方案

a--是先用再减,所以一次循环while里面先判断a的值是否是0,再减一。

解决方案二:

C/C++ 循环语句的优化
第6章 C控制语句:循环
简单的循环语句

解决方案三:

虽然a--到0时那一次不进入循环,但紧接着a就到-1了,即为真,又开始循环

解决方案四:

int a=10;
do{a--;}while(a--);
为什么是无限循环?小括里到0不停么

首先注意 a的类型是int,前面无unsigned ,大多编译器默认认为是一个有符号数,有符号数最高位为符号位,0值减1会为-1。
再次 while(a--);语句,先判断while( a ),再执行a--。

第1次 while判断时 a=9
第2次 while判断时 a=7
第3次 while判断时 a=5
第4次 while判断时 a=3
第5次 while判断时 a=1
第6次 while判断时 a=-1
...........
从以上归纳可知每次判断时a均为奇数,不可能为0,所以会无限循环下去。

解决方案五:

依次a的值为9,7,5,3,1,-1不会为0

时间: 2024-08-03 09:58:07

c语言-c循环语句简单的问题。。。的相关文章

c语言-用循环语句能减小C语言代码尺寸吗

问题描述 用循环语句能减小C语言代码尺寸吗 我在编译的时候,程序体积太大,编译不了,有什么具体的方法可以缩减代码尺寸. 解决方案 C 代码大小 1)变量名,函数名,尽量简单,清晰,不啰嗦 2)尽可能分割为多个文件,不要所有代码都写在一个文件里 3)函数调用,不论论是二进制代码空间,还是C代码文本文件空间,多数情况下,都比粘贴复制占用的要小 4)结构复杂的数据结构,不要一路. 下去,这样看着难受,敲键盘次数也多,代码也大 5)至于循环,3次以上的循环,代码通常要比复制粘贴3次要小

【Go语言】【9】GO语言的循环语句

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://qingkechina.blog.51cto.com/5552198/1618407 一.循环语句     循环语句即for语句,您可能说:"不对,它不仅仅是for语句,还有while或者do-while",真的很遗憾,GO语言真的只有for,它认为提供一种就可以了,提供多了怕给程序员带来麻烦 :) 下面我们使用for循环计算1+2+3+4+--+100的和,和其它语言

go语言if/else语句简单用法示例_Golang

本文实例讲述了go语言if/else语句用法.分享给大家供大家参考,具体如下: if else分支在go语言里是简单明了的. 这里有个简单的例子. if语句可以没有else. 可以在条件语句前添加别的语句.这个语句中声明的变量的作用域在所有的分支中. 注意:在go语言中条件语句没必要带圆括号.但是分支中必须有大括号.在go语言里面没有三元条件语句,所以即使是简单的条件语句你也必须使用全机构的if语句(就是说go里没有个?:表达式 ). 示例代码: 复制代码 代码如下: package main

Java语言----三种循环语句的区别介绍_java

第一种:for循环 循环结构for语句的格式:      for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体;   } eg: class Dome_For2{ public static void main(String[] args) { //System.out.println("Hello World!"); //求1-10的偶数的和 int sum = 0; for (int i = 1;i<=10 ; i++ ) { if (i%2 ==0) { //

编程-c语言循环语句问题 输出不了结果

问题描述 c语言循环语句问题 输出不了结果 完全数是其各因子之和正好等于本身的数,如6=1+2+3,28=1+2+4+7+14,所以6,8都是完全数,请编程找出2-20000内的所有完全数.输入整数n,输出第n个完全平方数. 我的程序无法输出结果不知为啥 #include <stdio.h> void main() { int i,n,s=0,k=0; scanf("%d",&n); for(i=2;i<=20000;i++,s=0) { for(int j=

二进制-C语言for循环里没有循环体,空白语句有什么作用

问题描述 C语言for循环里没有循环体,空白语句有什么作用 程序是输入一个二进制数,然后求这个二进制数的补码. 第一个for中并没有循环体,注释掉以后无法运行. 另外这个程序是怎么做到当末位为1时,末位加1等于0,并且向前进一位的?而不是末位加1等于2? 解决方案 C语言 for循环8.从零开始学习C语言--while循环语句C语言基础练习:在Xcode中练习的for循环语句 解决方案二: 第一个for循环是找到这个二进制数第一个1的位置,如输入0001010,求得i=3. 解决方案三: 第一个

详解C语言 三大循环 四大跳转 和判断语句_C 语言

三大循环for while 和 do{ }while; 四大跳转 : 无条件跳转语句 go to; 跳出循环语句 break; 继续跳出循环语句 continue; 返回值语句 return 判断语句 if,if else,if else if else if...else ifelse 组合 if(0 == x) if(0 == y) error(): else{ //program code } else到底与那个if配对 C语言有这样的规定: else 始终与同一括号内最近的未匹配的if语

C++中的while循环和for循环语句学习教程_C 语言

C++ while循环 while语句的一般形式如下: while (表达式) 语句 其作用是: 当指定的条件为真(表达式为非0)时,执行while语句中的内嵌语句.其流程图见下图. 其特点是:先判断表达式,后执行语句.while循环称为当型循环. 例:求1+2+3+-+100. #include <iostream> using namespace std; int main( ) { int i=1,sum=0; while (i<=100) { sum=sum+i; i++; }

c语言-求助一个java语言的一个for循环语句

问题描述 求助一个java语言的一个for循环语句 for(int i=2,j=1; j<10; i=(i==9)?(((++j)/j)+1):(i+1)){ System.out.printf("%d*%d=%2d%c",i,j,i*j, ((i==9)?'n':' ')); } 输出结果是99乘法表. 这个for循环里的++j为什么不能换成j+1啊? 谢谢各位了. 解决方案 ++j是改变变量值的 j+1是不改变变量值的 解决方案二: ++j 等效于j=j+1 你用j+1 原j