30/09/2018, 20:36

Các toán tử trong C

Em có bài toán:
int m=3,p=5;
int a1,a2;
a1=p>m;
a2=p%m+p>m;

xuất ra màn hình thì a1=1; a2=1;

em ko hiểu tại sao a2 ko bằng 3?
ai có thể giải thích dùm em!

X viết 22:41 ngày 30/09/2018

Tại sao bạn nghĩ a2 sẽ bằng 3?

Vô Thin viết 22:38 ngày 30/09/2018

a2=p%m+p>m;

Bạn giải thích giùm xem bạn hiểu cái đoạn trên là gì? Nói bằng lời văn xem. Mình chưa thấy có một bài toán nào trong thực tế như vậy, bạn lên bảng viết một bài toán như vậy, thầy giáo cho bạn mấy điểm? Chú ý: các bạn hiểu vấn đề đừng ném đá mình, mình đang dùng phương pháp hỏi đáp để làm cho bạn đang hỏi hiểu vấn đề.

nghia viết 22:40 ngày 30/09/2018

p>m là true chuyền sang int là 1 ok
p%m=5%3=2

lấy 1+2=3 chứ sao!

nghia viết 22:46 ngày 30/09/2018

nghĩ đơn giản vậy thôi

nghia viết 22:51 ngày 30/09/2018

bài này trong trường chưa bao giờ thấy mới tìm làm thử ko hiểu tại sao!

Vô Thin viết 22:38 ngày 30/09/2018

C là một ngôn ngữ lập trình dạng “có kiểu” (có kiểu mạnh), tức là một biến phải có kiểu xác định, cho nên, cái a2=p%m+p>m; là tầm bậy, bạn hoặc phép “ép kiểu” hoặc phải khai báo lại kiểu của biến a2, còn không, nó ra kết quả không mong đợi thì người khác cũng khó giải thích cho bạn hiểu khi bạn không hiểu câu “C là một ngôn ngữ có kiểu” là sao.

nghia viết 22:36 ngày 30/09/2018

@superthin Em có 1 cuốn bài tập nó cho bài như vậy và kêu mình cho kết quả !
nhưng ko hiểu tại sao giá trị đó lại = 1?

nghia viết 22:48 ngày 30/09/2018

link bài đó nek! bài 3

dropbox.com

B%C3%A0i%20t%E1%BA%ADp%20C%20v%C3%A0%20C%2B%2B%20%28%20c%C3%B3%20l%E1%BB%9Di%20gi%E1%BA%A3i%29.pdf

Vô Thin viết 22:39 ngày 30/09/2018

Chỉ biết khuyên bạn đọc lại lý thuyết cho kỹ. Bạn chưa nắm lý thuyết. Các thứ bạn cần đọc:

  • Kiểu là gì?
  • Thứ tự ưu tiên của toán tử trong một biểu thức
  • Khi có biểu thức mà các thành phần khác kiểu thì sao

Sau khi bạn nắm được 3 ý trên, bạn tự trả lời. Để không làm bạn nản lòng, mình thử phân tích tí xíu cho bạn:

a2=p%m+p>m
ta thay vào sẽ:
a2= 5%3+5>3

Thứ tự phép tính là sao? Sẽ là: 5%3 = 2, rồi + 5 tức là 7; rồi thì 7 > 3 sẽ là true, true nếu tự động ép kiểu sang int thì là 1.

nghia viết 22:44 ngày 30/09/2018

@superthin ok thank bác!vậy là mình đã ko đọc kĩ tài liệu!

Lê Qúi Nhất viết 22:41 ngày 30/09/2018

bạn đọc lại kiến thức thứ tự ưu tiên của các toán tử trong C nhé, có đầy đủ đó, đọc xong bạn hiểu ngay

Bé tập Code viết 22:40 ngày 30/09/2018

Dấu + thực hiện trước dấu > bạn.
Với lại trong C, true (nếu có tồn tại trong standard bạn đang dùng) luôn là 1 chứ không có ép kiểu gì ở đây hết.

Nguyễn Tấn Khoa viết 22:46 ngày 30/09/2018

Trong C, C++, phép % sẽ thực hiện trước, sau đó tới phép +, rồi đến phép so sánh (>) (như khi bạn làm toán vậy ,phép nhân luôn thực hiện trước phép cộng). Vậy trong phép toán của bạn, C sẽ thực hiện 5%3 trước, được kết quả là 2. Sau đó tất cả cộng cho p, nghĩa là 2 + 5 (p = 5) được kết quả là 7, sau đó so sánh 7 có phải lớn hơn 3 hay không. Vì 7 lớn hơn 3 nên cho kết quả là 1.

Bài liên quan
0