Bài tập lập trình C cơ bản và nâng cao

Máy tính đơn giản

#include <stdio.h>

int main() {
    int current, total;
    char symbol;

    scanf("%d", &total);
    while (1) {
        scanf(" %c", &symbol);  // Lưu ý khoảng trắng trước %c để bỏ qua ký tự trắng
        if (symbol == '=') break;

        scanf("%d", ¤t);
        switch (symbol) {
            case '+': total += current; break;
            case '-': total -= current; break;
            case '*': total *= current; break;
            case '/':
                if (current == 0) {
                    printf("ERROR");
                    return 0;
                }
                total /= current;
                break;
            default:
                printf("ERROR");
                return 0;
        }
    }
    printf("%d", total);
    return 0;
}

Tìm điểm gần chuẩn nhất

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

int timGanNhat(int ds[], int sl, int chuan) {
    int ganNhat = ds[0];
    int khoangCachMin = abs(ds[0] - chuan);

    for (int i = 1; i < sl; ++i) {
        int kc = abs(ds[i] - chuan);
        if (kc < khoangCachMin) {
            ganNhat = ds[i];
            khoangCachMin = kc;
        }
    }
    return ganNhat;
}

int main() {
    int diemChuan;
    scanf("%d", &diemChuan);

    int diem[6];
    for (int i = 0; i < 6; ++i) {
        scanf("%d", &diem[i]);
    }

    int tren[6], duoi[6], bang[6];
    int soTren = 0, soDuoi = 0, soBang = 0;

    for (int i = 0; i < 6; ++i) {
        if (diem[i] > diemChuan) tren[soTren++] = diem[i];
        else if (diem[i] < diemChuan) duoi[soDuoi++] = diem[i];
        else bang[soBang++] = diem[i];
    }

    if (soTren == 6) {
        printf("202 zui shuai\n");
    } else if (soDuoi == 6) {
        printf("come on!\n");
    } else {
        printf("zui shuai\n");
        printf("%d\n", timGanNhat(diem, 6, diemChuan));
        if (soTren > 0) {
            for (int i = 0; i < soTren; ++i) {
                if (i > 0) printf(" ");
                printf("%d", tren[i]);
            }
            printf("\n");
        }
    }
    return 0;
}

Mô phỏng trò chơi súng ngắn

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

void xoayTrong(int trong[], int lan, int kichThuoc) {
    int tam[kichThuoc];
    for (int i = 0; i < kichThuoc; ++i) {
        tam[(i + lan) % kichThuoc] = trong[i];
    }
    for (int i = 0; i < kichThuoc; ++i) {
        trong[i] = tam[i];
    }
}

int main() {
    int viTri[6];
    for (int i = 0; i < 6; ++i) {
        scanf("%d", &viTri[i]);
    }

    char nguoiChoi[10];
    scanf("%s", nguoiChoi);

    int lanXoay;
    scanf("%d", &lanXoay);
    lanXoay %= 6;

    xoayTrong(viTri, lanXoay, 6);

    for (int i = 0; i < 6; ++i) {
        printf("%d ", viTri[i]);
    }
    printf("\n");

    int luot = (strcmp(nguoiChoi, "sheep") == 0) ? 0 : 1;
    const char* ten[2] = {"sheep", "fish"};

    for (int i = 0; i < 6; ++i) {
        if (viTri[i] == 1) {
            printf("%s", ten[1 - luot]);
            return 0;
        }
        luot = 1 - luot;
    }
    return 0;
}

Tìm giá trị cực đại và cực tiểu

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);

    int tuoiMin = 101, thoiGianMax = 0, tongMax = 0;

    for (int i = 0; i < n; ++i) {
        int tuoi, thoiGian;
        scanf("%d %d", &tuoi, &thoiGian);

        if (tuoi < tuoiMin) tuoiMin = tuoi;
        if (thoiGian > thoiGianMax) thoiGianMax = thoiGian;
        if (tuoi + thoiGian > tongMax) tongMax = tuoi + thoiGian;
    }

    printf("%d %d %d", tuoiMin, thoiGianMax, tongMax);
    return 0;
}

Xoay mảng sang trái

#include <stdio.h>

void dichTrai(int mang[], int buoc, int n) {
    buoc = (buoc % n + n) % n;
    while (buoc--) {
        int dau = mang[0];
        for (int i = 0; i < n - 1; ++i) {
            mang[i] = mang[i + 1];
        }
        mang[n - 1] = dau;
    }
}

int main() {
    int n, m;
    scanf("%d %d", &n, &m);

    int arr[n];
    for (int i = 0; i < n; ++i) {
        scanf("%d", &arr[i]);
    }

    int dem = 0;
    for (int i = 0; i < m; ++i) {
        int lan;
        scanf("%d", &lan);
        dichTrai(arr, lan, n);
        if (arr[0] == 1) dem++;
    }

    printf("%d\n", dem);
    return 0;
}

Sắp xếp số lẻ trước, chẵn sau

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

int main() {
    char input[11], le[11], chan[11];
    int demLe = 0, demChan = 0;

    scanf("%s", input);

    for (int i = 0; input[i]; ++i) {
        if ((input[i] - '0') % 2) le[demLe++] = input[i];
        else chan[demChan++] = input[i];
    }

    le[demLe] = '\0';
    chan[demChan] = '\0';

    strcpy(input, le);
    strcat(input, chan);

    printf("%s", input);
    return 0;
}

Kiểm tra chuỗi đối xứng

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

int main() {
    char chuoi[81];
    fgets(chuoi, sizeof(chuoi), stdin);
    chuoi[strcspn(chuoi, "\n")] = '\0';

    int len = strlen(chuoi);
    for (int i = 0; i < len / 2; ++i) {
        if (chuoi[i] != chuoi[len - 1 - i]) {
            printf("%s\nNo\n", chuoi);
            return 0;
        }
    }
    printf("%s\nYes\n", chuoi);
    return 0;
}

Mã hóa số 4 chữ số

#include <stdio.h>

int main() {
    int so, chuSo[4];

    scanf("%d", &so);

    for (int i = 3; i >= 0; --i) {
        chuSo[i] = (so % 10 + 9) % 10;
        so /= 10;
    }

    int tmp = chuSo[0]; chuSo[0] = chuSo[2]; chuSo[2] = tmp;
    tmp = chuSo[1]; chuSo[1] = chuSo[3]; chuSo[3] = tmp;

    printf("The encrypted number is ");
    for (int i = 0; i < 4; ++i) printf("%d", chuSo[i]);
    printf("\n");
    return 0;
}

Xây dựng số nhỏ nhất từ tần suất chữ số

#include <stdio.h>

int main() {
    int tanSuat[10];
    char ketQua[51];
    int viTri = 0;

    for (int i = 0; i < 10; ++i) {
        scanf("%d", &tanSuat[i]);
    }

    for (int i = 1; i < 10; ++i) {
        if (tanSuat[i] > 0) {
            ketQua[viTri++] = '0' + i;
            tanSuat[i]--;
            break;
        }
    }

    for (int i = 0; i < 10; ++i) {
        while (tanSuat[i]-- > 0) {
            ketQua[viTri++] = '0' + i;
        }
    }

    ketQua[viTri] = '\0';
    printf("%s", ketQua);
    return 0;
}

Nhân hai ma trận

#include <stdio.h>

int main() {
    int hangA, cotA, hangB, cotB;

    scanf("%d %d", &hangA, &cotA);
    int A[hangA][cotA];
    for (int i = 0; i < hangA; ++i)
        for (int j = 0; j < cotA; ++j)
            scanf("%d", &A[i][j]);

    scanf("%d %d", &hangB, &cotB);
    int B[hangB][cotB];
    for (int i = 0; i < hangB; ++i)
        for (int j = 0; j < cotB; ++j)
            scanf("%d", &B[i][j]);

    if (cotA != hangB) {
        printf("Error: %d != %d\n", cotA, hangB);
        return 0;
    }

    int C[hangA][cotB];
    for (int i = 0; i < hangA; ++i) {
        for (int j = 0; j < cotB; ++j) {
            C[i][j] = 0;
            for (int k = 0; k < cotA; ++k) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    printf("%d %d\n", hangA, cotB);
    for (int i = 0; i < hangA; ++i) {
        for (int j = 0; j < cotB; ++j) {
            printf("%d", C[i][j]);
            if (j < cotB - 1) printf(" ");
        }
        printf("\n");
    }
    return 0;
}

Chuyển đổi địa chỉ IP nhị phân

#include <stdio.h>
#include <math.h>

int main() {
    char nhiPhan[33];
    scanf("%s", nhiPhan);

    for (int i = 0; i < 4; ++i) {
        int giaTri = 0;
        for (int j = 0; j < 8; ++j) {
            giaTri += (nhiPhan[i * 8 + j] - '0') * pow(2, 7 - j);
        }
        printf("%d%s", giaTri, (i < 3) ? "." : "");
    }
    return 0;
}

Phân tích số điện thoại

#include <stdio.h>

int daTonTai(int ds[], int val, int size) {
    for (int i = 0; i < size; ++i)
        if (ds[i] == val) return 1;
    return 0;
}

void sapXepGiam(int ds[], int size) {
    for (int i = 0; i < size - 1; ++i)
        for (int j = 0; j < size - i - 1; ++j)
            if (ds[j] < ds[j + 1]) {
                int tmp = ds[j];
                ds[j] = ds[j + 1];
                ds[j + 1] = tmp;
            }
}

int main() {
    char sdt[12];
    int soDuyNhat[10], chiSo[11], dem = 0;

    scanf("%s", sdt);

    for (int i = 0; i < 11; ++i) {
        int num = sdt[i] - '0';
        if (!daTonTai(soDuyNhat, num, dem)) {
            soDuyNhat[dem++] = num;
        }
    }

    sapXepGiam(soDuyNhat, dem);

    printf("int[] arr = new int[]{%d", soDuyNhat[0]);
    for (int i = 1; i < dem; ++i) printf(",%d", soDuyNhat[i]);
    printf("};\n");

    for (int i = 0; i < 11; ++i) {
        int num = sdt[i] - '0';
        for (int j = 0; j < dem; ++j) {
            if (soDuyNhat[j] == num) {
                chiSo[i] = j;
                break;
            }
        }
    }

    printf("int[] index = new int[]{");
    for (int i = 0; i < 11; ++i) {
        printf("%d", chiSo[i]);
        if (i < 10) printf(",");
    }
    printf("};\n");

    return 0;
}

Thẻ: C ma-tran xử-lý-chuỗi giải-thuật-cơ-bản

Đăng vào ngày 29 tháng 6 lúc 09:39