100 câu hỏi và câu trả lời phỏng vấn lập trình C hàng đầu (PDF)

Dưới đây là các câu hỏi và câu trả lời phỏng vấn Lập trình C dành cho những ứng viên mới ra trường cũng như có kinh nghiệm để có được công việc mơ ước của mình.

 

Câu hỏi và câu trả lời phỏng vấn lập trình C cơ bản dành cho người mới

1) Làm thế nào để bạn xây dựng câu lệnh tăng hoặc câu lệnh giảm trong C?

Trên thực tế, có hai cách bạn có thể thực hiện điều này. Một là sử dụng toán tử tăng ++ và toán tử giảm –. Ví dụ, câu lệnh “x++” có nghĩa là tăng giá trị của x lên 1. Tương tự như vậy, câu lệnh “x –” có nghĩa là giảm giá trị của x đi 1. Một cách khác để viết câu lệnh tăng là sử dụng dấu + cộng hoặc dấu – trừ thông thường. Trong trường hợp “x++”, một cách khác để viết là “x = x +1”.

👉 Tải xuống bản PDF miễn phí: Câu hỏi và trả lời phỏng vấn lập trình C >>


2) Sự khác biệt giữa Gọi theo Giá trị và Gọi theo Tham chiếu là gì?

Khi sử dụng Gọi theo giá trị, bạn đang gửi giá trị của một biến dưới dạng tham số cho hàm, trong khi Gọi theo tham chiếu sẽ gửi địa chỉ của biến. Ngoài ra, trong Gọi theo giá trị, giá trị trong tham số không bị ảnh hưởng bởi bất kỳ thao tác nào diễn ra, trong khi trong trường hợp Gọi theo tham chiếu, các giá trị có thể bị ảnh hưởng bởi quy trình trong hàm.

Câu hỏi và trả lời phỏng vấn lập trình C


3) Một số lập trình viên gỡ lỗi chương trình của họ bằng cách đặt ký hiệu nhận xét trên một số mã thay vì xóa nó. Điều này hỗ trợ việc gỡ lỗi như thế nào?

Đặt các ký hiệu nhận xét /* */ xung quanh một mã, còn được gọi là “nhận xét”, là một cách để cô lập một số mã mà bạn cho rằng có thể gây ra lỗi trong chương trình mà không cần xóa mã. Ý tưởng là nếu mã thực sự đúng, bạn chỉ cần xóa các biểu tượng nhận xét và tiếp tục. Nó cũng giúp bạn tiết kiệm thời gian và công sức khi phải nhập lại mã nếu bạn đã xóa mã đó ngay từ đầu.


4) Mã tương đương của câu lệnh sau theo định dạng WHILE LOOP là gì?

for (a=1; a<=100; a++)

printf ("%d\n", a * a);

Câu trả lời:

a=1;

while (a<=100) {

printf ("%d\n", a * a);

a++;

}

5) Ngăn xếp là gì?

Ngăn xếp là một dạng của cấu trúc dữ liệu. Dữ liệu được lưu trữ trong các ngăn xếp bằng cách sử dụng phương pháp FILO (Đầu vào cuối cùng). Trong bất kỳ trường hợp cụ thể nào, chỉ có thể truy cập phần trên cùng của ngăn xếp, điều đó có nghĩa là để truy xuất dữ liệu được lưu trữ bên trong ngăn xếp, trước tiên phải trích xuất những dữ liệu ở phần trên. Việc lưu trữ dữ liệu trong ngăn xếp còn được gọi là PUSH, trong khi việc truy xuất dữ liệu được gọi là POP.


6) Tệp truy cập tuần tự là gì?

Khi viết chương trình sẽ lưu trữ và truy xuất dữ liệu trong một tệp, có thể chỉ định tệp đó thành các dạng khác nhau. Tệp truy cập tuần tự sao cho dữ liệu được lưu theo thứ tự tuần tự: dữ liệu này được đặt vào tệp khác. Để truy cập một dữ liệu cụ thể trong tệp truy cập tuần tự, dữ liệu phải được đọc từng dữ liệu một cho đến khi đạt được dữ liệu phù hợp.


7) Khởi tạo biến là gì và tại sao nó quan trọng?

Điều này đề cập đến quá trình trong đó một biến được gán một giá trị ban đầu trước khi nó được sử dụng trong chương trình. Nếu không khởi tạo, một biến sẽ có giá trị không xác định, điều này có thể dẫn đến kết quả đầu ra không thể đoán trước khi được sử dụng trong tính toán hoặc các hoạt động khác.


8 Lập trình spaghetti là gì?

Lập trình Spaghetti đề cập đến các mã có xu hướng bị rối và chồng chéo trong suốt chương trình. Cách tiếp cận mã hóa không có cấu trúc này thường được cho là do thiếu kinh nghiệm từ phía lập trình viên. Lập trình Spaghetti làm cho chương trình trở nên phức tạp và việc phân tích các mã trở nên khó khăn, do đó phải tránh càng nhiều càng tốt.


9) Phân biệt mã nguồn và mã đối tượng

Mã nguồn là mã do người lập trình viết. Nó được tạo thành từ các lệnh và các từ khóa giống tiếng Anh khác có nhiệm vụ hướng dẫn máy tính phải làm gì. Tuy nhiên, máy tính sẽ không thể hiểu được mã nguồn. Do đó, mã nguồn được biên dịch bằng trình biên dịch. Kết quả đầu ra là các mã đối tượng, có định dạng mà bộ xử lý máy tính có thể hiểu được. TRONG lập trình C, mã nguồn được lưu với đuôi tệp .C, trong khi mã đối tượng được lưu với đuôi tệp .OBJ


10) Trong lập trình C, làm thế nào để chèn các ký tự trích dẫn (' và “) vào màn hình đầu ra?

Đây là vấn đề thường gặp đối với người mới bắt đầu vì dấu ngoặc kép thường là một phần của câu lệnh printf. Để chèn ký tự dấu ngoặc kép làm một phần của đầu ra, hãy sử dụng các chỉ định định dạng \' (cho dấu ngoặc đơn) và \” (cho dấu ngoặc kép).


11) Ký tự '\0' có tác dụng gì?

Nó được gọi là ký tự null kết thúc và được sử dụng chủ yếu để hiển thị phần cuối của giá trị chuỗi.


12) Sự khác biệt giữa ký hiệu = và ký hiệu == là gì?

Ký hiệu = thường được sử dụng trong các phép toán. Nó được sử dụng để gán giá trị cho một biến nhất định. Mặt khác, ký hiệu ==, còn được gọi là “bằng” hoặc “tương đương”, là một toán tử quan hệ được sử dụng để so sánh hai giá trị.


13) Toán tử mô đun là gì?

Toán tử mô đun xuất ra phần còn lại của phép chia. Nó sử dụng ký hiệu phần trăm (%). Ví dụ: 10% 3 = 1, nghĩa là khi chia 10 cho 3 thì số dư là 1.


14) Vòng lặp lồng nhau là gì?

Vòng lặp lồng nhau là vòng lặp chạy bên trong một vòng lặp khác. Nói cách khác, bạn có một vòng lặp bên trong nằm bên trong một vòng lặp bên ngoài. Trong trường hợp này, vòng lặp bên trong được thực hiện một số lần theo quy định của vòng lặp bên ngoài. Đối với mỗi lần bật vòng lặp bên ngoài, vòng lặp bên trong sẽ được thực hiện trước tiên.


15) Toán tử nào sau đây là sai và tại sao? ( >=, <=, <>, ==)

<> là không chính xác. Mặc dù toán tử này được hiểu chính xác là “không bằng” khi viết câu lệnh điều kiện, nhưng nó không phải là toán tử thích hợp để sử dụng trong lập trình C. Thay vào đó, toán tử != phải được sử dụng để biểu thị điều kiện “không bằng”.


16) So sánh trình biên dịch và trình thông dịch.

Trình biên dịch và trình thông dịch thường xử lý cách thực thi mã chương trình. Trình thông dịch thực thi mã chương trình từng dòng một, trong khi trình biên dịch lấy toàn bộ chương trình và chuyển đổi nó thành mã đối tượng trước khi thực thi nó. Điểm khác biệt chính ở đây là trong trường hợp trình thông dịch, chương trình có thể gặp lỗi cú pháp trong quá trình thực thi và sẽ dừng lại từ đó. Mặt khác, trình biên dịch kiểm tra cú pháp của toàn bộ chương trình và sẽ chỉ tiến hành thực thi khi không tìm thấy lỗi cú pháp.


17) Làm thế nào để khai báo một biến chứa giá trị chuỗi?

Từ khóa char chỉ có thể chứa 1 giá trị ký tự tại một thời điểm. Bằng cách tạo một mảng ký tự, bạn có thể lưu trữ các giá trị chuỗi trong đó. Ví dụ: “char MyName[50]; ” khai báo một biến chuỗi có tên là MyName có thể chứa tối đa 50 ký tự.


18) Có thể sử dụng cặp dấu ngoặc nhọn { } để bao quanh một dòng mã không?

Trong khi dấu ngoặc nhọn chủ yếu được sử dụng để nhóm nhiều dòng mã, nó vẫn hoạt động mà không có lỗi nếu bạn sử dụng nó cho một dòng duy nhất. Một số lập trình viên thích phương pháp này như một cách sắp xếp mã để làm cho nó trông rõ ràng hơn, đặc biệt là trong các câu lệnh có điều kiện.


19) Tệp tiêu đề là gì và công dụng của nó trong lập trình C là gì?

Tệp tiêu đề còn được gọi là tệp thư viện. Chúng chứa hai thứ thiết yếu: định nghĩa và nguyên mẫu của các hàm đang được sử dụng trong một chương trình. Nói một cách đơn giản, các lệnh bạn sử dụng trong lập trình C thực chất là các hàm được xác định từ bên trong mỗi tệp tiêu đề. Mỗi tệp tiêu đề chứa một tập hợp các chức năng. Ví dụ: stdio.h là tệp tiêu đề chứa định nghĩa và nguyên mẫu của các lệnh như printf và scanf.


20) Lỗi cú pháp là gì?

Lỗi cú pháp có liên quan đến lỗi sử dụng ngôn ngữ lập trình. Đó có thể là một lệnh sai chính tả hoặc một lệnh phải được nhập ở chế độ chữ thường nhưng thay vào đó lại được nhập bằng ký tự chữ hoa. Ký hiệu bị đặt sai vị trí hoặc thiếu ký hiệu ở đâu đó trong dòng mã cũng có thể dẫn đến lỗi cú pháp.


21) Biến là gì và nó khác với hằng số như thế nào?

Các biến và hằng lúc đầu có thể trông giống nhau theo nghĩa cả hai đều là các mã định danh được tạo thành từ một ký tự hoặc nhiều ký tự (chữ cái, số và một vài ký hiệu được phép). Cả hai cũng sẽ giữ một giá trị cụ thể. Các giá trị được giữ bởi một biến có thể được thay đổi trong suốt chương trình và có thể được sử dụng trong hầu hết các hoạt động và tính toán. Các hằng số chỉ được cung cấp các giá trị một lần, được đặt ở đầu chương trình. Giá trị này không được thay đổi trong chương trình. Ví dụ: bạn có thể gán một hằng số có tên PI và đặt giá trị cho nó là 3.1415. Sau đó, bạn có thể sử dụng nó làm PI trong chương trình, thay vì phải viết 3.1415 mỗi lần bạn cần.


