循环
让程序识别4位数及以下整数的位数
int x;
int n = 1;
scanf("%d", &x);
if ( x > 999 ) {
n = 4;
} else if ( x >99 ) {
n = 3;
} else if ( x > 9 ) {
n = 2;
} else {
n = 1;
}
printf("%d\n", n);
因为从高往低判断,就不需要判断上限
任意范围?
三位数逆序:
eg.352%100 52
int x;
int n = 0;
scanf("%d", &x);
n++;
x /= 10;
if ( x > 0 ) {
n++;
x /= 10;
if ( x > 0 ) {
n++;
x /= 10;
if ……
}
}
printf("%d\n", n);
改进:
ps.计算机里整数是有范围的,不要试太大的数
while循环
while与if
格式相近,但if是一次性的,while是循环的
格式:
while ( x > 0 ) {
条件
}
大括号里的内容叫做循环体
- 循环体内要有改变条件的机会,否则这个循环会出不来(死循环)
- 条件成立时循环继续的条件
思考:
能否将循环体外的“ n++; x /= 10;”去掉?
int x;
int n = 0;scanf("%d", &x);
while ( x>0 ) {
n++;
x /= 10;
}printf("%d\n", n);
调试
模拟计算机运行
x n
352 0
35 1
3 2
0 3
验证:测试程序常使用边界数据,如有效范围两端的数据、特殊的倍数等及个位数、10、0、负数
对于0出现了问题
printf
在程序适当的地方插入printf来输出变量内容
do-while循环
数位数的算法
- 用户输入x
- 初始化n为0
- x = x/10,去掉个位
- n++
- 如果x>0,回到3;否则就是结果
do-while循环
在进入循环的时候不做检查,而是在执行完一轮后,再检查循环的条件是否满足,若满足则继续下一轮,若不满足则结束循环
do
{
循环体语句
} while ( 循环体条件 );
*一定不要放过这个分号,否则圆括号就永远没有结束
while vs do-while
while 先判断条件是否满足,再进循环体(循环可能一遍都不做)
do-while 先进循环体,再判断条件(无论如何,循环都至少会执行一遍)
#include<stdio.h>
int main()
{
int x;
scanf("%d", &x);
int n = 0;
do
{
x /= 10;
n++;
} while ( x > 0 );
printf("%d", n);
return 0;
}