Nhiệm vụ 1: Quản lý điểm số học sinh
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 3
typedef struct {
int student_id;
char student_name[20];
char subject_name[20];
double performance_score;
double midterm_score;
double final_score;
double total_score;
char grade[10];
} StudentRecord;
void gather_data(StudentRecord students[], int size);
void display_data(StudentRecord students[], int size);
void compute_grades(StudentRecord students[], int size);
int filter_failing(StudentRecord students[], StudentRecord failing_students[], int size);
void arrange_by_total(StudentRecord students[], int size);
int main() {
StudentRecord students[MAX_STUDENTS], failing_students[MAX_STUDENTS];
int count;
printf("Nhập thông tin điểm số học sinh:\n");
gather_data(students, MAX_STUDENTS);
printf("\nĐang xử lý...\n");
compute_grades(students, MAX_STUDENTS);
count = filter_failing(students, failing_students, MAX_STUDENTS);
arrange_by_total(students, MAX_STUDENTS);
printf("\nXếp hạng học sinh theo tổng điểm:\n");
display_data(students, MAX_STUDENTS);
printf("\nThông tin học sinh không đạt yêu cầu:\n");
display_data(failing_students, count);
return 0;
}
void gather_data(StudentRecord students[], int size) {
for (int i = 0; i < size; i++) {
scanf("%d %s %s %lf %lf %lf", &students[i].student_id, students[i].student_name, students[i].subject_name,
&students[i].performance_score, &students[i].midterm_score, &students[i].final_score);
}
}
void display_data(StudentRecord students[], int size) {
printf("---------Phân cách--------\n");
printf("Mã SV Họ tên Môn học Thường kỳ Kỳ giữa Kỳ cuối Tổng Xếp loại\n");
for (int i = 0; i < size; i++) {
printf("%d %-6s %-4s %-4.0f %-4.0f %-4.0f %-4.1f %s\n",
students[i].student_id, students[i].student_name, students[i].subject_name,
students[i].performance_score, students[i].midterm_score, students[i].final_score,
students[i].total_score, students[i].grade);
}
}
void compute_grades(StudentRecord students[], int size) {
for (int i = 0; i < size; i++) {
students[i].total_score = students[i].performance_score * 0.2 +
students[i].midterm_score * 0.2 +
students[i].final_score * 0.6;
if (students[i].total_score >= 90)
strcpy(students[i].grade, "Xuất sắc");
else if (students[i].total_score >= 80)
strcpy(students[i].grade, "Giỏi");
else if (students[i].total_score >= 70)
strcpy(students[i].grade, "Khá");
else if (students[i].total_score >= 60)
strcpy(students[i].grade, "Trung bình");
else
strcpy(students[i].grade, "Yếu");
}
}
int filter_failing(StudentRecord students[], StudentRecord failing_students[], int size) {
int count = 0;
for (int i = 0; i < size; i++) {
if (students[i].total_score < 60) {
failing_students[count++] = students[i];
}
}
return count;
}
void arrange_by_total(StudentRecord students[], int size) {
StudentRecord temp;
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (students[j].total_score < students[j + 1].total_score) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
Nhiệm vụ 2: Quản lý danh sách sách
#include <stdio.h>
#include <string.h>
#define MAX_BOOKS 10
#define MAX_LENGTH 80
typedef struct {
char book_title[MAX_LENGTH];
char author_name[MAX_LENGTH];
} LibraryBook;
int main() {
LibraryBook books[MAX_BOOKS] = {{"Cuộc Chơi Sinh Tử", "Người Đội Trưởng"},
{"Thế Giới Mới Diệu Kỳ", "Aldous Huxley"},
{"Gió Qua Đồn Điền", "Margaret Mitchell"},
{"Chàng Nhỏ Hoàng Tử", "Antoine de Saint-Exupéry"},
{"Ngủ Ngày Nào Cũng Được", "Wozz"},
{"Trăm Năm Cô Đơn", "Gabriel García Márquez"},
{"Rong Ruổi", "Wu Zhe"},
{"Thế Giới Khốn Cùng", "Victor Hugo"},
{"Dịch Bệnh", "Albert Camus"},
{"Toán Cao Cấp", "Wang Shunfeng"}};
LibraryBook *book_ptr;
char search_author[MAX_LENGTH];
int found = 0;
// In ra tất cả thông tin sách
printf("-------------------Tất cả thông tin sách-------------------\n");
for (book_ptr = books; book_ptr < books + MAX_BOOKS; ++book_ptr) {
printf("%-30s%-30s\n", book_ptr->book_title, book_ptr->author_name);
}
// Tìm kiếm sách theo tác giả
printf("\n-------------------Tìm kiếm sách theo tác giả-------------------\n");
printf("Nhập tên tác giả: ");
gets(search_author);
for (book_ptr = books; book_ptr < books + MAX_BOOKS; ++book_ptr) {
if (strcmp(book_ptr->author_name, search_author) == 0) {
found = 1;
printf("%-30s%-30s\n", book_ptr->book_title, book_ptr->author_name);
}
}
if (!found) {
printf("Không tìm thấy sách của tác giả này!\n");
}
return 0;
}
Nhiệm vụ 3: Quản lý danh sách phim
#include <stdio.h>
#include <stdlib.h>
#define MAX_INFO_LENGTH 80
typedef struct FilmData {
char movie_title[MAX_INFO_LENGTH];
char director_name[MAX_INFO_LENGTH];
char production_region[MAX_INFO_LENGTH];
int release_year;
struct FilmData *next_node;
} MovieRecord;
MovieRecord *add_movie(MovieRecord *head, int quantity);
void print_movies(MovieRecord *head);
int main() {
int number_of_movies;
MovieRecord *movie_list = NULL;
printf("Nhập số lượng phim: ");
scanf("%d", &number_of_movies);
movie_list = add_movie(movie_list, number_of_movies);
printf("\nThông tin tất cả các phim:\n");
print_movies(movie_list);
return 0;
}
MovieRecord *add_movie(MovieRecord *head, int quantity) {
MovieRecord *new_node;
for (int i = 1; i <= quantity; ++i) {
new_node = (MovieRecord *)malloc(sizeof(MovieRecord));
printf("Nhập thông tin phim thứ %d: ", i);
scanf("%s %s %s %d", new_node->movie_title, new_node->director_name,
new_node->production_region, &new_node->release_year);
new_node->next_node = head;
head = new_node;
}
return head;
}
void print_movies(MovieRecord *head) {
MovieRecord *current = head;
while (current != NULL) {
printf("%-20s %-20s %-20s %d\n", current->movie_title, current->director_name,
current->production_region, current->release_year);
current = current->next_node;
}
}
C,struct,array,sorting