Nhiều biến trong câu lệnh if C++

Mỗi khai báo phải dành cho một biến duy nhất, trên dòng riêng của nó, với chú thích giải thích về vai trò của biến đó. Khai báo nhiều biến trong một lần khai báo có thể gây nhầm lẫn về kiểu của biến và giá trị ban đầu của chúng. Nếu có nhiều hơn một biến được khai báo trong một khai báo, phải cẩn thận rằng kiểu và giá trị khởi tạo của biến được xử lý chính xác

Ví dụ về mã không tuân thủ

Trong ví dụ mã không tuân thủ này, lập trình viên hoặc người đánh giá mã có thể nhầm tưởng rằng hai biến srcc được khai báo là char *. Trên thực tế, src có loại là char *, trong khi đó, c có loại là

#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}
3

Giải pháp tuân thủ

Trong giải pháp tuân thủ này, mỗi biến được khai báo trên một dòng riêng

char *src;    /* Source string */
char c;       /* Character being tested */

Mặc dù thay đổi này không ảnh hưởng đến quá trình biên dịch, nhưng ý định của lập trình viên rõ ràng hơn

Ví dụ về mã không tuân thủ

Trong ví dụ về mã không tuân thủ này, lập trình viên hoặc người đánh giá mã có thể nhầm tưởng rằng cả

#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}
4 và
#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}
0 đều đã được khởi tạo thành 1. Trên thực tế, chỉ có
#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}
0 được khởi tạo, còn
#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}
4 vẫn chưa được khởi tạo

Giải pháp tuân thủ

Trong giải pháp tuân thủ này, rõ ràng là cả

#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}
4 và
#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}
0 đều đã được khởi tạo thành 1

ngoại lệ

DCL04-C-EX1. Nhiều biến điều khiển vòng lặp có thể được khai báo trong cùng một câu lệnh

#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}
5, như thể hiện trong hàm sau

#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}

Macro 

#include   /* For CHAR_BIT */
#include   /* For size_t   */
 
extern size_t popcount(uintmax_t);
#define PRECISION(umax_value) popcount(umax_value) 

 size_t bitcount(size_t n) {
  const size_t limit = PRECISION(SIZE_MAX);
  size_t count = 0;
  for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
    if (n & j)
      ++count;
  }
  return count;
}
6 cung cấp độ chính xác chính xác cho bất kỳ loại số nguyên nào và được xác định trong INT35-C. Sử dụng độ chính xác của số nguyên—xem quy tắc đó để biết thêm thông tin

DCL04-C-EX2. Nhiều khai báo biến đơn giản có thể được khai báo trên cùng một dòng với điều kiện là không có khởi tạo. Một khai báo biến đơn giản là một khai báo không phải là con trỏ hoặc mảng

Đánh giá rủi ro

Khai báo không quá một biến cho mỗi lần khai báo có thể giúp mã dễ đọc hơn và loại bỏ sự nhầm lẫn

Deepanshu thành lập ListenData với một mục tiêu đơn giản - Làm cho các phân tích trở nên dễ hiểu và dễ theo dõi. Ông có hơn 10 năm kinh nghiệm trong lĩnh vực khoa học dữ liệu. Trong nhiệm kỳ của mình, ông đã làm việc với các khách hàng toàn cầu trong nhiều lĩnh vực khác nhau như Ngân hàng, Bảo hiểm, Cổ phần tư nhân, Viễn thông và Nhân sự

Có một loại dữ liệu; . Một tuyên bố kết thúc bằng một dấu chấm phẩy. Nhiều biến đã được khai báo ở đây trong một câu lệnh

Bây giờ, hãy xem xét các báo cáo gia tăng sau đây

    int i++;
    int j++;
    int k++;

Ba câu lệnh này có thể được thay thế bằng một câu lệnh, như sau

int i++, j++, k++;

Ở đây, có ba biểu thức trong một câu lệnh cho một kiểu dữ liệu

Cũng xem xét ba tuyên bố có điều kiện sau đây

    i < 10 ;
    j < 10;
    k < 10;

Ba câu lệnh này, có thể được thay thế bằng một câu lệnh, như sau

    i < 10 && j < 10 && k < 10;

