#include <stdio.h>
#include <stdlib.h>
/* Nhập vào hai số num1 và num2. Tìm tổng của tất cả các số lẻ nằm giữa hai số đã được nhập */
int main()
{
int num1, num2, i, sum;
{
printf("The program is only for integers\n");
printf("Enter num1:\n");
scanf("%d", &num1);
printf("Enter num2:\n");
scanf("%d", &num2);
}
{
for ( i = num1; i <= num2; i+= 2)
printf("%d\t", i);
}
{
do sum = i + ( i+= 2);
while(i+=2 <= num2);
printf("%d", sum);
}
return 0;
}
E có cái code vừa tập viết, mong các bác chỉnh sửa giúp
Đây là cách viết của mình:
#include <stdio.h>
// Nhập vào hai số num1 và num2. Tìm tổng của tất cả các số lẻ nằm giữa hai số đã được nhập
int main()
{
//Input values:
int num1, num2;
printf("The program is only for integers\n");
printf("Enter num1: ");
scanf("%d", &num1);
printf("Enter num2: ");
scanf("%d", &num2);
if (num1 > num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
//Calculate sum of odd numbers between num1 and num2:
int Sum = 0;
int i = num1;
if (i % 2 == 0)
i += 1;
printf("\nList of odd numbers:\n");
for (i = i; i <= num2; i += 2)
{
printf ("%d", i);
Sum += i;
if (i + 2 <= num2)
printf (", ");
}
printf("\nSum of above numbers: %d", Sum);
return 0;
}
Anh có thể giải thích cho em Sum += i; được không? Cảm ơn anh đã giúp đỡ
sum += i
tương đương với sum = sum + i
tương tự vậy với các toán tử khác:
a -= b
tương đương a = a - b
a *= b
tương đương a = a * b
a /= b
tương đương a = a / b
Mình có 2 cách.
Cách thứ nhất là cho for
lấy các giá trị từ num1 + 1
tới num2 - 1
nếu số nào mà % 2 != 0
ta sẽ cộng nó vào một cái tổng sum += i
Cách thứ hai là bạn kiểm tra nó là số sẵn hay số lẻ
- Nếu là số chẵn thì bạn cộng thêm 1 vào nữa sau đó cho chạy
for
lấy các giá trị từnum1
cho tới< num2
vớistep là 2
(i += 2
) - Là số số lẻ thì bạn chỉ cần chạy
for
lấy các giá trị từnum1
cho tới< num2
vớistep là 2
(i += 2
)
Cách hai chính là cách bạn trên làm cho bạn
Còn tại saosum += i
thì cái này đơn giản đáng lẽ bạn phải hiểu thì mới làm được bài này chứ
int i, sum = 0;
for (i = 1; i <= 3; i++) {
sum = sum + i; // sum += i;
}
printf("Tong tu 1 toi 3 la %d\n", sum);
Trên thực tế có hai cách viết ngắn gọn hơn là: i++ và ++i. 2 thằng quần này khác nhau như thế nào?
- i++ sẽ trả về giá trị của i, sau đó mới tăng i lên một đơn vị.
- ++i thì tăng i lên một đơn vị, sau đó mới trả về giá trị của i.
Góp ý cho em trai một số ý kiến sau:
- Cách trình bày code
- Không cần phải nhóm thành từng block code như vậy, nếu vì mục đích dễ nhìn
thì chỉ cần phân cách các đoạn code bằng 1 hay 2 dòng trống là được.
- Chú ý lại cách thụt đầu dòng(indent)
- Bất cứ loại flow-control statement (if else, while, do while, for) dù bên trong
chỉ có 1 statement thì củng nên có { ... }
- Logic chương trình
- Biến sum dùng để lưu tổng chưa được khởi tạo giá trị nên nó sẽ chứa một giá trị rác nào đó. Kết quả chương trình sai.
- Biến num1 người dùng nhập vào chắc gì đã là số lẽ mà lấy i += 2.
- Trong vòng lặp for đầu tiên biến i đã chạy quá num2 nên vòng lặp do while thứ 2 chỉ chạy được duy nhất 1 lần.
Có thể tham khảo cách viết của @noz1995, nhưng đó là sản phẩm của người khác. Hãy tự làm sản phẩn của riêng mình.
Thanhks bác!!!
Hihi. cảm ơn bạn. Mình tự học mà, nên có nhiều thứ còn gà mờ lắm. Mong các bạn giúp đỡ nhiều
Dạ, Xin lĩnh giáo. Mong được giúp đỡ lần sau.
Sau khi biết += và -=, cá nhân mình không bao giờ dùng i++ hay ++i làm gì, ngoại trừ việc rút gọn được 1 ký tự và làm code thiếu đồng bộ với các phép toán tăng giảm khác thì chức năng phụ của nó khá là nhảm nhí.
Vừa thay đổi biến vừa trả về kết quả, nếu lạm dụng không đúng cách sẽ dẫn đến kết quả không thể đoán trước, gây lỗi chương trình. Việc tách thành 1 phép gán và 1 phép lấy giá trị vừa hạn chế lỗi, vừa giúp code sáng sủa, không gây khó khăn cho người khác đọc.