1. 程式人生 > 實用技巧 >2-stm32 gpio位帶

2-stm32 gpio位帶

任務1:

// ex1.cpp
#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, e = %d, f = %d, ", d, e, f);
    
    system("pause");
    
    return 0;
}

因為定義的a,b,c,d,e,f均為整型,所以當C語言從左往右進行運算時,所得的商將小數部分捨棄掉,就會出現現在的結果;

任務2:

// ex2.cpp

#include <stdio.h>
#include <stdlib.h>
int main(){
    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); system("pause"); return 0; }

%d :用來輸出十進位制整型資料的實際長度輸出;
\n :換行;
%8d :按照有符號十進位制整數格式輸出,輸出資料位寬為8,如果不足8位預設右對齊;
%2d :按照有符號十進位制整數格式輸出,輸出資料位寬為2,如果大於2位,按照原來資料的位寬輸出;
%f :以float型格式輸入或輸出變數的值預設保留6位小數;
%8f :按照float格式輸出,輸出資料位寬為8,保留6位小數,如果不足8位預設右對齊,如果大於8位,按照原來資料的位寬輸出;
%8.1f :按照float格式輸出,輸出資料位寬為8,保留1位小數,如果不足8位預設右對齊,如果大於8位,按照原來資料的位寬輸出;
%0.2f :按照float格式輸出,保留2位小數;
%.2e :以科學計數法形式輸出,保留兩位小數;
%lf :以double型格式輸入或輸出變數的值,保留6位小數;
%3c :按照字元型格式輸出,輸出資料位寬為3,如果不足3位預設右對齊,如果大於3位,按照原來資料的位寬輸出;
%s :按照字串型格式輸出;
%15s :按照字串型格式輸出,輸出資料位寬為15,如果不足15位預設右對齊,如果大於15位,按照原來資料的位寬輸出;
%10.5s :按照字串型格式輸出,輸出資料位寬為10,且只輸出字串的前5個字元,如果不足10位預設右對齊,如果大於10位,按照原來資料的位寬輸出;
%2.5s :按照字串型格式輸出,輸出資料位寬為2,且只輸出字串的前5個字元,如果不足2位預設右對齊,如果大於2位,按照原來資料的位寬輸出;
%.3s :按照字串型格式輸出,且只輸出字串的前3個字元

任務3:

// ex3.cpp

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

任務4:

// ex4.cpp
// 
#include <stdio.h>
#include <stdlib.h>
int main() {
    char x;
    x = getchar();
    
    if(x >= 48 && x<= 57)
        printf("%c是數字字元\n", x);

    else if(x >= 65 &&x <= 90 || x >= 97 && x <= 122)
        printf("%c是字母字元\n", x);

    else
        printf("%c是其他字元\n", x);

    system("pause");
    
    return 0;
}

任務5:

// ex5.cpp
#include <stdio.h>
#include <stdlib.h>

int main() {

    char ans1, ans2;

    printf("複習了沒? (輸入y或Y表示複習了,輸入n或N表示沒複習) : ");
    ans1 = getchar(); // 從鍵盤輸入一個字元,賦值給ans1
    
    getchar(); // 思考這裡為什麼要加這一行。試著去掉這一行,看看對執行有沒有影響。

    printf("\n動手敲程式碼了沒? (輸入y或Y表示敲了,輸入n或N表示木有敲) : ");
    ans2 = getchar();

    if((ans1 == 'y' || ans1 == 'Y') && (ans2 == 'y' || ans2 == 'Y')) // 待補足,判斷使用者回答ans1和ans2都是小寫y或大寫Y
        printf("\n羅馬不是一天建成的:)\n");

    else
        printf("\n羅馬不是一天毀滅的。。。\n");

    system("pause");
    
    return 0;
}

如果沒有getchar()這個函式,就無法執行第二個問題,應該是getchar()這個函式只能輸入一個字元,不知道說的對不對。

任務6:

// ex6.cpp
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
    
    int a1 = 1, q = 2, n;
    double sum;
    
    scanf("%d", &n);
    
    sum = (a1*(1-pow(q,n)))/(1-q);
    printf("n = %d 時, sum = %.0lf", n, sum);
    
    system("pause");
    
    return 0;
}

實驗結論:通過這次實驗,我瞭解了多種函式的用法,收穫頗豐;但還是要多上機練習才可。