C语言学习笔记(三) -循环语句 Circulation

goto循环

/*
 * 反复执行某部分代码,称为循环执行
 * do-while    while  for  递归   goto

 * goto 标记;
 * 1、需要反复执行的语句放在循环体内
 * 2、为了避免无限循环,指定结束循环的语句(循环需要能够开始,能够结束)
 * 3、goto语句在某种程度上是有害的,慎用
 */

//实现1+2+3....+100
#include<stdio.h>
int main1(void)
{
    int i = 0;
    int sum = 0;

    i = 1;
lop:
    if(i <= 100)
    {
        sum += i;
        i++;
        goto lop;
    }
    printf("sum = %d\n",sum);
    return 0;
}
//从键盘输入若干字符,统计输入的元音字母的个数。输入'q'结束
//aeiou
int main()
{
    int num = 0;
    char c = 0;

lop:    
    scanf("%c",&c);
    if(c != 'q')
    {
        //if(c == 'a'|| c==''e||......)
        //   num++;
        switch(c)
        {
            case 'a':case 'e':case 'i':case 'o':case 'u':
            case 'A':case 'E':case 'I':case 'O':case 'U':
                num++;
        }
        goto lop;
    }
    printf("%d\n",num);
    return 0;
}

for 循环

/*
 * for(表达式1;表达式2;表达式3)
 * {
 *    循环体
 * }
 * 表达式1:循环开始
 * 表达式2:当表达式2为真时,执行循环体,当表达式2为假时,循环结束
 * 表达式3:如何结束
 */
#include<stdio.h>

int maini(void)
{
    int i = 0;
    int sum = 0;

    for(i = 1; i <= 100; i++)
    {
        sum += i;
    }
    printf("%d\n",sum);

    return 0;
}
//输入年月日,计算这是这一年中的第几天。
int main()
{
    int y,m,d;
    int days=0;

    scanf("%d %d %d",&y,&m,&d);
    for(m--; m >= 1; m--)
    {
        switch(m)
        {
            case 11:case 9:case 6:case 4:
                days += 30;
                break;
            case 10:case 8:case 7:case 5:case 3:case 1:
                days += 31;
                break;
            case 2:
                days += 28+((y%4==0&&y%100!= 0)||y%400 ==0?1:0);
                break;
        }

    }
    days += d;
    printf("%d\n",days);
    return 0;
}

while循环

/*
 * 循环开始 表达式1
 * while(表达式2)
 * {
 *    循环体
 *    如何结束 表达式3
 * }
 */
#include<stdio.h>
int main1()
{
    int i = 0;
    int sum = 0;
    i = 1;
    while(i <= 100)
    {
        sum += i;
        i++;
    }
    printf("1到100的和是:%d\n",sum);
    return 0;
}
//输入一个整型n,使用while循环,依次输出n的每一位上的值。
//1234   4 3 2 1 
int main()
{
    int n;

    scanf("%d",&n);
    if(n < 0)
        n *= -1;
    while(n != 0)
    {
        printf("%d ",n%10);
        n = n/10;
    }
    printf("\n");
    return 0;

}

do…while循环

/*
 * 循环开始 表达式1
 * do
 * {
 *     循环体
 *     表达式3
 * }while(表达式2);
 */
#include<stdio.h>
int main()
{
    int i=0;
    int sum = 0;

    i = 101;
    do
    {
        sum += i;
        i++;
    }while(i <= 100);

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

    i = 101;
    sum = 0;
    while(i <= 100)
    {
        sum += i;
        i++;
    }
    printf("%d\n",sum);

    return 0;
}
//1*2*3*...*n(n不超过20)
int main2()
{
    int n;
    long value = 0;

    scanf("%d",&n);
    value = 1;

    do
    {
        value *= n;
        n--;
    }while(n >= 1);

    printf("%ld\n",value);
    //for(scanf("%d",&n),value=1;)
    return 0;
}

重点内容

/*
 * 1 1 2 3 5 8 13 21 34 55,前10*/
