战狼源代码赏析

要考 C 语言啦,我们不如一起看看一些代码哦。

前几天又看了一遍战狼,发现里面有几个有关入侵代码的部分。

嗯,不错!

嗯?

嗯……

于是,本着搞事的原则,我们高贵的程序员就来一起还原下电影里的这些代码,给大家讲解讲解。都是 C 语言哦!

代码 1:

#include <stdio.h>

main()
{
    int i, j, k, n;
    printf("'water flower'number is:");
    for (n = 100; n < 1000; n++)
    {
        i = n / 100;
        j = n / 10 % 10;
        k = n % 10;
        if (i * 100 + j * 10 + k == i * i * i + j * j * j + k * k * k)
        {
            printf("%-5d", n);
        }
    }
    printf("n");
}

嗯,这个代码首先定义了四个变量,接下来有一个从 100 到 999 的 n 的循环,每次我们算出三个 i,j,k,分别对应 n 的百位,十位,个位。最后我们判断下 n 的值和其百位的三次方加上十位的三次方加上个位的三次方相不相等,我们再看看,嗯?这不就是我们的水仙花数嘛?当然,这里的 i * 100 + j * 10 + k 可以直接用 n 代替,就可以了。

代码 2:

/* zheng int is divided yinshu */
#include "stdio.h"
#include "conio.h"

main()
{
    int n, i;
    printf("\nplease input a number:\n");
    scanf("%d", &n);
    printf("%d=", n);
    for (i = 2; i <= n; i++)
        while (n != i)
        {
            if (n % i == 0)
            {
                printf("%d*", i);
                n = n / i;
            }
            else
                break;
        }
    printf("%d", n);
    getch();
}

嗯,这个代码首先定义了两个变量,接下来输入了一个 n,我们首先输出 n;接下来循环从 2 到 n;对于每个枚举的 i,我们判断 i 和 n 相不相等,不等的话我们就看看 n 模 i(余数)是不是 0,如果是就说明整除,那我们就知道这是个因数,接下来我们将 n 变成更小的再去循环,最后我们就能将一个数字分解成许多个因数相乘了。

代码 3:

#include <stdio.h>

main()
{
    int score;
    char grade;
    printf("please input a score!\n");
    scanf("%d", &score);
    grade = score >= 90 ? 'A' : (score > 80 ? 'B' : 'C');
    printf("%d belongs to %c", score, grade);
}

嗯,这个代码首先定义了两个变量,score 和 grade,接下来我们输入一个 score,然后我们先判断分数是否大于等于 90,如果是那么 grade 就是 A,否则就是(score < 90 ? ‘B’ : ‘C’)的值,那么第二个表达式,就是判断 score 是不是小于 80,如果大于 80 那么就是 B,否则是 C。

代码 4:

#include <stdio.h>
#include <conio.h>

int main()
{
    char letter;
    printf("please input the first letter of someday\n");
    while ((letter = getch()) != 'Y')
    {
        switch (letter)
        {
        case 's':
            printf("please input second letter\n");
            if ((letter = getch()) == 'a')
                printf("saturday\n");
            else if ((letter = getch()) == 'u')
                printf("sunday\n");
            else
                printf("data error\n");
            break;
        case 'f':
            printf("friday\n");
            break;
        case 'm':
            printf("monday\n");
            break;
        case 't':
            printf("please input second letter\n");
            if ((letter = getch()) == 'u')
                printf("tuesday\n");
            else if ((letter = getch()) == 'h')
                printf("thursday\n");
            else
                printf("data error\n");
            break;
        case 'w':
            printf("wednesday\n");
            break;
        default:
            printf("dataerror\n");
        }
    }
}

本程序功能为自动补全,从键盘输入一个星期七天的英文首字母,即可自动补全。

首先定义了一个变量 letter,读入该英文的第一个字母,如果是 f/m/w 则得到结果,如果是 s/t 则再读入第二个字母进行判断。

getch()是一个难点,和 getchar()差不多,区别在于 getch()输入的屏幕不显示。

代码 5:

#include <stdio.h>

main()
{
    long a, b, c, d, e, x;
    scanf("%ld", &x);
    a = x / 10000;
    b = x % 10000 / 1000;
    c = x % 1000 / 100;
    d = x % 100 / 10;
    e = x % 10;
    if (a != 0)
        printf("there are 5, %ld %ld %ld %ld %ld\n", e, d, c, b, a);
    else if (b != 0)
        printf("there are 4, %ld %ld %ld %ld\n", e, d, c, b);
    else if (c != 0)
        printf(" there are 3, %ld %ld %ld\n", e, d, c);
    else if (d != 0)
        printf("there are 2, %ld %ld\n", e, d);
    else if (e != 0)
        printf(" there are 1, %ld\n", e);
}

首先定义一个变量 x,读入 x 后按照个十百千万赋值给 e/d/c/b/a,最后通过对 a/b/c/d/e 是否为 0 来判断该整数的位数,并按位输出该数。

这里的 long 大家可以当作和 int 一样(迫真

《战狼源代码赏析》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据