C语言程序设计笔记4:循环
这个系列是用来解决学校C语言课程的,并不适用于ACM和OI
本系列博客分为2部分,分别是 C语言程序设计笔记(网课) 和 课堂总结(线下课)
欢迎转载ssw02的博客: https://www.cnblogs.com/ssw02/p/15994555.html
C语言程序设计笔记4-1
1.复习和引入
Q:给出一个1-999范围内的正实数,请编写一个程序快速判断这个数是几位数?
思路:将这个数不断除以10,每除一次,数位+1,直到为0 e.g. 321(0)->32(1)->3(2)->0(3)
#include <stdio.h>
int main()
{
int x , num = 1 ;
scanf("%d", &x);
printf("该输入数字位数为:") ;
if( x=x/10 )num++ ; //先计算除法再赋值,最后再依据x是否为0决定数位是否+1
if( x=x/10 )num++ ;
if( x=x/10 )num++ ;
printf("%d",num) ;
return 0;
}
但是这个数一旦更大,我们一直重复写if( x=x/10 )num++ ;
这个语句明显是浪费时间的行为,所以我们要引入循环语句
2.循环语句
最常见的形式:
while(条件){执行代码块}
只要满足条件,就会一直循环执行{执行代码块}中的语句,直到不符合条件为止,也可以使用break
跳出循环,或者使用continue
进入下一次循环
用while
改写上述的代码
#include <stdio.h>
int main()
{
int x , num = 0 ;
scanf("%d", &x);
printf("该输入数字位数为:") ;
while(x > 0){ //只要x未到0,就会一直执行下面两句代码
x = x/10 ;
num++ ;
}
printf("%d",num) ;
return 0;
}
接下来介绍另外一种循环语句:
do{
执行代码块
}while(条件);
这和之前我们看到的那种循环语句不一样的地方就在于,do-while会先执行一次{执行代码块}里的语句再进行判断
3.习题答案
1.下列说法是否正确?
while循环的条件满足的时候循环继续,而do-while的条件满足的时候循环就结束了 错误
2.求 i 的值
int i =10;
while ( i>0 ) {
i /=2;
}//答案为0
3.求 i 的值
int i = 1;
do {
i += 5;
} while (i<17);//答案为21
C语言程序设计笔记4-2
1.循环语句的运用
Q1:输入一个int范围内的正实数X,求logX(以2为底)
#include <stdio.h>
int main()
{
int x;
int ret = 0;
scanf("%d", &x);
int t = x;
while ( x > 1 ) {
x /= 2;
ret ++;
}
printf("log2 of %d is %d.", t, ret);
return 0;
}
Q2:写一个猜数游戏,让玩家输入一个1-100数后,告诉玩家猜大了还是小了,直到猜到为止,同时统计一共猜了多少次才猜到答案。
#include <bits/stdc++.h>//stdio.h里没有rand()函数,这里直接换成万能头文件
int main()
{
int number = rand()%100+1;
int count = 0;
int a = 0;
printf("我已经想好了一个1到100之间的数。");
do {
printf("请猜这个1到100之间数:");
scanf("%d", &a);
if ( a > number ) {
printf("你猜的数大了。");
} else if ( a < number ) {
printf("你猜的数小了。");
}
count ++;
} while (a != number);
printf("太好了,你用了%d次就猜到了答案。\n", count);
return 0;
}
Q3:动态计算平均数(每有一次输入就要有一次输出)
思路:注意平均数是带小数的,我们不能使用整形,而需要使用到 float 或者 double类型
Q4:数位拆分
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
int digit;
int ret = 0;
while ( x> 0 ) {
digit = x%10;
printf("%d", digit);
ret = ret*10 + digit;
printf("x=%d,digit=%d,ret=%d\n", x, digit, ret);
x /= 10;
}
printf("%d", ret);
return 0;
}
2.习题答案
1.以下哪种运算能从变量x中取得十进制最低位的数字 B
A.x / 10
B.x % 10
C.x * 10
D.10 / x
2.当需要累加一些值的时候,用来记录累加结果的变量应该被初始为:0