1. 程式人生 > 實用技巧 >Flink實戰(一):監控(一)Metrics監控原理與實戰

Flink實戰(一):監控(一)Metrics監控原理與實戰

以下實驗都在Visual Studio 2019 Preview平臺完成

———————————————————————————————————————————————————————————————————————————————————————————

實驗2-1

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a = 5, b = 7, c = 100, d, e, f;
    d = a / b * c;
    e = a * c / b;
    f = c / b * a;
    printf(
"d=%d\ne=%d\nf=%d", d, e, f); return 0; }

理論分析:

1.由於都是整型,a/b=0.....5,所以值取0,再乘100結果還是0。

2.a*c得500,500/7=71.....3,所以值取71。

3.100/7=14.....2,取值14,14*5得70。

由於整型的運算中沒有小數(只取兩數的商的整數部分),所以在運算過程中運算的位序改變以後會對之後的運算產生影響。

———————————————————————————————————————————————————————————————————————————————————————————

實驗2-2

#include <stdio.h>
#include
<stdlib.h> int main() { system("color 2"); int x=1234; float f=123.456; double m=123.456; char ch='a'; char a[]="Hello, world!"; int y=3, z=4; printf("%d %d\n", y, z); printf("y=%d, z=%d\n", y,z); printf("%8d,%2d\n", x,x); printf("
%f, %8f, %8.1f, %0.2f, %.2e\n",f,f,f,f,f); printf("%lf\n",m); printf("%3c\n", ch); printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a); return 0; }

line12/13:%d即輸出整型。

line14:%xd指在輸出整型時佔位寬x位,多餘位寬會空出,而位寬少了也會補上,使輸出的值不改變。

line15:%a.bf指在輸出浮點型時佔位寬a位,保留b位小數(遵循四捨五入),而%e指以指數形式輸出。

line16:%lf指輸出雙精度型。

line17:%xc指在輸出字元型時佔位寬x位。

line18:%a.bs指在輸出字串時佔位寬a位,多餘位寬會空出,而位寬少了也會補上,使輸出的字串不改變。.b指保留b個字元。

————————————————————————————————————————————————————————————————————————————————————————————

實驗2-3

#include <stdio.h>
#include<stdlib.h>
int main()
{
    double x, y;
    char c1, c2, c3;
    int a1, a2, a3;
    scanf_s("%d %d %d ", &a1, &a2, &a3);
    printf("a1=%d,a2=%d,a3=%d,",a1, a2, a3);
    scanf_s("%c %c %c ", &c1,1, &c2,1, &c3,1);
    printf("c1='%c',c2='%c',c3='%c',", c1, c2, c3);
    scanf_s("%lf %lf", &x, &y);
    printf("x=%.1lf,y=%.1lf\n", x, y);
    return 0;
}

實驗中會犯的錯誤:沒有在輸入行末尾“%d %d %d”和“%c %c %c"後加空格,導致輸入時回車佔了一個字元的位置,使輸出結果出錯。

————————————————————————————————————————————————————————————————————————————————————————————、

實驗2-4

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char x;
    while (printf("請輸入一個字元:"), scanf_s(" %c", &x, 1) != 0)
        if (x >= '1' && x <= '9')
            printf("%c是數字字元\n", x);
        else if ((x >= 'a' && x <= 'z')||(x>='A'&&x<='Z'))
            printf("%c是英文字母\n", x);
        else
            printf("%c是其它字元\n", x);
    return 0;
}

———————————————————————————————————————————————————————————————————————————————————————————

實驗2-5

#include <stdio.h> 
#include<stdlib.h>
int main() 
{   
    char ans1,ans2;      
    printf("複習了沒? (輸入y或Y表示複習了,輸入n或N表示沒複習) :  ");    
    ans1 = getchar();
    getchar();
    printf("\n動手敲程式碼了沒? (輸入y或Y表示敲了,輸入n或N表示木有敲) :  ");  
    ans2 = getchar();      
    if((ans1=='y'||ans1=='Y')&&(ans2=='y'||ans2=='Y'))
        printf("\n羅馬不是一天建成的:)\n");   
    else    
        printf("\n羅馬不是一天毀滅的。。。\n");
    return 0;
}

思考:在刪去第八行的getchar()後,結果如圖

無論第一個輸入的字元是Y(y)或N(n),輸出的結果都是”羅馬不是一天毀滅的。。。“,

應該是在輸入第一個字元後按回車,程式將回車賦給了ans2,而第八行的getchar()消除的回車產生的影響。

———————————————————————————————————————————————————————————————————————————————————————————

實驗2-6

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int n, q, sum;
    q = 2;
    while(printf("請輸入一個數(數字在1-10之間):"),
    scanf_s("%d", &n),
    sum = pow(q,n)-1,
    printf("n = %d時,sum = %d\n", n, sum)!=0);
return 0; }

