题目:
下面结构体类型的变量的内存布局是怎样的?请使用VS的Debug模式查看它的内存布局
typedef struct stundent_s {
int number;
char name[25];
char gender;
int chinese;
int math;
int english;
} Student;
// 结构体对象的声明和初始化 Student s1 = { 1, “Jack”, ‘m’, 100, 100, 100 };
要求:截图展示内存窗口中的对齐填充,然后提交截图。第二题:
基于上述的结构体类型的定义,实现以下功能:
1.从键盘输入5个学生的信息,将这些同学的信息采用结构体数组的方式存储起来。(代码直接写在main函数里)
2.编写一个函数,用于打印单个结构体信息。然后在main函数里调用该函数,打印这个结构体数组。
3.编写一个函数,用于求三个学科的平均分。然后在main函数里调用该函数,打印这三个学科的平均分。
关键点
分析:
:
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_BOOKS 10
#define TITLE_LENGTH 100
#define AUTHOR_LENGTH 50
// 定义书籍类别的枚举类型
typedef enum {
SCIENCE_FICTION, // 科幻
LITERATURE, // 文学
HISTORY, // 历史
TECHNOLOGY, // 科技
OTHER // 其他
} Genre;
// 定义书籍结构体类型
typedef struct {
int id;
char title[TITLE_LENGTH];
char author[AUTHOR_LENGTH];
Genre genre;
} Book;
void print_book_info(Book *books, int count); // 打印所有书籍信息
void find_books_by_genre(Book *books, int count, Genre genre); // 根据书籍类别打印书籍
char *get_genre_name(Genre genre); // 将书籍类别的枚举值转换成中文表示的类别
int main() {
Book books[MAX_BOOKS] = {
{1, "三体", "刘慈欣", SCIENCE_FICTION},
{2, "红楼梦", "曹雪芹", LITERATURE},
{3, "中国通史", "吕思勉", HISTORY},
{4, "时间简史", "史蒂芬·霍金", TECHNOLOGY},
{5, "围城", "钱钟书", LITERATURE},
{6, "傲慢与偏见", "简·奥斯汀", LITERATURE},
{7, "呼啸山庄", "艾米莉·勃朗特", LITERATURE},
{8, "活着", "余华", LITERATURE},
{9, "明朝那些事儿", "当年明月", HISTORY},
{10, "乌合之众", "古斯塔夫·勒庞", OTHER}
};
int count = MAX_BOOKS;
// 打印所有书籍的信息
print_book_info(books, count);
// 用户输入书籍类别编号并查找该类别的书籍
int genre;
printf("请输入书籍类别编号 (0: 科幻, 1: 文学, 2: 历史, 3: 科技, 4: 其他)来查询书籍: ");
scanf("%d", &genre);
find_books_by_genre(books, count, (Genre)genre);
return 0;
}
// 打印所有书籍的信息
void print_book_info(Book *books, int count) {
printf("---------------所有的书籍信息---------------\n\n");
for (int i = 0; i < count; i++) {
printf("编号: %d, 书名: %s, 作者: %s, 类别: %s\n",
books[i].id, books[i].title, books[i].author, get_genre_name(books[i].genre));
}
printf("\n");
}
// 根据书籍类别查找并打印该类别的所有书籍信息
void find_books_by_genre(Book *books, int count, Genre genre) {
printf("类别为 %s 的书籍有:\n", get_genre_name(genre));
for (int i = 0; i < count; i++) {
if (books[i].genre == genre) {
printf("编号: %d, 书名: %s, 作者: %s\n",
books[i].id, books[i].title, books[i].author);
}
}
}
// 将书籍类别的枚举值转换成中文表示的类别
const char *get_genre_name(Genre genre) {
switch (genre) {
case SCIENCE_FICTION: return "科幻";
case LITERATURE: return "文学";
case HISTORY: return "历史";
case TECHNOLOGY: return "科技";
case OTHER: return "其他";
default: return "未知";
}
}
解决方案总结:
: