C语言-循环基础,for,do-while

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 ;
   
    
    
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值