《循环》

《循环》

1.while循环

  • 如果我们把while翻译作“当”,那么⼀个while循环的意思就是:当条件满⾜时,不

断地重复循环体内的语句;

  • 循环执⾏之前判断是否继续循环,所以有可能循环⼀次也没有被执⾏;

  • 数数几位数

    • ⼈对数字的计算能⼒⽐⽂字弱

    • 计算机最不擅长的事就是看一眼就知道了

      #include <stdio.h>
      int main() {
      	int x;
      	int count = 0;
      	scanf("%d",&x);
      	count++;
      	x=x/10;
      	while(x>0) {
      		x=x/10;
      		count++;
      	}
      	printf("%d",count);
      	return 0;
      }
      

2.do-while循环

  • do-while循环和while循环很像,区别是在循环体执⾏结束的时候才来判断条件;

  • 也就是说,⽆论如何,循环都会执⾏⾄少⼀遍,然后再来判断条件;

  • 与while循环相同的是,条件满⾜时执⾏循环,条件不满⾜时结束循环;

  • 数数几位数

    #include <stdio.h>
    int main() {
    	int x;
    	int count = 0;
    	scanf("%d",&x);
    	do { 
    	count++;
    	x=x/10;
    	} while(x>0); 
    	printf("%d",count);
    	return 0;
    }
    

    小心while后面分号的存在

3.for循环

  • for循环像⼀个计数循环:设定⼀个计数器,初始化它,然后在计数器到达某值之前,重复执⾏循环体,⽽每执⾏⼀轮循环,计数器值以⼀定步进进⾏调整,⽐如加1或者减1

  • for ( count=10; count>0; count-- )就读成:“对于⼀开始的count=10,当count>0时,重复做循环体,每⼀轮循环做完循环体内语句后,使得count–。”

  • 循环控制变量i只在循环⾥被使⽤了,在循环外⾯它没有任何⽤处。因此,我们可以

    把变量i的定义写到for语句⾥⾯去。

  • for == while

    for ( 初始动作; 条件; 每轮的动作 ) {
        代码;
    }
    
    初始动作
    while(条件) {
    代码;
    每轮的动作;
    }
    
  • for中的每⼀个表达式都是可以省略的,for (; 条件; ) == while ( 条件 );

  • 循环次数for ( i=0; i<n; i++ )则循环的次数是n,⽽循环结束以后,i的值是n;

  • 循环的控制变量i,是选择从0开始还是从1开始,是判断i<n还是判断i<=n,对循环的次数,循环结束后变量的值都有影响;

4.三种循环的选择

  • 如果有固定次数,⽤for;
  • 如果必须执⾏⼀次,⽤do_while;
  • 其他情况⽤while

5.tips

  • 循环前可能用另一个变量保存原始值,后面使用;
  • 计数通常从零开始;
  • 做求和的程序时,记录结果的变量应该初始化为0;
  • ⽽做求积的变量时,记录结果的变量应该初始化为1;

6.循环控制break vs continue

  • break: 跳出循环;

  • continue: 跳过循环这⼀轮剩下的语句进⼊下⼀轮;

  • break只能对它所在的那层循环做;

  • 接⼒break跳出所有循环;

    int main()
    {
    	int x;
    	int one, two, five;
    	int exit = 0;
    	
    	scanf("%d", &x);
    	for ( one = 1; one < x*10; one++ ) {
    		for ( two = 1; two < x*10/2; two++ ) {
    			for ( five = 1; five < x*10/5; five++ ) {
    				if ( one + two*2 + five*5 == x*10 ) {
    					printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", 
    						one, two, five, x);
    					exit = 1;
    					break;
    				}
    			}
    			if ( exit == 1 ) break;
    		}
    		if ( exit == 1 ) break;
    	}
    	
    	return 0;
    }
    
  • goto跳出所有循环

    #include <stdio.h>
    
    int main()
    {
    	int x;
    	int one, two, five;
    	
    	scanf("%d", &x);
    	for ( one = 1; one < x*10; one++ ) {
    		for ( two = 1; two < x*10/2; two++ ) {
    			for ( five = 1; five < x*10/5; five++ ) {
    				if ( one + two*2 + five*5 == x*10 ) {
    					printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", 
    						one, two, five, x);
    					goto out;
    				}
    			}
    		}
    	}
    out:	
    	return 0;
    }
    

7.嵌套的循环

循环⾥⾯还是循环

8.循环计算

  • 猜数游戏

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main() {
    	srand(time(0));
    	int number = rand()%100+1;
    	int count = 0;
    	int a = 0;
    	printf("我已经想好了一个1到100之间的数。");
    	do {
    		printf("请猜这个1到100之间数∶ ");
    		scanf("%d",&a);
    		count ++;
    		if ( a > number ) {
    			printf("你猜的数大了。");
    		} else if ( a< number ) {
    			printf("你猜的数小了。");
    		}
    	}
    		while (a != number);
    		printf("太好了,你用了%d次就猜到了答案。\n",count);
    		return 0;
    }
    
  • 随机数

    每次召唤rand()就得到⼀个随机的整数;

    x % n 的结果是[0, n-1]的⼀个整数;

    rand()%100+1得到[1,100]

  • 整数的分解

    • 对⼀个整数做%10的操作,就得到它的个位数;
    • 对⼀个整数做/10的操作,就去掉了它的个位数;
    • 然后再对第2部的结果做%10,就得到原来数的⼗位数了;
    • 依此类推…
    • 逆序
    #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;
    		x /= 10;
    	}
    	
    	return 0;
    }
    
    • 正序

      #include <stdio.h>
      
      int main()
      {
      	int x;
      	scanf("%d", &x);
      
      	int mask = 1;
      	int t = x;
      	while ( t>9 ) {
      		t /= 10;
      		mask *=10;
      	} 
      	printf("x=%d, mask=%d\n", x, mask);
      	do {
      		int d = x / mask;
      		printf("%d", d);
      		if ( mask > 9 ) {
      			printf(" ");
      		}
      		x %= mask;
      		mask /= 10;
      	} while ( mask > 0 );
      	printf("\n");
      
      	return 0;
      }
      
  • 素数运算

    #include <stdio.h>
    
    int main()
    {
    	int x;
    
    	scanf("%d", &x);
    	
    	int i;
    	int isPrime = 1;	//	x是素数
    	for ( i=2; i<x; i++ ) {
    		if ( x % i == 0 ) {
    			isPrime = 0;
    			break;
    		}
    	}
    	if ( isPrime == 1 ) {
    		printf("是素数\n");
    	} else {
    		printf("不是素数\n");
    	}
    	return 0;
    }
    
  • 最大公约数

    #include <stdio.h>
    
    int main()
    {
    	int a,b;
    	int t;
    	
    	scanf("%d %d", &a, &b);
    	int origa = a;
    	int origb = b;
    	while ( b != 0 ) {
    		t = a%b;
    		a = b;
    		b = t;
    	}
    	printf("%d和%d的最大公约数是%d.\n", origa, origb, a);
    	
    	return 0;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值