C语言学习记录——칠 分支与循环(3)

目录

一、更多的练习

打印1~100之间所有3的倍数的数字:

猜数字游戏

二、goto语句

关机程序:


一、更多的练习

关键字不可以做变量名,不可以自己创建。

指针变量32位为4个字节,64位为8个字节。

static可以修饰函数,局部变量,全局变量

switch() 括号里面的参数类型不能是浮点数类型,而int, char都行

打印1~100之间所有3的倍数的数字:

int main()
{
    int i = 0;
    for (i = 1; i <= 100; i++)
    {
        if (i % 3 == 0)
            printf("%d\n", i);
    }
    return 0;
}

给定两个数,求最大公约数:

    int m = 24;
    int n = 18;
    int r = 0;
    scanf("%d%d", &m, &n);
    while (r = m % n)
    {
        m = n;
        n = r;
    }
    printf("%d\n", n);
    return 0;

打印1000~2000年之间的闰年:

    int y = 0;
    int count = 0;
    for (y = 1000; y <= 2000; y++)
    {
        if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
        {
            printf("%d ", y);
            count++;
        }
    }
    printf("\ncount = %d\n", count);

打印100~200之间的素数:

    int i = 0;
    int count = 0;
    for (i = 100; i <= 200; i++)
    {
        //素数判断一种方法:试除法。比如说13,素数除了1和本身,只需要看2~12之间有没有可以整除13的即可。也就是2~i - 1
        int j = 0;
        for(j = 2; j < i; j++)
        {
            if (i % j == 0)
                break;
        }
        if (j == i)
        {
            count++;
            printf("%d\n", i);
        }
    }
    printf("\ncount = %d\n", count);

不过这种算法不够好:

    int i = 0;
    int count = 0;
    for (i = 101; i <= 200; i+= 2)
    {
        int j = 0;
        for (j = 2; j <= sqrt(i); j++)
        {
            if (i % j == 0)
                break;
        }
        if (j > sqrt(i))
        {
            count++;
            printf("%d ", i);
        }
    }
    printf("\ncount = %d\n", count);

仍然不是很好的素数求法,但是也是做了点优化。

数1~100之间所有整数中出现多少个数字9:

    int i = 0;
    int count = 0;
    for (i = 1; i <= 100; i++)
    {
        if (i % 10 == 9)
            count++;
        if (i / 10 == 9)
            count++;
    }
    printf("count = %d\n", count);

计算1/1-1/2+1/3-1/4........+1/99-1/100的值:

    int i = 0;
    double sum = 0.0;
    int flag = 1;
    for (i = 1; i <= 100; i++)
    {
        sum += flag * 1.0 / i;
        flag = -flag;
    }
    printf("%lf\n", sum);

求7个整数最大值:

    int arr[] = { -4, -7, -3, -1, -5, -2, -6};
    int max = arr[0];
    int i = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    for (i = 1; i < sz; i++)
    {
        if (arr[i] > max)
            max = arr[i];
    }
    printf("max = %d\n", max);

打印乘法口诀表:

    int i = 0;
    for (i = 1; i <= 9; i++)
    {
        int j = 1;
        for (j = 1; j <= i; j++)
        {
            printf("%d * %d = %-2d ", i, j, i * j);//这里的格式是因为乘积不仅有单位数还有双位数,为了对齐,统一在左面空出两格,所以就是-2d,如果是右边,那就是2d
        }
        printf("\n");
    }

猜数字游戏

#include <stdlib.h>
#include <time.h>

void menu()
{
    printf("*******************************\n");
    printf("****** 1. play    0.exit ******\n");
    printf("*******************************\n");
}

void game()
{
    int ret = 0;
    int guess = 0;
    //time_t time(time_t* timer)
    ret = rand() % 100 + 1;//生成1~100之间随机数
    while (1)
    {
        printf("猜数字: >");
        scanf("%d", &guess);
        if (guess > ret)
        {
            printf("猜大了\n");
        }
        else if (guess < ret)
        {
            printf("猜小了\n");
        }
        else
        {
            printf("恭喜你,猜对了\n");
            break;
        }
    }
}

int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        printf("请选择: ");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误\n");
            break;
        } 
    } while (input);
    return 0;
}

二、goto语句

goto语句可以随意用的语句和标记跳转的标号。既然可以随意去哪,那么它的使用是带些破坏性质的,尽量不使用,除非没有其他代替的了。

int main()
{
    printf("hello world\n");
    goto again;
    printf(" nihao\n");
again:
    printf("haha\n");
    return 0;
}

只打印hello world和hehe。

goto可能会程序执行顺序打乱,影响逻辑。但是goto也有很好的用处。最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。这种情况下使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。两个例子:

for(...)

      for(....)

      {

           for(....)

           {

                 if(disaster)

                        goto error;

            }

      }

    error;

          if(disaster)

                  //处理错误情况

关机程序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char input[10] = { 0 };
    system("shutdown -s -t 300");
again:
    printf("电脑将在5分钟内关机,如果输入: 不看了,那么就取消关机\n请输入: ");
    scanf("%s", input);
    if (strcmp(input, "不看了") == 0)
    {
        system("shutdown -a");
    }
    else
    {
        goto again;
    }
    return 0;
}

或者

int main()
{
    char input[10] = { 0 };
    system("shutdown -s -t 300");
    while (1)
    {
        printf("电脑将在5分钟内关机,如果输入: 不看了,那么就取消关机\n请输入: ");
        scanf("%s", input);
        if (strcmp(input, "不看了") == 0)
        {
            system("shutdown -a");
            break;
        }
    }
    return 0;
}

结束。2021元旦快乐,去往2022年。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值