《明解c語言》已看完,練習代碼此奉上

来源:http://www.cnblogs.com/liushengchieh/archive/2016/11/12/6056900.html
-Advertisement-
Play Games

2016年9月20日至2016年11月12日,從學校圖書館借來的《明解c語言》看完了。 大三第一個學期,前8周,有c語言程式設計的課。課本是學校里的老師編寫出版的,為了壓縮空間,減少頁面,書中的代碼都擠成了一團,一點兒美感都沒有。課後習題的參考代碼輸入電腦後,運行錯誤,仔細看一遍,是最基本的邏輯問題 ...


2016年9月20日至2016年11月12日,從學校圖書館借來的《明解c語言》看完了。

大三第一個學期,前8周,有c語言程式設計的課。課本是學校里的老師編寫出版的,為了壓縮空間,減少頁面,書中的代碼都擠成了一團,一點兒美感都沒有。課後習題的參考代碼輸入電腦後,運行錯誤,仔細看一遍,是最基本的邏輯問題,最最不應該出現的錯誤。再加上授課老師的教法未得我心。

因此,這8周來,都是課上睡覺,課下《明解c語言》。書中的每一行代碼都被我敲進過電腦,前8章的練習也依次做過。第9、10、11、12、13章,為趕時間,跟上學校課程的進度,便只敲了代碼來回看了幾遍,未做練習。

下下周c語言考試,基礎知識已經過了一遍。而備考,則靠做課本上的習題吧。

以下,是我所做的《明解c語言》前8章的練習答案。答案不全,只是將個人覺得有點動腦兒的代碼給存了下來。

練習2-1:

#include <stdio.h>
int main()
{
    int n1, n2;
    puts("請輸入兩個整數:");
    printf("整數A:"); scanf("%d", &n1);
    printf("整數B:"); scanf("%d", &n2);

    printf("A的值是B的值的%d%%\n", (n1*100)/n2);
}

練習2-5:

#include <stdio.h>
int main()
{
    int n1, n2;
    puts("請輸入兩個整數:");
    printf("整數A:"); scanf("%d", &n1);
    printf("整數B:"); scanf("%d", &n2);

    printf("A是B的%f%%。\n", (double) (n1*100) / n2);  
    return 0;
}

練習3-1:

#include <stdio.h>
int main()
{
    int a, b;
    puts("請輸入兩個整數。");
    printf("整數A:"); scanf("%d", &a);
    printf("整數B:"); scanf("%d", &b);

    if (a % b)
        puts("B不是A的約數。");
    else
        puts("B是A的約數。");

    return 0;   
}

練習3-3:

#include <stdio.h>
int main()
{
    int n1;

    printf("請輸入一個整數:");
    scanf("%d", &n1);

    if (n1 >= 0)
        printf("絕對值是%d。\n", n1);
    else
        printf("絕對值是%d。\n", -n1);

    return 0;
}

練習3-8:

#include <stdio.h>
int main()
{
    int a, b, c, min;

    puts("請輸入3個整數。");
    printf("整數A:"); scanf("%d", &a);
    printf("整數B:"); scanf("%d", &b);
    printf("整數C:"); scanf("%d", &c);

    min = a;
    min = b < min ? b : min;
    min = c < min ? c : min;

    printf("最小值是%d。\n", min);

    return 0;
}

練習3-9:

#include <stdio.h>
int main(void)
{
    int a, b, c;

    puts("請輸入三個整數。");
    printf("整數A:"); scanf("%d", &a);
    printf("整數B:"); scanf("%d", &b);
    printf("整數C:"); scanf("%d", &c);

    if (a == b == c)
        puts("三個值都相等。");
    else if (a == b || a == c || b == c)
        puts("有兩個值相等。");
    else
        puts("三個值各不相同。");

    return 0;
}  

練習3-11:

#include <stdio.h>
int main(void)
{
    int no;

    printf("請輸入一個整數:");
    scanf("%d", &no);

    switch (no % 2) {
        case 0 : puts("該整數是偶數。"); break;
        default : puts("該整數是奇數。"); break;
    }

    return 0;
}

練習3-12:

#include <stdio.h>
int main(void)
{
    int month;

    printf("請輸入月份:");
    scanf("%d", &month);

    switch (month) {
        case 3 : puts("是春天。"); break;
        case 4 : puts("是春天。"); break;
        case 5 : puts("是春天。"); break;
        case 6 : puts("是夏天。"); break;
        case 7 : puts("是夏天。"); break;
        case 8 : puts("是夏天。"); break;
        case 9 : puts("是秋天。"); break;
        case 10 : puts("是秋天。"); break;
        case 11 : puts("是秋天。"); break;
        case 12 : puts("是冬天。"); break;
        case 1 : puts("是冬天。"); break;
        case 2 : puts("是冬天。"); break;
        default : puts("輸入的月份不存在!!\a"); break;
    }

    return 0;
}

