Week04 循环
4.1.1 循环
判断输入数字是几位:
int x;
printf("请输入一个随机的4位数一下的正整数:");
scanf("%d",&x);
if(x>999)
{
printf("您输入的数字是四位的");
}else if(x>99){
printf("您输入的数字是三位的");
}else if(x>9){
prinf("您输入的数字是两位的");
}else{
printf("您输入的数字是一位的");
}
但是如果位数够多那么就很费劲。
换一个方法!
int x;
int n =0;
scanf("%d",&x);
x /=10;
while( X>0 ){
n++;
x/=10;
}
printf("%d\n",n);
return 0;
4.1.2while循环,就像if一样,条件满足就不断做后面大括号里面的句子
-
如果我们把while翻译作“当”,那么一个while循环的意思就是:当条件满足时,不断地重复循环体内的语句。
-
循环执行之前判断是否继续循环,所以有可能循环一次也没有被执行。
当没有计算机的时候,我们可以再纸上写出while循环的变量,然后再进行计算。
4.1.3 do-while(先做循环内的句子再判断条件)
do-while循环和while循环很像,区别是在循环体执行结束的时候才来判断条件。也就是说,无论如何,循环都会执行至少一遍,然后再来判断条件。与while循环相同的是,条件满足时执行循环,条件不满足时结束循环。
例:
int main(){
int x ;
scanf("%d",&x);
int n = 0;
do//先进入循环
{
x /=10;
n++;//n+1
} while (x>0);//做完进行判断
printf("%d",n);
return 0;
}
4.2.2猜数游戏
让计算机来想一个数字,然后让用户 来猜,用户输入一个数,就告诉它是大了还是小了,直到用户猜中为止,最后还要告诉用户它猜了多少次。
-
因为需要不断重复让用户猜,所以需要用到循环。
-
到实际写出程序之前,我们可以先用文字描述程序的思路。
-
核心重点是循环的条件。
-
人们往往会考虑循环终止的条件。
1.计算机随机想一个数,记在变量number里;
2.一个负责计数的变量count初始化为0;
3.让用户输入一个字。
4.count递增(加一);
5.判断a和number的大小关系,如果a大,就输出“大”,如果a小就输出“小”。
6.如果a和number是不相等的(无论大还是小 ),程序转到第三步;
7.否则,程序输出“猜中”和次数,然后结束。
总结:循环条件是a和number不相等。
随机数
每次召唤rand()就得到一个随机的整数。
%100
x%100n 的结果是[0,n-1]的一个整数。
例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
srand(time(0));
int number = rand()%100+1;
printf("%d\n",number);
int count = 0;
int a =0;
printf("已经想好了一个1-100之间的数。\n");
printf("请猜猜这个1-100之间的数:");
do {
count ++;
scanf("%d",&a);
if(a>number)
{
printf("你猜的大了\n");
printf("请再次输入:");
}else if (a<number)
{
printf("你猜的小了\n");
printf("请再次输入:");
}
} while (a!=number);
printf("太好了,你用了%d次就猜到了答案:%d",count,number);
}
4.2.3算平均数
变量
一个记录读到的整数的变量
平均数怎么算?
只需要每读一个数,就把它加到一个累加的变量里,到全部数据读完,再拿它去除到的数的个数就可以了
一个变量记录累加的结果,一个变量记录读到的数的个数。
#include <stdio.h>
//第一种方案只有一个判断,节省资源。
int main(){
int number;
int count = 0;
int sum = 0;
scanf("%d",&number);
while (number != -1)
{
sum += number;
count ++;
scanf("%d",&number);
}
printf("%f\n",1.0*sum/count);
}
//第二中方案,两个判断,比较浪费资源。
int number;
int count = 0;
int sum = 0;
do
{
scanf("%d",&number);
if(number != -1)
{
sum += number;
count ++;
}
}while (number != -1);
printf("%f\n",1.0*sum/count);
}
4.2.4整数求逆
整数的分解
一个整数是由1至多位数字组合成的,如何分解出整数的各个位上的数字,然后加以计算。
对一个整数做%10的操作,就能得到他的个位数;
对一个整数做/10的操作,就去掉了它的个位数;
然后再对2的结果做%10,就得到了原来数的十位数了;
以此类推。
数的逆序
输入一个整数,输出逆序的数
结尾的0的处理
int main(){
int x;
scanf("%d",&x);
int digit;
int ret =0;
while()
{
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 ;
}