Ở đây, ba mệnh đề đã được kết hợp thành một biểu thức có dạng đặc biệt. Các biểu thức này không được phân tách bằng dấu phẩy như trong các trường hợp trên mà được kết hợp với nhau bằng phép AND

Bài viết này giải thích cách khai báo và sử dụng nhiều biến trong vòng lặp for với các tương ứng thông thường. Các ví dụ rất đơn giản được sử dụng để minh họa

Nội dung bài viết

  • Vòng lặp for một chiều
  • Vòng lặp for hai chiều
  • Vòng lặp for ba chiều
  • lợi thế có thể
  • Sự kết luận

Vòng lặp for một chiều

trong khi lặp lại

Một vòng lặp while để hiển thị các số từ 0 đến 9, như trong chương trình sau

    #include
    using namespace std;

    int main ()
    {
        int i=0;

        while (i < 10) {
            cout << i << endl;
            i++;
        }
     
        return 0;
    }

Dòng đầu tiên trong chương trình bao gồm thư viện iostream cho đối tượng cout. Dòng tiếp theo trong chương trình là một câu lệnh. Nó đảm bảo rằng bất kỳ tên nào được sử dụng là từ thư viện chuẩn C++ trừ khi có chỉ định khác

Trong hàm main() có câu lệnh khởi tạo, của số nguyên, i = 0. Sau đó, có vòng lặp while, có tính đến câu lệnh khởi tạo. Điều kiện while là (i < 10), và miễn là i nhỏ hơn 10 (không bao giờ bằng 10), đối tượng cout iostream trong phần thân của vòng lặp while hiển thị giá trị của i. Câu lệnh tiếp theo trong vòng lặp while tăng i (thêm 1 vào giá trị của i)

Đầu ra như sau nhưng được hiển thị theo chiều dọc

    0 1 2 3 4 5 6 7 8 9

Một chiều cho vòng lặp

Mã trong hàm main() ở trên, được sao chép, trong chương trình sau, dưới dạng vòng lặp for

    #include
    using namespace std;

    int main ()
    {
        for (int i = 0; i < 10; i++) {
            cout << i << endl;
        }
     
        return 0;
    }

Đầu ra giống như trong trường hợp trên. Câu lệnh khởi tạo cho đoạn mã trên bây giờ là câu lệnh đầu tiên trong dấu ngoặc đơn của vòng lặp for, theo sau là dấu chấm phẩy. Điều kiện trong khi cho đoạn mã trên bây giờ là câu lệnh thứ hai trong dấu ngoặc đơn của vòng lặp for, theo sau là dấu chấm phẩy. Câu lệnh gia tăng trong phần thân của vòng lặp while, đối với đoạn mã trước, bây giờ là câu lệnh thứ ba trong ngoặc đơn của vòng lặp for. Nó không được theo sau bởi dấu chấm phẩy vì nó là câu lệnh cuối cùng trong ngoặc đơn. Câu lệnh duy nhất trong vòng lặp for hiển thị giá trị của i

Vòng lặp for hai chiềuVòng lặp while lồng nhau

Vòng lặp for một chiều ở trên hiển thị một cột, trong đó mỗi ô có một số, giá trị của i. Một vòng lặp while, được lồng trong một vòng lặp while khác, sẽ hiển thị một bảng, trong đó mỗi ô sẽ có một số (giá trị của j tại vị trí đó). Chương trình sau minh họa điều này

    #include
    using namespace std;

    int main ()
    {
        int i=0;
        while (i < 5) {
            int j=0;
            while (j < 5) {
                cout << j << ' ';
                j++;
            }
            cout << endl;
            i++;
        }
     
        return 0;
    }

đầu ra là

    0 1 2 3 4
    0 1 2 3 4
    0 1 2 3 4
    0 1 2 3 4
    0 1 2 3 4

Biến i xác định các hàng. Biến j xác định các cột. Các giá trị tối đa cho i và j là 4 trong mã này. Không có giá trị của tôi được in. Đối với mỗi giá trị của j, giá trị của j được in theo chiều ngang. j được tăng lên để in giá trị tiếp theo theo chiều ngang cho mỗi dòng

Có hai câu lệnh khởi tạo. một cho i và một cho j, cả hai đều được khởi tạo bằng 0. Câu lệnh khởi tạo cho j nằm trong vòng lặp bên ngoài. Bằng cách này, j được khởi tạo lại cho mỗi hàng (từng đường ngang). Bằng cách này, j có thể tạo ra các số từ 0 đến 4 cho mỗi hàng. Giá trị của i không bao giờ được in; . i được tăng lên bên ngoài và bên dưới vòng lặp lồng nhau. i được tăng lên cho mục đích của hàng tiếp theo

Vòng lặp lồng nhau

Vòng lặp for lồng nhau sau đây tạo ra cùng một kết quả (bảng) như vòng lặp while lồng nhau ở trên

    #include
    using namespace std;

    int main ()
    {
        for (int i=0; i < 5; i++) {
            for (int j=0; j < 5; j++) {
                cout << j << ' ';
            }
            cout << endl;
        }
     
        return 0;
    }

Mỗi dấu ngoặc đơn của vòng lặp for có câu lệnh khởi tạo riêng, câu lệnh điều kiện riêng và câu lệnh gia tăng riêng

Một vòng lặp while

Đầu ra của bảng trên có thể được tạo bởi một vòng lặp while, với một câu lệnh khởi tạo và một câu lệnh điều kiện. Tuy nhiên, việc gán lại 0 cho j và tăng i phải xảy ra trong cấu trúc if. Đoạn mã sau minh họa điều này

    #include
    using namespace std;

    int main ()
    {
        int i=0, j=0;
        while (i < 5 && j <5) {
            cout << j << ' ';
            j++;
            if (j == 5) {
                cout << endl;
                j=0;
                i++;
            }
        }
     
        return 0;
    }

Đầu ra là cùng một bảng như trên

Một vòng lặp for

Đầu ra của bảng trên có thể được tạo bởi một vòng lặp for, với một câu lệnh khởi tạo và một câu lệnh điều kiện. Tuy nhiên, việc gán lại 0 cho j và tăng i phải xảy ra trong cấu trúc if. Chương trình sau minh họa điều này

    #include
    using namespace std;

    int main ()
    {
        for (int i=0, j=0; i < 5 && j <5; j++) {
            cout << j << ' ';
            if (j == 4) {
                cout << endl;
                j = -1;
                i++;
            }
        }
     
        return 0;
    }

Đầu ra là cùng một bảng như trên. Tuy nhiên, ở đây, vì j được tăng lên ở cuối vòng lặp, nên trong ngoặc đơn, điều kiện if là (j == 4) và j được gán lại, -1 cho mỗi hàng

Điều đặc biệt ở đây là hai biến đã được khai báo trong vòng lặp for. Và như vậy, nhiều biến có thể được khai báo trong vòng lặp for

Địa chỉ đường chéo hàng đầu

Trong một bảng hình vuông, đường chéo chính là đường chéo từ đầu trên cùng bên trái đến cuối cùng bên phải. Chương trình sau hiển thị tọa độ của đường chéo chính của bảng trên

    #include
    using namespace std;

    int main ()
    {
        for (int i=0, j=0; i < 5 && j <5; i++,j++) {
            cout << i << ',' << j << ' ';
        }
        cout << endl;
     
        return 0;
    }

đầu ra là

    0 , 0 1,1 2,2 3,3 4,4

Lưu ý rằng trong chương trình, hai biến đã được khai báo trong dấu ngoặc đơn của vòng lặp for; . Trong điều kiện này, một câu lệnh trong phần thân của vòng lặp for sẽ in tọa độ của đường chéo chính

Vòng lặp for ba chiều

Việc in tất cả các giá trị của các ô của một khối lập phương có thể rất cồng kềnh. Chương trình sau đây chỉ in tọa độ của đường chéo chính của một khối lập phương

    #include
    using namespace std;

    int main ()
    {
        for (int i=0,j=0,k=0; i<5&&j<5&&k<5; i++,j++,k++) {
            cout << i << ',' << j << ',' << k << ' ';
        }
        cout << endl;
     
        return 0;
    }

đầu ra là

    0 , 0 , 0 1,1,1 2,2,2 3,3,3 4,4,4

Lưu ý rằng câu lệnh khởi tạo có ba biến; . Chỉ có một câu lệnh trong phần thân của vòng lặp for

lợi thế có thể

Hãy xem xét một vòng lặp for duy nhất để hiển thị tất cả các giá trị của các ô trong bảng vuông.
Việc có hai biến trong câu lệnh khởi tạo và trong điều kiện không mang lại bất kỳ lợi thế nào về tốc độ so với trường hợp một vòng lặp được lồng vào nhau.

Tuy nhiên, nếu chỉ truy cập các giá trị được chọn trong bảng, thì việc có hai biến, trong câu lệnh khởi tạo, trong câu lệnh điều kiện và trong câu lệnh gia tăng, sẽ mang lại lợi thế về tốc độ; . Trong chương trình sau, mọi cặp tọa độ khác, trong đường chéo chính, được in

    #include
    using namespace std;

    int main ()
    {
        for (int i=0, j=0; i < 10 && j <10; i+=2,j+=2) {
            cout << i << ',' << j << ' ';
        }
        cout << endl;
     
        return 0;
    }

đầu ra là

    0 , 0 2,2 4,4 6,6 8,8

Vẫn chỉ có một câu lệnh trong vòng lặp for. Đạt được lợi thế về tốc độ, theo cách này, liên quan đến việc bao gồm logic chọn lọc bổ sung trong câu lệnh điều kiện và/hoặc trong câu lệnh gia tăng. Các biểu thức khởi tạo trong câu lệnh khởi tạo có thể không phải được khởi tạo bằng 0

Trong đoạn mã trên, câu lệnh gia tăng là

    i+= 2 ,j+= 2

nghĩa là,

    i = i+ 2 , j = j+ 2;

Sự kết luận

Có, tôi có thể khai báo nhiều biến trong vòng lặp for. Và bạn cũng có thể khai báo nhiều biến trong vòng lặp for như sau. Chỉ cần tách nhiều biến trong câu lệnh khởi tạo bằng dấu phẩy. Đừng quên kết thúc câu lệnh khởi tạo hoàn chỉnh bằng dấu chấm phẩy. Nếu việc truy cập các phần tử của cấu trúc phải được chọn lọc, thì các biến này cũng có thể phải được sử dụng, trong các câu lệnh điều kiện và/hoặc tăng dần, trong các dấu ngoặc đơn của vòng lặp for, có thể với một số logic bổ sung

Bạn có thể đặt nhiều điều kiện trong câu lệnh if trong C không?

Cũng có thể có nhiều điều kiện như trong C nếu x xảy ra thì thực hiện p, ngược lại nếu điều kiện y xảy ra thì thực hiện q, ngược lại thực hiện r. Điều kiện này của C else-if là một trong nhiều cách nhập nhiều điều kiện.

Câu lệnh IF có 3 điều kiện trong C có được không?

Có, bạn có thể . Bạn sẽ sử dụng toán tử 'và' '&&' cho điều đó. nếu điều kiện A và điều kiện B và điều kiện C.

Tôi có thể viết 2 điều kiện trong câu lệnh if không?

Sử dụng hai câu lệnh if nếu cả hai điều kiện của câu lệnh if có thể đúng cùng một lúc . Trong ví dụ này, cả hai điều kiện đều có thể đúng. Bạn có thể vượt qua và làm tốt cùng một lúc. Sử dụng câu lệnh if/else nếu hai điều kiện loại trừ lẫn nhau, nghĩa là nếu một điều kiện đúng thì điều kiện kia phải sai.

Bạn có thể kiểm tra nhiều điều kiện trong một câu lệnh không?

Sau đây chúng ta sẽ nghiên cứu cách kiểm tra nhiều điều kiện trong một câu lệnh if. Điều này có thể được thực hiện bằng cách sử dụng 'và' hoặc 'hoặc' hoặc CẢ HAI trong một câu lệnh duy nhất . và so sánh = để điều này hoạt động bình thường, cả hai điều kiện được cung cấp phải đúng. Nếu điều kiện đầu tiên sai, trình biên dịch sẽ không kiểm tra điều kiện thứ hai.