練習4-1:

#include <stdio.h>
int main()
{
    int num1;
    int num2;

    do {
        printf("請輸入一個非負整數:");
        scanf("%d", &num1);
        if (num1 < 0)
            puts("請不要輸入負數。");
    } while(num1 < 0);

    num2 = num1;
    printf("%d逆向顯示的結果是", num2);
    do {
        printf("%d", num1 % 10);
        num1 = num1 / 10;
    } while(num1 > 0);
    puts("。");

    return 0;
}

練習4-2:

#include <stdio.h>
int main()
{
    int a;  /* 輸入的非負整數 */
    int b;  /* 用來顯示輸入的整數 */
    int c;  /* 位數 */

    do {
        printf("請輸入一個非負整數:");
        scanf("%d", &a);
        if (a < 0)
            puts("請不要輸入負數。");
    } while (a < 0);

    b = a;
    c = 0;
    printf("%d的位數是", b);
    do {
        a = a / 10;
        c = c + 1;
    } while (a > 0);
    printf("%d。 \n", c);

    return 0;
}

練習4-3:

#include <stdio.h>
int main()
{
    int n1;
    int n2;
    int a;
    int b;
    int sum = 0;

    puts("請輸入兩個整數。");
    printf("整數1:"); scanf("%d", &n1);
    printf("整數2:"); scanf("%d", &n2);

    a = n1;
    b = n2;
    
    printf("大於等於%d", b);
    printf("小於等於%d的所有整數的和是", a);
    do {
        sum = sum + n2;
        n2 = n2 + 1;
    } while (n2 <= n1);
    printf("%d。 \n", sum);

    return 0;
}

練習4-8:

#include <stdio.h>
int main(void)
{
    int i, no;

    printf("請輸入一個正整數:");
    scanf("%d", &no);

    i = 1;
    while (i <= no){
        printf("%d ", i++);
    }

    return 0;
}

練習4-9:

#include <stdio.h>
int main(void)
{
    int n1, n2;

    printf("請輸入一個整數:");
    scanf("%d", &n1);

    n2 = 2;
    while (n2 < n1){
        printf("%d ", n2);
        n2 += 2;
    }
    putchar('\n');

    return 0;
}

練習4-10:

#include <stdio.h>
int main(void)
{
    int n1, n2;

    printf("請輸入一個整數:");
    scanf("%d", &n1);

    n2 = 2;
    while (n2 < n1){
        printf("%d ", n2);
        n2 *= 2;
    }
    putchar('\n');

    return 0;
}

練習4-11:

#include <stdio.h>
int main(void)
{
    int no;

    printf("請輸入一個正整數:");
    scanf("%d", &no);

    while(no-- > 0){
        putchar('*');
        printf("\n");
    }

    return 0;
}

練習4-12:

# include <stdio.h>
int main()
{
    int no, sum = 0;

    for (no = 1; no <= 5; no++){
        sum += no;
    }

    printf("1到5的合計值是%d. \n", sum);

    return (0);
}

練習4-13:

# include <stdio.h>
int main()
{
    int i; /*輸入的整數小於10時的迴圈次數*/
    int num; /*輸入的整數*/
    int l; /*輸入的整數大於9時,整除10,所得到的「1234567890」的迴圈次數*/
    int o; /*輸入的整數大於9時,除餘10,所得到的個位數的顯示位數*/
    int v;
    int e;

    printf("please input a integer: ");
    scanf("%d", &num);

    if (num <= 9)
    {
        for (i = 0; i < num; i++)
            printf("%d", i + 1);
    }
    else {
        l = num / 10;
        o = num % 10;
        for (v = 0; v < l; v++)
            printf("1234567890");
        for (e = 0; e < o; e++)
            printf("%d", e + 1);
    }
    printf("\n");

    return (0);
}

練習4-14:

#include <stdio.h>
int main()
{
    int start;
    int end;
    int interval;

    printf("開始數值(cm): "); scanf("%d", &start);
    printf("結束數值(cm): "); scanf("%d", &end);
    printf("間隔數值(cm): "); scanf("%d", &interval);

    for (start = start;start <= end; start += interval ) {
        printf("%dcm %.2fkg \n", start, (double)(start - 80) * 0.7); 
    }
    /*世衛計算方法 男性:(身高(cm)-80)*70%*/

    return (0);
}

練習4-15:

#include <stdio.h>
int main()
{
    int i, j;
    int a; /*橫標題*/
    int b; /*豎標題*/

    printf("  |");

    for (a = 1; a <= 9; a++) {
        printf("  %d", a);
    }

    printf("\n");

    printf("------------------------------\n");

    for (i = 1; i <= 9; i++) {
        printf("%d ", i);
        printf("|");
        for (j = 1; j <= 9; j++)
            printf("%3d", i * j);
        putchar('\n');
    }

    return (0);
}

練習4-17:

(1)

# include <stdio.h>
int main()
{
    int i, j, ln;

    printf("三角形有幾層: ");
    scanf("%d", &ln);

    for (i = ln; i > 0; i--) {
        for (j = 1; j <= i; j++)
            putchar('*');
        putchar('\n');
    }

    return (0);
}

(2)

# include <stdio.h>
int main()
{
    int i, j, ln;

    printf("三角形有幾層:");
    scanf("%d", &ln);

    for (i = 0; i < ln; i++) {
        for (j = 1; j <= i; j++)
            putchar(' ');
        for (j = 1; j <= ln - i; j++)
            putchar('*');
        putchar('\n');
    }

    return (0);
}

練習4-18:

# include <stdio.h>
int main()
{
    int n;

    printf("讓我們來描繪一個金字塔。\n");
    printf("金字塔有幾層:"); scanf("%d", &n);

    int i, j, k;/*, n = 5;*/
    char c1 = ' ';
    char c2 = '*';

    for (i = 0; i < n; i++) {               /*最外層的迴圈語句還是控制三角形有幾層呀。。。*/
        for (j = 0; j < n - i; j++)
            printf("%c", c1);
        for (k = 0; k <= 2 * i; k++)       /*根據左邊的空格數來安排「*」的位置,輸入「*」後直接換行了!!!*/
            printf("%c", c2);

        printf("\n");
    }

    return (0);
}

練習5-4:

#include <stdio.h>
int main()
{
    int i;
    int va[5] = {15, 20, 30};
    int vb[5];

    for (i = 0; i < 5; i++) {
        vb[0] = va[4];
        vb[1] = va[3];
        vb[2] = va[2];
        vb[3] = va[1];
        vb[4] = va[0];
    }

    puts(" va vb");
    puts("------");
    for (i = 0; i < 5; i++) {
        printf("%3d%3d\n", va[i], vb[i]);
    }

    return 0;
}

練習5-5:

#include <stdio.h>
int main()
{
    int i;
    int vx[8];

    for (i = 0; i < 8; i++) {
        printf("vx[%d]:", i);
        scanf("%d", &vx[i]);
    }

    for (i = 0; i < 8; i++) {
        int temp = vx[i];
        vx[i] = vx[7 - i];
        vx[7 - i] = temp;
    }

    for (i = 0; i < 8; i++) {
        printf("vx[%d] = %d\n", i, vx[7 - i]);
    }

    return 0;
}

練習5-7:

#include <stdio.h>
int main(void)

/*
當矩陣A的列數等於矩陣B的行數時,A與B可以相乘。
矩陣C的行數等於矩陣A的行數,C的列數等於B的列數。
乘積C的第m行第n列的元素等於矩陣A的第m行的元素與矩陣B的第n列對應元素乘積之和。
*/

{
    int x[2][3], y[3][2], z[2][2], i, j, k;

    puts("請輸入x[2][3]的值:");
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3; j++) {
            scanf("%d", &x[i][j]);
        }
    }

    puts("請輸入y[3][2]的值:");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 2; j++) {
            scanf("%d", &y[i][j]);
        }
    }
// 將x*y的值存入z中
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) {
            z[i][j] = 0;
            for (k = 0; k < 3; k++)
                z[i][j] += x[i][k] * y[k][j];
        }
    }
// 將矩陣z的值輸出,註意換行
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) 
            printf("%d ", z[i][j]);
            printf("\n");   
    }

    return (0);
}

練習6-2:

#include <stdio.h>

int min3(int x, int y, int z)
{
    int min = x;

    if (y < min) min = y;
    if (z < min) min = z;

    return (min);
}

int main(void)
{
    int a, b, c;

    puts("please input three integers.");
    printf("integer 1:"); scanf("%d", &a);
    printf("integer 2:"); scanf("%d", &b);
    printf("integer 3:"); scanf("%d", &c);

    printf("The minimal integer is %d. \n", min3(a, b, c));

    return (0);
}

練習6-3:

#include <stdio.h>

int cube(int x)
{
    return (x * x * x);
}

int main(void)
{
    int a;

    printf("請輸入一個整數:"); scanf("%d", &a);

    printf("該整數的立方為:%d\n", cube(a));

    return (0);
}

練習6-4:

#include <stdio.h>

int sqr(int x)
{
    return (x * x);
}

int pow4(int x)
{
    return (sqr(x) * sqr(x));
}

int main(void)
{
    int a;

    printf("請輸入一個整數。"); scanf("%d", &a);

    printf("該數的四次冪為:%d\n", pow4(a));

    return (0);
}

練習6-5:

#include <stdio.h>

void alert(int no)
{
    while (no-- > 0)
        putchar('\a');
}

int main(void)
{
    int i, a;
    printf("請輸入一個整數:"); scanf("%d", &a);

    for (i = 1; i <= a; i++) {
        alert(i);
    }

    return (0);
}

練習6-6:

#include <stdio.h>

void hello(void)
{
    printf("你好。\n");
}

int main(void)
{
    hello();  /*若無輸入語句,可直接通過寫下函數名來調用函數。*/
    return (0);
}

練習6-7:

#include <stdio.h>

#define  NUMBER 5

int min_of(const int vc[], int no)
{
    int i;
    int min = vc[0];

    for (i = 1; i < no; i++)
        if (vc[i] < min)
            min = vc[i];
        return (min);
}

int main(void)
{
    int i;
    int ary1[NUMBER];

    printf("請輸入%d個整數。 \n", NUMBER);
    for (i = 0; i < NUMBER; i++){
        printf("[%d]:", i + 1); scanf("%d", &ary1[i]);
}
    
    printf("這些數中最小的一位是:%d\n", min_of(ary1, NUMBER));

    return (0);
}

練習6-8:

#include <stdio.h>

void rev_intary(int vc[], int no)
{
    int i, temp;

    for (i = 0; i < no / 2; i++) {
        temp = vc[i];
        vc[i] = vc[no - i - 1];
        vc[no - i - 1] = temp;
    }     
}

int main(void)
{
    int i;
    const int n = 6;
    int vc[n] = {2, 3, 5, 7, 11, 13};
    
    rev_intary(vc, n);

    for (i = 0; i < n; i++)
        printf("vc[%d]:%d\n", i + 1, vc[i]);

    return (0);

}

練習6-9:

#include <stdio.h>

void intary_rcpy(int v1[], const int v2[], int no)
{
    int i;
    
    for (i = 0; i < no; i++) {
        v1[i] = v2[no - 1 - i];
    }
}

int main(void)
{
    int i;
    const int n = 6;
    const int vb[] = {2, 3, 5, 7, 11, 13};
    int va[n];

    intary_rcpy(va, vb, n);

    for (i = 0; i < n; i++)
        printf("v1[%d]:%d\n", i, va[i]);

    return (0);
}

練習6-10:

#include <stdio.h>

void mul(const int ma[2][3], const int mb[3][2], int mc[2][2])
{
    int i, j, k;

    for (i = 0; i < 2; i++)
        for (j = 0; j < 2; j++) {
            for (k = 0; k < 3; k++)
                mc[i][j] += ma[i][k] * mb[k][j]; 
        }
}

int main(void)
{
    int i, j;
    const int ma[2][3] = {{1, 2, 3}, {4, 5, 6}};
    const int mb[3][2] = {{1, 4}, {2, 5}, {3, 6}};
    int mc[2][2] = {0};

    mul(ma, mb, mc);

    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) 
            printf("%d ", mc[i][j]);
            putchar('\n');
    }
        

    return (0);
}

練習6-11:

(1)

#include <stdio.h>
#define NUMBER 5

int max_of(int a[], int no) {
    int i;
    int max = a[0];

    for (i = 1; i < no; i++)
        if (a[i] > max)
            max = a[i];
        return (max);
}

int main(void)
{
    int i;

    int chi[NUMBER];
    int mat[NUMBER];
    int eng[NUMBER];

    int max_c;
    int max_m;
    int max_e;

    printf("請輸入[%d]名學生的分數。\n", NUMBER);
    for (i = 0; i < NUMBER; i++) {
        printf("[%d]\n", i + 1);
        printf("chinese: "); scanf("%d", &chi[i]);
        printf("   math: "); scanf("%d", &mat[i]);
        printf("english: "); scanf("%d", &eng[i]);
        putchar('\n');
    }

    max_c = max_of(chi, NUMBER);
    max_m = max_of(mat, NUMBER);
    max_e = max_of(eng, NUMBER);

    printf("The max score of chinese is: %d\n", max_c);
    printf("The  max  score  of math is: %d\n", max_m);
    printf("The max score of english is: %d\n", max_e);

    return (0); 
}

(2)

