01/10/2018, 10:06

E có cái code vừa tập viết, mong các bác chỉnh sửa giúp

#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
");
         printf("Enter num1:
");
         scanf("%d", &num1);
         printf("Enter num2:
");
         scanf("%d", &num2);
     }
         {
         for ( i = num1; i <= num2; i+= 2)
            printf("%d	", i);
         }
         {
         do sum = i + ( i+= 2);
            while(i+=2 <= num2);
                printf("%d", sum);
         }
             return 0;
}
Trần Hoàn viết 12:17 ngày 01/10/2018

Đâ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;
}
Nguyễn Tiến Dũng viết 12:19 ngày 01/10/2018

Anh có thể giải thích cho em Sum += i; được không? Cảm ơn anh đã giúp đỡ

Quang Minh viết 12:19 ngày 01/10/2018

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

Henry viết 12:08 ngày 01/10/2018

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ới step 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ới step 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 sao sum += 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);
Vũ Thanh viết 12:07 ngày 01/10/2018

i += 1;

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.
Vesper Link viết 12:19 ngày 01/10/2018

Góp ý cho em trai một số ý kiến sau:

  1. 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ó { ... }
  1. 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.


Nguyễn Tiến Dũng viết 12:10 ngày 01/10/2018

Thanhks bác!!!

Nguyễn Tiến Dũng viết 12:07 ngày 01/10/2018

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

Nguyễn Tiến Dũng viết 12:17 ngày 01/10/2018

Dạ, Xin lĩnh giáo. Mong được giúp đỡ lần sau.

Trần Hoàn viết 12:09 ngày 01/10/2018

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.

Bài liên quan
0