Giải thích về lệnh printf trong hàm main

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int s = 1;//tim kc nn tu s den tat ca cac dinh
int const max = 20;
int a[max];//day so cho truoc
int mtk[max][max], n;
int d[max][max];//d[i][j]:kcnho nhât  tu ai den aj
int p[max][max];//p[i][j]:dinh truoc dinh j tren duong nn tu i den j
int const avc = -100;  //am vo cuc
void DocFile() {
    int x;
    FILE *f = fopen("E:\\daytang.txt", "r");// ta mở tập tin daytang.txt"kiểm tra xem nếu tập tin bằng null thì
    if (f == NULL) { //file ko tồn tại còn ngược lại trả về EOF(-1)
        printf("\nFile %s khong co");
    }
    n = 0;
    while (fscanf(f, "%d", &x) != EOF) //
        a[++n] = x;
    fclose(f);
}
void matranke()

{
    int i,j;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            if (i == j)
                mtk[i][j] = 0;
            else mtk[i][j] = avc;
    for (i = 1; i<n; i++)
        for (j = i + 1; j <= n; j++)
            if (a[i] <= a[j])
                mtk[i][j] = 1;
            else
                mtk[i][j] = -1;
}

void Floyd() { //đường đi ngắn nhất
    int i, j, k;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++) {
            d[i][j] = mtk[i][j];
            p[i][j] = i;
        }
    for (k = 1; k <= n; k++)
        for (i = 1; i <= n; i++)
            for (j = 1; j <= n; j++)
                if (d[i][j]<d[i][k] + d[k][j]) {
                    d[i][j] = d[i][k] + d[k][j];
                    p[i][j] = p[k][j];
                }
}
void main() {
    int i, j, k, i0, j0;
    DocFile();
    matranke();
    for (i = 1; i <= n; i++)
        printf("%3c%d", 'a', i);
    printf("\n");
    for (i = 1; i <= n; i++)
        printf("%4d", a[i]);
    Floyd();
    printf("\nDay con khong giam dai nhat: ");
    k = avc;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            if (d[i][j]>k) {
                k = d[i][j];
                i0 = i;
                j0 = j;
            }
    k = j0;
    while (k != i0) {
        printf("a%d-->",k);
        k = p[i0][k];
    }
    printf("a%d: chieu dai=%d", i0, d[i0][j0] + 1);
    printf("\n");
    system("pause");
}

printf("\nDay con khong giam dai nhat: ");
k = avc;
for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
        if (d[i][j]>k) {
            k = d[i][j];
            i0 = i;
            j0 = j;
        }
k = j0;
while (k != i0) {
    printf("a%d-->",k);
    k = p[i0][k];
}
printf("a%d: chieu dai=%d", i0, d[i0][j0] + 1);
printf("\n");

Em muốn biết gì về hàm printf?

Có vẻ em chưa học qua lập trình? Sao em không thử học một khóa học chuyên nghiệp và miễn phí này nhỉ :smiling_imp:

1 Like

bài này em đang cần à
anh có thể giải thích

 printf("a%d-->",k);
    k = p[i0][k];
}
printf("a%d: chieu dai=%d", i0, d[i0][j0] + 1);

Nhìn cách em copy code có vẻ như em không biết lập trình?

Hàm printf là hàm dùng để in text ra ngoài thiết bị out, có thể là màn hình máy tính, máy in, file, …

Hàm printf có cấu trúc để có thể truyền giá trị từ biến vào chuỗi để tạo thành một chuỗi hoàn chỉnh, nội dung thay đổi tùy thuộc vào giá trị mà biến truyền vào

printf("a%d: chieu dai=%d", i0, d[i0][j0] + 1);

Với lệnh trên thì format của lệnh printf là đoạn

"a%d: chieu dai=%d"

Trong đó:

%d: sẽ được thay thế bởi một số

Ở đây ta có 2 chỗ có %d, 2 vị trí này sẽ được thay bằng hai biến hoặc giá trị hoặc kết quả của một phép toán. Phần tiếp theo của lệnh printf sẽ thay vào 2 vị trí đấy

i0, d[i0][j0] + 1

Ở đây giá trị của i0 sẽ thay vào %d thứ nhất
Và giá trị của d[i0][j0] + 1 sẽ thay vào %d thứ hai.


Tới đây là xong phần giải thích và anh rất mong em sẽ học lập trình từ đầu. Bắt đầu bằng cơ bản, không nên đặt những câu hỏi thế này vì nó sẽ không giúp ích gì nhiều cho em đâu.

Em có thể học từ chương trình mà anh biên soạn ở đây:

Chúc em học tốt.

3 Likes

em chỉ học C++ thui a nhưng hình như 2 cái đó có liên wan hả a

Có liên quan một tí. Ban đầu C được tạo ra trước, sau đó Bjarne Stroustrup mới thêm hướng đối tượng vào để tạo ra C++ và bây giờ thì C++ đã thêm rất nhiều thứ vào đấy và đã khác C khá nhiều rồi.

Em đọc thêm ở đây:


Topic này đã giải quyết xong câu hỏi về printf tiếp tục trả lời các vấn đề khác là off-topic

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?