Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Đề thi Ngôn ngữ C Đại học BK TP HCM

    Mọi người cho mình hỏi chương trình sau thực hiên những gì?
    #include <stdio.h>
    unsigned func(char message[],int n)
    {
    unsigned CRC=0xFFFF;
    char CRC_LSB=0;
    for(int i=0;i<n;i++)
    { CRC_LSB=(char)(CRC&0x0001);
    CRC=(unsigned)((CRC>>1)&0x7FFF);

    }
    message[i]=n++;
    printf("%x,%d
    ",CRC_LSB,n);
    return CRC;
    printf("%d
    ,i");
    }
    main()
    {
    char a[]={2,3,5,7};
    int n=1;
    unsign f;
    f=func(a,n);
    printf("%x
    ",f);
    printf("%d
    ",n);
    printf("%d
    ",a[1]);
    }

    Cám ơn mọi người trước [IMG]images/smilies/laughing.gif[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Đang ở
    Số 60 Thái Hà, Đống Đa, Hà Nội
    Bài viết
    0
    Mã:
    #include <stdio.h>/*khai báo thư viện*/
    unsigned func(char message[],int n) /*khai báo hàm func*/
    {
    unsigned CRC=0xFFFF; /*khai báo kiểu dữ liệu  không dấu CRC=1111 1111 1111 1111(FFFF)*/
    char CRC_LSB=0;
    for(int i=0;i<n;i++) /*bắt đầu vòng lặp for*/
    {
    CRC^=(unsigned)message[i]; /* CRC xor với  phần tử thứ i của mảng message*/
    CRC_LSB=(char)(CRC&0x0001);/* and CRC với 0001 để lấy trọng số thấp (LSB) của CRC*/
    CRC=(unsigned)((CRC>>1)&0x7FFF);/* dịch phải CRC 1 bit sau đó and với 0111 1111 1111 1111*/
    
    }
    message[i]=n++;/* phần tử thứ i của mảng messagese sẻ bằng n,sau đó n ++*/
    printf("%x,%d
    ",CRC_LSB,n);/* in ra trọng số thấp của CRC và n */
    return CRC; /*trả về giá trị của CRC */
    printf("%d
    ",i);/* in giá trị i */
    }
    main()
    {
    char a[]={2,3,5,7};
    int n=1;
    unsign f;
    f=func(a,n);/* gọi hàm func với mảng message sẽ là mảng a[] và n =1
    printf("%x
    ",f);/* in giá trị của hàm func*/
    printf("%d
    ",n);/* in giá trị của n */
    printf("%d
    ",a[1]);/* in ra gí trị phần tử thứ nhất của mảng a[]*/
    }
    ta xét từ vòng lặp for ,khi i=0 thì sẽ lần lượt thực hiện các lệnh sau
    Mã:
    CRC^=(unsigned)message[i]; /* CRC xor với  phần tử thứ i của mảng message*/
    CRC_LSB=(char)(CRC&0x0001);/* and CRC với 0001 để lấy trọng số thấp (LSB) của CRC*/
    CRC=(unsigned)((CRC>>1)&0x7FFF);/* dịch phải CRC 1 bit sau đó and với 0111 1111 1111 1111*/
    
    }
    ở lệnh CRC^=(unsigned)message[i] thì ta đã có mảng message giờ là mảng a[]={2,3,5,7},i=0 nên a[0]=2,từ đó CRC xor với 2 là 1111 1111 1111 1111 xor 0000 0000 0000 0010,ở lệnh xor thì khác là 1,giống là 0 ,nên kết quả cho ta CRC= 1111 1111 1111 1101.
    trọng số thấp của CRC giờ là 1.(CRC_LSB=1)
    CRC dịch phải 1 bit thành 0111 1111 1111 1110(0x7FFD) and với 7FFF sẽ bằng 7FFD,nên CRC giờ là 7FFD.
    Sau đó lệnh
    Mã:
     message[i]=n++
    gán message[i]=1,sau đó n=n+1=2,nên lệnh
    Mã:
    printf("%x,%d
    ",CRC_LSB,n)
    sẽ in ra là 1,2
    lệnh
    Mã:
    printf("%d
    ",i)
    sẽ in ra là 2 vì trong lệnh
    Mã:
    for(int i=0;i<n;i++)
    thì khi n=1 (trong hàm main) thì i=0,sau đó i++ nên i đã được tăng thêm 1 thành 2 rồi.
    Lệnh printf thứ nhất trong hàm main() in ra giá trị của f=func(a,n) sẽ là giá trị của CRC vì có lệnh return CRC là trả về giá trị của hàm.Nên lệnh
    Mã:
     printf("%x
    ",f)
    sẽ in ra là 7FFD.
    lệnh printf thứ 2 trong hàm main() là
    Mã:
     printf("%d
    ",n)
    sẽ in ra giá trị của n là 1 vì n được khai báo trong hàm main nên là biến cục bộ.Biến này chỉ được sử dụng trong hàm này thôi,nên mọi tác động từ hàm func sẽ không ảnh hưởng gì đến biến này,nên n vẫn bằng 1.
    Lệnh printf thứ 3 trong hàm main là
    Mã:
    printf("%d
    ",a[1])
    mảng này cũng được khai báo trong hàm main nên là cục bộ,sẽ không bị ảnh hưởng bởi hàm func,nên a[1] vẫn là 3,kết quả của lệnh printf này là 3.
    Có sai sót gì thì xin các bạn bổ sung thêm,vì mình chỉ mới học C++ thôi.

    - - - Nội dung đã được cập nhật ngày 13-08-2014 lúc 09:35 AM - - -

    Mã:
    int main()
    {
    int a=2,b=2,c=4,d;
    d=(a>3?b:(c>3?c++:c+3));
    return 0;
    }
    n=(i>0)?1:0 tương đương với
    Mã:
    if (i>0)
    n=1;
    else
    n=0;
    nên code trên tương đương với
    Mã:
    if (a>3)
    d=b;
    else if (c>3)
    {d=c;
    c=c+1;
    };
    else d=c+3;

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •