Chủ đề của PRF192 - Cơ sở lập trình

PRF192 - Phần 1: Máy tính, phần mềm và chương trình C đầu tiên

Ứng với CLO1, buổi 1 đến 3. Phần mở đầu trả lời câu hỏi nền tảng: một chương trình là gì và nó chạy trên máy tính như thế nào. Nội dung gồm khái niệm cơ bản về hệ thống máy tính với phần cứng, phần mềm, bộ nhớ và bộ xử lý; các bước phát triển một phần mềm từ phân tích bài toán, thiết kế thuật toán, viết mã, kiểm thử tới bảo trì; và cách chuyển một bài toán thực tế thành thuật toán rồi thành mã nguồn. Phần thứ hai đi vào cấu trúc một chương trình C đơn giản: chỉ thị tiền xử lý #include và vai trò của nó, hàm main làm điểm bắt đầu thực thi, dấu chấm phẩy kết thúc câu lệnh, cặp ngoặc nhọn gom khối, cách viết chú thích. Khép lại bằng quy trình mã nguồn - biên dịch - liên kết - thực thi và cách dùng trình biên dịch C trong môi trường DevC++.

Xem danh sách câu hỏi18 câu hỏi100% có giải thích

Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.

Học ngân hàng câu hỏi của chủ đề

Luyện tập theo chủ đề này

18Câu hỏi hiện có

Câu hỏi của chủ đề

18/18 câuHết danh sách
1What is the incorrect definition?4 lựa chọn
AAlgorithm: a way to find out a solution
BData: Values are used to describe information. So, information can be called as the mean of data
CSolution: A situation in which something is hidden
DInformation: Knowledge about something
Lời giải
Đáp án đúng: "Solution: A situation in which something is hidden". Câu này tả một tình huống có thứ gì bị che giấu, tức là mô tả của một vấn đề hay một câu đố, chứ không phải của giải pháp; giải pháp là cách làm cụ thể đưa bài toán từ dữ liệu đầu vào tới kết quả mong muốn, nên định nghĩa này sai. "Algorithm: a way to find out a solution" đúng, vì thuật toán chính là dãy bước hữu hạn dùng để tìm ra giải pháp. "Data: Values are used to describe information. So, information can be called as the mean of data" đúng theo cách môn học phân biệt hai khái niệm: dữ liệu là các giá trị thô, còn thông tin là nghĩa rút ra từ những giá trị đó. "Information: Knowledge about something" đúng, vì thông tin là hiểu biết về một đối tượng, kết quả của việc diễn giải dữ liệu.
Mở trang câu hỏi này →
AAddress bus
BSignal bus
CControl bus
DData bus
Lời giải
Đáp án đúng: "Signal bus". Trong kiến trúc máy tính, các đường truyền nối bộ xử lý với bộ nhớ và thiết bị vào ra được chia theo chức năng thành ba nhóm: đường địa chỉ, đường dữ liệu và đường điều khiển; không có nhóm nào mang tên đường tín hiệu, bởi mọi đường đều truyền tín hiệu điện nên cách gọi đó chẳng phân loại được gì. "Address bus" là nhóm thật, chở số hiệu ô nhớ hoặc cổng mà bộ xử lý muốn đọc hay ghi, và độ rộng của nó quyết định lượng bộ nhớ tối đa máy chạm tới được. "Control bus" cũng là nhóm thật, mang các lệnh phối hợp như yêu cầu đọc, yêu cầu ghi, nhịp đồng hồ, tín hiệu ngắt. "Data bus" là nhóm thật còn lại, chở chính nội dung được trao đổi giữa bộ xử lý, bộ nhớ và thiết bị.
Mở trang câu hỏi này →
AThe comment mark will be removed. The content of the comments will be compiled line by line.
BThe comment is treated as an array of characters.
CComments are removed in the pre-processing step.
DEach comment is compiled as a statement that does nothing.
Lời giải
Đáp án đúng: "Comments are removed in the pre-processing step." Chú thích chỉ dành cho người đọc, không mang nghĩa gì với máy, nên nó bị loại bỏ ngay ở bước tiền xử lý, trước khi khâu phân tích cú pháp nhìn tới mã; mỗi chú thích được thay bằng một khoảng trắng, vì vậy mã máy sinh ra không đổi dù chú thích dài hay ngắn. "The comment mark will be removed. The content of the comments will be compiled line by line." sai vì nội dung chú thích không bao giờ được biên dịch; nếu biên dịch thì mọi câu văn trong chú thích đều thành lỗi cú pháp. "The comment is treated as an array of characters." sai vì chỉ chuỗi nằm trong dấu nháy kép mới trở thành mảng ký tự trong bộ nhớ, chú thích không sinh ra byte dữ liệu nào. "Each comment is compiled as a statement that does nothing." sai vì không có lệnh rỗng nào được sinh ra, chương trình dịch xong không còn dấu vết của chú thích.
Mở trang câu hỏi này →
ACompile time error
BRun time error
CInput error
DLinking error
Lời giải
Đáp án đúng: "Compile time error". Lỗi cú pháp là chuyện vi phạm quy tắc viết của ngôn ngữ, chẳng hạn thiếu dấu chấm phẩy hay lệch cặp ngoặc, nên trình biên dịch phát hiện ngay khi phân tích mã nguồn và từ chối sinh tệp thực thi; chương trình chưa từng chạy nên không thể có lỗi lúc chạy. "Run time error" là loại khác, chỉ xuất hiện khi tệp thực thi đã chạy, như chia cho 0 hay truy cập con trỏ rỗng, lúc đó cú pháp vốn đã đúng. "Input error" nói về dữ liệu người dùng nhập sai khuôn dạng, thuộc phạm vi kiểm tra của chính chương trình, không liên quan tới cách viết mã. "Linking error" xảy ra sau khâu biên dịch, khi bộ liên kết không tìm thấy định nghĩa của một hàm đã khai báo, tức mã từng dịch thành công rồi mới vỡ.
Mở trang câu hỏi này →
ATo make our programs longer, we use higher-level languages.
BProgram code in a high level language can not run, it must be translated to binary code (machine code) before running.
CC is based on a view of structured programming.
DPrograms that perform relatively simple tasks and are written in assembly language typically require more lines of code than those written in higher-level languages
Lời giải
Đáp án đúng: "To make our programs longer, we use higher-level languages." Mục đích của ngôn ngữ bậc cao là ngược lại: một dòng mã bậc cao gói được nhiều lệnh máy, nhờ đó chương trình ngắn hơn, dễ đọc và dễ bảo trì hơn, nên câu này sai ở chỗ nói ta dùng ngôn ngữ bậc cao để chương trình dài ra. "Program code in a high level language can not run, it must be translated to binary code (machine code) before running." đúng, vì bộ xử lý chỉ hiểu mã máy, mã nguồn phải qua trình biên dịch mới chạy được. "C is based on a view of structured programming." đúng, C tổ chức chương trình bằng hàm cùng các khối rẽ nhánh và lặp theo tinh thần lập trình có cấu trúc. "Programs that perform relatively simple tasks and are written in assembly language typically require more lines of code than those written in higher-level languages" đúng, cùng một việc nhỏ viết bằng hợp ngữ phải tả từng bước của máy nên tốn nhiều dòng hơn.
Mở trang câu hỏi này →
A0b01100010
B0b10100010
C0b10010010
D0b10110010
Lời giải
Đáp án đúng: "0b10100010". Một chữ số thập lục phân ứng gọn với bốn bit nên đổi 0xA2 chỉ cần đổi riêng từng chữ: chữ A là 10 nên thành 1010, chữ 2 thành 0010, ghép lại được 10100010, đúng tám bit của một byte. Kiểm lại bằng giá trị: 0xA2 là 162, mà 128+32+2 cũng bằng 162. "0b01100010" là 98, ứng với 0x62, tức đã đọc chữ A thành 6. "0b10010010" là 146, ứng với 0x92, sai ở nhóm bốn bit cao vì 1001 là 9 chứ không phải 10. "0b10110010" là 178, ứng với 0xB2, vì nhóm bit cao 1011 là 11, lệch một đơn vị so với 10.
Mở trang câu hỏi này →
AC has object-oriented features.
BC is English-like
CC is faster and more powerful than other high-level languages.
DC supports basic ways to understand the memory of a program
Lời giải
Đáp án đúng: "C has object-oriented features." Ngôn ngữ C không có lớp, đối tượng, kế thừa hay đa hình, nên đặc tính hướng đối tượng không thể là lý do chọn C làm ngôn ngữ đầu tiên; muốn những thứ đó phải sang ngôn ngữ khác. "C is English-like" là lý do có thật được nêu, các từ khoá if, else, while, return đọc gần như tiếng Anh nên người mới dễ đoán ý. "C is faster and more powerful than other high-level languages." cũng là lý do được nêu, mã C dịch ra mã máy gọn và cho phép làm việc sát phần cứng. "C supports basic ways to understand the memory of a program" là lý do quan trọng nhất về mặt học thuật: con trỏ, địa chỉ và cấp phát động buộc người học hình dung bộ nhớ thật thay vì coi nó là chuyện trừu tượng.
Mở trang câu hỏi này →
Acompilation errors
Bruntime errors
Clogic or semantic errors
Dinterpreter errors
Lời giải
Đáp án đúng: "logic or semantic errors". Trình biên dịch chỉ kiểm được những gì thuộc hình thức: từ khoá, dấu câu, kiểu dữ liệu, khai báo. Nó không biết chương trình đáng lẽ phải làm gì, nên một công thức viết sai dấu, một vòng lặp chạy thiếu một lượt hay một điều kiện so sánh ngược đều dịch trơn tru rồi cho ra số liệu sai. Đó chính là lỗi tư duy, lỗi về ngữ nghĩa. Ý "compilation errors" sai vì mâu thuẫn với chính đề bài, đã dịch không lỗi thì không còn lỗi biên dịch nào sót lại. Ý "runtime errors" sai vì lỗi lúc chạy biểu hiện bằng việc chương trình dừng bất thường hoặc rơi vào hành vi không xác định như chia cho không, truy cập ngoài vùng nhớ, chứ không phải chạy xong êm ả rồi trả lời sai. Ý "interpreter errors" sai vì mã nguồn ở đây được biên dịch thành mã máy, không có bộ thông dịch nào tham gia.
Mở trang câu hỏi này →
ACompilation involves converting source code to machine code, while interpretation involves executing code line by line.
BCompilation and interpretation are two terms that are used interchangeably.
CAlgorithm is another term for interpretation in programming languages.
DIDE tools are responsible for both compilation and interpretation processes.
Lời giải
Đáp án đúng: "Compilation involves converting source code to machine code, while interpretation involves executing code line by line.". Khác biệt cốt lõi nằm ở thời điểm dịch: trình biên dịch đọc trọn mã nguồn, kiểm tra rồi sinh ra mã máy thành tệp thực thi, sau đó máy chạy trực tiếp tệp ấy mà không cần mã nguồn nữa; bộ thông dịch thì vừa đọc vừa thực hiện từng câu lệnh ở mỗi lần chạy. Ngôn ngữ C thuộc nhóm biên dịch, đó là lý do tệp nguồn phải dịch xong mới có chương trình để chạy. Ý "Compilation and interpretation are two terms that are used interchangeably." sai vì hai cơ chế khác nhau cả về sản phẩm trung gian lẫn cách báo lỗi. Ý "Algorithm is another term for interpretation in programming languages." sai vì thuật toán là trình tự các bước giải một bài toán, không phải một cách thực thi mã. Ý "IDE tools are responsible for both compilation and interpretation processes." sai vì môi trường phát triển chỉ gọi tới trình biên dịch, bản thân nó không làm việc dịch.
Mở trang câu hỏi này →
AA compiler
BA text editor
CA file
DA program
Lời giải
Đáp án đúng: "A compiler". Máy chỉ hiểu được mã máy, còn tệp nguồn là văn bản viết theo quy tắc của ngôn ngữ, nên cần một chương trình chuyên trách đọc văn bản ấy, kiểm tra cú pháp và kiểu, rồi sinh ra các chỉ thị máy; chương trình chuyên trách đó là trình biên dịch. Ý "A text editor" sai vì bộ soạn thảo chỉ giúp gõ và lưu văn bản mã nguồn, nó không hiểu ngữ nghĩa của ngôn ngữ và không sinh ra mã máy. Ý "A file" sai vì tệp là nơi chứa dữ liệu, bản thân nó không thực hiện việc dịch nào. Ý "A program" sai vì nói chung chung như thế thì không phân biệt được gì: trình biên dịch đúng là một chương trình, nhưng đề hỏi cái gì đảm nhiệm việc dịch nên câu trả lời phải nêu đúng loại chương trình làm việc đó.
Mở trang câu hỏi này →
11What is the main() function in C?4 lựa chọn
AIt is the function where the program's execution starts.
BEvery program has exactly one main function.
CThe main function always returns an integer value or void.
DAll answers are correct.
Lời giải
Đáp án đúng: "All answers are correct.". Cả ba nhận định còn lại đều nói về cùng một hàm và đều đúng: main là nơi quá trình thực thi bắt đầu, mỗi chương trình có đúng một hàm main vì nếu không bộ liên kết không biết chọn điểm vào nào, và kiểu trả về của nó là số nguyên theo chuẩn, còn dạng void chỉ được một số trình biên dịch chấp nhận. Ý "It is the function where the program's execution starts." đúng về nội dung nhưng không thể là lựa chọn vì nó bỏ qua hai tính chất kia, chọn nó là bỏ sót phần còn lại của câu trả lời. Ý "Every program has exactly one main function." cũng đúng mà vẫn thiếu, nó không nói gì về điểm khởi đầu hay kiểu trả về. Ý "The main function always returns an integer value or void." đúng theo cách dùng phổ biến nhưng cũng chỉ mô tả một mặt, không đủ bao phủ câu hỏi.
Mở trang câu hỏi này →
12What is required in each C program?4 lựa chọn
AThe program must have at least one function.
BThe program does not require any function.
CInput data
DOutput data
Lời giải
Đáp án đúng: "The program must have at least one function.". Mọi chương trình C đứng riêng đều phải có hàm main, vì đó là điểm vào mà môi trường gọi tới sau khi nạp chương trình; không có main thì bộ liên kết báo thiếu điểm vào và không tạo nổi tệp chạy. Vậy số hàm tối thiểu của một chương trình là một. Kết luận "The program does not require any function." sai đúng ở chỗ đó: lệnh trong C không thể nằm ngoài thân hàm, ở mức tệp chỉ được khai báo biến, kiểu và hàm. Yêu cầu "Input data" không bắt buộc, một chương trình chỉ tính toán rồi in ra, hoặc thậm chí chẳng làm gì, vẫn hợp lệ. Yêu cầu "Output data" cũng vậy, chương trình có thể chỉ trả mã kết thúc về cho hệ điều hành mà không in ra gì. Hai việc vào ra là nhu cầu của bài toán, còn hàm main là ràng buộc của ngôn ngữ.
Mở trang câu hỏi này →
A*/ Comments */
B** Comment **
C/* Comment */
D{ Comment }
Lời giải
Đáp án đúng: "/* Comment */". Chú thích khối trong C mở bằng dấu gạch chéo rồi dấu sao và đóng bằng dấu sao rồi gạch chéo; phần giữa bị bộ tiền xử lý thay bằng một khoảng trắng nên trình biên dịch không bao giờ thấy nội dung đó. Cách viết "*/ Comments */" đảo chỗ hai ký tự mở, mà dấu mở buộc phải là gạch chéo trước dấu sao, nên dòng đó bị đọc như biểu thức và báo lỗi. Cách viết "** Comment **" chỉ có hai dấu sao, ngôn ngữ đọc chúng thành phép nhân hoặc phép lấy nội dung con trỏ, không mở chú thích nào cả. Cách viết "{ Comment }" là cú pháp chú thích của Pascal, còn trong C cặp ngoặc nhọn tạo khối lệnh nên nội dung bên trong vẫn bị đòi phải là lệnh hợp lệ. Dạng chú thích thứ hai mà C cho phép là hai dấu gạch chéo kéo tới hết dòng.
Mở trang câu hỏi này →
A120
B121
C122
D123
Lời giải
Đáp án đúng: "123". Mỗi vị trí trong hệ hai mang trọng số là một luỹ thừa của 2, tính từ phải sang trái lần lượt là 1, 2, 4, 8, 16, 32, 64, 128. Dãy 0111 1011 bật các bit trọng số 64, 32, 16, 8, 2 và 1, còn bit trọng số 4 và bit trọng số 128 đều tắt, nên cộng lại được 64 cộng 32 cộng 16 cộng 8 cộng 2 cộng 1 là 123. Giá trị "120" ứng với dãy 0111 1000, tức bỏ sót hai bit thấp nhất đang bật. Giá trị "121" ứng với 0111 1001, chỉ nhận một trong hai bit thấp đó. Giá trị "122" ứng với 0111 1010, nhận bit trọng số 2 mà bỏ bit trọng số 1. Có một cách loại nhanh: bit cuối cùng của dãy đang bật nên số cần tìm phải là số lẻ, vì thế mọi đáp số chẵn đều bị gạt ngay từ đầu.
Mở trang câu hỏi này →
A#define is a preprocessor command often used to introduce named constants
Bdouble and goto are keyword for declaring data type.
Creturn 0; is normally the last statement in main()
DThe file stdio.h is the library where the compiler finds scanf().
Lời giải

Đáp án đúng: "double and goto are keyword for declaring data type.". Trong C, double đúng là từ khoá của một kiểu số thực, nhưng goto là lệnh nhảy tới một nhãn trong cùng hàm và không khai báo kiểu gì cả, nên câu này sai và chính nó là thứ đề bài cần tìm. Câu "#define is a preprocessor command often used to introduce named constants" đúng: chỉ thị này do bộ tiền xử lý xử lý và hay dùng để đặt tên cho hằng số. Câu "return 0; is normally the last statement in main()" đúng với lệ thường, giá trị 0 báo cho hệ điều hành biết chương trình kết thúc bình thường. Câu "The file stdio.h is the library where the compiler finds scanf()" đúng về chỗ khai báo: tệp tiêu đề này cung cấp nguyên mẫu của scanf cùng nhóm hàm vào ra, nhờ đó trình biên dịch kiểm được kiểu các đối số.

Mở trang câu hỏi này →
16What is an algorithm?4 lựa chọn
AA program executed using a computer
BA procedure used for solving a problem or performing a computation.
CA sequence of steps to solve a problem
DA description of hidden information
Lời giải
Đáp án đúng: "A procedure used for solving a problem or performing a computation.". Đây là định nghĩa gọn của thuật toán: một quy trình xác định dùng để giải một bài toán hoặc thực hiện một phép tính, gồm hữu hạn bước rõ nghĩa, có đầu vào đầu ra xác định và phải dừng. Thuật toán tồn tại độc lập với ngôn ngữ và máy móc, nên cùng một thuật toán viết được bằng nhiều ngôn ngữ khác nhau. Lựa chọn "A program executed using a computer" lẫn thuật toán với chương trình: chương trình chỉ là một cách hiện thực thuật toán trên máy. Lựa chọn "A sequence of steps to solve a problem" nghe gần đúng nhưng lỏng: một dãy bước mơ hồ hoặc không bao giờ dừng thì không phải thuật toán, và cách nói ấy cũng bỏ mất mảng thực hiện phép tính. Lựa chọn "A description of hidden information" không liên quan gì tới khái niệm thuật toán.
Mở trang câu hỏi này →
ATo track variable changes and program output
BTo automatically compile and optimize the source code for better performance.
CTo generate comprehensive documentation and user manuals for the entire project
DTo convert high-level pseudocode into machine-readable assembly language instructions
Lời giải
Đáp án đúng: "To track variable changes and program output". Dò bước là việc người viết tự chạy chương trình trên giấy: lần theo từng câu lệnh, ghi lại giá trị mới của từng biến sau mỗi bước và ghi lại những gì chương trình xuất ra, nhờ đó phát hiện chỗ lệch giữa điều mình nghĩ và điều mã thực sự làm, kể cả khi mã dịch được và không báo lỗi nào. Lựa chọn "To automatically compile and optimize the source code for better performance." là việc của trình dịch, một bước tự động, trong khi dò bước là thao tác tay của con người. Lựa chọn "To generate comprehensive documentation and user manuals for the entire project" là việc của công cụ sinh tài liệu, không nhằm theo dõi giá trị biến. Lựa chọn "To convert high-level pseudocode into machine-readable assembly language instructions" tả quá trình dịch sang hợp ngữ, cũng không phải mục đích của dò bước.
Mở trang câu hỏi này →
AIt must use recursion
BIt must be written in C language
CIt must have infinite steps
DIt must be finite and well-defined
Lời giải
Đáp án đúng: "It must be finite and well-defined". Thuật toán là dãy bước giải một bài toán, và hai tính chất không thể thiếu là hữu hạn, tức phải dừng sau số bước xác định, cùng rõ ràng, tức mỗi bước chỉ hiểu được theo một nghĩa để ai thực hiện cũng cho cùng kết quả. Thiếu một trong hai thì không còn là thuật toán. Yêu cầu "It must use recursion" sai vì đệ quy chỉ là một cách tổ chức lời giải; vô số thuật toán chỉ dùng vòng lặp. Yêu cầu "It must be written in C language" lẫn thuật toán với chương trình: thuật toán tồn tại độc lập, diễn đạt được bằng lời, bằng mã giả hay sơ đồ khối, rồi mới cài đặt bằng một ngôn ngữ bất kỳ. Yêu cầu "It must have infinite steps" trái hẳn tính hữu hạn; dãy bước không bao giờ dừng chỉ là vòng lặp vô tận, không giải xong việc gì.
Mở trang câu hỏi này →

Đề có câu hỏi của chủ đề này

7 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.