Day07_for多种写法以及while.do用法



2013年10月12日 星期六 10时38分35秒

循环中可以使用birek;终止循环的执行
执行了break;语句后循环中的任何其它语句都不会再执行

假设有如下for语句
for(1;2;3){
   4
}
for语句按照如下分组执行[1,2]  [4,3,2]  [4,3,2]...[4,3,2]
第一祖和后面所有组都不一样
正常情况下for是在某一组完成后结束
如果for语句在第一组之后就结束则什么都没有做
编号为2的语句计算出一个布尔值,这个值决定循环是否应该结束,如果为真表示不结束,为假表示要结束。
如果for循环正常结束则编号为2的语句一定是假

for循环的多种写法
1.省略大括号
2.使用,操作符
 for(num=1,num1=1;num<=num1;num++,num--) {}
3.临时定义循环变量(C99规范才支持)
4.小括号中只保留逻辑表达式
5.空语句(直接用;结束for语句):
 for (num=1;num<=3;printf("%d\n",num),num++);
6.死循环
 for(;;) { printf("1"); }

循环嵌套结构可以解决复杂的循环问题
首先对问题进行分组,给每组确定一个代表数字,要求所有组的代表数字是规律性变化的
循环嵌套结构由两个循环构成,其中一个包含另一个,包含别的循环的叫做外循环,被包含的叫做内循环
内循环的开始数字和结束数字通常需要根据外循环的循环变量计算得到
-----------------------练习-----------------------------
1块,2块,5块有多少种加起来等于10元的组合
  1 #include  <stdio.h>
  2
  3 int main()
  4 {
  5         int i=0,g=0,o=0;
  6         for(i=0;i<=10/1;i++)
  7         {
  8                 for(g=0;g<=10/2;g++)
  9                 {
 10                         for(o=0;o<=10/5;o++)
 11                         {
 12                                 if(1*i+2*g+5*o==10)
 13                                 {
 14                                         printf("%d张1元,%    d张2元,%d张5元\n",i,g,o);
 15                                 }
 16                         }
 17                 }
 18         }
 19 }
 --------------------另一种方法--------------------------
   1 #include <stdio.h>
  2
  3 int main()
  4 {
  5         int num =0,num1=0;
  6         for(num=0;num<=2;num++)
  7         {
  8                 for(num1=0;num1<=(10-5*num)/2;num1++)
  9                 {
 10                         printf("5块钱有%d张,2块钱有%d张,
    1块钱有%d张\n",num,num1,10-5*num-2*num1);
 11                 }
 12         }
 13 }
---------------------------------------------------------

while语句也是一种实现循环的语句
使用while编写循环只需要提供一个逻辑表达式控制循环的结束就可以了
理论上for和while完全对等,可以互相替代
while语句格式如下:
while(布尔值)
{
 语句组
}
如果布尔值是true则执行大括号内部的语句
-----------------------while练习------------------------
  1 /*
  2  从键盘上读两个整数
  3  计算它们的最大公约数
  4  */
  5
  6 #include <stdio.h>
  7
  8 int main()
  9 {
 10         int i=0,num=0,num1=0;
 11         printf("请输入两个正数:");
 12         scanf("%d %d",&num,&num1);
 13         while(num % num1) 
 14         {
 15                 int tmp=num % num1;
 16                 num=num1;
 17                 num1=tmp;
 18         }
 19         printf("最大公约数是%d\n",num1);
 20 }
        13行中如果num被num1整除,结果为0,跳过循环,最大公约数就是num1,如果num小于num1,在进入执行第一次循环时将会把数据对调;
         15行:大数对小数取余,得到的余数赋值给临时变量tmp
         16行:把num1赋值给num,则现在num是两个要操作的数中最大的
         17行:把tmp,也就是余数赋值给num1,此句话执行完后则num是大的,num1是小的
         之后再进行大的数对小的数取余,一直到可以直接整除,结果为0时跳出,则最后num1的值就是两个数的最大公约数

         (先进行取余操作,余数和小点的数的最大公约数就是原两数的最大公约数。)
        
         这样写的程序可以用最少的计算获得正确结果
--------------------------------------------------------
假设有如下的while语句
while(1)
{
 2
}
以上语句按照如下分组方式执行[1]  [2,1]  [2,1]...[2,1]

每组最后都是编号为1的逻辑表达式,用来决定循环是否应该停止
如果逻辑表达式的计算结果是真,则循环继续执行,否则循环结束
正常情况下循环在某一组完成后结束

使用while方式同样可以实现空语句和死循环
空语句:
int num = 0;
while(num++ < 10);
死循环:
while(1) {}

while语句中也可以使用break;和continue;语句

do{ 语句2 }while( 语句1 );
按照如下的方法执行:
[2,1]  [2,1] ...
do ...while 语句可以保证大括号内部的语句至少执行一遍

需要使用循环时先考虑for,如果不好用再考虑while,使用while时需要考虑大括号中的内容是否至少需要执行一遍,如果需要,可以使用do ...while


预习:
 1.数组(一味数组和二维数组)
作业:
 1.在屏幕上打印九九乘法表
 2.假设有一组自行车,三轮车和汽车,一共有10个座位和28个轮子
 编程把所有可能的组合计算出来
 3.编写一个猜数游戏
 声明一个不初始化的变量
 根据这个变量得到一个1到100之间的数字,程序中让用户不停的猜,每次都给出正确的提示,猜中时程序结束
 4.统计一个数字的数位个数









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值