———————————————————————————————————————————————————————————————————————————————————————————

實驗2-7

#include<stdio.h>
#include<stdlib.h>
int main()
{
    printf(" O \n<H>\n1 1");
    return 0;
}

由於對小人的迴圈列陣輸入不是很清楚,所以直接暴力輸出所有小人:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    printf(" O     O     O     O     O     O     O     O     O \n");
    printf("<H>   <H>   <H>   <H>   <H>   <H>   <H>   <H>   <H>\n");
    printf("1 1   1 1   1 1   1 1   1 1   1 1   1 1   1 1   1 1\n");
    printf("       O     O     O     O     O     O     O       \n");
    printf("      <H>   <H>   <H>   <H>   <H>   <H>   <H>      \n");
    printf("      1 1   1 1   1 1   1 1   1 1   1 1   1 1      \n");
    printf("             O     O     O     O     O             \n");
    printf("            <H>   <H>   <H>   <H>   <H>            \n");
    printf("            1 1   1 1   1 1   1 1   1 1            \n");
    printf("                   O     O     O                   \n");
    printf("                  <H>   <H>   <H>                  \n");
    printf("                  1 1   1 1   1 1                  \n");
    printf("                         O                         \n");
    printf("                        <H>                        \n");
    printf("                        1 1                        \n");
    return 0;
}

通過新增while函式,可以實現顏色的迴圈。

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
int main()
{
    int a;
    printf(" O     O     O     O     O     O     O     O     O \n");
    printf("<H>   <H>   <H>   <H>   <H>   <H>   <H>   <H>   <H>\n");
    printf("1 1   1 1   1 1   1 1   1 1   1 1   1 1   1 1   1 1\n");
    printf("       O     O     O     O     O     O     O       \n");
    printf("      <H>   <H>   <H>   <H>   <H>   <H>   <H>      \n");
    printf("      1 1   1 1   1 1   1 1   1 1   1 1   1 1      \n");
    printf("             O     O     O     O     O             \n");
    printf("            <H>   <H>   <H>   <H>   <H>            \n");
    printf("            1 1   1 1   1 1   1 1   1 1            \n");
    printf("                   O     O     O                   \n");
    printf("                  <H>   <H>   <H>                  \n");
    printf("                  1 1   1 1   1 1                  \n");
    printf("                         O                         \n");
    printf("                        <H>                        \n");
    printf("                        1 1                        \n");
    while (1)
    {
        for (a = 0; a < 1; a++)
        system("color 1"), Sleep(1000);
        system("color 2"), Sleep(1000);
        system("color 3"), Sleep(1000);
        system("color 4"), Sleep(1000);
    }
    return 0;
}

或者使用while+if函式,通過特定條件也可以實現顏色迴圈變化:

int a=1; 
while (a <= 1000000)
{
a = a++;
{if (a % 10 == 0) system("color 1"); }
{if (a % 10 == 1) system("color 2"); }
{if (a % 10 == 2) system("color 3"); }
{if (a % 10 == 3) system("color 4"); }
{if (a % 10 == 4) system("color 5"); }
{if (a % 10 == 5) system("color 6"); }
{if (a % 10 == 6) system("color 7"); }
{if (a % 10 == 7) system("color 8"); }
{if (a % 10 == 8) system("color 9"); }
{if (a % 10 == 9) system("color a"); }
}

關於小人移動的思考:

在小人左邊或右邊列印字元,使字元移動,產生小人移動的效果。

——————————————————————————————————————————————————————————————————————————————————————————

存在的不足:

1.不會列陣輸出小人,只能手動輸入。

2.不會小人的移動(不知道該用什麼程式碼實現),以及如何讓所有小人都可以移動(而不是隻有一個小人)。

3.在實驗2-4和2-6中使用迴圈輸入時使用while((xxx)!=0);或while((xxx)!=EOF);時,無法用Ctrl+E或Ctrl+D以及Ctrl+Z結束程式,特別在實驗2-6中結束時會出現無限迴圈。