C语言学习笔记——循环结构篇

循环结构:( C语言三种基本结构顺序结构 选择结构 循环结构 之一)
1.三种循环语句
while
一般形式为
while(表达式)
语句
一般表达式是循环条件 ,语句是循环体
eg1: 求1-100 的和
例程:分别使用while与do while
int main(int argc,char *argv[])
{
    int sum = 0;
    int i = 1;
/*
while(i <= 100)
{
    sum += i;
    i++;
}
*/
do
{
    sum +=i++;
}while(i < 101);
printf("sum = %d\n",sum);
return 0;
}
注意:
1) 循环体用花括号括起来;
2) while语句后面的表达式一般是关系表达式或者是逻辑表达式,但是也可以是其他表达式,只要其值为真就可以了。
     while(a)
     while(a && b)
    while(1);//死循环
3) whlie 语句后面不能再有分号
while(i <= 100); // 错误
{
    ……
}
eg2:从键盘输入一个数字,判断他是几位数   
例程:
int main(int argc,char *argv[])
{
    int num;
    int count = 0;
    scanf("%d",&num);
    if(num == 0)
        count = 1;
    while(num != 0)
    {
        num = num / 10;
        count++;
    }
printf("count = %d\n",count);
return 0;
}
do-while
一般形式为:
do
循环体
while(循环语句);
如果第一次进入循环的条件就不满足,那么while循环和do-while循环的结果可能不相同
这两种循环的区别
    while循环是先判断再执行
    do-while循环是先执行再判断
eg3:从键盘输入字符,判断在\n之前有多少个字符
例程:
int main(int argc,char *argv[])
{
    char ch;
    int num = 0;
    /*
    do
    {
        ch = getchar();
        num++;
    }while(ch != '\n');
    printf("num = %d\n",num-1);
    */
    while((ch =getchar() )!= '\n')
    {
        num++;
    }
    printf("num = %d\n",num);
    return 0;
}


for
一般形式为;
for(expression1;expression2;expression3)
语句;
执行过程:
1) 求解表达式1;
2) 求解表达式2,如果其值为真,就执行for语句执行的内嵌语句(循环体),然后执行下面三步,若其值为假,
   则结束循环,转到第五步;
3) 求解表达式3;
4) 转到第2步继续执行;
5) 结束循环,执行for语句后面的语句
最简单的形式
    for(i = 1;i <= 100;i++)
        sum += i;
    printf("sumn = %d\n",sum);

注意:
1) for循环中的表达式1,表达式2,表达式3都是可选项,也就是可以省略,但是; 不能省略;
2) 省略了表达式1,表示不对循环变量赋初值;
i = 1;
for(;i <= 100;i++)
    sum += i;

printf("sumn = %d\n",sum);

 3) 省略了表达式2,默认就是真,如果不做其他处理会造成死循环

for(;;) - > for(;1;)
4) 省略了表达式3,则表示不多循环变量进行操作;
5) 表达式1可以是逗号表达式
for(i = 1,sum = 0; i <= 100; sum += i,i++);

eg4:打印9 * 9 乘法表
例程:
int main(int argc,char *argv[])
{
    int i,j;
    for(i = 1;i <= 9;i++)
    {
        for(j = 1;j <= i;j++)
        {
            printf("%d * %d = %d\t",j,i,i*j);
        }
        printf("\n");
    }
    return 0;
}
2. 三种循环辅助控制性语句
break;
break 可以用来从循环体中跳出循环体,即提前结束循环,接着执行循环下面的语句;
注意:
1) break不能和循环语句和switch语句以外的语句连用;
2) break 对if-else 不起作用
3) break语句只能向外跳出一层
eg6: 请输出1000以内的所有素数
例程:
int main(int argc,char *argv[])
{
    int i,j;
    int num = 0;
    for(j = 2;j <= 1000;j++)
    {
        for(i = 2; i <= j/2;i++)
        {
               if(j % i == 0)
                break;
        }
        if(i == (j/2 + 1))
        {
            printf("%d\t",j);
            num++;
            if(num % 10 == 0)
                putchar('\n');
        }
    }
    return 0;
}

continue;
用来结束本次循环(即跳过循环体中尚未执行的部分),接着执行循环是否执行的判断
eg7: 输出100以内的不能被3整除的数
例程:
int main(int argc,char *argv[])
{
    int i;
    for(i = 1;i <= 100;i++)
    {
        /*
        if(i % 3 != 0)
        printf("%d\t",i);
        */
        if(i % 3 == 0)
            continue;
        printf("%d\t",i);
    }
    return 0;
}

goto;
goto语句是一种无条件转移语句
使用格式
goto 语句标号(标识符)
这个标识符加上一个:一起出现在程序中某处,执行goto语句后,程序会跳转到标号处并执行其后的语句

最大公约数和最小公倍数
1) 穷举法
例程:
int main(int argc,char *argv[])
{
    int a,b;
    int max;
    scanf("%d%d",&a,&b);
    int i,j;
    if(a > b)
        i = b;
    else
        i = a;
    for(j = a; j>= 1;j--)
    {
        if(a % j == 0 && b % j == 0)
        {
            max = j;
            break;
        }
    }
    printf("max = %d,min = %d\n",max,a*b/max);
    return 0;
}
2) 相减法
例程:
int main(int argc,char *argv[])
{
    int a,b;
    int m,n;
    scanf("%d%d",&a,&b);
    m = a;
    n = b;
    while(1)
    {
        if(b > a)
            b = b - a;
        else 
            a = a - b;
        if(a == b)
            break;

        }

    printf("max = %d,min = %d\n",a,m*n/a);

    return 0;

   }

3) 辗转相除法(欧几里得算法)
例程:
int main(int argc,char *argv[])
{
    int a,b;
    int m,n;
    scanf("%d%d",&a,&b);
    m = a;
    n = b;
    int c;
    if(a < b)
    {
        c = a;
        a = b;
        b = c;
    }
    while(1)
    {
        c = a % b;
        if(c == 0)
            break;
        else
        {
            a = b;
            b = c;
        }
    }
    printf("max = %d, min = %d\n",b,m*n/b);
    return 0;
}
  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值