22) Làm thế nào để bạn truy cập các giá trị trong một mảng?

Mảng chứa một số phần tử, tùy thuộc vào kích thước bạn cung cấp cho nó khi khai báo biến. Mỗi phần tử được gán một số từ 0 đến số phần tử-1. Để gán hoặc lấy giá trị của một phần tử cụ thể, hãy tham khảo số phần tử. Ví dụ: nếu bạn có một khai báo có nội dung là “intscores[5];”, thì bạn có 5 phần tử có thể truy cập được, đó là: Scores[0], Score[1], Scores[2], Score[3] và Score[4 ].


23) Tôi có thể sử dụng kiểu dữ liệu “int” để lưu trữ giá trị 32768 không? Tại sao?

Không. Kiểu dữ liệu “int” có khả năng lưu trữ các giá trị từ -32768 đến 32767. Để lưu trữ 32768, bạn có thể sử dụng “long int” thay thế. Bạn cũng có thể sử dụng “unsigned int”, giả sử bạn không có ý định lưu trữ các giá trị âm.


24) Có thể kết hợp hai hoặc nhiều toán tử như \n và \t trong một dòng mã chương trình không?

Có, việc kết hợp các toán tử là hoàn toàn hợp lệ, đặc biệt nếu có nhu cầu.
Ví dụ: bạn có thể có một mã như printf (“Hello\n\n\’World\'”) để xuất văn bản “Xin chào” trên dòng đầu tiên và “Thế giới” được đặt trong dấu ngoặc đơn để xuất hiện trên hai dòng tiếp theo.

25) Tại sao không phải tất cả các tệp tiêu đề đều được khai báo trong mọi chương trình C?

Việc lựa chọn khai báo tệp tiêu đề ở đầu mỗi chương trình C sẽ phụ thuộc vào lệnh/hàm nào bạn sẽ sử dụng trong chương trình đó. Vì mỗi tệp tiêu đề chứa các định nghĩa và nguyên mẫu hàm khác nhau nên bạn sẽ chỉ sử dụng những tệp tiêu đề chứa các hàm bạn cần. Việc khai báo tất cả các tệp tiêu đề trong mọi chương trình sẽ chỉ làm tăng kích thước tệp và tải tổng thể của chương trình và không được coi là một phong cách lập trình tốt.


26) Khi nào từ khóa “void” được sử dụng trong hàm?

Khi khai báo hàm, bạn sẽ quyết định xem hàm đó có trả về giá trị hay không. Nếu hàm đó không trả về một giá trị, chẳng hạn như khi mục đích của hàm là hiển thị một số kết quả đầu ra trên màn hình, thì “void” sẽ được đặt ở phần ngoài cùng bên trái của tiêu đề hàm. Khi một giá trị trả về được mong đợi sau khi thực thi hàm, kiểu dữ liệu của giá trị trả về sẽ được đặt thay vì “void”.


27) Câu lệnh ghép là gì?

Các câu lệnh ghép được tạo thành từ hai hoặc nhiều câu lệnh chương trình được thực thi cùng nhau. Điều này thường xảy ra khi xử lý các điều kiện trong đó một loạt các câu lệnh được thực thi khi TRUE hoặc FALSE được đánh giá. Các câu lệnh ghép cũng có thể được thực thi trong một vòng lặp. Dấu ngoặc nhọn { } được đặt trước và sau các câu lệnh ghép.


28) Tầm quan trọng của thuật toán đối với lập trình C là gì?

Trước khi viết một chương trình, trước tiên phải tạo ra một thuật toán. Một thuật toán cung cấp quy trình từng bước về cách tìm ra giải pháp. Nó cũng hoạt động như một kế hoạch chi tiết về cách một chương trình sẽ bắt đầu và kết thúc, bao gồm cả quá trình và tính toán có liên quan.


29) Ưu điểm của mảng so với các biến riêng lẻ là gì?

Khi lưu trữ nhiều dữ liệu liên quan, bạn nên sử dụng mảng. Điều này là do các mảng được đặt tên chỉ bằng 1 từ theo sau là số phần tử. Ví dụ: để lưu trữ 10 kết quả bài kiểm tra của 1 học sinh, ta có thể sử dụng 10 tên biến khác nhau (grade1,grade2,grade3…grade10). Với mảng, chỉ có 1 tên được sử dụng, các tên còn lại có thể truy cập được thông qua tên chỉ mục (grade[0], Grade[1], Grade[2]…grade[9]).


30) Viết câu lệnh lặp sẽ hiển thị kết quả sau:

1

12

123

1234

12345

Câu trả lời:

for (a=1; a<=5; i++) {

for (b=1; b<=a; b++)

printf("%d",b);

printf("\n");

}

Câu hỏi và câu trả lời phỏng vấn lập trình C dành cho người có kinh nghiệm

31) Câu này sai ở điểm nào? scanf(“%d”,số gì);

Ký hiệu & phải được đặt trước tên biến whatnumber. Đặt & có nghĩa là bất kỳ giá trị nguyên nào được người dùng nhập vào sẽ được lưu trữ tại “địa chỉ” của tên biến. Đây là lỗi thường gặp của các lập trình viên, thường dẫn đến lỗi logic.


32) Làm thế nào để tạo số ngẫu nhiên trong C?

Các số ngẫu nhiên được tạo trong C bằng cách sử dụng rand() command. Ví dụ: anyNum = rand() sẽ tạo ra bất kỳ số nguyên nào bắt đầu từ 0, giả sử rằng AnyNum là một biến có kiểu số nguyên.


33) Điều gì có thể xảy ra nếu một tên hàm hợp lệ như tower() được trình biên dịch C báo cáo là không xác định?

Lý do có thể xảy ra nhất đằng sau lỗi này là tệp tiêu đề cho chức năng đó không được chỉ định ở đầu chương trình. Các tệp tiêu đề chứa định nghĩa và nguyên mẫu cho các hàm và lệnh được sử dụng trong chương trình C. Trong trường hợp “tower()”, mã “#include ” phải có mặt ở đầu chương trình.


34) Chú thích là gì và làm cách nào để chèn nó vào chương trình C?

Nhận xét là một cách tuyệt vời để đưa một số nhận xét hoặc mô tả vào một chương trình. Nó có thể đóng vai trò như một lời nhắc nhở về nội dung của chương trình hoặc một mô tả về lý do tại sao một mã hoặc chức năng nhất định lại được đặt ở đó ngay từ đầu. Chú thích bắt đầu bằng /* và kết thúc bằng ký tự */. Nhận xét có thể là một dòng hoặc thậm chí có thể kéo dài nhiều dòng. Nó có thể được đặt ở bất cứ đâu trong chương trình.


35) Gỡ lỗi là gì?

Gỡ lỗi là quá trình xác định lỗi trong một chương trình. Trong quá trình biên dịch chương trình, các lỗi được tìm thấy sẽ khiến chương trình không thể thực thi hoàn toàn. Ở trạng thái này, người lập trình sẽ xem xét các phần có thể xảy ra lỗi. Việc gỡ lỗi đảm bảo loại bỏ lỗi và đóng vai trò quan trọng trong việc đảm bảo đáp ứng đầu ra chương trình mong đợi.


36) Toán tử && làm gì trong mã chương trình?

&& còn được gọi là toán tử AND. Khi sử dụng toán tử này, tất cả các điều kiện được chỉ định phải là TRUE trước khi có thể thực hiện hành động tiếp theo. Nếu bạn có 10 điều kiện và tất cả trừ 1 điều kiện không được đánh giá là TRUE thì toàn bộ câu lệnh điều kiện đã được đánh giá là FALSE


37) Trong lập trình C, lệnh hoặc mã nào có thể được sử dụng để xác định xem một số lẻ hay chẵn?

Không có lệnh duy nhất hoặc chức năng trong C có thể kiểm tra xem một số là số lẻ hay số chẵn. Tuy nhiên, điều này có thể thực hiện được bằng cách chia số đó cho 2, sau đó kiểm tra phần dư. Nếu phần dư là 0, thì số đó là số chẵn, nếu không, thì là số lẻ. Bạn có thể viết nó trong mã như sau:

if (num % 2 == 0)

printf("EVEN");

else

printf("ODD");

38) Định dạng %10.2 có ý nghĩa gì khi được đưa vào câu lệnh printf?

Định dạng này được sử dụng cho hai mục đích: đặt số khoảng trắng được phân bổ cho số đầu ra và đặt số vị trí thập phân. Số trước dấu thập phân là khoảng trống được phân bổ, trong trường hợp này nó sẽ phân bổ 10 khoảng trắng cho số đầu ra. Nếu số lượng khoảng trống bị chiếm bởi số đầu ra nhỏ hơn 10, các ký tự khoảng trắng bổ sung sẽ được chèn trước số đầu ra thực tế. Số sau dấu thập phân đặt số vị trí thập phân, trong trường hợp này là 2 dấu cách thập phân.


39) Lỗi logic là gì và nó khác với lỗi cú pháp như thế nào?

Chương trình có lỗi logic có xu hướng vượt qua quá trình biên dịch, nhưng kết quả đầu ra có thể không như mong đợi. Điều này xảy ra khi một công thức sai được chèn vào mã hoặc thực hiện một chuỗi lệnh sai. Mặt khác, lỗi cú pháp xử lý các lệnh không chính xác, sai chính tả hoặc không được trình biên dịch nhận ra.


40) Các loại cấu trúc điều khiển khác nhau trong lập trình là gì?

Có 3 cấu trúc điều khiển chính trong lập trình: Sequence, Selection và Repetition. Điều khiển tuần tự tuân theo quy trình từ trên xuống dưới khi thực hiện chương trình, sao cho bước 1 được thực hiện đầu tiên, tiếp theo là bước 2, cho đến khi bước cuối cùng được thực hiện. Lựa chọn xử lý các câu lệnh có điều kiện, có nghĩa là các mã được thực thi tùy thuộc vào việc đánh giá các điều kiện là TRUE hay FALSE. Điều này cũng có nghĩa là không phải tất cả các mã đều có thể được thực thi và có các luồng thay thế bên trong. Sự lặp lại còn được gọi là cấu trúc vòng lặp và sẽ lặp lại một hoặc hai câu lệnh chương trình do bộ đếm đặt ra.


41) || là gì toán tử và nó hoạt động như thế nào trong một chương trình?

|| còn được gọi là toán tử OR trong lập trình C. Khi sử dụng || để đánh giá các điều kiện logic, bất kỳ điều kiện nào được đánh giá là TRUE sẽ hiển thị toàn bộ câu lệnh điều kiện là TRUE.


42) Có thể sử dụng hàm “if” để so sánh các chuỗi không?

Không. Lệnh “if” chỉ có thể được sử dụng để so sánh các giá trị số và giá trị ký tự đơn. Để so sánh các giá trị chuỗi, có một hàm khác gọi là strcmp xử lý cụ thể các chuỗi.


43) Chỉ thị tiền xử lý là gì?

Các chỉ thị tiền xử lý được đặt ở đầu mỗi chương trình C. Đây là nơi các tệp thư viện được chỉ định, điều này sẽ phụ thuộc vào chức năng nào sẽ được sử dụng trong chương trình. Một cách sử dụng khác của các chỉ thị tiền xử lý là khai báo các hằng. Các chỉ thị tiền xử lý bắt đầu bằng ký hiệu #.


44) Kết quả của câu lệnh điều kiện sau sẽ là gì nếu giá trị của biến s là 10?

s >=10 && s < 25 && s!=12

Kết quả sẽ là ĐÚNG. Vì giá trị của s là 10 nên s >= 10 được đánh giá là TRUE vì s không lớn hơn 10 nhưng vẫn bằng 10. s< 25 cũng TRUE vì 10 nhỏ hơn 25. Tương tự, s!=12 , có nghĩa là s không bằng 12, được đánh giá là TRUE. && là toán tử AND và tuân theo quy tắc rằng nếu tất cả các điều kiện riêng lẻ là TRUE thì toàn bộ câu lệnh là TRUE.


45) Mô tả thứ tự ưu tiên của các toán tử trong C.

Thứ tự ưu tiên xác định thao tác nào phải diễn ra trước tiên trong câu lệnh thao tác hoặc câu lệnh điều kiện. Ở mức độ ưu tiên cao nhất là các toán tử một ngôi !, +, – và &. Tiếp theo là các toán tử toán học thông thường (*, / và mô đun % đầu tiên, tiếp theo là + và -). Tiếp theo là các toán tử quan hệ <, <=, >= và >. Tiếp theo là hai toán tử đẳng thức == và !=. Các toán tử logic && và || được đánh giá tiếp theo. Ở cấp độ cuối cùng là toán tử gán =.


46) Câu này có gì sai? myName = “Robin”;

Bạn không thể sử dụng dấu = để gán giá trị cho biến chuỗi. Thay vào đó, hãy sử dụng hàm strcpy. Câu đúng sẽ là: strcpy(myName, “Robin”);


47) Làm cách nào để xác định độ dài của giá trị chuỗi được lưu trữ trong một biến?

Để lấy độ dài của một giá trị chuỗi, hãy sử dụng hàm strlen(). Ví dụ: nếu bạn có một biến có tên FullName, bạn có thể lấy độ dài của giá trị chuỗi được lưu trữ bằng cách sử dụng câu lệnh sau: I = strlen(FullName); biến tôi bây giờ sẽ có độ dài ký tự của giá trị chuỗi.


48) Có thể khởi tạo một biến tại thời điểm nó được khai báo không?

Có, bạn không cần phải viết một câu lệnh gán riêng sau khi khai báo biến, trừ khi bạn có kế hoạch thay đổi nó sau này. Ví dụ: char planet[15] = “Earth”; thực hiện hai việc: khai báo một biến chuỗi có tên là planet, sau đó khởi tạo nó bằng giá trị “Earth”.


49) Tại sao ngôn ngữ C được coi là ngôn ngữ cấp trung?

Điều này là do ngôn ngữ C có nhiều tính năng khiến nó hoạt động giống như ngôn ngữ cấp cao đồng thời có thể tương tác với phần cứng bằng các phương pháp cấp thấp. Việc sử dụng cách tiếp cận có cấu trúc tốt để lập trình, cùng với các từ giống tiếng Anh được sử dụng trong các hàm, khiến nó hoạt động như một ngôn ngữ cấp cao. Mặt khác, C có thể truy cập trực tiếp vào cấu trúc bộ nhớ tương tự như các thủ tục hợp ngữ.


50) Các phần mở rộng tệp khác nhau có liên quan khi lập trình trong C là gì?

Mã nguồn trong C được lưu với phần mở rộng tệp .C. Tệp tiêu đề hoặc tệp thư viện có phần mở rộng tệp .H. Mỗi khi mã nguồn chương trình được biên dịch thành công, nó sẽ tạo một tệp đối tượng .OBJ và một tệp .EXE có thể thực thi được.


51) Từ dành riêng là gì?

Các từ dành riêng là những từ thuộc thư viện ngôn ngữ C tiêu chuẩn. Điều này có nghĩa là các từ dành riêng có ý nghĩa đặc biệt và do đó không thể được sử dụng cho các mục đích khác ngoài mục đích ban đầu của nó. Ví dụ về các từ dành riêng là int, void và return.


52) Danh sách liên kết là gì?

Danh sách liên kết bao gồm các nút được kết nối với nút khác. Trong lập trình C, danh sách liên kết được tạo bằng con trỏ. Sử dụng danh sách liên kết là một cách hiệu quả để sử dụng bộ nhớ để lưu trữ.


53) FIFO là gì?

Trong lập trình C, có một cấu trúc dữ liệu được gọi là hàng đợi. Trong cấu trúc này, dữ liệu được lưu trữ và truy cập bằng định dạng FIFO hoặc Nhập trước xuất trước. Hàng đợi biểu thị một dòng trong đó dữ liệu đầu tiên được lưu trữ cũng sẽ là dữ liệu đầu tiên có thể truy cập được.


54) Cây nhị phân là gì?

Cây nhị phân thực sự là một phần mở rộng của khái niệm danh sách liên kết. Cây nhị phân có hai con trỏ, một con trỏ bên trái và một con trỏ bên phải. Mỗi bên có thể phân nhánh thêm để tạo thành các nút bổ sung, mỗi nút cũng có hai con trỏ. Học nhiều hơn về Cây nhị phân trong cấu trúc dữ liệu nếu bạn quan tâm đến.


55) Không phải tất cả các từ dành riêng đều được viết bằng chữ thường. Đúng hay sai?

SAI. Tất cả các từ dành riêng phải được viết bằng chữ thường; nếu không trình biên dịch C sẽ hiểu đây là từ không xác định và không hợp lệ.


56) Sự khác biệt giữa biểu thức “++a” và “a++” là gì?

Trong biểu thức đầu tiên, mức tăng sẽ xảy ra đầu tiên ở biến a và giá trị kết quả sẽ là giá trị được sử dụng. Điều này còn được gọi là tăng tiền tố. Trong biểu thức thứ hai, giá trị hiện tại của biến a sẽ là giá trị được sử dụng trong một phép toán, trước khi giá trị của chính a được tăng lên. Điều này còn được gọi là tăng hậu tố.


57) Điều gì sẽ xảy ra với X trong biểu thức này: X += 15; (giả sử giá trị của X là 5)

X +=15 là một cách viết ngắn gọn của X = X + 15, vì vậy nếu giá trị ban đầu của X là 5 thì 5 + 15 = 20.


58) Trong ngôn ngữ C, các biến NAME, name và Name đều giống nhau. Đúng hay sai?

SAI. Ngôn ngữ C là ngôn ngữ phân biệt chữ hoa chữ thường. Do đó, TÊN, tên và Tên là ba biến khác nhau duy nhất.


59) Vòng lặp vô tận là gì?

Một vòng lặp vô tận có thể có hai nghĩa. Một là nó được thiết kế để lặp liên tục cho đến khi điều kiện trong vòng lặp được đáp ứng, sau đó một hàm break sẽ khiến chương trình thoát khỏi vòng lặp. Một ý tưởng khác về vòng lặp vô tận là khi một điều kiện vòng lặp không chính xác được viết, khiến vòng lặp chạy sai mãi mãi. Vòng lặp vô tận thường được gọi là vòng lặp vô hạn.


60) Sơ đồ chương trình là gì và nó giúp ích gì cho việc viết chương trình?

Lưu đồ cung cấp sự trình bày trực quan về quy trình từng bước hướng tới việc giải quyết một vấn đề nhất định. Lưu đồ được tạo thành từ các ký hiệu, mỗi ký hiệu có dạng hình dạng khác nhau. Mỗi hình dạng có thể đại diện cho một thực thể cụ thể trong toàn bộ cấu trúc chương trình, chẳng hạn như một quy trình, một điều kiện hoặc thậm chí là một giai đoạn đầu vào/đầu ra.


61) Câu lệnh chương trình này có gì sai? khoảng trống = 10;

Từ void là một từ dành riêng trong ngôn ngữ C. Bạn không thể sử dụng các từ dành riêng làm biến do người dùng xác định.


62) Tuyên bố chương trình này có hợp lệ không? INT = 10.50;

Giả sử rằng INT là một biến kiểu float thì câu lệnh này là hợp lệ. Người ta có thể nghĩ rằng INT là một từ dành riêng và không được sử dụng cho mục đích khác. Tuy nhiên, hãy nhớ rằng các từ dành riêng được thể hiện bằng chữ thường, do đó trình biên dịch C sẽ không hiểu đây là một từ dành riêng.


63) Lập luận thực sự là gì?

Khi tạo và sử dụng các hàm cần thực hiện một hành động trên một số giá trị nhất định, bạn cần chuyển các giá trị đã cho này cho hàm đó. Các giá trị đang được truyền vào hàm được gọi được gọi là các đối số thực tế.


64) Trình tự thoát dòng mới là gì?

Chuỗi thoát dòng mới được biểu thị bằng ký tự \n. Điều này được sử dụng để chèn một dòng mới khi hiển thị dữ liệu ở màn hình đầu ra. Có thể thêm nhiều khoảng trắng bằng cách chèn thêm \n ký tự. Ví dụ: \n\n sẽ chèn hai khoảng trắng. Một chuỗi thoát dòng mới có thể được đặt trước hoặc sau biểu thức đầu ra thực tế.


65) Chuyển hướng đầu ra là gì?

Đây là quá trình chuyển dữ liệu sang một nguồn đầu ra thay thế khác ngoài màn hình hiển thị. Chuyển hướng đầu ra cho phép một chương trình lưu đầu ra vào một tệp. Ví dụ, nếu bạn có một chương trình có tên là COMPUTE, nhập lệnh này trên dòng lệnh là COMPUTE >DATA có thể chấp nhận đầu vào từ người dùng, thực hiện một số phép tính nhất định, sau đó chuyển hướng đầu ra đến một tệp có tên là DATA, thay vì hiển thị trên màn hình.


66) Lỗi thời gian chạy là gì?

Đây là những lỗi xảy ra trong khi chương trình đang được thực thi. Một trường hợp phổ biến mà lỗi thời gian chạy có thể xảy ra là khi bạn đang cố gắng chia một số cho số không. Khi lỗi thời gian chạy xảy ra, quá trình thực thi chương trình sẽ tạm dừng, hiển thị dòng chương trình nào gây ra lỗi.


67) Sự khác biệt giữa hàm abs() và fabs() là gì?

Về cơ bản, 2 hàm này thực hiện cùng một hành động là lấy giá trị tuyệt đối của giá trị đã cho. Abs() được sử dụng cho các giá trị số nguyên, trong khi fabs() được sử dụng cho các số kiểu động. Ngoài ra, nguyên mẫu cho abs() nằm dưới , trong khi fabs() ở dưới .


68) Tham số hình thức là gì?

Khi sử dụng các hàm trong chương trình C, các tham số hình thức chứa các giá trị được hàm gọi truyền vào. Các giá trị được thay thế trong các tham số chính thức này và được sử dụng trong bất kỳ thao tác nào như được chỉ ra trong phần thân chính của hàm được gọi.


69) Cấu trúc điều khiển là gì?

Cấu trúc điều khiển chịu trách nhiệm thực hiện các lệnh trong chương trình. Điều này có nghĩa là luồng chương trình có thể không nhất thiết phải chuyển từ câu lệnh này sang câu lệnh tiếp theo mà thay vào đó, một số phần thay thế có thể cần được chuyển vào hoặc bỏ qua, tùy thuộc vào kết quả của câu lệnh điều kiện.


70) Viết một đoạn mã đơn giản để kiểm tra xem một số là dương hay âm

If (num>=0)

printf("number is positive");

else

printf ("number is negative");

71) Khi nào thì câu lệnh “switch” thích hợp hơn câu lệnh “if”?

Sản phẩm chuyển đổi tuyên bố được sử dụng tốt nhất khi xử lý các lựa chọn dựa trên một biến hoặc biểu thức. Tuy nhiên, câu lệnh switch chỉ có thể đánh giá kiểu dữ liệu số nguyên và ký tự.


72) Biến toàn cục là gì và bạn khai báo chúng như thế nào?

Biến toàn cục là các biến có thể được truy cập và thao tác ở bất kỳ đâu trong chương trình. Để tạo một biến toàn cục, hãy đặt phần khai báo biến ở phần trên của chương trình, ngay sau phần chỉ thị tiền xử lý.


73) Kiểu liệt kê là gì?

Các kiểu liệt kê cho phép người lập trình sử dụng các từ có ý nghĩa hơn làm giá trị cho một biến. Mỗi mục trong biến kiểu liệt kê thực sự được liên kết với một mã số. Ví dụ: người ta có thể tạo một biến kiểu liệt kê có tên DAYS có giá trị là Monday, Thứ Ba… Chủ nhật.


74) Hàm toupper() làm nhiệm vụ gì?

Nó được sử dụng để chuyển đổi bất kỳ chữ cái nào sang chế độ chữ hoa của nó. Nguyên mẫu hàm Toupper() được khai báo trong . Lưu ý rằng hàm này sẽ chỉ chuyển đổi một ký tự chứ không phải toàn bộ chuỗi.


75) Có thể lấy hàm làm tham số trong hàm khác không?

Có, điều đó được cho phép trong lập trình C. Bạn chỉ cần đưa toàn bộ nguyên mẫu hàm vào trường tham số của hàm khác nơi nó sẽ được sử dụng.


76) Mảng đa chiều là gì?

Mảng đa chiều có khả năng lưu trữ dữ liệu theo cấu trúc hai hoặc nhiều chiều. Ví dụ: bạn có thể sử dụng mảng 2 chiều để lưu trữ vị trí hiện tại của các quân cờ trong trò chơi cờ vua hoặc vị trí của người chơi trong chương trình tic-tac-toe.


77) Hàm nào trong C có thể được sử dụng để nối một chuỗi vào một chuỗi khác?

Hàm strcat. Phải mất hai tham số, chuỗi nguồn và giá trị chuỗi để được thêm vào chuỗi nguồn.


78) Sự khác biệt giữa hàm getch() và getche() là gì?

Cả hai hàm sẽ chấp nhận giá trị đầu vào ký tự từ người dùng. Khi sử dụng getch(), phím được nhấn sẽ không xuất hiện trên màn hình và được tự động ghi lại và gán cho một biến. Khi sử dụng getche(), phím được người dùng nhấn sẽ xuất hiện trên màn hình, đồng thời được gán cho một biến.


79) Hai câu lệnh chương trình này có thực hiện cùng một đầu ra không? 1) scanf(“%c”, &letter); 2) chữ=getchar()

Có, cả hai đều thực hiện cùng một việc, đó là chấp nhận phím tiếp theo được người dùng nhấn và gán nó cho chữ cái có tên biến.


80) Các kiểu cấu trúc trong C là gì?

Các loại cấu trúc chủ yếu được sử dụng để lưu trữ hồ sơ. Một bản ghi được tạo thành từ các trường liên quan. Điều này giúp việc tổ chức một nhóm dữ liệu liên quan trở nên dễ dàng hơn.


81) Các ký tự “r” và “w” có ý nghĩa gì khi viết chương trình sử dụng tệp?

“r” có nghĩa là “đọc” và sẽ mở một tệp làm đầu vào để lấy dữ liệu. “w” có nghĩa là “ghi” và sẽ mở một tệp để xuất. Dữ liệu trước đó được lưu trữ trên tập tin đó sẽ bị xóa.


82) Sự khác biệt giữa tệp văn bản và tệp nhị phân là gì?

Các tệp văn bản chứa dữ liệu mà con người có thể dễ dàng hiểu được. Nó bao gồm các chữ cái, số và các ký tự khác. Mặt khác, các tệp nhị phân chứa các số 1 và 0 mà chỉ máy tính mới có thể giải thích được.


83) có thể tạo các tập tin tiêu đề của riêng bạn không?

Có, có thể tạo tệp tiêu đề tùy chỉnh. Chỉ cần đưa vào đó các nguyên mẫu hàm mà bạn muốn sử dụng trong chương trình của mình và sử dụng lệnh #include theo sau là tên của tệp tiêu đề.


84) Cấu trúc dữ liệu động là gì?

Cấu trúc dữ liệu động cung cấp phương tiện lưu trữ dữ liệu vào bộ nhớ hiệu quả hơn. Sử dụng Sử dụng cấp phát bộ nhớ động, chương trình của bạn sẽ truy cập vào không gian bộ nhớ nếu cần. Điều này trái ngược với cấu trúc dữ liệu tĩnh, trong đó lập trình viên phải chỉ ra số lượng không gian bộ nhớ cố định sẽ được sử dụng trong chương trình.


85) Các kiểu dữ liệu khác nhau trong C là gì?

Cơ bản các kiểu dữ liệu trong C là int, char và float. Int được sử dụng để khai báo các biến sẽ lưu trữ các giá trị nguyên. Float được sử dụng để lưu trữ số thực. Char có thể lưu trữ các giá trị ký tự riêng lẻ.


86) Dạng tổng quát của chương trình C là gì?

Chương trình AC bắt đầu bằng các chỉ thị tiền xử lý, trong đó lập trình viên sẽ chỉ định tệp tiêu đề nào và hằng số nào (nếu có) sẽ được sử dụng. Tiếp theo là tiêu đề chức năng chính. Trong hàm chính có phần khai báo biến và câu lệnh chương trình.


87) Ưu điểm của tệp truy cập ngẫu nhiên là gì?

Nếu lượng dữ liệu được lưu trữ trong một tệp khá lớn, việc sử dụng truy cập ngẫu nhiên sẽ cho phép bạn tìm kiếm nhanh hơn. Nếu đó là tệp truy cập tuần tự, bạn sẽ phải duyệt từng bản ghi một cho đến khi đạt được dữ liệu đích. Tệp truy cập ngẫu nhiên cho phép bạn chuyển trực tiếp đến địa chỉ đích nơi chứa dữ liệu.


88) Trong câu lệnh switch, điều gì sẽ xảy ra nếu bỏ qua câu lệnh break?

Nếu câu lệnh ngắt không được đặt ở cuối phần trường hợp cụ thể? Nó sẽ chuyển sang phần trường hợp tiếp theo, có thể gây ra kết quả đầu ra không chính xác.


89) Mô tả cách truyền mảng tới hàm do người dùng xác định

Một điều cần lưu ý là bạn không thể truyền toàn bộ mảng cho một hàm. Thay vào đó, bạn truyền cho nó một con trỏ sẽ trỏ đến phần tử đầu tiên của mảng trong bộ nhớ. Để làm điều này, bạn chỉ ra tên của mảng mà không có dấu ngoặc.


90) Con trỏ là gì?

Điểm con trỏ tới các vùng cụ thể trong bộ nhớ. Con trỏ chứa địa chỉ của một biến, do đó có thể chứa một giá trị hoặc thậm chí là địa chỉ của một bộ nhớ khác.


91) Bạn có thể chuyển toàn bộ cấu trúc sang các hàm không?

Có, có thể chuyển toàn bộ cấu trúc sang một hàm trong lệnh gọi theo kiểu phương thức. Tuy nhiên, một số lập trình viên thích khai báo cấu trúc trên toàn cục, sau đó chuyển một biến có kiểu cấu trúc đó cho hàm. Phương pháp này giúp duy trì tính nhất quán và đồng nhất về kiểu đối số.


92) Hàm gets() là gì?

Sản phẩm gets() function cho phép người dùng nhập dữ liệu dòng đầy đủ. Khi người dùng nhấn phím enter để kết thúc việc nhập, toàn bộ dòng ký tự sẽ được lưu vào một biến chuỗi. Lưu ý rằng phím enter không được bao gồm trong biến mà thay vào đó, dấu kết thúc null \0 được đặt sau ký tự cuối cùng.


93) Ký hiệu % có công dụng đặc biệt trong câu lệnh printf. Bạn sẽ đặt ký tự này như một phần của đầu ra trên màn hình như thế nào?

Bạn có thể thực hiện việc này bằng cách sử dụng %% trong câu lệnh printf. Ví dụ: bạn có thể viết printf(“10%%”) để kết quả xuất hiện là 10% trên màn hình.


94) Bạn tìm kiếm dữ liệu trong tệp dữ liệu bằng phương pháp truy cập ngẫu nhiên như thế nào?

Sử dụng fseek() chức năng thực hiện việc nhập/xuất truy cập ngẫu nhiên trên một tập tin. Sau khi tệp được mở bằng hàm fopen(), fseek sẽ yêu cầu ba tham số để hoạt động: một con trỏ tệp tới tệp, số byte cần tìm kiếm và điểm gốc trong tệp.


95) Các nhận xét có được đưa vào trong giai đoạn biên dịch và được đặt trong tệp EXE không?

Không, những nhận xét mà trình biên dịch gặp phải sẽ bị bỏ qua. Các nhận xét chủ yếu chỉ nhằm mục đích hướng dẫn cho người lập trình và không có bất kỳ công dụng quan trọng nào khác đối với chức năng của chương trình.


96) Có hàm nào trong C có thể dùng để sắp xếp dữ liệu không?

Có, sử dụng qsort() chức năng. Cũng có thể tạo các hàm do người dùng xác định để sắp xếp, chẳng hạn như các hàm dựa trên thuật toán sắp xếp bong bóng và sắp xếp bong bóng.


97) Ưu điểm và nhược điểm của đống là gì?

Việc lưu trữ dữ liệu trên heap chậm hơn so với khi sử dụng ngăn xếp. Tuy nhiên, ưu điểm chính của việc sử dụng heap là tính linh hoạt của nó. Đó là vì bộ nhớ trong cấu trúc này có thể được cấp phát và loại bỏ theo bất kỳ thứ tự cụ thể nào. Sự chậm chạp trong vùng heap có thể được bù đắp nếu thuật toán được thiết kế và triển khai tốt.


98) Làm thế nào để chuyển đổi chuỗi thành số trong C?

Bạn có thể viết các hàm của riêng mình để thực hiện chuyển đổi chuỗi thành số hoặc thay vào đó hãy sử dụng các hàm dựng sẵn của C. Bạn có thể sử dụng atof để chuyển đổi thành giá trị dấu phẩy động, atoi để chuyển đổi thành giá trị số nguyên và atol để chuyển đổi thành giá trị số nguyên dài.


99) Tạo một đoạn mã đơn giản sẽ hoán đổi giá trị của hai biến num1 và num2.

int temp;

temp = num1;

num1 = num2;

num2 = temp;

100) Dấu chấm phẩy (;) ở cuối mỗi câu lệnh chương trình có tác dụng gì?

Nó liên quan đến quá trình phân tích cú pháp và biên dịch mã. Dấu chấm phẩy hoạt động như một dấu phân cách, để trình biên dịch biết mỗi câu lệnh kết thúc ở đâu và có thể tiến hành chia câu lệnh thành các phần tử nhỏ hơn để kiểm tra cú pháp.

Những câu hỏi phỏng vấn này cũng sẽ giúp ích cho bài thi viva(orals) của bạn