#include <stdio.h>

#define NUMBER 5
#define COURSE 3

int i, j;

void calculate(const float score[][3]);

int main()
{
    float result[NUMBER][COURSE];

    puts("請輸入以下5名同學各三科成績。");
    for (i = 0; i < NUMBER; i++) {
        printf("第[%d]名同學: ", i + 1);
        for (j = 0; j < COURSE; j++)
            scanf("%f", &result[i][j]);
    }

    calculate(result);

    return (0);
}

void calculate(const float score[][COURSE])
{
    float average[NUMBER] = {0};
    float sum[NUMBER] = {0};

    for (i = 0; i < NUMBER; i++) {
        for (j = 0; j < COURSE; j++){
            sum[i] += score[i][j];
        }
            average[i] = sum[i] / COURSE; 
    }

    for (i = 0; i < NUMBER; i++) {
        printf("第%d名學生的總成績為:%.2f,平均分為:%.2f。\n", i + 1, sum[i], average[i]);
    }
}

練習6-12:

#include <stdio.h>

#define NUMBER 5
int ma[NUMBER]; /*static storage duration*/

int main(void)
{
    int i;
    //static int ma[NUMBER]; /*static storage duration*/

    for (i = 0; i < NUMBER; i++)
        printf("[%d]:%d \n", i + 1, ma[i]);

    return (0);
}

練習8-1:

#include <stdio.h>

#define diff(x, y) ((x) - (y))

int main(void)
{
    int a, b;

    puts("請輸入兩個整數:");
    printf("integer 1:"); scanf("%d", &a);
    printf("integer 2:"); scanf("%d", &b);

    printf("兩個整數之差為:%d。\n", diff(a, b));


    return (0);
}

練習8-3:

#include <stdio.h>

#define swap(int, x, y) (int = x)

int main(void)
{
    int a, b;
    int c = 0;

    puts("請輸入2個整數:");
    printf("整數a:"); scanf("%d", &a);
    printf("整數b:"); scanf("%d", &b);

    swap(c, a, b);

    a = b;
    b = c;

    printf("a = %d, b = %d \n", a, b);

    return (0);
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景說明 最近在工作項目中有下麵一個場景: 使用Node.js的express框架實現了一個文件系統伺服器端,其中有個API用於客戶端上傳文件。客戶端使用Node.js的HttpClient來調用伺服器端的API上傳文件。 客戶端在上傳小文件時沒有任何問題,在上傳大文件時httpClient請求報錯 ...
  • wordpress是用php語言開發的博客平臺,它擴展性強,容易擴展,很適合拿來做二次開發。 1,問題由來 本周五,我在瀏覽公司的網站(基於wordpress開發)時發現,網站首頁上有兩篇文章的縮略圖重覆了,於是我進入網站後臺檢查,想看下是不是某位員工在撰寫文章時不小心這兩篇文章選擇了相同的圖片作為 ...
  • CREATESTRUCT結構CREATESTRUCT結構具有如下形式:typedef struct tagCREATESTRUCT{ LPVOID lpCreateParams; HANDLE hInstance; HMENU hMenu; HWND hwndParent; int cy; int ...
  • 第一種方式: javabean: 1 public class BusLoanInfoShop { 2 private Integer id; 3 private Integer bid; 4 private String shopName; 5 private String platformNam ...
  • 一.通過Socket實現TCP編程 1.1 TCP編程 TCP協議是面向連接,可靠的,有序的,以位元組流的方式發送數據。基於TCP協議實現網路通信的類有客戶端的Socket類和伺服器端的ServerSocket類。 1.2 伺服器端套路 1.創建ServerSocket對象,綁定監聽埠。 2.通過a ...
  • [java編程思想中文(第4版)] 2007 練習2答案 (1)參照本章的HelloDate.java這個例子,創建一個“Hello,World”程式,改程式 只要輸出這句話即可。你所編寫的類里只需一個方法(即“main”方法,在程式啟動時被執行)。 記住要把它設位static形式,並指定參數表 即 ...
  • 項目背景:spring、hibernate、以及JSF(xhtml頁面)和springmvc(JSP頁面) 1.項目中使用springmvc框架的每個JSP頁面都會使用<%@include file="../resource.jsp"%>來引用一個模板頁面;在resource.jsp頁面中放置所有引 ...
  • 題目大意:有3個整數 x[1], a, b 滿足遞推式x[i]=(a*x[i-1]+b)mod 10001。由這個遞推式計算出了長度為2T的數列,現在要求輸入x[1],x[3],......x[2T-1], 輸出x[2],x[4]......x[2T]. T<=100,0<=x<=10000. 如果 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...