1.使用pow函数的相关问题
局部变量n=0
while(num/pow(10,n)) n++; 为什么不可行
printf("%d",num/pow(10,4)%10) 为什么要提前用temp先引出来
答:pow函数的返回值为double类型,1.终止条件不会满足 2.num/pow(10,4)结果为浮点型,浮点型不可进行取余运算,需要进行强制转换
2、范围输出else if的用法,第一个elseif不需要写成age>=18 && age<=44
3、逻辑表达式的结果是1或0
4、用==进行判断一个变量是否等于一个常量时,常常写成常量==变量,避免有时错误将==写成=
5、对x<y<z的误解,在c语言中,x<y<z表示(x<y)<z,(x<y)的结果是1/0,之后再与z比较。
6、短路现象
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执行。
|| 操作符的左操作数的结果不为0时,就无需执行右操作数。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值。
abcd:1 3 3 4 i=1
i不等于3 逻辑语句的结果只有0或1
7、求1~100所有3的倍数之和优化代码(判断可直接加在for的步长上去)
8、当修改gitee网站上的文件内容时,本地文件发生爆红,在本地文件夹中pull后发现本地文件中的注释为乱码
解决办法:因为devc++与gitee的解码方不同造成乱码,以后最好修改本地文件后再commit+push.
9、break与continue的区别
1.遇到break是跳过整个循环,执行该循环后的程序(如果是循环嵌套,break只跳出最近一层循环)。
2.而遇到continue是跳过本次循环continue后面的代码,直接去判断部分。如果循环的调整是在 continue 后边的话,可能会造成死循环。
10、if(条件)后默认跟一条语句(可以不带{}),如果想跟多条语句,if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
11、悬空else问题
原则:else 总是跟最接近 的 if 匹配。
如果没有{}限制,第2个if与else形成一个整体,第一个if下是if else。等效为下图:
如果想让第一个与else配对,要将if(b==2) printf("hehe\n")用{}包起来,如:
12、do while 语句中循环体是至少执行⼀次的,这是 do while 循环比较特殊的地方
do while的应用:输⼊⼀个正整数,计算这个整数是几位数?
#include <stdio.h>
int main()
{ int n = 0;scanf("%d", &n);int cnt = 0;do { cnt++;n = n / 10; }while (n);printf("%d\n", cnt); return 0;
}
因为n即使是 0,也是1位数,要统计位数的。