#include<stdio.h>
int main1()
{
    int i = 0;
    int item1 = 1;
    int item2 = 1;
    int item;

    printf("%d\n%d\n",item1,item2);
    item = item2;
    for(i = 3; ; i++)
    {
        item1 = item2;
        item2 = item;
        item = item1+item2;
        printf("%d\n",item);
        if(item >= 1000)
            break;//循环结束条件
    }
    printf("第一次大于1000:%d\n",i);
    return 0;
}
//第一次大于1000时,是第几项

//练习:判断100以内的所有的数,该数是否含有7
//或是7的倍数
int main()
{
    int n = 0;

    for(n = 1; n < 100; n++)
    {
        if(n % 7 == 0)
        {
            printf("%d是7的倍数\n",n);
            continue;//结束当次循环,进入下一次循环(执行表达式3,执行表达式2...)
        }
        int tmp = n;
        for( ;tmp > 0 ; tmp = tmp/10)
        {
            if(tmp%10 == 7)
            {
                printf("%d含有7\n",n);
                break;
            }
        }
    }
    return 0;
}


小试牛刀

goto语句练习:随即输入一段字母,统计出现元音的个数

//goto语句实现循环

#include <stdio.h>
//goto语句实现 1+2+3+.....+100

int main(void)
{
    int i=1;
    int sum=0;

lop:
    if (i<=100) {
        sum+=i;
        i++;
        goto lop;
    }
    printf("sum= %d\n",sum);
    return 0;
}

//练习:随即输入一段字母,统计出现元音的个数

#include <stdio.h>
int main(void)
{
    char letter=0;
    int num=0;
    printf("请输入一段英文字母:\n    ");

lop:
    scanf("%c",&letter);
    if (letter=='a'||letter=='e'||letter=='i'||letter=='o'||letter=='u') {
            num++;
    }
    if(letter=='q'){
        printf("元音个数为: %d\n",num);
        return 0;
    }
        goto lop;
    return 0;
}

for循环练习:输入年月日,判断是一年中的第几天

//练习:输入年月日,判断是一年中的第几天
#include <stdio.h>
int main(void)
{
    int y,m,d;
    int days=0;
    printf("请输入年:\n");
    scanf("%d",&y);
    printf("请输入月:\n");
    scanf("%d",&m);
    printf("请输入日:\n");
    scanf("%d",&d);
    int n ;
    for(n--; n >= 1; n--)
    {
        switch(m)
        {
            case 11:case 9:case 6:case 4:
                days += 30;
                break;
            case 10:case 8:case 7:case 5:case 3:case 1:
                days += 31;
                break;
            case 2:
                days += 28+((y%4==0&&y%100!= 0)||y%400 ==0?1:0);
                break;
        }

    }
    days += d;
    printf("%d年 %d月 %d日",y,m,d);
    printf("是今年的第:%d",days);
    printf("天\n");
    return 0;
}

while练习 输入一个整型n,依次逆序输出n的每一位上的值

#include <stdio.h>
int main(void)
{
    int sum=0;
    int i=1;
    while (i<=100) {
        sum+=i;
        i++;
    }
    printf("1到100之和为:%d\n",sum);
    return 0;
}

//练习 输入一个整型n,依次逆序输出n的每一位上的值

#include <stdio.h>
int main(void)
{
    int num=0;
    scanf("%d",&num);
    while (num!=0) {
       printf("%d  " ,num%10);
        num=num/10;
    }
    printf("\n");
    return 0;
}

do…while练习:1*2*3*….*n(n不超过20)

#include <stdio.h>
int  main(void)
{
    int  i=1;
    int sum=0;
    do {
        sum+=i;
        i++;
    } while (i<=100);
    printf("1到100之和为:%d\n",sum);
}

//练习:1*2*3*....*n(n不超过20)


#include<stdio.h>
int main(void)
{
    int n=1;
    int result=1;
    do {
        result*=n;
        n++;
    } while (n<=20);
    printf("%d\n",result);
}

条件循环语句混合练习:判断100以内的所有的数,该数是否含有7

//练习:判断100以内的所有的数,该数是否含有7
//或是7的倍数
int main()
{
    int n = 0;

    for(n = 1; n < 100; n++)
    {
        if(n % 7 == 0)
        {
            printf("%d是7的倍数\n",n);
            continue;//结束当次循环,进入下一次循环(执行表达式3,执行表达式2...)
        }
        int tmp = n;
        for( ;tmp > 0 ; tmp = tmp/10)
        {
            if(tmp%10 == 7)
            {
                printf("%d含有7\n",n);
                break;
            }
        }
    }
    return 0;
}

其他经典练习

//
//  从键盘随机输入一个数,判断有几位构成
//
//

#include <stdio.h>
int main(void)
{
    int num;//从键盘输入的整形数据
    int n=0;
    printf("请输入一个数:\n");
    scanf("%d",&num);
    while (!0) {
        num=num/10;
        n++;
        if (num==0) {
            break;
        }
    }
    printf(" 此数由%d位数字组成!\n",n);
    return 0;
}


//
//打印九九乘法表
//


#include <stdio.h>
int main(void)
{
    for (int i=1; i<10; i++) {
        for (int j=1; j<=i; j++) {
            printf("%d*%d=%d\t",i,j,(i*j));
        }
            printf("\n");
    }
    return 0;

}

//
//求:Sn=a+aa+aaa+aaaa+aaaaa+....
//


 #include <stdio.h>
int main(void)
{
    int a=0,b=0,Sn=0;
    int i=0;
    int n=0;

    printf("输入数字a的值:\n");
    scanf("%d",&a);
    printf("输入相加的项数:\n");
    scanf("%d",&n);
    while (i<n) {
        b+=a;
        Sn+=b;
        a=a*10;
        i++;
    }
    for (int i=0; i<n; i++) {
        b+=a;
        Sn+=b;
        a=a*10;
    }
    printf("Sn=%d\n",Sn);
    return 0;
}

//百鸡问题


#include <stdio.h>
int main(void)
{
    int men=0;
    int women=0;
    int children=0;
    for (int men=1; men<=50/3; men++) {
        for (int women=1; women<=50/2; women++) {
            children=30-men-women;
            if (3*men+2*women+1*children==50) {
                printf("men=%d,women=%d,children=%d\n",men,women,children);
            }
        }
    }
    return 0;
}

//
//  韩信点兵问题
//
#include <stdio.h>
int main(void)
{
    int i;
    for (i=1; ; i++) {
        if (i%5==1 && i%6==5 && i%7==4 && i%11==10) {
            break;
        }
    }
        printf("总人数为:%d\n",i);
    return 0;
}

//
//6=1+2+3; 完数

//
//

#include <stdio.h>
int main(void)
{
    int n;
    int sum=0;
    for(n=1;n<=1000;n++){
        //求n的因子
        sum=0; //清空sum
        for(int i=1;i<=n/2;i++){
            if(n%i==0){ //若i是n的因子,则加入sum中
                sum+=i;
            }
        }
        if(sum==n){
            printf("%d\n",n);
        }
    }
    return 0;
}

//
// 猴子吃桃子问题
//

#include <stdio.h>
int main(void)
{
    int num1=0;
    int num2=1;
    for (int day=9; day>0; day--) {
        num1=(num2+1)*2;
        num2=num1;
        printf("第%d天后还剩%d个桃子\n",day,num1);
    }
    printf("一共的桃子数为:%d\n",num1);
    return 0;
}

//
//回文问题
//


#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);

    int i = 0;
    for(i=0; i<=7; i++)
    {
        int v = 0;
        for(int num = n; num > 0; num = num/10)
        {
            v = v*10+num%10;
        }
        if(v == n)
            break;
        else
            n = v+n;
    }
    if(i < 7)
        printf("%d通过%d计算得到回文数\n",n,i);
    else
        printf("通过7次没有得到回文数\n");
    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值